case-of etiketadun mezuak erakusten. Erakutsi mezu guztiak
case-of etiketadun mezuak erakusten. Erakutsi mezu guztiak

2024(e)ko otsailaren 28(a), asteazkena

14. Ariketa: azpiprogramak (II)

ZER DAKIDAN:
Menu bat programa batean nola egiten den badakit.



ZER IKASIKO DUDAN:
Menu bat funtzio batean kodetu eta programa nagusitik deiak egiten ikasiko dut.


Ariketa hauek gogora ekarri eta ariketa guztiak programa bakar batean bildu:

Programa berria modulutan antolatzeko funtzioak eta prozedurak erabili. Programa berriaren exekuzioa gidatzeko menu honetaz baliatu:
   ====================================Menua====================================
     A  Mendi baten altuera emanik zeruertzaren distantzia lortu
     B  Dado bat 5 aldiz jaurti ondoren balio minimoa eta maximoa pantailaratu
     C  Koordenatuak formatuz aldatu: Hirurogeitatarretik dezimalera
     D  Koordenatuak formatuz aldatu: Dezimaletik hirurogeitatarrera
      
     I  Programatik irten
   =============================================================================

Baina, menu horren aukeraren hautapena funtzio batean egin dadila. Hau da, programa nagusian fncMenua funzioari deia egingo zaio, eta fncMenua funtzio barruan aukeren deskribapenak erakutsi ondoren, erabiltzailaren hautapena teklatuz jasoko da eta balio hori funtzioak programa nagusiari itzuliko dio.

Programa nagusiak itxura hau izango du:
      begin
        repeat
           cAukera := fncMenua ;

           case cAukera of
              'A': begin
                      (* A  Mendi baten altuera eman eta zeruertzaren distantzia lortu *)
                   end ;
              'B': begin
                      (* B  Dado bat 5 aldiz jaurti ondoren balio minimoa eta maximoa pantailaratu *)
                   end ;
              'C': begin
                      (* C  Koordenatuak formatuz aldatu: Hirurogeitatarretik dezimalera *)
                   end ;
              'D': begin
                      (* D  Koordenatuak formatuz aldatu: Dezimaletik hirurogeitatarrera *)
                   end ;
           end ;

           if cAukera <> 'I' then
           begin
              cItxaron := readkey ;
              writeln(cItxaron) ;
           end ;

           clrscr ;
        until cAukera = 'I' ;
      end.

Hona hemen programaren balizko exekuzio bat:








 

12. Ariketa: hainbat aukeren menu bat

ZER DAKIDAN:
CASE-OF baldintzazko egitura ikasi nuen aukera anitzak antolatzeko.



ZER IKASIKO DUDAN:
Menu bat programa batean nola egiten den ikasiko dut, erabiltzaileak gogoko duen hautapena CHAR datu-motako aldagai batean irakurriko dut. Bide batez clrscr prozedura ikasiko dut ere.


6. Ariketa: aukera anitzen arteko hautapena artikulua gogora ekarriz, programaren fluxua bideratzeko CASE-OF agindua erabilten da aukerak hiru edo gehiago direnean.

Jarraian erakusten den menua programa nagusian kokaturik dago, baina jakin ezazu hori horrela ez dela egingo behin azpiprogramen kontzeptua gureganatuko dugunetik aurrera.

Algoritmoa:
  1. Programa osoa prozesu errepikakor bat da, eta errepikapenak mozteko menuaren aukera egokia hautatu behar da (adibidean A balioa)
  2. Begiztaren iterazio bakoitzeko, pantaila garbitu clrscr prozeduraren bitartez eta bost aukeren deskribapenak erakutsi
  3. Begiztaren iterazio bakoitzeko, CHAR datu-motako cAukera aldagaiari balioa teklatuz eman era kontrolatuan (teklatuaren karaktere bat irakurtzeko readkey funtzioa oso egokia da)
  4. Irakurri den karaktere horren arabera CASE-OF egiturak kudeatuko du programaren fluxoa eta aukera horri dagozkion kalkuluak burutuko dira
  5. Begiztaren iterazio bakoitzeko, programaren exekuzioa gelditu readkey funtzioaren bitartez tekla bat sakatu arte, horrela kalkuluen emaitzak ikusi ahal izango dira
clrscr prozedura estandarra eta readkey funtzio estandarra erabili ahal izateko, beharrezkoa da crt unitatea dekalaratzea uses blokean.



ESKATZEN DEN PROGRAMA

Programa honek goiko algoritmoa aplikatzen du:

{ Aukera modu kontrolatuan irakurtzen delako case-OF aginduak ez du else kasurik behar }
program Ariketa_12 ;
uses
   crt ;   (* clrscr prozedura eta readkey funtzioa erabiltzeko *)
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. 







 

2024(e)ko otsailaren 8(a), osteguna

6. Ariketa: aukera anitzen arteko hautapena

ZER DAKIDAN:
IF-THEN baldintzazko egitura eta IF-THEN-ELSE baldintzazko egitura menperatzen ditut.



ZER IKASIKO DUDAN:
Aldagai aukeratzailea zenbaki oso bat Izanik, CASE-OF baldintzazko egitura ikasiko dut.


5. Ariketa: zenbaki errealetik kopuru osora (II) artikulua gogora ekarriz, programaren fluxua desbideratu daiteke IF-THEN agiduari esker eta IF-THEN-ELSE aginduari esker. Baina fluxuaren aukerak hiru edo gehiago direnean CASE-OF agindua erabil daiteke.




ESKATZEN DEN PROGRAMA

Demagun lurrazaleko lau leku ditugula, bakoitza hemisferiko banakoa. Lau lekuak hauek dira: 1 Adelaide, 2 Brasilia, 3 Calgary eta 4 Donetsk. Lau leku horiek zenbaki oso baten bitartez identifikatuko ditugu. Zenbaki identifikatzailea teklatuz irakurri eta balioaren arabera, lurrazaleko lekuari dagokion informazioa pantailaratu:



  1 identifikatzailea:
Adelaide
Latitudea: -34.927499
Longitudea: 138.600000
Hego-Ekialdeko hemisferioa

  2 identifikatzailea:
Brasilia
Latitudea: -15.793889
Longitudea: -47.882778
Hego-Mendebaldeko hemisferioa

  3 identifikatzailea:
Calgary
Latitudea: 51.047500
Longitudea: -114.062500
Ipar-Mendebaldeko hemisferioa

  4 identifikatzailea:
Donetsk
Latitudea: 48.008889
Longitudea: 37.804167
Ipar-Ekialdeko hemisferioa


Exekuzioan 1 zenbakia aukeratzean lortzen dena

Exekuzioan 4 zenbakia aukeratzean lortzen dena

Esan bezala, CASE-OF batean aukeratzailea balio diskretua izango da beti, ikusi zer gertatzen den 1 eta 2 arteko balio zatigarria aukeratzen bada:




LASTER ESKATUKO DEN PROGRAMA

CHAR datu mota ikasiko dugunean, sarrerako datua zenbaki bat izan ordez karaktere bat izango da: A Adelaide, B Brasilia, C Calgary eta D Donetsk. Beraz, ataria identifikatzeko sarrerako datua A, B, C edo D letrak izango dira. Bide batez, laster eskatuko den programa horretan, clrscr prozeduraren bitartez, pantaila garbitzen ikasiko dugu ere.