Prosty program lotto

0

Witam mam mały problem z programem. Miałem za zadanie napisać program lotto i policzyć liczbę występujących liczb. Program działa prawidło, ale w Memo1, liczby które powinny być w tablicy 2 wymiarowej ustawiają się w pionowym rzędzie.
Jeszcze mam pytanie w jaki sposób mógłbym umieścić liczby wylosowane w tabelce takiej jak w excel'u.
Z góry dzięki za pomoc.

 var
  Form1: TForm1;
  tab:array[1..6,1..8] of integer;
  tab2:array[1..49] of integer;
  x,y:integer;


implementation

{$R *.dfm}

procedure TForm1.Button1Click(Sender: TObject);
begin
Memo1.clear;
 for y:=1 to 8 do begin
 for x:=1 to 6 do begin
  tab[x,y]:=random(48)+1;
   if tab[x,y]=tab[x+1,y] then
    tab[x+1,y]:=tab[x+1,y]+1;
      Memo1.Lines.Add(inttostr(tab[x,y]));
end;
end;
end;

procedure TForm1.Button2Click(Sender: TObject);
begin
Memo2.Clear;
  for x:=1 to 49 do
    tab2[x]:=0;
  for y:=1 to 8 do
  for x:=1 to 6 do
    tab2[tab[x,y]]:=tab2[tab[x,y]]+1;
  for x:=1 to 49 do
    memo2.Lines.Add(inttostr(x)+': '+inttostr(tab2[x]));
end;
end.
0

Twój kod - według mnie - powinien wyglądać raczej tak:

var
  Form1 : TForm1;
  tab : array[1..6, 1..8] of integer;
  tab2 : array[1..49] of integer;
  X, Y : integer;

//...

procedure TForm1.FormCreate(Sender : TObject);
begin
  Randomize;
end;

procedure TForm1.Button1Click(Sender : TObject);
var
  S : string;
begin
  Memo1.clear;
  for y := 1 to 8 do
  begin
    S := '';
    for x := 1 to 6 do
    begin
      tab[x, y] := random(48) + 1;
      if tab[x, y] = tab[x + 1, y] then
        tab[x + 1, y] := tab[x + 1, y] + 1;
      if X < 6 then
      begin
        S := S + inttostr(tab[x, y]) + ' ';
      end
      else
      begin
        S := S + inttostr(tab[x, y]);
      end;
    end;
    Memo1.Lines.Add(S);
  end;
end;

procedure TForm1.Button2Click(Sender : TObject);
begin
  Memo2.Clear;
  for x := 1 to 49 do
    tab2[x] := 0;
  for y := 1 to 8 do
    for x := 1 to 6 do
      tab2[tab[x, y]] := tab2[tab[x, y]] + 1;
  for x := 1 to 49 do
    Memo2.Lines.Add(inttostr(x) + ': ' + inttostr(tab2[x]));
end;
//...

A do prezentacji danych w postaci tabelki przypominającej Excela użyj komponentu TStringGrid z zakładki Additional. I zawsze pamiętaj o użyciu Randomize. A temat przenoszę do Newbie, bo dotyczy banalnych podstaw i zawsze o takowe podstawy pytaj w tamtym dziale.

0

Program działa ładnie tylko, że liczby nie powinny się powtarzać, a powtarzają nie mam zielonego pojęcia dlaczego. Mam też problem dodać liczby z lotka do Tabeli.

 var
  Form1: TForm1;
  tab:array[1..6,1..8] of integer;
  tab2:array[1..49] of integer;
  x,y,i,k,w:integer;
  s:string;


implementation

{$R *.dfm}
procedure TForm1.Button1Click(Sender: TObject);
begin
Stringgrid1.ColCount:=7;
Stringgrid1.RowCount:=9;
randomize;
Memo1.clear;
 for y:=1 to 8 do begin
 S := '';
 for x:=1 to 6 do begin
  tab[x,y]:=random(48)+1;
   if tab[x,y]=tab[x+1,y] then
    tab[x+1,y]:=tab[x+1,y]+1;
     if x<6 then begin
        s:=s+inttostr(tab[x,y])+ ', ';
      end
      else begin
        s:=s+inttostr(tab[x,y]);
      end;

    end;
     for k:=1 and y:=1 to 6 do
     for w:=1 and x:=1 to 8 do
     StringGrid1.Cells[k,w]:=inttostr(tab[x,y]);
    Memo1.Lines.Add(s);
end;
end;



procedure TForm1.Button2Click(Sender: TObject);
begin
Memo2.Clear;
  for x:=1 to 49 do
    tab2[x]:=0;
  for y:=1 to 8 do
  for x:=1 to 6 do
    tab2[tab[x,y]]:=tab2[tab[x,y]]+1;
  for x:=1 to 49 do
    memo2.Lines.Add(inttostr(x)+': '+inttostr(tab2[x]));
end;


end.
0

Aby zachęcić Ciebie - mam nadzieje do większej - samodzielności pokaze Ci kod aplikacji, która sortuje rosnąco tablicę jednowymiarową z wynikami, a wcześniej sprawdza czy żadna libczba się nie powtórzyła. Może robi to w mało optymalny sposób, ale jak Ci się chce to wykombinuj sobie lepszy. Kod można najlepiej skompilować pod FPC. A co do StringGrida, to nie analizowałem coś tam naskrobał, bo widzę jakieś bezsensowne zastosowanie pętli z and'ami. Według mnie to nie ma prawa działać. Poczytaj sobie w google jak działają pętle for.

program los49;

uses
  Crt;

const
  N = 49;

type
  Zbior = set of 0..N;

var
  X, A : Zbior;
  I, J, K : integer;
  Z : Char;
  B : array[1..6] of integer;

begin
  repeat
    X := [1..n];
    A := [];
    A := X;
    ClrScr;
    Randomize;
    for I := 1 to 6 do
    begin
      J := 0;
      B[I] := Random(N) + 1;
      repeat
        if (B[I] in A) then
        begin
          A := A - [B[I]];
          J := 1;
        end
        else
          B[I] := Random(N) + 1
      until J = 1;
    end;
    for J := 1 to 5 do
      for i := J + 1 to 6 do
      begin
        if B[J] > B[I] then
        begin
          K := B[J];
          B[J] := B[I];
          B[I] := K;
        end;
      end;
    for I := 1 to 6 do
      Write(B[I] : 3);
    Writeln;
    Writeln('Nacisnij dowolny klawisz zeby kontynuowac albo "k" zeby zakonczyc');
    Z := ReadKey;
  until Z = 'k';
end.

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