Kezdőoldal » Számítástechnika » Programozás » Számológép, és lottó pascalban?

Számológép, és lottó pascalban?

Figyelt kérdés

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);


2014. aug. 8. 19:18
1 2
 1/16 anonim ***** válasza:
Hogyhogy hogy? (Gondolom) bekéred külön a műveletet. Miután megadta, a beírt jel függvényében beállítod a c értékét.
2014. aug. 8. 19:24
Hasznos számodra ez a válasz?
 2/16 A kérdező kommentje:

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.

2014. aug. 8. 19:36
 3/16 ejbenjaro ***** válasza:

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.

2014. aug. 8. 19:42
Hasznos számodra ez a válasz?
 4/16 anonim ***** válasza:
Már vagy 6 éve nem nyúltam Pascalhoz, így forráskóddal inkább nem bohóckodnék, de pszeudo-kódot szívesen írok.
2014. aug. 8. 19:46
Hasznos számodra ez a válasz?
 5/16 SimkoL ***** válasza:
Ajajajjjj.... sűrgősen nézd meg a halmaz, ciklus, feltétel, elágazás dolgokat és ez még csak a jéghegy csúcsa :)
2014. aug. 8. 20:04
Hasznos számodra ez a válasz?
 6/16 tabaki ***** válasza:
Mi a fenével szerkesztetted ezt? Nem tudom kipróbálni, még mindig az aposztrófokat javítgatom.
2014. aug. 8. 21:42
Hasznos számodra ez a válasz?
 7/16 tabaki ***** válasza:

Hm, nem írtuk ezt meg neked valamikor? Déjà vum van, amikor ezt a kérdést olvasom:

http://www.gyakorikerdesek.hu/szamitastechnika__programozas_..

2014. aug. 8. 22:02
Hasznos számodra ez a válasz?
 8/16 A kérdező kommentje:
free pascal, csak abból nem tudok kimásolni vágólapra, ezért notepad ++-al nyitom meg , ami valamiért a pascalban írt ékezeteket nem jól kezeli, ..de igen de azóta bővítettem, és amiket ott írtatok nem minden parancsot ismertem, szinte csk alig párat, és úgy nem túl sok értelme van egy programnak ha nem tudom mi micsoda benne
2014. aug. 8. 22:21
 9/16 tabaki ***** válasza:

"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":

[link]


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.

2014. aug. 8. 23:55
Hasznos számodra ez a válasz?
 10/16 tabaki ***** válasza:
+ vizsgálhatnád meg
2014. aug. 8. 23:58
Hasznos számodra ez a válasz?
1 2

Kapcsolódó kérdések:





Minden jog fenntartva © 2024, www.gyakorikerdesek.hu
GYIK | Szabályzat | Jogi nyilatkozat | Adatvédelem | Cookie beállítások | WebMinute Kft. | Facebook | Kapcsolat: info(kukac)gyakorikerdesek.hu

A weboldalon megjelenő anyagok nem minősülnek szerkesztői tartalomnak, előzetes ellenőrzésen nem esnek át, az üzemeltető véleményét nem tükrözik.
Ha kifogással szeretne élni valamely tartalommal kapcsolatban, kérjük jelezze e-mailes elérhetőségünkön!