To selkir : Jó hochu já odevzdával úkol 24. 11. 2007 a stále nic takže se asi hned tak nedočkáš :-)
Příspěvky odeslané z IP adresy 62.245.78.–
To Mircosoft :
vidis... dobrej napad - proceduru val sem neznal...
jinak ja to mam ošetřený takhle:
//predpoklada se použití jednotky windows a crt
write ('Zadej číslo: ');
{$I-}
readln (cislo);
{$I+}
if ioresult<>0 then
begin
repeat
MessageBox (0, 'To neni platne cislo!' , 'Chyba v zadani', 0 + MB_ICONHAND + MB_SYSTEMMODAL);
gotoxy(wherex,wherey-1);
delline;
write ('Zadej číslo: ');
{$I-}
readln (cislo);
{$I+}
until ioresult=0;
end;
mno v delphi moc neumim ale zkus to nejak zbastlit pomoci prikazu copy a jako parametr dej že chceš od znaku kde je mezera do mezery....
kdyby ti to nešlo s těma cyklama tak napiš na mha.phone@centrum.cz ;-)
To Anonymní uživatel : ne možná cykly ale určitě cykly... přesněji cykly se zjištováním podmínky na konci - repeat cyklus... použití label a GoTo je podle mě prasárna a mělo by se to zakázat.... je to pozustatek z doby basicu....
D3V1L
jo eště k tem středníkum... středníkem se v pascalu oddělují (ukončují) jednotlivé příkazy... tzn jestliže máš příkaz IF tak ho nemužeš ukončit za then protože to else pak k ničemu nepatří a samotný else mít nemužeš tzn nastane chyba... nevim jestli sem to napsal dost srozumitelně... kdyžtak eště zagoogli...
To Anonymní uživatel : jj.. uprava zaleži na tobě - pokud se ve svich programech chceš vyznat jenom ty... když chceš aby to chápali i jiní tak existuje pár obecně dodržovaných pravidel... o tom bude určitě nekde psáno (google.com) ale vůbec se neboj používat odsazení... a já třeba místo
if podminka
then
begin
blok prikazu;
end
else
begin
blok prikazu;
end;
udělam něco jako
if podminka then
begin
blok prikazu;
end
else
begin
blok prikazu;
end;
ale tech pravidel je vic... obecne platí že čim víc to hustíš k sobě tim je přehlednost horší (aspon já si to myslim). časem si najdeš nějaký svuj, získáš návyky a bude to v pohode... pak jednou otevřeš zdroják svího 2 roky starýho programu a zjistíš že se v tom vyznáš ;)
podíval sem se na ten tvuj odkaz ale to je članek o podminkacha ne o goto a labelech... nevim co jsi tim chtěl řict... faktem je že goto a labely se v profesionální praxy nepoužívá - jistě tedka si říkáš že nejsi porfík a asi ním ani být nechceš ale veř mi, oni mají důvod proč to nepoužívat :-)
P.S. programujte.com neni jediná stránka na světě podle které se můžeš učit programovat - koukni taky třeba na http://pascal.webz.cz
tak tady to máš... chybělo ti tam eště jedno end a když píšeš:
if podminka then
begin
prikazy;
end //tak tady neni středník!
else
begin
prikazy;
end; // je totiž až tady :)
//jinak když je to takhle
if podminka then
begin
prikazy;
end; //tak je už tady ale pak už nenásleduje else....
takže tady máš opravenej zdroják toho tvího výzvoru, ale zkus to předělat s cyklama :-)
Program zabava;
uses crt;
label skok,hadanka;
var a,b:real;
funkce,odpoved,matika,konec:char;
begin
clrscr;
writeln;
writeln('Vitej u pouzivani tohoto zabavneho programu!');
writeln('Na zacatek si vyber:');
skok:
writeln(' a) hadanka');
writeln(' b) pocitani');
writeln;
readln(funkce);
if (funkce='A') or (funkce='a') or (funkce='H') or (funkce='h')
then begin
hadanka:
clrscr;
writeln;
writeln('Jisty clovek si nedavno koupil 2 letadla, ale pozdeji');
writeln('zjistil, ze mu nevyhovuji. Prodal je kazde za 600 000 korun,');
writeln('pricemz na jednom prodelal 20% a na druhem 20% ziskal.');
writeln('Tento clovek na tomto obchodu:');
writeln(' a) vydelal');
writeln(' b) prodelal');
writeln(' c) ani jedno');
writeln;
readln(odpoved);
writeln;
case odpoved of
'A','a','+','v','V': begin
write('Ne, toto neni spravna odpoved');
readln;
goto hadanka;
end;
'B','b','-','p','P' : write('Ano, vyborne, respect!');
'C','c','0','n','N' : begin
write('No, kdys se to tak veme....20+20...NEE :/)');
readln;
goto hadanka;
end;
else begin
write('Nespravne zadani, musis zadat a,b nebo c');
readln;
goto hadanka;
end;
end;
end
else begin
clrscr;
writeln('Nejdrive zadej dve cisla a potom vyber akci.');
writeln;
writeln('Zadej prvni cislo a potvrd entrem.');
readln(a);
writeln('Zadej druhe cislo a potvrd entrem.');
readln(b);
writeln('Chces:');
writeln(' a) scitat (+)');
writeln(' b) odcitat (-)');
writeln(' c) nasobit (?)');
writeln(' d) delit (ö)');
writeln;
readln(matika);
clrscr;
case odpoved of
'A','a','+':writeln(a,' + ',b,' = ',a+b);
'B','b','-':writeln(a,' - ',b,' = ',a-b);
'C','c','x','?':writeln(a,' ? ',b,' = ',a*b);
'D','d','/','ö':writeln(a,' ö ',b,' = ',a/b);
else writeln('! SPATNE ZADANI !');
end;
delay(2000);
writeln('Chces se vratit na zacatek? (A/N)');
readln(konec);
if (konec='A') OR (konec='a') OR (konec='Y') OR (konec='y')
then begin
writeln('Muzete si tedy znovu vybrat');
goto skok;
end
else write('Dekuji za pouziti');
readkey;
end;
end.
To 0-ndr-4 : mrknu se ti na to ale máš (podle mě) fakt hroznou upravu... temeř se v tom nevyznam... pokus se vyvyrovat použití label a goto.... misto toho třeba repeat cyklus... nejlepší by bylo to celý překopat ale to se ti asi chtít nebude... mno jak řikam mrknu se ti na to a pak napišu ;)
moc se omlouvam za svou blbost :-S psal sem to z hlavy a když se to otestoval našel sem další chybu....
uses crt;
type pole=array[1..32000] of integer;
var cisla:pole;
i:integer;
n:integer;
begin
write('Pocet prvku: ');
readln (n);
clrscr;
randomize;
for i:=1 to n do
begin
cisla[i]:=random(100);
write(cisla[i]:4);
end;
repeat until keypressed;
end.
sorry byla tam drobná chybka....
takhle:
uses crt;
var n:integer;
type pole=array[1..n] of integer;
var cisla:pole;
i:integer;
barvy:word;
begin
write('Počet prvků: ');
readln (n);
clrscr;
randomize;
for i:=1 to n do begin
cisla[i]:=random(100);
write(cisla[i]:4);
end;
repeat until keypressed;
end.
To Jenicek :
takhle nějak to bude vypadat když si má uživatel vybrat kolik náhodných čísel má být vypsáno... když si je bude chtít zadávat sám tak to je podobný akorát upravíš vstup v tom cyklu....
uses crt;
var n=20;
type pole=array[1..n] of integer;
var cisla:pole;
i:integer;
barvy:word;
begin
write('Počet prvků: ');
readln (n);
clrscr;
randomize;
for i:=1 to n do begin
cisla[i]:=random(100);
write(cisla[i]:4);
end;
repeat until keypressed;
end.
To Laaca : mno spíš myslim že chtěl aby se mu to zapisovalo do textaku takže normalně požij assign(); potom ho vytvoř ( rewrite(); ) a zapisuj pomocí write(jmeno souboru,'text ktery se zapise');
mělo by to vypadat asi takhle ;)
uses crt;
var soubor:text;
cislo:byte;
const max = 100;
begin
assign(soubor, 'C:\Documents and Settings\*JMENO UZIVATELE*\Desktop\cisla.txt');
rewrite (soubor);
cislo:=0;
repeat
cislo:=cislo+1;
write(soubor,' ',cislo);
until cislo = max;
close(soubor);
writeln('HOTOVO');
repeat until keypressed;
end.