vypis cisel v Meme
-
PAuLi3
Darca
- Príspevky: 4737
- Registrovaný: 28 dec 2006, 18:33
- Bydlisko: Komjatice,Nitra
- Kontaktovať používateľa:
vypis cisel v Meme
Prosim vas akym prikazom zabezpecim vypis 80 nahodnych cisel do mema ale nie pod seba ale do stvorca
-
audiotrack
VIP
- Príspevky: 25958
- Registrovaný: 09 sep 2005, 18:39
- Kontaktovať používateľa:
-
audiotrack
VIP
- Príspevky: 25958
- Registrovaný: 09 sep 2005, 18:39
- Kontaktovať používateľa:
-
audiotrack
VIP
- Príspevky: 25958
- Registrovaný: 09 sep 2005, 18:39
- Kontaktovať používateľa:
-
audiotrack
VIP
- Príspevky: 25958
- Registrovaný: 09 sep 2005, 18:39
- Kontaktovať používateľa:
omg, človek chce aby si zapojil hlavu, ale nedarí sa mi. V cykle je predsa iba riadok kde staviame pom. Druhý pokus, trošku viac odheleného kodu:
Kód: Vybrať všetko
var pom:string;
i:integer;
.
.
.
for I:=1 to 20 do pom:=pom+' '+inttostr(random(81));
.
.
.
memo.lines.add(pom);-
PAuLi3
Darca
- Príspevky: 4737
- Registrovaný: 28 dec 2006, 18:33
- Bydlisko: Komjatice,Nitra
- Kontaktovať používateľa:
sorry uz to ide.
Diki moc
//autoeditácia príspevku ( 01 Dec 2008, 21:13 )
a predsa som este zabudol na nieco v tom zozname vypisanych cisel sa nesmu opakovat 2x tie iste cisla
tu je kod
Cize najprv som zadal cisla do mema2 potom sa vygenerovalo 20 cisel z intervalu 80. a ako teraz zabezpecim aby mi vypisalo cisla zhodne v mem1 a meme2 a vypise ich? popripade vypise ze kolke cisla sa opakuju
Diki moc
//autoeditácia príspevku ( 01 Dec 2008, 21:13 )
a predsa som este zabudol na nieco v tom zozname vypisanych cisel sa nesmu opakovat 2x tie iste cisla
tu je kod
Kód: Vybrať všetko
procedure TForm1.Button1Click(Sender: TObject);
var pom:string;
i,z:integer;
begin
z:=Memo2.lines.count;
for i:=1 to 20 do pom:=pom+' ; '+IntToStr(random(80)+1);
memo1.lines.add(pom);
end;
end.-
neutronmind
Expert
- Príspevky: 189
- Registrovaný: 05 aug 2008, 14:17
Mohol by si si vygenerovane cisla postupne ukladat do nejakeho pola, a pri kazdom novom generovani prehladavat toto pole, ci sa tam to cislo uz nenachadza.PAuLi3 napísal:a predsa som este zabudol na nieco v tom zozname vypisanych cisel sa nesmu opakovat 2x tie iste cisla
Mozes napriklad v cykle porovnavat kazdy hodnotu v meme1 s kazdou hodnotou v meme2, ci sa rovnaju.PAuLi3 napísal:Cize najprv som zadal cisla do mema2 potom sa vygenerovalo 20 cisel z intervalu 80. a ako teraz zabezpecim aby mi vypisalo cisla zhodne v mem1 a meme2 a vypise ich? popripade vypise ze kolke cisla sa opakuju
Bohuzial obidva postupy budu imho dost casovo zlozite.
-
audiotrack
VIP
- Príspevky: 25958
- Registrovaný: 09 sep 2005, 18:39
- Kontaktovať používateľa:
už sa tu riešilo velakrát ako vybrať n náhodných čísel bez opakovania. Neviem prečo to robíš cez druhé memo, keď ho môžeš nahradiť polom. Do tohto pola ktoré má n prvkov (v tvojom prípade 80) nahádžeš postupne čísla od 1 do 80 (for I:=1 to 80 do pole:=i) a potom ich náhodne premiešaš (napríklad 30 krát vymeníš náhodne dva prvky). Nakoniec vybereš prvých 20. Keďže je tam každé číslo iba raz, máš zaručené že sa neopakujú. A keďže si ich náhodne poprehadzoval, máš zaručenú náhodnosť (a teda nejdú zasebou)
Ak by si si tým mal problém, treba pohladať. Vravím že to tu už bolo viackrát, určite to v niektorej téme nájdeš už zapísané aj v programe (čo ale nie je vôbec zložité)
Ak by si si tým mal problém, treba pohladať. Vravím že to tu už bolo viackrát, určite to v niektorej téme nájdeš už zapísané aj v programe (čo ale nie je vôbec zložité)
-
PAuLi3
Darca
- Príspevky: 4737
- Registrovaný: 28 dec 2006, 18:33
- Bydlisko: Komjatice,Nitra
- Kontaktovať používateľa:
a ako mam teda premiesat tie prvky?
pretoze takto ked sa to vytvori tak to bohvieako nepremiesa
Teda mam tam chybu pretoze sa vypisuju len cisla od 1 do 20 a nie do 80
Kód: Vybrať všetko
procedure TForm1.Button1Click(Sender: TObject);
var a:array[1..80] of integer;
i,p,j:integer; //p - pomocna premenna
s:string;
begin
for j:=20 downto 2 do
begin
for i:=1 to 20 do a[i]:=i;
i:=random(20)+1;
p:=a[i];
a[i]:=a[j];
a[j]:=p;
end;
s:='';
for i:=1 to 20 do s:=s +' ; ' + IntToStr(a[i]);
Edit1.text:=s;
end;Teda mam tam chybu pretoze sa vypisuju len cisla od 1 do 20 a nie do 80
-
neutronmind
Expert
- Príspevky: 189
- Registrovaný: 05 aug 2008, 14:17
Skus to nejak takto
Kód: Vybrať všetko
for i:=1 to 80 do a[i]:=i;
for j:=20 downto 1 do
begin
i:=random(80)+1;
p:=a[i];
a[i]:=a[j];
a[j]:=p;
end; -
neutronmind
Expert
- Príspevky: 189
- Registrovaný: 05 aug 2008, 14:17