Jak zapisać losowe wartości do stringgrida?

0

Chce zbudowac tablice k liczb losowych i wyswitelić ją w stringridzie a tam sa komorki(cell), jak wiec zrobic zeby liczby byly wypisane na pozycjach? chodzi mi o to zeby było a1obok a2 itd i pozniej jakos to przechodzilo do nastepnego wiersza tak by jak sie da to wszystkie wartosci byly widziane. Czy jest mozliwe zrobic cos takiego s StrinGrid czy jakis inny komponent zastosowac

0

Napisałem takie coś ale to sprawdza sie dla małej liczby lowowych wartosci
ktore sa pokolei obok sibie wyswietlanie
Jak zrobic zeby np jak jest 50 losowych liczb to wyswietliły sie pokolei w 10 kolumnach i 5 wierszach

procedure TForm1.Button3Click(Sender: TObject);
var i,k:integer;
a:tablica;

begin
k:=StrToInt(LabeledEdit1.Text);
for i:=1 to k do
begin
a[i]:=Random(100+100+1)-100;
StringGrid1.Cells[i-1,0]:=IntToStr(a[i]);
stringGrid1.ColCount:=k;
end;
end;

0

A o pętlach repeat ... until nie słyszałeś?
Poza tym takie pytania zdaje się w dziale
NEWBIE [!!!] Ech, ileż to można potwarzać.
I jeśli dobrze zrozumiałem to chodzi o to:

var
  I, ARow, ACol : integer;
  Arr : array[1..50] of integer;
begin
  for I := Low(Arr) to High(Arr) do
  begin
    Arr[I] := Random(201) - 100;
  end;
  ARow := 0;
  ACol := 0;
  I := Low(Arr);
  repeat
    StringGrid1.Cells[ACol, ARow] := IntToStr(Arr[I]);
    I := I + 1;
    ACol := ACol + 1;
    if ACol = StringGRid1.ColCount then
    begin
      ACol := 0;
      ARow := ARow + 1;
    end;
  until ARow = StringGrid1.RowCount;
end;
0

wlasnie. NEWBIE!
a co do kodu olesia... ja wole tak:

var
  i,x,y:integer;
  tab : array[1..48] of integer;
begin
  for i := Low(tab) to High(tab) do
    tab[i] := Random(201) - 100;

  i:=Low(tab);
  for y:=0 to StringGrid1.RowCount-1 do
    for x:=0 to StringGrid1.ColCount-1 do
       if i<=High(tab) then
        begin
         StringGrid1.Cells[x,y]:=inttostr( tab[i] );
         inc(i);
        end;
end;
0

Mam pytanie co do StrinGrid.RowCount-1 i StringGrid1.ColCount-1 jaka bedea miec wartosc i skad sie ona wezmie? jak zrobic zeby jak np bede chcial wypisac 28 liczb pojawily sie 23 komorki z liczbami w np 5 kolumnach?

0

dobra to StringGrid1.RowCount-1 StringGrid1.ColCount-1 to będą miec wartosci domyslnie ustawione w stringirdzie czyli np 5 i 5 tak?

0

chyba zajarzyłem. Sam ustalam w opcjach stringrid ilosc wierszy i kolumn np 10 na 10 i beda mi sie tam wpisywac wygenerowane wartosci. Mam pytanie czy da sie tak zrobic ze jak jest 29 wartosci losowych do wyswietlenia to beda one tylko w 29 komorkach tak zeby komorki dopasowaly sie do liczby k liczb losowych?

0

mam pytanie jak zrobic w tej drugiej procedurze zeby po nacisnieciu przycisku wyswietlala wartosc minimalna? Program działa ale jako wartosc minimalna wyswietla 0? Pewnie dlatego że bierze wartości z innej tablicy dynamicznej którą utworzyłem w tej procedurze a nie z tej utworzononej tablicy w pierwszej procedurze. Gdzie mam zadeklarować tablice dynamiczna na której będę robil obliczenia by można było z niej korzystać we wszystkich procedurach?

procedure TForm1.Button3Click(Sender: TObject);
var
  i,x,y,k:integer;
  tab : array of integer;
begin
  k:=StrToInt(LabeledEdit1.Text);
  SetLength(tab,k);
  for i := Low(tab) to High(tab) do
    tab[i] := Random(201) - 100;

  i:=Low(tab);
  for y:=0 to StringGrid1.RowCount-1 do     //musi byc od zera  bo pierwszy wiersz i kolumna sa zerowe
    for x:=0 to StringGrid1.ColCount-1 do
       if i<=High(tab) then
        begin
         StringGrid1.Cells[x,y]:=inttostr( tab[i] );
         inc(i);
        end;
end;
procedure TForm1.Button1Click(Sender: TObject);
var i,min,k : Integer;
tab : array of integer; // tu własnie jest ta tablica dynamiczna ale penie to jest zle
begin
 k:=StrToInt(LabeledEdit1.Text); //ilosc wartosci losowych do wyswietlenia
  SetLength(tab,k); 
 min:=tab[low(tab)+1]; // ustalam wartosc minmalna do ktorej poroownuje pozostale pewnie tez zele czy moge np tak zrobic min:=a[1]
 for i:=1 to high(tab)   do // to tez pewnie zle
 begin
 if tab[i]<Min then min:=tab[i];
end;
 Memo1.Lines.Add(IntToStr(min)); //otrzymana wartosc min ma wyswietlic w memo
end;




 
0

Ustawić wartość zmiennej liczbowej o nazwie, na przykład Min
na wielkośc High(TypLiczbowyTejTablicy); i w pętli sprawdzić
wszystkie wartości, jeżeli dany element tablicy < Min, to Min
ustawić na wartośc elementu tablicy. Zaś dla wyszukania na
przykład wartości najwyższej postąpić odwrotnie. Ech, no i w
dziale innym niż Newbie, znowu w przeciągu dosyć krótkiego
czasu pada pytanie o banały takie, jak znalezienie minimum.

0

ale mi nie widzie tej tablicy co ją wygenerowałem w pierwszej procedurze

0

Jeżeli chcesz mieć ją widoczną w obrębie dwóch różnych procedur - to
zadeklaruj ją jako zmienną globalną lub też w sekcji private albo public.

0

zmienna dynamiczna tez mego tak zadeklarowac? bo tutaj trzeba uzyc procedury setlenght gdzie ja mozna przed procedurami zadeklarowac ?

0

Nie wiem jak ma działać Twój program. Definiuj rozmiar
tablicy wtedy kiedy jest to potrzebne, aby później się nie
odwoływać do indeksu tablicy poza jej wielkością - toteż
wszystkie pętlę rób od Low(Tablica) to High(Tablica), no
a jak sobie nie radzisz z dynamiczną tablicą, to możesz
też użyć obiektów jak TStringList, TList albo TObjectList
do przechowywania obiektów. A więcej info - w google.

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