2024(e)ko otsailaren 19(a), astelehena

5. astea | menu bat (programa nagusian)

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

Iruzkinen bat idazteko Google-ko kontu bat behar duzu. Iruzkin guztien moderazio-ardura blogeko administratzaileari dagokio.