atarionline.pl Program do losowania totolotka - Forum Atarum

    Jeśli chcesz wziąć udział w dyskusjach na forum - zaloguj się. Jeżeli nie masz loginu - poproś o członkostwo.

    • :
    • :

    Vanilla 1.1.4 jest produktem Lussumo. Więcej informacji: Dokumentacja, Forum.

      • 1: CommentAuthorwery
      • CommentTime11 Feb 2024 17:02 zmieniony
       
      Witam. Poszukuję listingów programów do losowania liczb w totolotku. Mogą to być proste lub bardziej złożone programy.
      Pozdrawiam
      • 2:
         
        CommentAuthorpirx
      • CommentTime11 Feb 2024 17:02 zmieniony
       
      10 MAX=65:CNT=6:F.I=1TOCNT:?INT(RND(0)*MAX+0.5);" ";:N.I:?:G.10
      • 3:
         
        CommentAuthorjhusak
      • CommentTime12 Feb 2024 11:02 zmieniony
       
      Oj, chyba błąd :)

      10 MAX=65:CNT=6:F.I=1TOCNT:?INT(RND(0)*MAX+1);" ";:N.I:?:G.10


      No i jeszcze kwestia powtarzania się wyników, ale te można odrzucić.
      • 4:
         
        CommentAuthorpirx
      • CommentTime12 Feb 2024 13:02
       
      hehe no tak :))) takie z odrzutem jeszcze by się w linijce zmieściło chyba.
      • 5:
         
        CommentAuthorBca
      • CommentTime15 Feb 2024 01:02 zmieniony
       
      Kiedyś TOTOLOTEK był wylosowywany za pomocą takiej analogowej betoniarki. Sam ostatnio pytałem GPT czy zna już najbliższe wyniki lotto... Takie czasy. A program bym tak poprawił MAX=49
      • 6:
         
        CommentAuthorPeri Noid
      • CommentTime15 Feb 2024 07:02
       
      Na próbę @QTZ: ->link<-
      • 7:
         
        CommentAuthorKaz
      • CommentTime15 Feb 2024 08:02
       
      Pozwoliłem sobie na modyfikację tytułu wątku, usuwając dopisek o emulatorach, bo zbędny, a teraz jest czytelniej.
      • 8: CommentAuthorastrofor
      • CommentTime15 Feb 2024 13:02
       
      Ale jak atari wylosuje mi szczęśliwe numery to wygram milion w starych czy nowych złotych ?
      • 9:
         
        CommentAuthorKaz
      • CommentTime16 Mar 2024 08:03 zmieniony
       
      Był też program w Bajtku Leszka Stróżowskiego (zapodaję niżej, ale jeśli chcesz go przepisać to pamiętaj, ze w którymś następnym numerze była errata, bo były jakieś błędy podczas składu pisma - OIDP).
      • 10: CommentAuthorwery
      • CommentTime17 Mar 2024 15:03
       
      Errata jest w Bajtek nr 1991_02.
      Załączam plik
      • 11: CommentAuthorlzd
      • CommentTime17 Mar 2024 17:03 zmieniony
       
      Na prośbę QTZ:
      • 12: CommentAuthorlzd
      • CommentTime17 Mar 2024 19:03
       

      pirx:

      takie z odrzutem jeszcze by się w linijce zmieściło chyba.

      W Atari Basicu nie zmieści się, bo spełniony warunek IF działa do końca linii. W innych dialektach też będzie problem ze względu na ograniczenie długości linii do 120 znaków.
      10 DIM R(6):M=49:C=6
      15 FOR I=0 TO C-1
      20 R(I)=INT(RND(0)*M+1)
      25 FOR J=0 TO I-1
      30 IF R(I)=R(J) THEN 20
      25 NEXT J
      30 ? R(I);" ";
      35 NEXT I
      40 ? :GOTO 15
      • 13:
         
        CommentAuthorpirx
      • CommentTime18 Mar 2024 04:03
       
      10 M=49:C=6 :DIM R(C-1)
      15 FOR I=0 TO C-1
      20 R=INT(RND(0)*M+1)
      30 FOR J=0 TO I-1
      40 IF R=R(J) THEN POP :GOTO 20
      50 NEXT J
      60 R(I)=R:? R;" ";
      70 NEXT I
      100 ? :RUN
      • 14: CommentAuthorwery
      • CommentTime15 Jul 2024 16:07
       
      Jak go zmienić, aby po wylosowaniu 6 z 49 liczb bez powtórzeń zapisać je jako zmienne liczbowe A1,A2,A3,A4,A5,A6?
      10 M=49:C=6 :DIM R(C-1)
      15 FOR I=0 TO C-1
      20 R=INT(RND(0)*M+1)
      30 FOR J=0 TO I-1
      40 IF R=R(J) THEN POP :GOTO 20
      50 NEXT J
      60 R(I)=R:? R;" ";
      70 NEXT I
      • 15: CommentAuthorlzd
      • CommentTime15 Jul 2024 19:07
       
      80 A1=R(0):A2=R(1):A3=R(2):A4=R(3):A5=R(4):A6=R(5)
      :-)
      • 16:
         
        CommentAuthorPeri Noid
      • CommentTime15 Jul 2024 22:07 zmieniony
       
      Zaproponuję inne podejście:
      10 M=49:C=6:DIM R(C-1)
      20 FOR I=M TO 1 STEP -1
      30 S=INT(RND(0)*I)
      40 IF S<C THEN C=C-1:R(C)=I;? I
      50 IF C=0 THEN END
      60 NEXT I
      • 17: CommentAuthorwery
      • CommentTime17 Jul 2024 13:07
       
      Dziękuję za porady. W niedzielę postaram się zastosować proponowane rozwiązania. Ewentualnie poproszę o dalszą pomoc.
      Już nie mam atari, do basica wykorzystuję emulator Atari800Win Plus 4.1. Czy w tym emulatorze można przewijać kod programu, np. poruszając się kursorem (strzałkami) góra, dół.
      Pozdrawiam
      • 18:
         
        CommentAuthorpirx
      • CommentTime17 Jul 2024 16:07
       
      nie, ale jeśli masz ochotę na takie edytowanie to spójrz w fastbasic ->link<-

      Tutaj masz ładny edytor, składnia jest trochę inna, szczególnie jeśli chodzi o obsługę napisów, ale daje się ogarnąć.
      • 19: CommentAuthorwery
      • CommentTime21 Jul 2024 13:07
       
      FastBasic na razie całkowicie mnie przerasta. Brak znajomości angielskiego a translator może wprowadzać w błąd.
      Wolę dokształcać się w ataribasic.
      Mój projekt działania programu wygląda następująco.

      100 PRINT "podaj 6 liczb z 49, bez powtórzeń, w dowolnej kolejności"
      110 INPUT L1,L2,L3,L4,L5,L6
      120 PRINT L1;" ";L2;" ";L3;" ";L4;" ";L5;" ";L6
      200 REM Wylosuj 6 z 49 bez powtórzeń. zapisz je jako A1,A2,A3,A4,A5,A6
      290 PRINT A1;" ";A2;" ";A3;" ";A4;" ";A5;" ";A6
      300 REM Wylosuj 6 z 49 bez powtórzeń. zapisz je jako B1,B2,B3,B4,B5,B6
      390 PRINT B1;" ";B2;" ";B3;" ";B4;" ";B5;" ";B6
      400 REM Wylosuj 6 z 49 bez powtórzeń. zapisz je jako D1,D2,D3,D4,D5,D6
      490 PRINT D1;" ";D2;" ";D3;" ";D4;" ";D5;" ";D6
      500 IF L1=A1 AND L2=A2 AND L3=A3 AND L4=A4 AND L5=A5 AND L6=A6 THEN STOP

      Program ma tak długo losować w pętli i wyświetlać na ekranie liczby A1...A6, B1...B6,D1...D6 aż spełni się warunek z linii 500.

      Linie programu 200 do 290 do losowania liczb A1...A6 mogły by wyglądać, jak kolega pirx napisał:

      200 M=49:C=6 :DIM A(C-1)
      215 FOR I=0 TO C-1
      220 A=INT(RND(0)*M+1)
      230 FOR J=0 TO I-1
      240 IF A=A(J) THEN POP :GOTO 220
      250 NEXT J
      260 A(I)=A:? R;" ";
      270 NEXT I

      Nie umiem tego zastosować do losowań i wydruku na ekranie liczb B1...B6, D1...D6
      • 20:
         
        CommentAuthorYosh
      • CommentTime21 Jul 2024 18:07 zmieniony
       
      Jednolinijkowiec bez powtórzeń do totka:

      1 DIM K(48):FOR I=0 TO 48:K(I)=I+1:NEXT I:FOR I=0 TO 5:G=INT(RND(0)*(49-I))+I:? K(G):K(G)=K(I):NEXT I


      zapisywanie wyników pod K(0)...K(5) tez wejdzie, ale trzeba używać N. zamiast NEXT.
      • 21:
         
        CommentAuthorYosh
      • CommentTime21 Jul 2024 18:07
       
      @wery, używając programu z przykładu wyniki masz w A(0)..A(5) to tablica ale działa tak jak twoje A0 A1 A2 (od biedy)

      tablice zadeklaruj na samym początku swojej zabawki (line 200 przenieś gdzieś na początek swojego programu) i potem wołaj procedurę kolegi przez GOSUB 215. przyda tez się "280 RETURN" aby z niej wracać do twojego kodu. Pewnie przydalo by sie poprawic numeracje lini aby procedurka prix byla np na koncu zawsze
      • 22: CommentAuthorwery
      • CommentTime3 Aug 2024 17:08
       
      Dzięki Yosh. Napisałem w międzyczasie programik do testowania losowań lotto 3 z 49. Działa i to chyba jego jedyna zaleta, niestety. Spełnia moje założenia działania programu jakie podałem 21 lipca. Jednak działa bardzo wolno, za wolno. Pełna wersja losowań(6 z 49) nie ukończyła zadania nawet po 4 dobach. Wersja 3 z 49 kończy zadanie po kilkudziesięciu minutach.
      Może ktoś przerobi ten program aby przyśpieszyć jego działanie.
      Załączam program. Pozdrawiam wszystkich
      • 23:
         
        CommentAuthor3345king
      • CommentTime4 Aug 2024 02:08
       
      Cześć,
      czy ktoś może do tego programu z Bajtka dopisać żeby losowano liczby od 1 do 69 a później dodatkową liczbę od 1 do 26. A może napisze całkiem nowy program? To do zagramanicznego lotka :D Pozdrawiam
      • 24:
         
        CommentAuthorpirx
      • CommentTime4 Aug 2024 02:08
       
      dlaczego losujesz 3 zestawy A,B i D a potem sprawdzasz tylko A?
      Moze to ma sens, nie wiem.

      szybka opty

      1. nie printuj wszystkiego, to zajmuje mnóstwo czasu
      2.
      100 A1=INT(RND...
      110 A2=INT(...
      115 IF A1=A2 THEN 110
      120 A3=INT(...
      170 IF A2=A3 OR A1=A3 THEN 120
      ...
      • 25: CommentAuthorKoval
      • CommentTime4 Aug 2024 05:08 zmieniony
       
      Hmm, idea działania programu (post z 21 lipca) jest dla mnie zupełnie niezrozumiała, bo kolejność wylosowanych liczb jest w totolotku obojętna. Tymczasem gdy w linii nr 110 użytkownik poda dane w takiej kolejności:
      15, 7, 40, 32, 3, 27
      A w linii 200 nastąpi losowanie w takiej kolejności:
      40, 27, 15, 3, 32, 7
      To przecież, mimo, że zostały wylosowane takie same liczby, porównanie w linii 500 wykaże, że żaden warunek nie jest prawdziwy i program będzie działał dalej. To po pierwsze. Po drugie: dlaczego program ma wyświetlać całe miliony losowań, których i tak nie zobaczymy, bo znikną przewijając się przez ekran? Samo wyświetlanie danych trwa bardzo długo, a po co to wyświetlać i tym bardziej liczyć? Nie lepiej by było powtarzać losowanie, za każdym razem sprawdzając, czy wylosowaliśmy pożądane liczby, a jeżeli tak, to wykonać jeszcze 3 losowania, przypisując ich wynik do zmiennych B, C i D? Ta pierwsza rzecz skróciłaby działanie programu kilku/kilkunasto/kilkudziesięciokrotnie, a druga zaoszczędziłaby jeszcze kilkadziesiąt procent czasu (kilka milionów losowań). Chyba, że czegoś nie rozumiem, to chętnie łyknę wytłumaczenie:)

      Ps.
      Skoro używasz emulatora, to wciśnij F7 (chyba) i będziesz miał Turbo...

      Ps2.
      O, Pirx mnie ubiegł z tym sprawdzaniem warunków i wyświetlaniem. I jeszcze: a po co w ogóle losować do uzyskania podanych przez użytkownika liczb? Skoro użytkownik je podał, to ja po prostu wykonałbym 3 (TRZY) poprawne losowania dla B, C i D i po zawodach... Ułamek sekundy...
      • 26: CommentAuthorKoval
      • CommentTime4 Aug 2024 05:08
       
      Jeszcze raz: kompletnie, KOMPLETNIE do bani ten program, bo jeżeli np w losowaniu B, albo C uzyskamy podane przez użytkownika liczby, to co? Program będzie działał dalej, bo sprawdzane jest tylko losowanie A! Bez sensu, nie musicie mi już tłumaczyć, bo tam żadnego sensu nie ma...
      • 27: CommentAuthorwery
      • CommentTime4 Aug 2024 11:08
       
      Dziękuję wszystkim.
      Losowanie totolotka to zdarzenie losowe i żaden program komputerowy do losowania "prawdziwych numerów" totolotka nie ma sensu.
      Chcę się nauczyć więcej o programowaniu w atari basic na przykładzie losowania totolotka. Fajnie jest coś wymyśleć a potem zastosować to w programie komputerowym.
      Wymyśliłem, aby program losował 6 z 49 liczb tak długo, aż wylosuje liczby z ostatniego losowania z zachowaniem kolejności, a potem bez "zakłóceń" wylosował jeszcze dwa zestawy liczb B i D. Dopiero wtedy zatrzymuje swoje działanie.Zestawy liczb B i D to "prawdziwe numery totolotka" na następne dwa losowania.He, he.

      Tryb turbo stosuję, usunę niepotrzebne printowanie wyników losowań.
      Próbowałem, jak zastosować tablice DIM - poległem - tu bym prosił o przerobienie programu, aby zastosować jednolinijkowce i tablice. Może wtedy zrozumiem, jak to działa przy losowaniu, przechowywaniu i printowaniu zestawów liczb B i D.
      • 28: CommentAuthorwery
      • CommentTime4 Aug 2024 15:08
       
      Zwracam uwagę, że program 3 z 49 jest tylko do testów, czy wszystko działa prawidłowo. Docelowo zastosowane rozwiązania będą zastosowane w programie 6 z 49.
      Załączam lekko poprawioną wersję. Nie wiem, czy zmiana sprawdzania warunków kolegi pirx przyśpieszy działanie programu.
      • 29: CommentAuthorKoval
      • CommentTime4 Aug 2024 16:08
       
      Ok, teraz rozumiem, dzięki. Jeżeli zależy Ci na kolejności wylosowanych liczb, to program będzie się wykonywał bardzo długo, bo nie dość, że będziesz musiał "trafić szóstkę" (co jak wiadomo jest bardzo mało prawdopodobne i wymaga wielu losowań), ale też trafić tę samą szóstkę 720 razy (o ile mnie pamięć nie myli i dobrze policzyłem prawdopodobieństwo, bo tyle jest możliwych kombinacji ustawień 6 liczb z uwzględnieniem kolejności), co może wymagać 720 razy więcej obliczeń (=czasu). Liczenie przypadków B, C, D za każdym razem i wyświetlanie ich to już kompletna strata czasu. Policz, albo przynajmniej zapoznaj się z rachunkiem prawdopodobieństwa (losowanie bez zwracania z uwzględnieniem kolejności), żeby przynajmniej w przybliżeniu określić złożoność obliczeniową. Ważne byłoby określenie czasu potrzebnego komputerowi do wykonania jednego losowania, pomnożenie przez 14 milionów (prawdopodobieństwo wygrania szóstki) * 720 (ilość kombinacji liczb tej właściwej szóstki).