Forum strony www.multipasko.pl [Regulamin]


Dodaj wpis w tym temacie
Spis tematów
Login:

Hasło:
Strona: 1 2 ... 324 325 326 ... 554 555
Wyślij wiadomość do admina

Przewiń wpisy ↓

moje ... oprogramowanie

2020-04-28 (21:15)

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

14865
wpis nr 1 288 947
[ CZCIONKA MONOSPACE ]

"lecimy szóstki od pierwszej do ostatniej"

Wszystkie z v czy wszystkie z ilość linii*(k po 6) ?

--- wpis edytowano 2020-04-28 21:17 ---

2020-04-28 (21:21)

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

1386
wpis nr 1 288 949
[ CZCIONKA MONOSPACE ]

wszystkie z v czyli wszystkie z os bo tu os=v


for l1 := 1 to os - 5 do begin
p[1] := l1;
for l2 := l1 + 1 to os - 4 do begin
p[2] := l2;
for l3 := l2 + 1 to os - 3 do begin
p[3] := l3;
for l4 := l3 + 1 to os-2 do begin
p[4] := l4;
for l5 := l4 + 1 to os - 1 do begin
p[5] := l5;
for l6 := l5 + 1 to os do begin
p[6] := l6;

potem pętla [repeat] aż i osiągnie ilegen
czyli ilegen=ile linii coveru
czyli jak niżej

i:=1;
repeat
--> czyli sprawdzamy czy 6-liczb <> 0
--> co oznacza że wszystkie 6-liczb w tablicy o-1 jedynkowej to 1,1,1,1,1,1


if ((tabbest[i, p[1]]<>0)and (tabbest[i, p[2]]<>0)
and (tabbest[i, p[3]]<>0) and (tabbest[i, p[4]]<>0)
and (tabbest[i, p[5]]<>0) and (tabbest[i, p[6]]<>0))and(maxtr<ilegen ) then

break
else
inc(maxtr);





inc(i);

until( maxtr>=ilegen) ;

--- wpis edytowano 2020-04-28 21:23 ---

2020-04-28 (21:25)

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

1386
wpis nr 1 288 950
[ CZCIONKA MONOSPACE ]

ja wiem że powinienem przelecieć
te co są i nadać im jakiś index

a potem lecieć if index=0

ale tego nie zrobiłem
2020-04-28 (21:26)

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

14865
wpis nr 1 288 951
[ CZCIONKA MONOSPACE ]

Ja w swojej mam inny pomysł, który po przełożeniu na pascala może być interesujący
A do tego korzystam tylko z jednej jednowymiarowej tablicy.
Posługuję się adresami.
2020-04-28 (21:28)

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

1386
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)

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

1386
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)

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

14865
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)

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

1386
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)

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

1386
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)

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

14865
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)

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

1386
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)

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

1386
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)

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

14865
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)

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

14865
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)

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

1386
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)

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

1386
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)

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

1386
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)

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

14865
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)

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

1386
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)

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

14865
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 ---

| Dodaj wpis w tym temacie | Spis tematów | Wyniki lottoStrona: 1 2 ... 324 325 326 ... 554 555
Wyślij wiadomość do admina