Pascal a randomize

Programovacie jazyky, rady, poradňa...
Dieg0
Guru wannabe
Guru wannabe
Príspevky: 2350
Registrovaný: 16 nov 2006, 14:48
Bydlisko: Liptovský Mikuláš

Pascal a randomize

Príspevok od používateľa Dieg0 »

Hladam to uz dlho.Dal som si vygenerovat nahodne cisla od 1000 do 9999 pomocou prikazu ktory som nasadil na premmenu a:=random(1000)+8999 akurat ze kazde cislo ktore mi vygeneruje sa nachadza nad 9000.Proste napr 9324, 9874, 9123 a podobne a ani bohovi netusim preco to nikdy pod tych 9000 nejde :(.Prosim poradte.Dakujem
audiotrack
VIP
VIP
Používateľov profilový obrázok
Príspevky: 25958
Registrovaný: 09 sep 2005, 18:39
Kontaktovať používateľa:

Príspevok od používateľa audiotrack »

random(8999)+1000
Dieg0
Guru wannabe
Guru wannabe
Príspevky: 2350
Registrovaný: 16 nov 2006, 14:48
Bydlisko: Liptovský Mikuláš

Príspevok od používateľa Dieg0 »

diki za radu.A este jedna vec.Mam v programe

writeln (´Type your mail : ´);
readln (a);

ako dam podmienku aby sa museli vyskytovat v tom maili znaky @ a bodka s tym ze ked bude mail zadany v spatnom formate tak sa program vrati na writeln (´Type your mail : ´´);
neutronmind
Expert
Expert
Príspevky: 189
Registrovaný: 05 aug 2008, 14:17

Príspevok od používateľa neutronmind »

Kód: Vybrať všetko

ok:=false;
zavinac:=false;

while not ok do
begin
writeln('Type your email: ');
readln(a);
for I:=1 to a[0] do
begin
if (a[i]='@') then
zavinac:=true
else if (a[i]='.') and zavinac then
ok:=true;
end;
end;
Dalo by sa tam samozrejme toho osetrit viac, taktiez neviem, ci je to presne syntakticky spravne, ale myslim, ze by to malo fungovat... :)
audiotrack
VIP
VIP
Používateľov profilový obrázok
Príspevky: 25958
Registrovaný: 09 sep 2005, 18:39
Kontaktovať používateľa:

Príspevok od používateľa audiotrack »

Kód: Vybrať všetko

for I:=1 to a[0] do  
by som skôr dal

Kód: Vybrať všetko

for I:=1 to length(a)-1 do 
Dieg0
Guru wannabe
Guru wannabe
Príspevky: 2350
Registrovaný: 16 nov 2006, 14:48
Bydlisko: Liptovský Mikuláš

Príspevok od používateľa Dieg0 »

Kód: Vybrať všetko

program blablabla;
uses crt;
var c,d,e,f,ok,i,zavinac : integer;
    a : char;
begin
clrscr;
ok:=false; 
zavinac:=false; 
while not ok do
begin 
writeln('Type your email: '); 
readln(a);
for I:=1 to length(a)-1 do
begin 
if (a[i]='@') then
zavinac:=true 
else if (a[i]='.') and zavinac then
ok:=true; 
end;
writeln ('Som program co pocita nahodne cisla');
writeln ('Zadaj tvoj mail : ');
readln (a);
clrscr;
writeln ('Pocitam ...');
delay(6000);
randomize;
c:=random(8999)+1000;
d:=random(8999)+1000;
e:=random(8999)+1000;
f:=random(8999)+1000;
clrscr;
writeln ('Nahodne cisla su : ',c,' ',d,' ',e,' ',f);
readln;
end;
end.
Toto je cely program ale bohuzial nefunguje pise mi 6 chyb.Uz som z toho bezradny.Viete mi pomoct este s tymto?Dakujem
audiotrack
VIP
VIP
Používateľov profilový obrázok
Príspevky: 25958
Registrovaný: 09 sep 2005, 18:39
Kontaktovať používateľa:

Príspevok od používateľa audiotrack »

1) ok a zavináč má byť typu boolean a nie integer
2) po tej kontrole pýtaš znova mail a znova ho načítaš, tak celá kontrola je zbytočná lebo ho zase prepíšeš (a ten už môže byť nekorektne)
3) jedno end čo je na konci tam nemá čo robiť (vypadá že by malo byť pri tej konrole)
4) a je typu string a nie char
...
daj sem tie chyby, povieme ti viac :)
chrono
VIP
VIP
Používateľov profilový obrázok
Príspevky: 7127
Registrovaný: 25 dec 2006, 15:17

Príspevok od používateľa chrono »

A aké chyby ti to píše?
Dieg0
Guru wannabe
Guru wannabe
Príspevky: 2350
Registrovaný: 16 nov 2006, 14:48
Bydlisko: Liptovský Mikuláš

Príspevok od používateľa Dieg0 »

Okej dakujem chlapci.Ako audiotrack pisal prepisal som a a ok a zavinac na string a boolean a uz to frci :).A moze mi este niekto povedat nejake rozumne vysvetlenie preco ok a zavinac musi byt boolean?


EDIT : // vsimol som si ze ten program fici ale asi tam chyba label a GOTO lebo ked dam zly mail prebehne program celu proceduru a az ked prebehne cely program tak sa zadavanie mailu opakuje znova :(
neutronmind
Expert
Expert
Príspevky: 189
Registrovaný: 05 aug 2008, 14:17

Príspevok od používateľa neutronmind »

boolean musia byt preto, lebo nadobudaju len logicke hodnoty (true a false). Ak by boli typu integer, tak im mozes priradovat hodnoty 0 a 1, namiesto true/false. :)
audiotrack
VIP
VIP
Používateľov profilový obrázok
Príspevky: 25958
Registrovaný: 09 sep 2005, 18:39
Kontaktovať používateľa:

Príspevok od používateľa audiotrack »

Dieg0 napísal:...

EDIT : // vsimol som si ze ten program fici ale asi tam chyba label a GOTO lebo ked dam zly mail prebehne program celu proceduru a az ked prebehne cely program tak sa zadavanie mailu opakuje znova :(
to som písal v druhom bode :)
Dieg0
Guru wannabe
Guru wannabe
Príspevky: 2350
Registrovaný: 16 nov 2006, 14:48
Bydlisko: Liptovský Mikuláš

Príspevok od používateľa Dieg0 »

Okej chlapi uplne vsetko mam uz vyriesene uz len 2 otazky.Mozem nahodne generovat 9 znakovy retazec zlozeny aj z pismen aj z cisel?A este ta druha otazka ze mozem nejak osetrit aby pri zapnuti programu sa do neho zapisala MAC adresa daneho PC a ta dana kopia toho programu by uz nesla zapnut na inom PC?
audiotrack
VIP
VIP
Používateľov profilový obrázok
Príspevky: 25958
Registrovaný: 09 sep 2005, 18:39
Kontaktovať používateľa:

Príspevok od používateľa audiotrack »

1) áno, vygeneruješ číslo z intervalu 48-57 pre čísla a 65-90 pre velké alebo 97-122 pre malé písmena. Potom to pomocou char(hodnota) prevedieš na číslo/znak
2) nie (niekde by si si to musel poznačiť že už spustený bol, a nedokážeš zabezpečiť integritu takéhoto údaju)
Dieg0
Guru wannabe
Guru wannabe
Príspevky: 2350
Registrovaný: 16 nov 2006, 14:48
Bydlisko: Liptovský Mikuláš

Príspevok od používateľa Dieg0 »

Mohol by si mi napisat konkretny prikaz na vygenerovanie toho 9 miestneho kodu ?Bol by som ti vdacny ja som z toho blbec.A potom rovno tuto temu mozes zavriet.Dakujem vsetkym zucastnenym velmi ste mi pomohli
audiotrack
VIP
VIP
Používateľov profilový obrázok
Príspevky: 25958
Registrovaný: 09 sep 2005, 18:39
Kontaktovať používateľa:

Príspevok od používateľa audiotrack »

Kód: Vybrať všetko

begin
   for i:=1 to 9 do begin
       case (random(3)) of
           0: vystup:=vystup+chr(random(9)+48);
           1: vystup:=vystup+chr(random(25)+97);
           2: vystup:=vystup+chr(random(25)+65);
       end;
   end;
   writeln(vystup);
end;
je to z hlavy, neviem presne ako sa zapisuje case v pascale ale takto nejak by to malo byť. vystup je typu string
Napísať odpoveď