Számológép, és lottó pascalban?
Nos azt szeretném, hogy van például a számológép, és van pl az összeadás és a faktoriális , hogy leehtne megcsinálni boolean-nal, hogy összeadásnál bekérje a második számot, de a faktoriálisnál ne (tehát +-nál c=true, !-nál c=false
tehát valahogy így gondoltam if c:=true then writeln('Add meg a második számot: '); readln(b);
De még se jó valamért
program szgep;
uses crt;
var a,b,i,f,g,y,szam:integer;
c,k:char;
d,e:real;
h:boolean;
Begin
clrscr;
writeln('A program csak egész számokkal tud műveletet végezni!!!!!!!!!');
repeat
writeln('Add meg az első számot');
readln(a);
if a=0 then writeln('Nem ˇrhastz be 0- t!!!');
until a<> 0;
Begin
repeat
writeln('Milyen műveletet akarsz elvégezni?');
readln(c);
if (c<> '+') and (c<> '-') and (c<> '*') and (c<> '/') and (c<> 'ó') and (c<> '^') and (c<> '!') then writeln('Írj műveleti jelet')
else
until (c='+') or (c='-') or (c='*') or (c='/') or (c='ô') or (c='^') or (c='!')
end;
Begin
Begin
repeat
if h=true then
begin
writeln('Add emg a második számot');
readln(b);
End;
if b =0 then writeln('Nem írhatsz be 0- t!!!');
until b <> 0;
End;
End;
if c='+' then
Begin
h:=true;
writeln(a, ' ‚s ',b, ' összege= ');
readln(d);
e:=(a+b);
if e=d then writeln('A válasz helyes ')
else if e<>d then writeln('A válasz helytelen, a válasz', e:0:0)
else writeln('Nem');
End;
if c='-' then
Begin
writeln('Melyiket akarod melyikből kivonni?');
readln(k);
Begin
if (k<> '1') AND (k<> '2') then exit
else
if k='1' then
Begin
writeln(a, ' ‚s ' , b, ' különbsége= ');
readln(d);
e:=a-b;
End;
if k='2' then
Begin
writeln(b, ' ‚s ' ,a , ' különbsége= ');
readln(d);
e:=b-a;
End;
End;
if e=d then writeln('A válasz helyes ')
else if e<>d then writeln('A válasz helytelen, a válasz', e)
else writeln('Nem');
End;
if c='*' then
Begin
writeln('A k‚t sz m szorzata= ');
readln(d);
e:=a*b;
if e=d then writeln('A válasz helyes ')
else if e<>d then writeln(‘A válasz helytelen, a válasz’, e)
else writeln('Nem');
End;
if c='/' then
Begin
writeln('Melyiket akarod melyikkel osztani?');
readln(k);
Begin
if (k <> '1') and (k <> '2') then exit
else
if k='1' then
Begin
writeln(a, ' ‚s ' , b, ‘ hányadosa= ');
readln(d);
writeln(' marad‚k?=');
readln(f);
e:=a / b;
g:=a mod b;
End;
if k='2' then
Begin
writeln(b, ' ‚s ' ,a , ‘ hányadosa= ');
readln(d);
writeln(' marad‚k?=');
readln(f);
e:=b div a;
g:=b mod a;
End;
End;
if( e=d) and (f=g) then writeln('A válasz ‚s a marad‚k is helyes ')
else if ( e<>d) and (f<>g) then writeln(‘A válasz helytelen, a válasz’,e:0:0, '‚s a marad‚k:',g)
else if ( e=d) and (f<>g) then writeln(' A válasz helyes, a maradék viszont :' ,g)
else if ( e<>d) and (f=g) then writeln('A marad‚k helyes, a válasz helytelen, a válasz: ', e:0:0)
else writeln('Nem');
End;
if c='^' then
Begin
writeln('Melyiket akarod négyzetre emelni?');
readln(k);
Begin
if (k<> '1') AND (k<> '2') then exit
else
if k='1' then
Begin
writeln(a, ' n‚gyzete= ');
readln(d);
e:=a * a;
End;
if k='2' then
Begin
writeln(b, ' n‚gyzete= ');
readln(d);
e:=b * b;
End;
End;
if e=d then writeln('A válasz helyes ')
else if e<>d then writeln(‘A válasz helytelen, a válasz’, e)
else writeln('Nem');
End;
if c='ó' then
Begin
writeln('Melyikből akarsz gyököt vonni?');
readln(k);
Begin
if (k<> '1') AND (k<> '2') then exit
else
if k='1' then
Begin
writeln(a, ' gy”ke= ');
readln(d);
e:=sqrt(a);
End;
if k='2' then
Begin
writeln(b, ' gy”ke= ');
readln(d);
e:=sqrt(b);
End;
End;
if e=d then writeln('A válasz helyes ')
else if e<>d then writeln(‘A válasz helytelen, a válasz’, e:0:4)
else writeln('Nem');
End;
if c='!' then
Begin
h:=false;
Begin
writeln('Melyiknek akarod a fact-jat?');
readln(k);
e:=1;
if (k<> '1') AND (k<> '2') then exit
else
if k='1' then
if a > 69 then
repeat
writeln(‘Túl nagy szám, írj mást: ');
readln(a);
until a < 69;
Begin
if a>0 then
for i:=1 to a do
e:=e*i;
writeln(a, ' faktoriálisa ? = ');
readln(d);
if a < 0 then e:=0;
End;
if k='2' then
if b > 69 then exit
else
Begin
if b>0 then
for i:=1 to b do
e:=e*i;
writeln(b, ' faktoriálisa ?= ');
readln(d);
if b < 0 then e:=0;
End;
End;
if e=d then writeln('A válasz helyes ')
else if e<>d then writeln(‘A válasz helytelen, a válasz’, e:0:0)
else writeln('Nem');
End;
End.
Amikor beírod a műveleti jelet, megvizsgálod, hogy mi az, majd beállítod a c változód értékét true, vagy false értékre.
pl:
program szamolo;
uses crt;
var
szam1, szam2 :string;
be: char;
c: boolean;
begin
writeln('Szamologep:');
szam2:='';
szam1:='';
be:=' ';
c:=false;
repeat
be:=readkey;
case be of
'0'..'9': begin
szam1:=szam1+be;
write(be);
end;
'+': begin
c:=True;
write(be);
end;
'!': begin
c:=False;
write(be);
end;
end;
if c and (szam2<>'') then
begin
szam2:=szam1;
szam1:='';
end;
until be=#13;
if c then
begin
{... összeadás kódja...}
end
else
begin
{...faktoriális kódja...}
end;
end.
Hm, nem írtuk ezt meg neked valamikor? Déjà vum van, amikor ezt a kérdést olvasom:
http://www.gyakorikerdesek.hu/szamitastechnika__programozas_..
"notepad ++-al nyitom meg , ami valamiért a pascalban írt ékezeteket nem jól kezeli"
Ez nem a Notepad++-nak, hanem a Windowsnak a hülyesége, szót sem érdemel. De én nem az ékezetekről beszéltem. A programodban kétféle aposztróf fogja közre a stringeket, és ezek közül csak az egyiket érti a fordító. Rejtély, hogy neked hogyan fordult le egyáltalán.
"de azóta bővítettem"
Hadd ismételjem magam:
"Becsülendő, hogy egy szuszra minél nagyobb feladatot akarsz megoldani, de amíg a részfeladatokat nem tisztáztad, ne akarj belőlük hatalmas építményeket összerakni, mert ha külön-külön nem működnek, együtt pláne nem fognak. Kezdetben csinálj sokkal egyszerűbb, de tökéletesen működő programokat." (tabaki, 2014. 06-30 22:55)
"amiket ott írtatok nem minden parancsot ismertem, szinte csak alig párat"
Emlékeim szerint ez meg egyszerűen nem így van. Pont amiatt írtam neked az elképesztően ronda IFes változatot, hogy gyakorlatilag semmiféle új ismeretet ne tartalmazzon a "megoldás":
Ami a kérdésben vett problémádat illeti, fogalmam sincs, hogy mit akarsz a booleannal elérni. Eleve külön ELSE-ágba szervezed az összes műveletet (mellesleg a sokkal értelmesebb függvények vagy eljárások helyett, de ezt most hagyjuk), minek kell a második szám beolvasását a program elejére tenni? Legyen az is az IF-ágon belül: Ha kell, beolvasol egy második számot, ha nem, nem. Gondolhatnék arra, hogy ki akarod küszöbölni az idétlen az 'Add meg az első számot' formulát, amikor csak egy számon végzel műveletet -- de nem, mivel a műveleti jelet már csak ezután kéred be. Szó lehetne arról, hogy ódzkodol a fölösleges ismétlődésektől, de ez megint nem stimmel, hiszen például az értékelést -- ha jól számolom -- nyolcszor ismétled meg teljesen szükségtelenül és értelmetlenül.
De egye fene, csináljuk úgy. A műveleti jel bekérésekor a következő feltétellel lépsz ki a REPEAT..UNTIL ciklusból:
until (c='+') or (c='-') or (c='*') or (c='/') or (c='ô') or (c='^') or (c='!')
Ez persze kevésbé béna lenne így:
until c in['+','-','*','/','ô','^','!'];
...de ezen ne akadjunk fenn. Amikor már tiszta sor, hogy érvényes műveleti jeled van, miért ne vizsgálhatnádmeg még egyszer? Mondjuk: Hogyha négyzetre emelés, gyökvonás vagy faktoriális, akkor nem kell második, egyébként igen.
A te stílusodban:
if (c='ô') or (c='^') or (c='!') then h:=false else h:=true;
Az én szívemhez közelebb állóban:
if Muvelet in['ô','^','!'] then KellMasodik:=FALSE else KellMasodik:=TRUE;
Innen már engedelmeddel hanyagolom, a lényeg, hogy ott a boolean, amelyet a továbbiakban tetszés szerint használhatsz. Még csak annyit: bevitelre nem túl szerencsés speciális karaktert választani. A gyökvonás vélhetőleg nem hosszú ó akart lenni, de a konzol és a GUI közti különbség az ilyesmit elbarmolja. A szövegek kiíratásánál is bosszantó, de a bevitelt esetleg zátonyra is futtatja.
Ha már Notepad++-t használsz, emlékeim szerint abból is tudod fordítani a programodat, írd abban. Ha mégsem jól emlékszem, térj át Geany-re, az biztos, hogy tudja. Ezzel a másoláskor máris kihagysz egy vargabetűt, meg egyébként is kényelmesebb, mint a Free Pascal IDE.
Kapcsolódó kérdések:
Minden jog fenntartva © 2025, www.gyakorikerdesek.hu
GYIK | Szabályzat | Jogi nyilatkozat | Adatvédelem | Cookie beállítások | WebMinute Kft. | Facebook | Kapcsolat: info(kukac)gyakorikerdesek.hu
Ha kifogással szeretne élni valamely tartalommal kapcsolatban, kérjük jelezze e-mailes elérhetőségünkön!