Forum strony www.multipasko.pl [Regulamin]


Dodaj wpis w tym temacie
Spis tematów
Login:

Hasło:
Strona: 1 2 ... 325 326 327 ... 561 562

Wyślij wiadomość do admina
🎱 MultiPairs 2027 – nowa wersja w przeglądarce, otwórz BETA

Przewiń wpisy ↓

moje ... oprogramowanie

2020-04-29 (15:56)

status 777ch
Data rejestracji: 2005-11-07
Ilość postów: 23259

1386
wpis nr 1 289 109
[ CZCIONKA MONOSPACE ]

Masked operations
This is a basic low level approach to handle bit manipulation. Main advantage is that operations can be performed with groups of bits at once. But the user has to deal with all operations by himself. Another problem is max range of used values in function parameters. There must be separate implemented functions for each ordinal type for best performance (as opposed to C templates using preprocessor).


Jest to podstawowe podejście do obsługi manipulacji bitami na niskim poziomie. Główną zaletą jest to, że operacje można wykonywać jednocześnie z grupami bitów. Ale użytkownik musi sam poradzić sobie ze wszystkimi operacjami. Kolejnym problemem jest maksymalny zakres wartości użytych w parametrach funkcji. W celu uzyskania najlepszej wydajności muszą istnieć osobne zaimplementowane funkcje dla każdego typu porządkowego (w przeciwieństwie do szablonów C używających preprocesora).

procedure ClearBit(var Value: QWord; Index: Byte);
begin
Value := Value and ((QWord(1) shl Index) xor High(QWord));
end;

procedure SetBit(var Value: QWord; Index: Byte);
begin
Value:= Value or (QWord(1) shl Index);
end;

procedure PutBit(var Value: QWord; Index: Byte; State: Boolean);
begin
Value := (Value and ((QWord(1) shl Index) xor High(QWord))) or (QWord(State) shl Index);
end;

function GetBit(Value: QWord; Index: Byte): Boolean;
begin
Result := ((Value shr Index) and 1) = 1;
end;

źródło
https://wiki.freepascal.org/Bit_manipulation

--- wpis edytowano 2020-04-29 15:57 ---

2020-04-29 (16:57)

status fair_play
Data rejestracji: 2016-05-12
Ilość postów: 9076

14865
wpis nr 1 289 119
[ CZCIONKA MONOSPACE ]

777ch>

Z reguły chodziło o to, żeby "przetłumaczyć" Excela na Pascala, Delphi lub C.
Tym razem dokonałem "tłumaczenia" odwrotnego
Spróbuj tę procedurę:

For y = 0 To 255
b = y
result = 0
For i = 1 To 8
result = (result * 2) Mod 256 + b Mod 2
b = Int(b / 2)
Next
Cells(y + 1, 1) = y
Cells(y + 1, 2) = result
Next

Ale co robi ta funkcja za cholerę nie mogę dociec

PS. poprawiłem błąd:
Cells(y + 1, 1) = b
na
Cells(y + 1, 1) = y

--- wpis edytowano 2020-04-29 17:09 ---

2020-04-29 (18:11)

status 777ch
Data rejestracji: 2005-11-07
Ilość postów: 23259

1386
wpis nr 1 289 124
[ CZCIONKA MONOSPACE ]

rzuciłem okiem
i odpaliłem......prawidłowo na excel

ta funkcja to odwrócenie jakby czytanie wspak
dla stringów np leon byłoby noel

a dla
kobyłamazamałybok
było by
kobyłamazamałybok

pozdrawiam
2020-04-29 (18:28)

status 777ch
Data rejestracji: 2005-11-07
Ilość postów: 23259

1386
wpis nr 1 289 130
[ CZCIONKA MONOSPACE ]

czytam
ale już sobie --> nalałem drinka
zawsze przed...... wiadomościami Polsat ,potem Tvn
piję drinka....... dla kurażu
2020-04-29 (18:30)

status fair_play
Data rejestracji: 2016-05-12
Ilość postów: 9076

14865
wpis nr 1 289 132
[ CZCIONKA MONOSPACE ]

właśnie pisałem procedurę żeby zobrazować ten palindrom liczbowy

Sub odbicie()

margines = 3

For y = 0 To 255
Cells(y + 1, margines + 8 ) = y Mod 2
Cells(y + 1, margines + 10) = y Mod 2
Cells(y + 1, margines + 7) = Int(y / 2) Mod 2
Cells(y + 1, margines + 11) = Int(y / 2) Mod 2
Cells(y + 1, margines + 6) = Int(y / 4) Mod 2
Cells(y + 1, margines + 12) = Int(y / 4) Mod 2
Cells(y + 1, margines + 5) = Int(y / 8 ) Mod 2
Cells(y + 1, margines + 13) = Int(y / 8 ) Mod 2
Cells(y + 1, margines + 4) = Int(y / 16) Mod 2
Cells(y + 1, margines + 14) = Int(y / 16) Mod 2
Cells(y + 1, margines + 3) = Int(y / 32) Mod 2
Cells(y + 1, margines + 15) = Int(y / 32) Mod 2
Cells(y + 1, margines + 2) = Int(y / 64) Mod 2
Cells(y + 1, margines + 16) = Int(y / 64) Mod 2
Cells(y + 1, margines + 1) = Int(y / 128 ) Mod 2
Cells(y + 1, margines + 17) = Int(y / 128 ) Mod 2


Next

End Sub
2020-04-29 (18:31)

status 777ch
Data rejestracji: 2005-11-07
Ilość postów: 23259

1386
wpis nr 1 289 133
[ CZCIONKA MONOSPACE ]

Czy dalej uważasz ,
że zastosowanie operacji na byte,
może dać podobny czas do operacji jak
-->na wielowymiarowych tablicach ???
2020-04-29 (18:38)

status fair_play
Data rejestracji: 2016-05-12
Ilość postów: 9076

14865
wpis nr 1 289 135
[ CZCIONKA MONOSPACE ]

tak myślę, bo możliwość ustawiania odpowiedniego bitu na 1 w komórce adresów nie wymaga już tego sprawdzania czy już takiej "szóstki" nie zarejestrowaliśmy. ustawiając n-krotnie ten sam bit na 1 zawsze będzie 1.
Cała procedura sprowadzi się do skanowania rozpisu linia po linii, szóstki po szóstce w tej linii, wyliczenie adresu, i ustawienie 1 na określonym bicie.
Operacja na jednej tablicy.

--- wpis edytowano 2020-04-29 18:45 ---

2020-04-29 (18:59)

status fair_play
Data rejestracji: 2016-05-12
Ilość postów: 9076

14865
wpis nr 1 289 136
[ CZCIONKA MONOSPACE ]

trochę z innej beczki.
Podglądając przebieg procedury step by step najechałem myszą na linię jak na zdjęciu i okazuje się, że wynik kombinacji nie jest liczbą całkowitą
Jak to wytłumaczyć ?

zdjęcie
2020-04-29 (19:29)

status 777ch
Data rejestracji: 2005-11-07
Ilość postów: 23259

1386
wpis nr 1 289 141
[ CZCIONKA MONOSPACE ]

sprawdź l2
tu będzie rozwiązanie

l2 = mat(y, x2)
If liczb - l2 > 4 Then
adr2 = adr1 - Application.WorksheetFunction.Combin(liczb - l2, 5)

nie pracowałem nad tym
tylko na oko widać

--- wpis edytowano 2020-04-29 19:31 ---

2020-04-29 (19:54)

status fair_play
Data rejestracji: 2016-05-12
Ilość postów: 9076

14865
wpis nr 1 289 144
[ CZCIONKA MONOSPACE ]

l2 to zwykła "2" z drugiej komórki pierwszej linii rozpisu. Zmieniłem na l2 = int(mat(y, x2)) i niczego to nie zmieniło.
Wszystkie kolejne adresy są takie same z ,9999999999 po przecinku.
Nie zmienia to poprawności obliczeń ale to ciekawostka.

--- wpis edytowano 2020-04-29 19:59 ---

2020-04-29 (21:02)

status kleszek
Data rejestracji: 2006-05-27
Ilość postów: 4990

2047
wpis nr 1 289 177
[ CZCIONKA MONOSPACE ]

Walczymy dalej
C(35,10,5,5)=2585 wysłane.
2020-04-29 (23:21)

status fair_play
Data rejestracji: 2016-05-12
Ilość postów: 9076

14865
wpis nr 1 289 215
[ CZCIONKA MONOSPACE ]

Znalazłem coś co byłoby rewelacyje gdyby w moim Excelu się dało użyć.

BITOR, BITAND, BITLSHIFT, BITRSHIFT

https://support.office.com/pl-pl/article/bitor-funkcja-f6ead5c8-5b98-4c9e-9053-8ad5234919b2

https://support.microsoft.com/pl-pl/office/bitand-funkcja-8a2be3d7-91c3-4b48-9517-64548008563a?ui=pl-pl&rs=pl-pl&ad=pl

Niestety wpisując w komórce formułę =BITAND(7,13) otrzymuję #NAZWA? bo oczywiście nie ma tej funkcji na liście.

Gdy próbuję użyć tych funkcji w makro to:
c=BITAND(7,13 -> "Sub or Function not defined"

c=WorksheetFunction(7,13) -> "Object doesn't support this property or method"

Czyżby Excel 2007 nie posiadał jeszcze tych funkcji ?

http://codevba.com/excel/WorksheetFunction.htm#.XqnwHZB7l9B

--- wpis edytowano 2020-04-29 23:30 ---

2020-04-30 (09:53)

status fair_play
Data rejestracji: 2016-05-12
Ilość postów: 9076

14865
wpis nr 1 289 264
[ CZCIONKA MONOSPACE ]

kleszek>

Masz nowego kompa, to może masz i nowszego Office niż 2007 (notabene już nie wspieranego przez Microsoft).

Jeśli tak to czy masz na liście funkcji Excela takie cudeńka jak:

BITAND, BITOR, BITLSHIFT, BITRSHIFT, BITXOR i coś jeszcze z BIT z przodu ?

Pozdrawiam
2020-04-30 (10:36)

status 777ch
Data rejestracji: 2005-11-07
Ilość postów: 23259

1386
wpis nr 1 289 278
[ CZCIONKA MONOSPACE ]

zerknij
https://support.google.com/docs/answer/9083934

w moim excelu nie mam
2020-04-30 (10:42)

status fair_play
Data rejestracji: 2016-05-12
Ilość postów: 9076

14865
wpis nr 1 289 281
[ CZCIONKA MONOSPACE ]

O to wszystko mi chodzi, zwłaszcza BITOR, Właśnie BITOR pozwoliłby zwiększyć dostępną pamięć 8-krotnie

1, Dostępną pamięć n "dzielisz na 8 "wierszy bitowych.
2. Mając wyliczony adr6, funkcją wiersz=QUOTIENT(adr6,n) znajdujesz "wiersz do zapisu, a instrukcją adres=MOD(adr6,n) pozycję w tym wierszu.
3 zapisujesz "szóstkę" :matadr(adres)=BITOR(matadr(adres,2^(wiersz-1))
3 zliczając wystąpienia szóstek skanujesz matadr
ile=0
For i=1 to n
ile=ile+BITAND(matadr(i,1)+BITAND(matadr(i,2)+BITAND(matadr(i,4)+BITAND(matadr(i,8)+BITAND(matadr(i,16)+BITAND(matadr(i,1)+BITAND(matadr(i,32)+BITAND(matadr(i,64)
next

:)

--- wpis edytowano 2020-04-30 11:01 ---

2020-04-30 (13:14)

status 777ch
Data rejestracji: 2005-11-07
Ilość postów: 23259

1386
wpis nr 1 289 297
[ CZCIONKA MONOSPACE ]

Excel 2013

BITAND

Funkcje inżynierskie. Zwraca wartość operacji bitowej ORAZ (AND) dla dwóch liczb.

BIT.PRZESUNIĘCIE.W.LEWO

Funkcje inżynierskie. Zwraca liczbę przesuniętą w lewo o liczbę bitów określoną przez argument wartość_przesunięcia.

BITOR

Funkcje inżynierskie. Zwraca wartość operacji bitowej LUB (OR) dla dwóch liczb.

BIT.PRZESUNIĘCIE.W.PRAWO

Funkcje inżynierskie. Zwraca liczbę przesuniętą w prawo o liczbę bitów określoną przez argument wartość_przesunięcia.

BITXOR

Funkcje inżynierskie. Zwraca wartość operacji bitowej alternatywy wykluczającej (XOR) dla dwóch liczb.

żródło

https://support.office.com/pl-pl/article/Nowe-funkcje-w-programie-Excel-2013-075C82BD-15B9-4AD6-AF31-55BB6B011CB9

a więc
excel 2013
2020-04-30 (13:23)

status fair_play
Data rejestracji: 2016-05-12
Ilość postów: 9076

14865
wpis nr 1 289 299
[ CZCIONKA MONOSPACE ]

konieczna przesiadka
2020-04-30 (14:34)

status kleszek
Data rejestracji: 2006-05-27
Ilość postów: 4990

2047
wpis nr 1 289 310
[ CZCIONKA MONOSPACE ]

fair_play, mam excela 2016 i funkcje wymienione przez Ciebie są dostępne
2020-04-30 (15:14)

status 777ch
Data rejestracji: 2005-11-07
Ilość postów: 23259

1386
wpis nr 1 289 320
[ CZCIONKA MONOSPACE ]

fair_play

przesiadłem się chwilowo jakiś czas temu ..

z 5~6 lat temu na 2010

no i .
mój program którego używam codziennie
a który chodzi płynnie w ver. 2003 prof
dostał .... ciężkiej zadyszki i kaszlu
dlatego ..... wróciłem do wersji która --> nie stwarza problemów.

Może .......jak to zrobicie w excelu
to zrobimy coś podobnego w paskalu ,
albo może sindbad pomoże w c++
bo C najbardziej się do tych operacji nadaje.

--- wpis edytowano 2020-04-30 15:14 ---

2020-04-30 (16:00)

status fair_play
Data rejestracji: 2016-05-12
Ilość postów: 9076

14865
wpis nr 1 289 329
[ CZCIONKA MONOSPACE ]

kleszek>

To mam jeszcze jedno pytanie.
Jak używać tych funkcji w makrze

x=BITOR(a,b) ?

x=Application.WorksheetFunction.bitor(a,b) ?

x=Application.bitor(a,b) ?

Podejrzewam, że ten pierwszy wariant, ale wolę się upewnić

Spróbuję napisać makro, które sprawdzisz czy zadziała u Ciebie

Pozdrawiam
| Dodaj wpis w tym temacie | Spis tematów | Wyniki lottoStrona: 1 2 ... 325 326 327 ... 561 562

Wyślij wiadomość do admina
🎱 MultiPairs 2027 – nowa wersja w przeglądarce, otwórz BETA