Matematické Fórum

Nevíte-li si rady s jakýmkoliv matematickým problémem, toto místo je pro vás jako dělané.

Nástěnka
22. 8. 2021 (L) Přecházíme zpět na doménu forum.matweb.cz!
04.11.2016 (Jel.) Čtete, prosím, před vložení dotazu, děkuji!
23.10.2013 (Jel.) Zkuste před zadáním dotazu použít některý z online-nástrojů, konzultovat použití můžete v sekci CAS.

Nejste přihlášen(a). Přihlásit

#1 04. 02. 2014 21:04

hans66
Příspěvky: 263
Pozice: Student kombinovaného studia
Reputace:   
 

Pascal - delphi 7

Vhodně spustťe losování- 10 čísel ze 100 bez opakování- zobrazte je na pole panelů. Císla umím vygenerovat, ale nevim jak oššetrit aby se mi cisla neopakovali...
děkuji za rady :-)



procedure TForm1.Button14Click(Sender: TObject);
var i,j,ind : integer;
znak:array[1..10] of integer;

begin
for i:=1 to 10 do begin
                  repeat
                  ind:= random(100)-1;
                  znak[i]:=ind;

                  bt[i].Caption:=intTOstr(ind); // do pole button, vypis do caption u Button
                 end;
end;

Offline

 

#2 04. 02. 2014 22:43

Hertas
Příspěvky: 217
Škola: FJFI CVUT(12-15, bc)
Pozice: student
Reputace:   17 
 

Re: Pascal - delphi 7

co to ošetřit pomocí case a porovnávat s čísly, která už máš vygenerovaná a opakovat dokud se nevygeneruje číslo, které ještě nebylo použito

Offline

 

#3 05. 02. 2014 06:46

hans66
Příspěvky: 263
Pozice: Student kombinovaného studia
Reputace:   
 

Re: Pascal - delphi 7

↑ Hertas:
můžeš mi naznačit jak kdyz mi to ma generovat od 1 do 99?

Offline

 

#4 05. 02. 2014 11:40 — Editoval Honzc (05. 02. 2014 14:36)

Honzc
Příspěvky: 4641
Reputace:   248 
 

Re: Pascal - delphi 7

↑ hans66:
Já tedy čtu, že máš generovat čísla od 1 do 100
To co jsi napsal tak ti bude generovat čísla od -1 do 98
Pokud chceš opravdu čísla od 1 do 99 pak bys musel napsat  ind:= random(99)+1;

No a teď  k řešení aby se čísla neopakovala.
V Delphi existuje v unitě Math (je potřeba ji přidat do sekce uses) funkce RandomFrom, která z daného pole náhodně vybere nějaký prvek.
Princip bude takový:
Uděláš pole (buď 1..99 nebo já bych vzhledem k zadání udělall 1..100) a to naplníš čísly 1 až 100 (1 až 99)
Pak z něho v cyklu od 1 do 10  budeš vybírat nějaký prvek.
Tomu prvku (číslu), který vybereš přiřadíš hodnotu třeba 0.
Pokud jsi při dalším průchodu vybral prvek s hodnotou 0 (to je už jsi ho předtím vybral) tak tomu zamezíš cyklem while, kdy budeš vybírat tak dlouho až vybereš nenulový.
Nějak takto:

Code:

procedure TForm1.Button1Click(Sender: TObject);
var i,c: Integer;
    pole: array[1..100] of Integer;  //pole čísel
begin
  Randomize;  //zapnutí generátoru náhodných číse - nezapomenout
  Memo1.Clear; //Memo pro výpis
  for i := 1 to 100 do  //naplnění pole čísly od 1 do 100, index pole odpovídá
    pole[i] := i;       //příslušnému číslu
  for i := 1 to 10 do   //cyklus vybírání 10-ti čísel
  begin
    c := RandomFrom(pole); //vyběr čísla z pole
    while c=0 do           //když jsi vybral 0, tak vybíráš tak dlouho až to
      c := RandomFrom(pole);  //nula nebude
    pole[c] := 0;             //na vybrané místo v poli zapíšeš 0
    Memo1.Lines.Add(IntToStr(c));  //toto je pouze pro zobrazení čísel jaká jsi
                                   //postupně vybral
  end;
  //ten výpis do pole panelů si místo toho Mema udělej jak chceš
end;

Offline

 

#5 06. 02. 2014 18:42

hans66
Příspěvky: 263
Pozice: Student kombinovaného studia
Reputace:   
 

Re: Pascal - delphi 7

Ahoj tak jsem neco sesmolil, císla mi to generuje, deneruje mi to n-tiketu, maximalne 100. chtel bych se zeptat, jak mám porovnávat pole tiket s polem tikety? Jde mi o to jak mam urcit vyhravající tiket, nevím jak mám porovnávat :-(


tiket:array[1..10] of integer;  // cisla ktera losuje kancelar
tikety:array[1..10,1..100] of integer;
cislo,p,z,i,j:integer;  //n - počet tiketů
nachazi_se:boolean;
begin
label1.Caption:=''; //vymazu label1
memo1.Text:='';
p:=strToInt(edit1.Text);
if (p<=0) or (p>=100)then showmessage('Napiš číslo v rozsahu 1-99!!!');
randomize;

  for i:=1 to 10 do              // tiket ktery urcuje vyherce
  begin
  repeat
  cislo:=random(99)+1;
  nachazi_se:=false;       // nachazi se vypnuto
    for j:=1 to 10 do
    if cislo=tiket[j] then
    nachazi_se:=true;
  until not nachazi_se;
  tiket[i]:=cislo;
  bt[i].Caption:=intToStr(cislo);
  label1.Caption:=label1.Caption +'   '+ intToStr(cislo);


  end;

    for i:=1 to 10 do
    for z:=1 to p do
                            // tiket ktery urcuje vyherce
   begin
    tikety[i,p]:=random(99)+1;
    memo1.Text:=memo1.Text+'   '+ intToStr(tikety[i,p]);
    if (tiket[i]=tikety[i,p]) then  label4.Caption:=intToStr(p);
   end;
   end;

Offline

 

#6 06. 02. 2014 18:47

hans66
Příspěvky: 263
Pozice: Student kombinovaného studia
Reputace:   
 

Re: Pascal - delphi 7

Jeste musim dodelat aby se cisla neopakovali u n-tiketu...ale ted bych potreboval jak porovnat tyto pole

Offline

 

#7 10. 02. 2014 08:53

Honzc
Příspěvky: 4641
Reputace:   248 
 

Re: Pascal - delphi 7

↑ hans66:
Můžeš, prosím tě napsat célé zadání. Z tvého popisu (kdy skáčeš z jednoho na druhé) není jasné o co ti jde.
Např.
co má reprezentovat toto: tikety:array[1..10,1..100] of integer;
co myslíš, že dělá toto:
repeat
  cislo:=random(99)+1;
  nachazi_se:=false;       // nachazi se vypnuto
    for j:=1 to 10 do
    if cislo=tiket[j] then
    nachazi_se:=true;
until not nachazi_se;

To jak zajistit aby se losovaná čísla neopakovala jsem ti už napsal.

Offline

 

Zápatí

Powered by PunBB
© Copyright 2002–2005 Rickard Andersson