pascal

Programovacie jazyky, rady, poradňa...
ferdo93
Amateur
Amateur
Príspevky: 21
Registrovaný: 27 feb 2011, 12:00

pascal

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

cawte.
som tak trochu zaciatocnik v pascale a neviem, ako mam nastavit, aby si uzivatel vybral medzi viacerimi programami.
skusal som to cez pole, ale to nefunguje. pojde to cez case of, ale neviem ako na to. nasiel na googli plno navodov ale neviem to pochopit :)
potrebujem napisat napr. ak zadana klavesa je "klavesa 1" nech sa spusti "program 1" ak je zadana "klavesa 2" tak "program 2" dufam, ze ma chapete :) dakujem.
audiotrack
VIP
VIP
Používateľov profilový obrázok
Príspevky: 25958
Registrovaný: 09 sep 2005, 18:39
Kontaktovať používateľa:

Re: pascal

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

chápeme, ale ide to ces case a môžeš využiť kľudne aj pole. Takže niekde robíš chybu. Mal by si teda dať zdroják so svojími pokusmi a my ti povieme kde ju robíš
ferdo93
Amateur
Amateur
Príspevky: 21
Registrovaný: 27 feb 2011, 12:00

Re: pascal

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

ok:

Kód: Vybrať všetko

uses crt; 
var p: array [1..100] of char; 
    i,a,n,d,,x: integer; 
    b: char; 
begin 
 repeat 
 clrscr; 
 writeln ('stlacenim klavesy X sa zobrazia informacie o programe. Stlacenim lubovolnej klavesy sa spusti program pre vypocet aritmetickej postupnosti.'); 
 readln (p); 
 if p[i]='x' then begin 
                clrscr; 
                writeln ('email adress: [email protected]'); 
                writeln ('Ferdinand'); 
                readln; 
                end 
           else begin 
                clrscr; 
                writeln ('program pre vypocet aritmetickej postupnosti'); 
                writeln ('zadajte a1 (hodnota prveho clena)'); 
                readln (a); 
                writeln ('zadajte n (pocet cisel)'); 
                readln (n); 
                writeln ('zadajte d (diferencia/rozdiel'); 
                readln (d); 
                writeln(a+(n-1)*d);
                readln; 
                end; 
 readln; 
 repeat 
 writeln ('chcete pokracovat? (a/n)'); 
 b:=readkey; 
 until (b='a') or (b='n'); 
 until b='n'; 
end. 
to je ako priklad. Na postupnosti je viacej vzorcov.
Ale rad by som to spravil cez case.
Ten program funguje, ale aj tak pri stlaceni pismena x sa nezobrazi to info, ale ide pocitat priklad.
audiotrack
VIP
VIP
Používateľov profilový obrázok
Príspevky: 25958
Registrovaný: 09 sep 2005, 18:39
Kontaktovať používateľa:

Re: pascal

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

p daj iba char, a v podmienke namiesto p bude iba p
ferdo93
Amateur
Amateur
Príspevky: 21
Registrovaný: 27 feb 2011, 12:00

Re: pascal

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

pfuuuu :) pekne ti dakujem. ide to
a ked chcem porovnavat viacej klaves tak to dam znova do podmienky if "klavesa 2" a pojde to?
audiotrack
VIP
VIP
Používateľov profilový obrázok
Príspevky: 25958
Registrovaný: 09 sep 2005, 18:39
Kontaktovať používateľa:

Re: pascal

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

áno
ferdo93
Amateur
Amateur
Príspevky: 21
Registrovaný: 27 feb 2011, 12:00

Re: pascal

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

nefunguje to.
skusal som nieco taketo:

Kód: Vybrať všetko

uses crt; 
var p,r: char; 
    i,a,n,d,,x: integer; 
    b: char; 
begin 
repeat 
clrscr; 
writeln ('stlacenim klavesy X sa zobrazia informacie o programe,stlacenim klavesy r sa spusti program RRR Stlacenim lubovolnej klavesy sa spusti program pre vypocet aritmetickej postupnosti.'); 
readln (p); 
if p='x' then begin 
                clrscr; 
                writeln ('email adress: [email protected]'); 
                writeln ('Ferdinand'); 
                readln; 
                end 
if p='r' then begin
                clrscr;
                program RRR
                end
           else begin 
                clrscr; 
                writeln ('program pre vypocet aritmetickej postupnosti'); 
                writeln ('zadajte a1 (hodnota prveho clena)'); 
                readln (a); 
                writeln ('zadajte n (pocet cisel)'); 
                readln (n); 
                writeln ('zadajte d (diferencia/rozdiel'); 
                readln (d); 
                writeln(a+(n-1)*d);
                readln; 
                end; 
readln; 
repeat 
writeln ('chcete pokracovat? (a/n)'); 
b:=readkey; 
until (b='a') or (b='n'); 
until b='n'; 
end. 
pise: syntax error. "UNTIL" expected but "if" found program.pas
ⓢⓐⓟⓛⓔⓡ
Star
Star
Používateľov profilový obrázok
Príspevky: 621
Registrovaný: 06 jún 2008, 15:07
Bydlisko: nedaleko od hojko.com

Re: pascal

Príspevok od používateľa ⓢⓐⓟⓛⓔⓡ »

nechyba ti v tej prvej podmienke bodkociarka za end ? ak sa mylim tak pardon, pascal sa mi uz v pamati troska straca
audiotrack
VIP
VIP
Používateľov profilový obrázok
Príspevky: 25958
Registrovaný: 09 sep 2005, 18:39
Kontaktovať používateľa:

Re: pascal

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

áno, chýba
ferdo93
Amateur
Amateur
Príspevky: 21
Registrovaný: 27 feb 2011, 12:00

Re: pascal

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

nevsimol som si to :) dakujem vam uz to pekne fakci...

//autoeditácia príspevku (28 Feb 2011, 15:04)
sorry, ze zas otravujem,a le narazil som na problem.
robim program do skoly, ktory by mal pocitat priklady na slovne ulohy, ale nejak blbo to pocita. uvediem priklad:

Kód: Vybrať všetko

                      n
vzorec: Nx=N0(1+p/100) 
do programu to zapisem takto:

Kód: Vybrať všetko

 d: real;
 pocitadlo,i,p,n,N0: integer;

 pocitadlo:=1; 
 d:=1+p/100; 
 for i:=1 to n do 
  d:=pocitadlo*d; 
 d:=pocitadlo*N0; 

vychadzaju mi z toho vysledky typu: 1,005000000E+004
mozno je chyba v mojom zapise, alebo treba nastavit, aby ten program pocital na 2 desatine miesta, cize tam treba dat mod/div.
ale aj tak ten vysledok je daleko od toho, ktory mal vyjst.
dakujem.
audiotrack
VIP
VIP
Používateľov profilový obrázok
Príspevky: 25958
Registrovaný: 09 sep 2005, 18:39
Kontaktovať používateľa:

Re: pascal

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

buď vôbec nerozumieš pascalu, alebo tomu vzorcu.

Kód: Vybrať všetko

pocitadlo:=1+p/100;
d:=1;
for i:=1 to n do
  d:=pocitadlo*d;
d:=d*N0; 
ferdo93
Amateur
Amateur
Príspevky: 21
Registrovaný: 27 feb 2011, 12:00

Re: pascal

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

skor nerozumiem, ako ten vzorec napisat do pascalu :)
sorry za hlupu otazku, ale neviem v com som mal chybu.
ani tvoje mi poriadne nefunguje. hodi toto: 1,4693280000E+004 ale dal som pocitadlo a d do real.
94jakub
Guru wannabe
Guru wannabe
Používateľov profilový obrázok
Príspevky: 2037
Registrovaný: 15 dec 2006, 13:18
Bydlisko: Martin/BA
Kontaktovať používateľa:

Re: pascal

Príspevok od používateľa 94jakub »

Keď vypisuješ premennú:
writeln(x:počet neviem čoho:počet des.miest);
BX
Addict
Addict
Používateľov profilový obrázok
Príspevky: 4572
Registrovaný: 10 jan 2008, 15:30

Re: pascal

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

94jakub napísal:Keď vypisuješ premennú:
writeln(x:počet neviem čoho:počet des.miest);
writeln(x:A:B);
A je počet cifier pred des. čiarkou a B je počet cifier za ňou.
ferdo93
Amateur
Amateur
Príspevky: 21
Registrovaný: 27 feb 2011, 12:00

Re: pascal

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

nefunguje to. stale mi hadze take divne cisla.
dakujem vam, ze mi pomahate mate vsetci K+ a audiotrack 2 krat :)
94jakub
Guru wannabe
Guru wannabe
Používateľov profilový obrázok
Príspevky: 2037
Registrovaný: 15 dec 2006, 13:18
Bydlisko: Martin/BA
Kontaktovať používateľa:

Re: pascal

Príspevok od používateľa 94jakub »

Skúšal som to v jednoduchom programe a to A nejak nefungovalo, vždy vypísal číslo normálne.
No myslel som si, že to bude ono.

//autoeditácia príspevku (01 Mar 2011, 15:24)
Skús dať writeln(x:0:2);
Mal by vypísať len dve des.miesta.
ferdo93
Amateur
Amateur
Príspevky: 21
Registrovaný: 27 feb 2011, 12:00

Re: pascal

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

94jakub napísal:Skúšal som to v jednoduchom programe a to A nejak nefungovalo, vždy vypísal číslo normálne.
No myslel som si, že to bude ono.

//autoeditácia príspevku (01 Mar 2011, 15:24)
Skús dať writeln(x:0:2);
Mal by vypísať len dve des.miesta.

ano funguje to. uz je to ovela lepsie, ako to co vypisovalo do teraz, ale aj tak hadze vysledky od veci. Idem to po jednom skusat a zistim, kde to chybne chybne rata.
zatial ti dakujem.

//autoeditácia príspevku (03 Mar 2011, 15:00)
tak. prisiel som na chybu, ale neviem ako ju odstranit.
problem je v tom, ze x:0:2 funguje, ak dam vypisat vysledok. ale v tom programe p/100 stale bere cislo ako 1,4693280000E+004 , potom s nim pracuje a vysledok vypise na 2 des. miesta. Potreboval by som vediet ako to cislo zaokruhlene na 2 des. miesta ulozim do premennej. skusal som toto, ale nefunguje to:

Kód: Vybrať všetko

d:= p/100;
d:= (d:0:2);
ake mate dalsie riesenie? :)
BX
Addict
Addict
Používateľov profilový obrázok
Príspevky: 4572
Registrovaný: 10 jan 2008, 15:30

Re: pascal

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

Niečo také?

Kód: Vybrať všetko

d := p/100;
d := (d+0.005)*100;
d := trunc(d);
d := d/100;
(o lepšom riešení neviem, pascal neštudujem)
audiotrack
VIP
VIP
Používateľov profilový obrázok
Príspevky: 25958
Registrovaný: 09 sep 2005, 18:39
Kontaktovať používateľa:

Re: pascal

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

nema pascal aj nieco ako round?
BX
Addict
Addict
Používateľov profilový obrázok
Príspevky: 4572
Registrovaný: 10 jan 2008, 15:30

Re: pascal

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

Google mi teraz povedal, že má, takže by to bolo d := round(d*100) / 100;

Ale to už je fuk : D

//
audiotrack napísal:skôr som myslel niečo ako roundto
Zas taky iniciativny som do toho hladania nebol :P
Napísať odpoveď