| Dodaj wpis w tym temacie
Spis tematów | Strona: 1 2 ... 324 325 326 ... 560 561 Wyślij wiadomość do admina |
| Przewiń wpisy ↓ | moje ... oprogramowanie |
2020-04-28 (21:28) 777chData rejestracji: 2005-11-07 Ilość postów: 23091 | wpis nr 1 288 952 [ CZCIONKA MONOSPACE ] no to string albo variant a zapisujesz pewnie wszystko jako string czyli może być też w excelu variant |
2020-04-28 (21:32) 777chData rejestracji: 2005-11-07 Ilość postów: 23091 | wpis nr 1 288 959 [ CZCIONKA MONOSPACE ] fair_play wszystko zależy od pomysłu czasami proste odwołanie załatwia wszystko a wiele dodatkowych ifów pogrąża czas obliczeń ja nie mogę Cię prosić o Twoje pomysły bo to Twoje autorskie rozwiązania. sam widzisz że validator ma gorsze czasy niż mój program ale ja nie zamierzam na tym zarabiać i chyba nawet to niemożliwe spytaj Pasko ile zarobił na oprogramowaniu, gdyby na to liczyć to byś........ umarł z głodu --- wpis edytowano 2020-04-28 21:35 --- |
2020-04-28 (21:36) fair_playData rejestracji: 2016-05-12 Ilość postów: 8998 | wpis nr 1 288 962 [ CZCIONKA MONOSPACE ] na razie byte adr0 = Application.WorksheetFunction.Combin(liczb, traf) ReDim maska(adr0) For y = 1 To zakładów 'Cells(1, 41) = y For x1 = 1 To skreśleń - 5 l1 = mat(y, x1) If liczb - l1 > 5 Then adr1 = adr0 - Application.WorksheetFunction.Combin(liczb - l1, 6) Else adr1 = adr0 End If For x2 = x1 + 1 To skreśleń - 4 l2 = mat(y, x2) If liczb - l2 > 4 Then adr2 = adr1 - Application.WorksheetFunction.Combin(liczb - l2, 5) Else adr2 = adr1 End If For x3 = x2 + 1 To skreśleń - 3 l3 = mat(y, x3) If liczb - l3 > 3 Then adr3 = adr2 - Application.WorksheetFunction.Combin(liczb - l3, 4) Else adr3 = adr2 End If For x4 = x3 + 1 To skreśleń - 2 l4 = mat(y, x4) If liczb - l4 > 2 Then adr4 = adr3 - Application.WorksheetFunction.Combin(liczb - l4, 3) Else adr4 = adr3 End If For x5 = x4 + 1 To skreśleń - 1 l5 = mat(y, x5) If liczb - l5 > 1 Then adr5 = adr4 - Application.WorksheetFunction.Combin(liczb - l5, 2) Else adr5 = adr4 End If For x6 = x5 + 1 To skreśleń l6 = mat(y, x6) adr6 = adr5 - (liczb - l6) maska(adr6) = 1 ' maska(adr6) = maska(adr6) + 1 Next Next Next Next Next Next Next brak = 0 For y = 1 To adr0 If maska(y) = 0 Then brak = brak + 1 Next gwarancja = (adr0 - brak) / adr0 mat() to maska zakładów, a traf to oczywiście 6 jeśli użyć zaremowanej linii maska(adr6) = maska(adr6) + 1 to mamy ilość poszczególnych krotności wystąpienia szóstki jednak ta tablica adresów ogranicza pamięć dlatego pytałem o binarne operatory, bo wtedy można listę adresów podzielić przez 8 (ilość bitów w bajcie --- wpis edytowano 2020-04-28 21:51 --- |
2020-04-28 (21:46) 777chData rejestracji: 2005-11-07 Ilość postów: 23091 | wpis nr 1 288 967 [ CZCIONKA MONOSPACE ] fair_play cokolwiek wkleisz dziś odpowiem dopiero jutro bo naprawdę ...... na dziś za chwilkę kończę --> z komputerem |
2020-04-28 (21:50) 777chData rejestracji: 2005-11-07 Ilość postów: 23091 | wpis nr 1 288 968 [ CZCIONKA MONOSPACE ] widzę potencjał ale po 3 drinkach zawsze ......coś widzę dzięki za wstawki ,jutro odpowiem jak się --> temu .....dokładniej przyjrzę pozdrawiam |
2020-04-28 (22:28) fair_playData rejestracji: 2016-05-12 Ilość postów: 8998 | wpis nr 1 288 983 [ CZCIONKA MONOSPACE ] Opiszę krótko ideę. 1. Tworzę matrycę zakładów - mat() 2. Obliczam ilość kombinacji (v po 6) i deklaruję tablicę adresów maska() as BYTE o takim rozmiarze. (i tutaj powstaje problem pamięci) 3. Dla każdej linii rozpisu dla każdej kolejnej "szóstki" obliczam jej adres i pod tym adresem inkrementuję komórkę tablicy adresów. 4. Skanuję tablicę adresów i sumuję ilość poszczególnych wartości w kolejnych jej komórkach. wartość 0 - brak szóskti wartość > 1 oznacza że występuje przypisana temu adresowi szóstka o odczytanej krotności wystąpień w rozpisie. I to wszystko Mając konkretny adres brakującej szóstki w razie potrzeby łatwo odtworzyć tworzące ją liczby, ale to już inna procedura Zapomniałem dodać, że ustawiam Option Base 1 --- wpis edytowano 2020-04-28 22:35 --- |
2020-04-28 (22:47) 777chData rejestracji: 2005-11-07 Ilość postów: 23091 | wpis nr 1 288 985 [ CZCIONKA MONOSPACE ] To mniej więcej tak jak działam na danych jakie mogę ująć w tablicach wielowymiarowych i tak do punktu 2 punkt 3 przemyślę jutro bo to....coś nowego pozdrawiam |
2020-04-29 (01:44) 777chData rejestracji: 2005-11-07 Ilość postów: 23091 | wpis nr 1 289 003 [ CZCIONKA MONOSPACE ] fair_play W programie mam zadeklarowaną ogromną pamięć dla 6 tablic: tr6: array [1 .. 21, 2 .. 22, 3 .. 23, 4 .. 24, 5 .. 25, 6 .. 26]of integer; tr5: array [1 .. 45, 2 .. 46, 3 .. 47, 4 .. 48, 5 .. 49] of integer; tr4: array [1 .. 96, 2 .. 97, 3 .. 98, 4 .. 99] of integer; tr3: array [1 .. 97, 2 .. 98, 3 .. 99] of integer; tr2: array [1 .. 98, 2 .. 99] of integer; Twoja procedura również opiera się na odwołaniu do maska(adr0) .......czyli kolejnej tablicy której rozmiar będzie mniejszy ,ale musi zawierać co najmniej --> =Combine(liczb, traf)..aby odnotować index kolejnej szóstki -->czyli paskalowskie Combination(v,6); aby na końcu sprawdzić czy index[csn] danej 6-ki został odczytany For y = 1 To adr0 If maska(y) = 0 Then brak = brak + 1 Next To jest na ten moment problem i dlatego wcześniej ,obliczenia gwarancji w tablicach oparłem o ich możliwy rozmiar sumaryczny a ponieważ nic więcej się....."nie zmieści" dla V którego tablice nie pomieszczą zrobiłem tylko sprawdzenie......wolne strasznie bo bez odwołania do indeksów gdybym chciał teraz to pozmieniać to albo kompletne przerobienie z specjalizacją dla k albo zrobienie osobnych programików dla gwar 6,gwar 7 itd. Zawsze chodzi o braki sprzętowe, albo o pamięć, i również jej umiejętną alokację Chyba sobie na razie odpuszczę przeróbki, bo musiałbym sporo pozmieniać , aby zrobić --> przestrzeń pamięciową, bo pamięć zasadnicza nie jest zwalniana jedynie ta lokalna..... nie mniej zainteresowałeś mnie trochę choć podobne rozwiązania mam już w excelu tam dla każdej 6-ki jest obliczany csn co nieco spowalnia , ale głównym problemem dla dużych liczb była i jest jest własnie --> tablica csn-ów czyli indeksów dobrej nocki |
2020-04-29 (09:48) fair_playData rejestracji: 2016-05-12 Ilość postów: 8998 | wpis nr 1 289 028 [ CZCIONKA MONOSPACE ] 777ch> Mój dziadek mawiał również "kto rano wstaje...ten się nie wyśpi", ale zaryzykowałem. Pisałem, że przy tej metodzie krytyczną sprawą jest dostępna pamięć, ale... Swego czasu, jeszcze w czasach "ATARI" pisałem programy bezpośrednio w kodzie maszynowym bez assemblera (Motorola 6502), Do dziś pamiętam kody tego procesora. Np skok bezwzględny oznaczała instrukcja 4C xx xx, wywołanie procedury 20 xx xx, gdzie xx xx to adresy. I tam przy użyciu operatorów AND i OR można było sprawdzić czy jest ustawiony, lub ustawić odpowiedni bit w komórce pamięci Np AND 30 sprawdza czy jest ustawiony 6-ty bit, a OR 30 ustawia ten bit (nawet jeśli jest już ustawiony. Nie wiem czy w Pascalu można operować na bitach, ale mając do dyspozycji 8 lub 16 bitów można podzielić tablicę adresów na 8 lub 16 części, za pomocą MOD i DIV zapalać odpowiedni jej bit i w ten sposób zmniejszyć zapotrzebowanie na pamięć 8-mio lub 16-to krotnie. A pomijając kwestię pamięci to jak wygląda mój pomysł pod względem czasu obliczeń ? Pozdrawiam --- wpis edytowano 2020-04-29 10:03 --- |
2020-04-29 (10:34) fair_playData rejestracji: 2016-05-12 Ilość postów: 8998 | wpis nr 1 289 034 [ CZCIONKA MONOSPACE ] 777ch> Przysłowie dziadka się sprawdziło bo oczywista pomyłka AND 30 sprawdza czy są ustawione jednocześnie 5-ty i 6-ty bit, a OR 30 ustawia te bity nawet jeśli są już ustawione. Do sprawdzania i ustawiania pojedyńczych bitów powinno być AND 01, 02, 04,08,10,20,40, 80 (kod szestnastkowy). |
2020-04-29 (12:04) 777chData rejestracji: 2005-11-07 Ilość postów: 23091 | wpis nr 1 289 050 [ CZCIONKA MONOSPACE ] HEJ Manipulacje bitami,działania na ciągach bitów to ..... obawiam się biała kartka w moim kajecie . Dziadek ma zawsze rację. ------------ A pomijając kwestię pamięci to jak wygląda mój pomysł pod względem czasu obliczeń ? ------------ pomysł jest dobry...... tylko komu i na co to potrzebne ......... żartuję sobie ,i ..... jeszcze śpię --- wpis edytowano 2020-04-29 12:10 --- |
2020-04-29 (12:06) 777chData rejestracji: 2005-11-07 Ilość postów: 23091 | wpis nr 1 289 051 [ CZCIONKA MONOSPACE ] Ten mały Bit ,może być nośnikiem informacji, ale trzeba mieć z tym jakieś obycie Muszę zapewne ....iść na kurs. |
2020-04-29 (12:43) 777chData rejestracji: 2005-11-07 Ilość postów: 23091 | wpis nr 1 289 056 [ CZCIONKA MONOSPACE ] fair_play Zapewne zaliczasz dodatkową drzemkę sądzę ,że tablice wielowymiarowe,choć pamięciożerne to ....jednak rozwiązanie superszybkie ,bo to właściwie operacje wypełnienia na bazie linii coveru a potem tylko policzenie pustych Twoja wiedza w temacie bitów ,może pozwoli Ci na uzyskanie podobnych czasów, bez drastycznego obciążania pamięci.... co na pewno jest interesujące, ja w temacie bitów jestem jak winda... na poziomie "0" miłego dnia,idę [drugi raz] z psem, potem kawa --- wpis edytowano 2020-04-29 12:44 --- |
2020-04-29 (13:10) fair_playData rejestracji: 2016-05-12 Ilość postów: 8998 | wpis nr 1 289 058 [ CZCIONKA MONOSPACE ] 777ch> Gdyby zrezygnować z obliczania krotności występowania danej szóstki w rozpisie,a pozostać tylko przy sprawdzaniu jej występowania to Excelowską zabawę z bitami można by zorganizować tak (dla uproszczenia przedstawię ideę na małych liczbach Powiedzmy że mamy do dyspozycji 800 000 pamięci i tworzymy dwubajtową (16 bitów) tablicę adresów o tym rozmiarze. Tym sposobem mamy do dyspozycji 800 000 * 16 = 12 800 000 dostępnych adresów. Jak zapisać w niej adr6=2 345 678 ? Obliczamy wiersz matrycy n= QUOTIENT(2 345 678:800 000), n=2 czyli zapiszemy szóstkę w drugim wierszu matrycy (na drugim bicie). A na jakiej pozycji ? wyliczamy ją jako adres=MOD(adr6:800 000) -> adres=745 678 I teraz cała zabawa Ponieważ nie dysponujemy binarnym OR musimy go spreparować. Pod wyliczonym adresem 745 687 dodajemy wartość 2^(n-1) -> tzn 1 w pierwszym wierszu, 2 w drugim, 4 w trzecim, 8 w czwartym itd Ale najpierw musimy sprawdzić czy już tam nie dodaliśmy tej wartości (nie zarejestrowaliśmy już takiej "szóstki"). I tutaj cały problem jak to sprawdzić. Jeszcze nie wymyśliłem Może dodawać 2^(n-1) +1 żeby nie była to wielokrotność 2 ? Popróbuję Pozdrawiam --- wpis edytowano 2020-04-29 13:20 --- |
2020-04-29 (13:31) 777chData rejestracji: 2005-11-07 Ilość postów: 23091 | wpis nr 1 289 061 [ CZCIONKA MONOSPACE ] Piszesz ciekawie ..pisz dalej musimy sprawdzić czy już tam nie dodaliśmy tej wartości (nie zarejestrowaliśmy już takiej "szóstki" no a zapytanie pod adres to już operacja i ułamki czasu jadę do sklepu ..... proza życia |
2020-04-29 (13:43) fair_playData rejestracji: 2016-05-12 Ilość postów: 8998 | wpis nr 1 289 065 [ CZCIONKA MONOSPACE ] No właśnie w tym cały problem. Operatory binarne AND i OR zwracają wartość liczbową a nie logiczną "True, False". Np 7 AND 8 = 0, a 7 AND 10 = 2 7 OR 8 = 15, a 7 OR 3 = 7 oczywiście podane tytaj "liczby" są traktowane dwójkowp: 7 > 0000|0111 8 > 0000|1000 operator AND (iloczyn binarny) "mnoży" poszczególne bity (sprawdza czy na danej pozycji w obu porównywanych wartościach oba bity są ustawione (1), a więc w efekcie otrzymamy 0000|0000 operator OR (suma binarna) "porównuje" bity na określonych pozycjach więc wystarczy że dany bit chociaż w jednej wartości jest ustawiony to jest on ustawiony i w sumie. Dlatego 7 OR 8 => 0000|0111 OR 0000|1000 = 0000|1111 = 15 Lubiłem tę zabawę --- wpis edytowano 2020-04-29 14:00 --- |
2020-04-29 (14:19) 777chData rejestracji: 2005-11-07 Ilość postów: 23091 | wpis nr 1 289 080 [ CZCIONKA MONOSPACE ] fair_play aby manipulować trzeba mieć w jednym paluszku wiedzę o tym .....co i czym chcesz.....manipulować próbuj ,a......może się uda ! pozdrawiam |
2020-04-29 (14:28) 777chData rejestracji: 2005-11-07 Ilość postów: 23091 | wpis nr 1 289 087 [ CZCIONKA MONOSPACE ] zobacz dwie wersje........ function ReverseBits(b: Byte): Byte; var i: Integer; begin Result := 0; for i := 1 to 8 do begin Result := (Result shl 1) or (b and 1); b := b shr 1; end; end; But a lookup table would be much more efficient, and only consume 256 bytes of memory. function ReverseBits(b: Byte): Byte; inline; const Table: array [Byte] of Byte = ( 0,128,64,192,32,160,96,224,16,144,80,208,48,176,112,240, 8,136,72,200,40,168,104,232,24,152,88,216,56,184,120,248, 4,132,68,196,36,164,100,228,20,148,84,212,52,180,116,244, 12,140,76,204,44,172,108,236,28,156,92,220,60,188,124,252, 2,130,66,194,34,162,98,226,18,146,82,210,50,178,114,242, 10,138,74,202,42,170,106,234,26,154,90,218,58,186,122,250, 6,134,70,198,38,166,102,230,22,150,86,214,54,182,118,246, 14,142,78,206,46,174,110,238,30,158,94,222,62,190,126,254, 1,129,65,193,33,161,97,225,17,145,81,209,49,177,113,241, 9,137,73,201,41,169,105,233,25,153,89,217,57,185,121,249, 5,133,69,197,37,165,101,229,21,149,85,213,53,181,117,245, 13,141,77,205,45,173,109,237,29,157,93,221,61,189,125,253, 3,131,67,195,35,163,99,227,19,147,83,211,51,179,115,243, 11,139,75,203,43,171,107,235,27,155,91,219,59,187,123,251, 7,135,71,199,39,167,103,231,23,151,87,215,55,183,119,247, 15,143,79,207,47,175,111,239,31,159,95,223,63,191,127,255 ); begin Result := Table[b]; end; This is more than 10 times faster than the version of the code that operates on individual bits. |
2020-04-29 (14:44) fair_playData rejestracji: 2016-05-12 Ilość postów: 8998 | wpis nr 1 289 091 [ CZCIONKA MONOSPACE ] Nie bardzo rozumiem co robi druga z funkcji pomiędzy begin i end. Co to za operacja: Result:= Table[b] ? Przecież to chyba zwykłe podstawienie. I co otrzymamy w efekcie ? --- wpis edytowano 2020-04-29 14:51 --- |
2020-04-29 (14:53) 777chData rejestracji: 2005-11-07 Ilość postów: 23091 | wpis nr 1 289 092 [ CZCIONKA MONOSPACE ] zadałem sam sobie to pytanie już po wklejeniu https://stackoverflow.com/questions/14400845/how-can-i-bit-reflect-a-byte-in-delphi |
| | Dodaj wpis w tym temacie | Spis tematów | Wyniki lotto | Strona: 1 2 ... 324 325 326 ... 560 561 Wyślij wiadomość do admina |