Program lotto

0

Witam! Mam problem mianowicie napisałem program lotto ktory losuje 6 liczb z 49 i nie wiem co dopisac aby nie losowal powtarzajacych sie liczb

program lotto;
uses crt;
TYPE wektor=array[1..6] of integer;
var
losowanie:wektor;

procedure wyswietl(var t:wektor);
var i:integer;
begin
writeln('dzisiejsze szczesliwe nr to: ');
for i:=1 to 6 do
write(t[i],' ');
end;

procedure wylosuj(var t:wektor);
var i,l:integer;
begin
for i:=1 to 6 do
begin
l:=random(10)+1;
t[i]:=l;
end;
end;

begin
randomize;
clrscr;
wylosuj(losowanie);
wyswietl(losowanie);
repeat until keypressed;
end.
0

zrob sobie tablice 2 wymiarowa :) gdzie oprocz liczby bedziesz mial znacznik czy liczba byla juz wylosowana :) np. 0 - nie, 1 - tak

0

Mam gdzieś gotowy kodzik. Zwykłą pętelką można sprawdzić, czy liczba się powtórzyła. Jeżeli tak to losuj aż do skutku.

0
TYPE
 TNumer   = ARRAY [1..49] OF Byte;


 FOR i := 1 TO 49 DO Numer[i] := i;   { tablica wypelniona liczbami 1..49 }

VAR  Temp :Byte;
BEGIN
 FOR i := Random(200{1000}) DOWNTO -99 DO
  FOR j := Random(N)+1 DOWNTO 1 DO
   BEGIN
    Temp := Numer[j];
    Numer[j] := Numer[1];
    Numer[1] := Temp;
   END;
0
program Project2;

{$APPTYPE CONSOLE}

uses
  SysUtils;


  Procedure LosujBezwzrotnie (ZIlu:byte;var Wynik:array of Byte);
  var
  Bemben:array of Byte;
  i,wsk:byte;
  begin
  Randomize;
  SetLength(Bemben,Zilu);
  for i:= 0 to High(Bemben) do
  Bemben[i]:=i+1;
  for i:= Low(Wynik) to High(Wynik) do
    begin
    Wsk:=Random(Length(Bemben));
    Wynik[i]:=Bemben[Wsk];
    Bemben[Wsk]:=Bemben[High(Bemben)];
    SetLength(Bemben,Length(Bemben)-1);
    end;
  end;

  var
  Wynik : array[1..6] of byte;
  i:byte;
  begin
  LosujBezwzrotnie(49,Wynik);
  for i:=Low(Wynik) to High(Wynik) do
  Write(Wynik[i],',');
  readln;
  readln;
  end.


;-P Pozdrawiam

0

to zastosowac pętle WHILE..DO ?

0

albo napisz mi do programu jak to ma wygladac :-) bylbym wdzieczny

0

Piotrekdb podał rozwiązanie.
(Po losowaniu zamiast przesuwać, można w miejsce wylosowanego wstawić ostatni)

0

dla mnie to nie jest rozwiązanie... on podał całkiem inny program

program lotto;

uses crt;

TYPE wektor=array[1..6] of integer;

var
  losowanie: wektor;

procedure wyswietl(t:wektor); {po co var był?}
var
 i:integer;
begin
 writeln('dzisiejsze szczesliwe nr to: ');
 for i:=1 to 6 do
     write(t[i],' ');
end;

procedure wylosuj(var t:wektor);
var
  i,j:integer;
  ponow: boolean;
begin
  t[1]:=random(49)+1; {pierwszą losujemy}
  for i:=2 to 6 do {pozostałe musimy sprawdzać z wszystkimi poprzednikami:}
     repeat
         tab[i]:=random(49)+1;
         ponow:=false;
         for j:=1 to i-1 do
            if (tab[i]=tab[j]) then begin {jeśli już była - powtórzymy losowanie}
                ponow:=true;
                break;
            end;
      until not ponow;
end;

BEGIN
   randomize;
   clrscr;
   wylosuj(losowanie);
   wyswietl(losowanie);
   getch(); {szkoda niepotrzebnej petli}
END.

a to powinno być tak

0

dla mnie to nie jest rozwiązanie... on podał całkiem inny program

program lotto;

uses crt;

TYPE wektor=array[1..6] of integer;

var
  losowanie: wektor;

procedure wyswietl(t:wektor); {po co var był?}
var
 i:integer;
begin
 writeln('dzisiejsze szczesliwe nr to: ');
 for i:=1 to 6 do
     write(t[i],' ');
end;

procedure wylosuj(var t:wektor);
var
  i,j:integer;
  ponow: boolean;
begin
  t[1]:=random(49)+1; {pierwszą losujemy}
  for i:=2 to 6 do {pozostałe musimy sprawdzać z wszystkimi poprzednikami:}
     repeat
         tab[i]:=random(49)+1;
         ponow:=false;
         for j:=1 to i-1 do
            if (tab[i]=tab[j]) then begin {jeśli już była - powtórzymy losowanie}
                ponow:=true;
                break;
            end;
      until not ponow;
end;

BEGIN
   randomize;
   clrscr;
   wylosuj(losowanie);
   wyswietl(losowanie);
   getch(); {szkoda niepotrzebnej petli}
END.

a to powinno być tak

0

Program piotrka robi dokładnie to samo, w zasadzie nie jest program tylko procedura lasująca, której brakuje tylko wyświetlenia. Jest też statystycznie poprawna.
Napisałeś "po co var był?", lepiej nawet byłoby napisać "procedure wyswietl(const t:wektor)".
Dodanie VAR ociupinkę przyśpiesza i zmniejsza zapotrzebowanie na pamięć. Bez VAR tworzona jest kopia tablicy, istnieje też spore ograniczenie na wielkość zmiennych lokalnych.

To samo na sposób Piotrka w wersji uproszczonej.

 const
   n=49;
   k= 6;
var
   t:array[0..n-1] of dword;
   i,j,x: dword;
begin
   randomize;
   for i:=0 to n-1 do
      t[i]:=i+1;

   for i:=0 to k-1 do begin
      j:=random(n-i);
      x:=t[i]; t[i]:=t[j]; t[j]:=x;
   end;

   for i:=0 to k-1 do
      write(t[i]:8);
end.

1 użytkowników online, w tym zalogowanych: 0, gości: 1