2023(e)ko otsailaren 21(a), asteartea

5. astea | menu bat

Programa batean aukera desberdinak kudeatzeko sarritan menu bat erabiltzen da, eta horrelakoetan aukeraren hautapena karaktere baten bitartez gidatzen da.



Adibidez, jarraian erakusten den Menua1.pas programan eragiketa aritmetikoak egiten dira bi zenbakiekin eta programaren exekuzio bakoitzean cAukera aldagaiaren bitartez eragiketa hautatzen da. Aukera asko direnean azpimarratzekoa da CASE-OF baldintzazko aginduaren komengarritasuna. CASE-OF baldintzazko aginduaren ordez IF-THEN aginduak jari beharko lirateke, baina CASE-OF baldintzazko agindua oso trinkoa eta garbia delako programaren irakurgarritasuna handia izango da.


program AukeraMenuBatezHautatzen_1;
uses
crt;
var
cAukera, cItxoin : char;
rEragigai1, rEragigai2 : real;
begin
clrscr;
write('Zenbaki errealekin lan eginez, lehenengo eragigaiaren balioa eman: ');
readln(rEragigai1);
write('Zenbaki errealekin lan eginez, bigarren eragigaiaren balioa eman: ');
readln(rEragigai2);

writeln('============Menua============');
writeln(' + Batura lortzeko');
writeln(' - Kendura lortzeko');
writeln(' * Biderkadura lortzeko');
writeln(' / Zatiketa burutzeko');
writeln('=============================');
write(' Zure aukera: ');
readln(cAukera);

case cAukera of
'+' : writeln(rEragigai1:0:2, ' + ', rEragigai2:0:2, ' = ', rEragigai1+rEragigai2:0:2);
'-' : writeln(rEragigai1:0:2, ' - ', rEragigai2:0:2, ' = ', rEragigai1-rEragigai2:0:2);
'*','x','X' : writeln(rEragigai1:0:2, ' * ', rEragigai2:0:2, ' = ', rEragigai1*rEragigai2:0:2);
'/' : writeln(rEragigai1:0:2, ' / ', rEragigai2:0:2, ' = ', rEragigai1/rEragigai2:0:2);
else
writeln('Eragiketa gaizki aukeratuta!');
end;

cItxoin := readkey;
writeln(cItxoin);
end.





Menua1.pas programaren azalpenak:


  • crt unitate bat da eta bere barnean dago readkey funtzioaren kodifikazioa eta clrscr prozeduraren kodifikazioa

  • uses crt bitartez adierazten dugu linker programak nola lan egin behar duen

  • clrscr prozedurak pantaila garbitzen du

  • readkey funtzio bat da eta programan erabili ahal izateko crt unitatea beharrezkoa da, tekla bat sakatzean berari dagokion karakterea

  • cItxoin:=readkey programa gelditzen da tekla bat sakatu arte, tekla bat sakatzean berari dagokion karakterea cItxoin aldagaian gordeko da

  • readkey funtzioari esker cItxoin aldagaian karakteren bat gordetzen da, baina cItxoin aldagaiaren balioa ez da erabiltzen eta konpiladoreak horren abisua ematen du, "warning" hori kentzeko aski da writeln(cItxoin)bat egitea


Menua1.pas programatik abiatuta idatzi Menua2.pas programa, zeinetan programaren exekuzio bakoitzeko eragiketak behin baino gehiagotan egin daitezkeen eta programa bukarazteko aukera berri bat dagoen:


program AukeraMenuBatezHautatzen_2;
uses
crt;
var
cAukera, cItxoin : char;
rEragigai1, rEragigai2 : real;
begin
repeat
clrscr;
writeln('============Menua============');
writeln(' + Batura lortzeko');
writeln(' - Kendura lortzeko');
writeln(' * Biderkadura lortzeko');
writeln(' / Zatiketa burutzeko');
writeln(' A Programa amaitu');
writeln('=============================');
repeat
write(' Zure aukera: ');
cAukera := readkey;
cAukera := upcase(cAukera);
writeln(cAukera); (* readkey funtzioak ez du irakurritako tekla erakusten *)
until (cAukera ='+') or (cAukera ='-') or (cAukera ='*') or (cAukera ='X') or (cAukera ='/') or (cAukera ='A');
writeln;
case cAukera of
'+' : begin
write('Zenbaki errealekin lan eginez, lehenengo batugaiaren balioa eman: ');
readln(rEragigai1);
write('Zenbaki errealekin lan eginez, bigarren batugigaiaren balioa eman: ');
readln(rEragigai2);
writeln(rEragigai1:0:2, ' + ', rEragigai2:0:2, ' = ', rEragigai1+rEragigai2:0:2);
end;
'-' : begin
write('Zenbaki errealekin lan eginez, kenkizunaaren balioa eman: ');
readln(rEragigai1);
write('Zenbaki errealekin lan eginez, kentzailearen balioa eman: ');
readln(rEragigai2);
writeln(rEragigai1:0:2, ' - ', rEragigai2:0:2, ' = ', rEragigai1-rEragigai2:0:2);
end;
'*','X' : begin
write('Zenbaki errealekin lan eginez, lehenengo biderkagaiaren balioa eman: ');
readln(rEragigai1);
write('Zenbaki errealekin lan eginez, bigarren biderkagaiaren balioa eman: ');
readln(rEragigai2);
writeln(rEragigai1:0:2, ' * ', rEragigai2:0:2, ' = ', rEragigai1*rEragigai2:0:2);
end;
'/' : begin
write('Zenbaki errealekin lan eginez, zatikizunaren balioa eman: ');
readln(rEragigai1);
repeat
write('Zenbaki errealekin lan eginez, zatitzailearen balioa eman: ');
readln(rEragigai2);
until rEragigai2 <> 0.0;
writeln(rEragigai1:0:2, ' / ', rEragigai2:0:2, ' = ', rEragigai1/rEragigai2:0:2);
end;
'A' : begin
writeln('Programatik irtetera goaz!');
end
end;

cItxoin := readkey; (* emaitzak ikusi ahal izateko itxaron *)
writeln(cItxoin); (* konpilazio abisua kentzeko *)
until cAukera='A';
end.



iruzkinik ez:

Argitaratu iruzkina