2019(e)ko maiatzaren 8(a), asteazkena

33. astea | mintegian egindakoa

33. astea (2019/05/18) mintegian egin dena
  • Zerrenda pasatu dugu, deitutakoen artean gaur etorri direnak hauek izan dira:
    1. DE DIEGO CASTAÑO, DANEL
    2. DIAZ ALVAREZ, MIKEL
    3. DIAZ ELIPE, IKER
    4. ETXABE OTAEGI, ARITZ
    5. GAMBOA GARCIA-VILLARACO, NAGORE
    6. GOMEZ GONZALEZ, ASIER
    7. LAHIDALGA ETXEBERRIA, JORGE
    8. LOINAZ LERA, IMANOL
    9. OLASAGASTI SANCHEZ, IZASKUN
    10. ORTIZ DE ZARATE ABRISKETA, ANDER
    11. OYAGUE CASTAÑON, JOEL
    12. ZORROZUA DIAZ, ANDONI
  • Irakaslearen jarduerari buruzko inkesta bete duzue.

2019(e)ko maiatzaren 4(a), larunbata

2. kontrola prestatzen

Taldean lan eginez proiektu hau garatu duzue, orain soluzio hau azter ezazue


Hau da proiektuaren enuntziatua:




Proiektuaren balizko soluzio bat

Soluzio hau bi programetan ematen da:
  • Radarrak2019.pas (eskatzen den ariketaren programa da).
  • Radarrak2019_DatuakLortzen.pas (aurreko programa horrek erabil ditzan datuak lor ditzakeen programa).





Radarrak2019_DatuakLortzen.pas programa exekutatu

Radarrak2019_DatuakLortzen.pas programa exekutatu eta C:\Radarrak karpetan datuen bi fitxategi lortuko dituzu, adibidez A_190430.dat fitxategia eta B_190430.dat fitxategia. Fitxategi horien datuak honelakoak dira:
Radarrak2019_DatuakLortzen.pas programaren exekuzioa bukatu aurretik, lortu diren A_190430.dat eta B_190430.dat fitxategien edukiak pantailan aurkezten dira.



Radarrak2019_DatuakLortzen.pas programa

{------------------------------------------------------------------------------
   2019ko talde-ariketa.
   
   Demagun datuak eskaintzen dituen programa hau dela. Programa honi esker
   lortzen diren fitxategiak 'Radarrak.pas' programak prozesatu behar ditu.

  'A_uuhhee.DAT' eta 'B_uuhhee.DAT' fitxategiak 'C:\Radarrak' karpetan sortzen
   dira. Fitxategi biren elementu kopurua berbera da baina kopuru finkoa ez da.
   Fitxategi biak 'rdUnea' eremuaren arabera sailkatzen direnez ibilgailuen
   posizioak (matrikulen posizioak) desberdinak dira fitxategi batetik bestera.
-------------------------------------------------------------------------------}
PROGRAM RadarrenDatuak_2019 ;
TYPE
    tsKateIzena     = String[200] ;
    tsKateMatrikula = String[10] ;

    trdUnea = RECORD
                 iOrduak, iMinutuak, iSegundoak : Integer ;
              END ;

    trdIbilgailua = RECORD
                       sMatrikula     : tsKateMatrikula ;
                       cIbilgailuMota : Char ;
                       rdUnea         : trdUnea ;
                       rAbiadura      : Real ;
                    END ;

    tfrdRadarrenFitxategia = FILE OF trdIbilgailua ;
    
    tardArrayLaguntzailea = ARRAY[1..50] OF trdIbilgailua ;

CONST
   sBIDEA = 'C:\Radarrak\' ;


PROCEDURE FitxategiakSortu(sFitxIzenA, sFitxIzenB : tsKateIzena) ;
VAR
   f1, f2 : tfrdRadarrenFitxategia ;
   rdFitxa : trdIbilgailua ;
   iZenbat, iAusazkoa, iKont, k : Integer ;
   rAusazkoa : Real ;
   sMatrikula, sMatrikulaZifra : tsKateMatrikula ;
BEGIN
   Assign(f1, sFitxIzenA) ;
   Rewrite(f1) ;
   Assign(f2, sFitxIzenB) ;
   Rewrite(f2) ;

   Randomize ;
   iZenbat := 12 + Random(12) ;
   FOR iKont:=1 TO iZenbat DO
   BEGIN
      sMatrikula := '' ;
      FOR k:=1 TO 4 DO
      BEGIN
         iAusazkoa := Random(10) ;
         Str(iAusazkoa, sMatrikulaZifra) ;
         sMatrikula := sMatrikula + sMatrikulaZifra ;        
      END ;

      iAusazkoa := Random(12) ;
      CASE iAusazkoa OF
         0: rdFitxa.sMatrikula := sMatrikula + ' XYZ' ;
         1: rdFitxa.sMatrikula := sMatrikula + ' BPK' ;
         2: rdFitxa.sMatrikula := sMatrikula + ' ZTE' ;
         3: rdFitxa.sMatrikula := sMatrikula + ' QQZ' ;
         4: rdFitxa.sMatrikula := sMatrikula + ' KMY' ;
         5: rdFitxa.sMatrikula := sMatrikula + ' TLE' ;
         6: rdFitxa.sMatrikula := sMatrikula + ' YRS' ;
         7: rdFitxa.sMatrikula := sMatrikula + ' BCZ' ;
         8: rdFitxa.sMatrikula := sMatrikula + ' EFZ' ;
         9: rdFitxa.sMatrikula := sMatrikula + ' ZTE' ;
        10: rdFitxa.sMatrikula := sMatrikula + ' FAK' ;
        11: rdFitxa.sMatrikula := sMatrikula + ' HUT' ;
      END ;

      iAusazkoa := Random(4) ;
      CASE iAusazkoa OF
         0: rdFitxa.cIbilgailuMota := 'A' ;
         1: rdFitxa.cIbilgailuMota := 'B' ;
         2: rdFitxa.cIbilgailuMota := 'C' ;
         3: rdFitxa.cIbilgailuMota := 'D' ;
      END ;

      rdFitxa.rdUnea.iOrduak := 14 ;                (* 14:45:00 eta 14:55:59 artean *)
      rdFitxa.rdUnea.iMinutuak := 45 + Random(11) ;
      rdFitxa.rdUnea.iSegundoak := Random(60) ;

      rAusazkoa := Random ;
      rdFitxa.rAbiadura := Random(200) * rAusazkoa ;

      Write(f1, rdFitxa) ;

      rdFitxa.rdUnea.iOrduak := 15 ;                (* 15:05:00 eta 15:15:59 artean *)
      rdFitxa.rdUnea.iMinutuak := 5 + Random(11) ;
      rdFitxa.rdUnea.iSegundoak := Random(60) ;

      rAusazkoa := Random ;
      rdFitxa.rAbiadura := Random(200) * rAusazkoa ;

      Write(f2, rdFitxa) ;
   END ;
   
   Close(f1) ;
   Close(f2) ;
END ;


PROCEDURE FitxategiaErakutsi(sFitxIzen : tsKateIzena) ;
VAR
   f : tfrdRadarrenFitxategia ;
   rdFitxa : trdIbilgailua ;
   iKont : Integer ;
BEGIN
   Assign(f, sFitxIzen) ;
   Reset(f) ;
   
   iKont := 0 ;
   WriteLn('Matrikula':35, 'Mota':7, 'Unea':13, 'Abiadura':12) ;
   WHILE NOT Eof(f) DO
   BEGIN
      Read(f, rdFitxa) ;
      iKont := iKont + 1 ;
      Write(iKont:7, '. datua --->') ;
      Write(rdFitxa.sMatrikula:16, rdFitxa.cIbilgailuMota:7) ;
      Write(rdFitxa.rdUnea.iOrduak:7,
            ':', rdFitxa.rdUnea.iMinutuak:2,
            ':', rdFitxa.rdUnea.iSegundoak:2,
            rdFitxa.rAbiadura:12:1) ;
      WriteLn ;
   END ;
   
   Close(f) ;
END ;


PROCEDURE FitxategiArray(sFitxIzen                : tsKateIzena; 
                         VAR ardArrayLaguntzailea : tardArrayLaguntzailea;
                         VAR iLuzera              : Integer) ;
VAR
   f : tfrdRadarrenFitxategia ;
   rdFitxa : trdIbilgailua ;
BEGIN
   Assign(f, sFitxIzen) ;
   Reset(f) ;
   
   iLuzera := 0 ;   
   WHILE NOT Eof(f) DO
   BEGIN
      Read(f, rdFitxa) ;
      
      iLuzera := iLuzera + 1 ;
      ardArrayLaguntzailea[iLuzera] := rdFitxa ;
   END ;
   
   Close(f) ;
END ;


PROCEDURE ArrayFitxategi(                 sFitxIzen : tsKateIzena;
                         CONST ardArrayLaguntzailea : tardArrayLaguntzailea;
                                            iLuzera : Integer) ;
VAR
   f        : tfrdRadarrenFitxategia ;
   rdFitxa : trdIbilgailua ;
   iIndizea : Integer ; 
BEGIN
   Assign(f, sFitxIzen) ;
   Rewrite(f) ;

   FOR iIndizea:=1 TO iLuzera DO
   BEGIN
      rdFitxa := ardArrayLaguntzailea[iIndizea] ;
      Write(f, rdFitxa) ;
   END ;

   Close(f) ;
END ;


FUNCTION fnliSegundoak(CONST rdUnea: trdUnea) : LongInt ;
BEGIN
   WITH rdUnea DO
        fnliSegundoak := iOrduak * 3600 + iMinutuak * 60 + iSegundoak ;
END ;


PROCEDURE ArrayaOrdenatu(VAR ardBekt : tardArrayLaguntzailea; iLuzera : Integer) ;
VAR
   iPos, j, k : Integer ;
   liMin : LongInt ;
   rdIbilgailua : trdIbilgailua ;
BEGIN
   FOR k:=1 TO iLuzera-1 DO
   BEGIN
      liMin := fnliSegundoak(ardBekt[k].rdUnea) ;
      rdIbilgailua := ardBekt[k] ;
      iPos := k ;
      FOR j:=k+1 TO iLuzera DO              (* ordenatu gabekoen artean *)
      BEGIN
         IF liMin > fnliSegundoak(ardBekt[j].rdUnea) THEN           (* minimoa aurkitu *)
         BEGIN
            liMin := fnliSegundoak(ardBekt[j].rdUnea) ;
            rdIbilgailua := ardBekt[j] ;
            iPos := j ;
         END ;
      END ;
      ardBekt[iPos] := ardBekt[k] ;         (* trukatu, tokiz aldatuz  *)
      ardBekt[k] := rdIbilgailua ;
   END;
END ;


PROCEDURE FitxategiaUnearekikoOrdenatu(sFitxIzen : tsKateIzena) ;
VAR
   ardArrayLaguntzailea : tardArrayLaguntzailea ;
   iLuzera : Integer ;
BEGIN
   FitxategiArray(sFitxIzen, ardArrayLaguntzailea, iLuzera) ;
   ArrayaOrdenatu(ardArrayLaguntzailea, iLuzera) ;
   ArrayFitxategi(sFitxIzen, ardArrayLaguntzailea, iLuzera) ;
END ;


{ ---------------- Programa Nagusia ----------------}

VAR
   sFitxIzenA, sFitxIzenB : tsKateIzena ;

BEGIN 
   Writeln ;
   WriteLn('''', sBIDEA, ''' karpetan lan eginez...') ;
   Writeln ; 
   WriteLn('Sarrerako radarrari dagokion fitxategiaren izena eman. Adibidez: A_190430') ;
   WriteLn('Sistemak DAT luzapena gehituko dio eta "C:\Radarrak" karpetan kokatuko du') ;
   Write('Sarrerako radarraren izena eman: ') ;
   ReadLn(sFitxIzenA) ;
   sFitxIzenA := sBIDEA + sFitxIzenA + '.DAT' ;

   WriteLn('Irteerako radarrari dagokion fitxategiaren izena eman. Adibidez: B_190430') ;
   WriteLn('Sistemak DAT luzapena gehituko dio eta "C:\Radarrak" karpetan kokatuko du') ;
   Write('Irteerako radarraren izena eman: ') ;
   ReadLn(sFitxIzenB) ;
   sFitxIzenB := sBIDEA + sFitxIzenB + '.DAT' ;

   FitxategiakSortu(sFitxIzenA, sFitxIzenB) ;
   
   FitxategiaUnearekikoOrdenatu(sFitxIzenA) ;   (* sarrerako unerik txikiena lehenik *)
   FitxategiaUnearekikoOrdenatu(sFitxIzenB) ;   (* irteerako unerik txikiena lehenik *)

   WriteLn ;
   WriteLn ;

   WriteLn('Sarrerako radarraren informazioa gordetzen duen fitxategiaren edukia ikusi: ') ;
   FitxategiaErakutsi(sFitxIzenA) ;

   WriteLn ;
   WriteLn ;

   WriteLn('Irteerako radarraren informazioa gordetzen duen fitxategiaren edukia ikusi: ') ;
   FitxategiaErakutsi(sFitxIzenB) ;

   WriteLn ;
   WriteLn ;
   WriteLn('====================================================') ;
   WriteLn('             RETURN sakatu amaitzeko') ;
   Write('====================================================') ;
   ReadLn ;
END. { PROGRAMAREN BUKAERA }





Radarrak2019.pas programa exekutatu

Radarrak2019.pas programa exekutatu eta C:\Radarrak karpetan dauden A_190430.dat eta B_190430.dat fitxategien prozesaketari ekingo zaio. Horretarako, radarren arteko distantzia emango da eta horrekin batera abiadura maximoa ere emango da.
Gero, hiru aukerako menu batek gidatuko du programaren exekuzioa:



Radarrak2019.pas programa

{------------------------------------------------------------------------------
   2019ko talde-ariketa.
   
  'Radarrak_DatuakLortzen.pas' programak ematen dituen fitxategiak prozesatu
   nahi dira 'Radarrak.pas' programaren bitartez (bere menuak 3+1 aukera ditu).
-------------------------------------------------------------------------------}
PROGRAM Radarrak_2019 ;
USES
    Crt, SysUtils ;

TYPE
    tsKateIzena     = String[200] ;
    tsKateMatrikula = String[10] ;

    trdUnea = RECORD
                 iOrduak, iMinutuak, iSegundoak : Integer ;
              END ;

    trdIbilgailua = RECORD
                       sMatrikula     : tsKateMatrikula ;
                       cIbilgailuMota : Char ;
                       rdUnea         : trdUnea ;
                       rAbiadura      : Real ;
                    END ;

    tfrdRadarrenFitxategia = FILE OF trdIbilgailua ;

    trdArauHauslea = RECORD
                        sMatrikula : tsKateMatrikula ;
                        rdUnea     : trdUnea ;
                        rAbiadura  : Real ;
                     END ;

    tfrdArauHausleenFitxategia = FILE OF trdArauHauslea ;


    taiEstatistikaDatuak = ARRAY['A'..'D'] OF Integer ;


CONST
   sBIDEA = 'C:\Radarrak\' ;
    
    
FUNCTION fncAukeraIrakurri : Char ;
VAR
   cAukera : Char ;
BEGIN
   ClrScr ;
   Writeln('========== Aukerak ==========') ;
   Writeln('  1  Estatistikak') ;
   Writeln('  2  Arau-hausteak kalkulatu') ;
   Writeln('  3  Arau-hausteak pantailaratu') ;
   Writeln  ;
   Writeln('  0  Programatik irten') ;
   Writeln ;
   Write('  Aukerari dagokion zenbakia sakatu: ') ;
   REPEAT
      cAukera := ReadKey ;
   UNTIL ('0' <= cAukera) AND(cAukera <= '3') ;
   Writeln(cAukera) ;
   Writeln ;

   fncAukeraIrakurri := cAukera ;
END ;


PROCEDURE EstatistikenArrayaSortu(sRadarFitxIzen: tsKateIzena ;
                                  VAR aiEstatistikak: taiEstatistikaDatuak) ;
VAR
   cIndizea     : Char ;
   frdRadar     : tfrdRadarrenFitxategia ;
   rdIbilgailua : trdIbilgailua ;
BEGIN
   FOR cIndizea := 'A' TO 'D' DO
       aiEstatistikak[cIndizea] := 0 ;

   Assign(frdRadar, sRadarFitxIzen) ;
   Reset(frdRadar) ;

   WHILE NOT EOF(frdRadar) DO
       BEGIN
       Read(frdRadar, rdIbilgailua) ;

       cIndizea := rdIbilgailua.cIbilgailuMota ;

       aiEstatistikak[cIndizea] := aiEstatistikak[cIndizea] + 1 ;
       END ;
       
   Close(frdRadar) ;
END ;


PROCEDURE EstatistikakErakutsi(CONST aiEstatistikak : taiEstatistikaDatuak) ;
VAR
   cIndizea : Char ;
BEGIN
   Writeln ;
   Writeln('Ibilgailuen kopurua mota bakoitzeko') ;
   Writeln ;

   FOR cIndizea := 'A' TO 'D' DO
       Write('Mota ':9, cIndizea) ;
   Writeln ;

   FOR cIndizea := 'A' TO 'D' DO
       Write(aiEstatistikak[cIndizea]:10) ;
   Writeln ;
END ;


FUNCTION fnrSegundoakLortu(CONST rdUnea: trdUnea) : Real ;
BEGIN
   WITH rdUnea DO
        fnrSegundoakLortu := iOrduak * 3600.0 + iMinutuak * 60.0 + iSegundoak ;
END ;


PROCEDURE IrteerakoUneaBilatu(sMatrikulaHauBilatu : tsKateMatrikula ;
                              CONST rdSarrerakoUnea : trdUnea ;
                              sIrteeraFitxIzen : tsKateIzena ;
                              VAR rdIrteerakoUnea : trdUnea ;
                              VAR boTartetikIrtenDa : Boolean) ;
VAR
   frgIrteera             : tfrdRadarrenFitxategia ;
   rdIbilgailua           : trdIbilgailua ;
   sSarreraUnekoSegundoak : Real ;
BEGIN
   boTartetikIrtenDa := FALSE ;

   Assign(frgIrteera, sIrteeraFitxIzen) ;
   Reset(frgIrteera) ;

   sSarreraUnekoSegundoak := fnrSegundoakLortu(rdSarrerakoUnea) ;
   WHILE NOT boTartetikIrtenDa AND NOT EOF(frgIrteera) DO
       BEGIN
       Read(frgIrteera, rdIbilgailua) ;

       WITH rdIbilgailua DO
            IF(sMatrikula = sMatrikulaHauBilatu) AND
              (sSarreraUnekoSegundoak < fnrSegundoakLortu(rdUnea)) THEN
            BEGIN
               boTartetikIrtenDa    := TRUE ;
               rdIrteerakoUnea := rdUnea
            END ;
       END ;

   Close(frgIrteera) ;
END ;


FUNCTION fnrBatazbestekoAbiaduraKalkulatu(CONST rdSarrerakoUnea, rdIrteerakoUnea : trdUnea ;
                                          rDistantzia: Real) : Real ;
VAR
   rSarrerakoSegundoak, rIrteerakoSegundoak : Real ;
BEGIN
   rSarrerakoSegundoak := fnrSegundoakLortu(rdSarrerakoUnea) ;
   rIrteerakoSegundoak := fnrSegundoakLortu(rdIrteerakoUnea) ;

  { batazbesteko abiadura Km/H }
  fnrBatazbestekoAbiaduraKalkulatu := rDistantzia /(rIrteerakoSegundoak - rSarrerakoSegundoak) * 3600.0 ;
END ;


PROCEDURE HausteakFitxategiaSortu(sSarreraFitxIzen, sIrteeraFitxIzen, sArauHausleFitxIzen: tsKateIzena ;
                                  rTartearenDistantzia, rAbiaduraMuga: Real) ;
VAR
   fR    : tfrdRadarrenFitxategia ;
   rdSarrerakoIbilgailua  : trdIbilgailua ;

   fH            : tfrdArauHausleenFitxategia ;
   rdIbilgailuUrratzailea : trdArauHauslea ;

   rBatazbestekoAbiadura  : Real ;
   rdIrteerakoUnea        : trdUnea ;
   boTartetikIrtenDa      : Boolean ;
BEGIN
   Assign(fR, sSarreraFitxIzen) ;
   Reset(fR) ;

   Assign(fH, sArauHausleFitxIzen) ;
   Rewrite(fH) ;

   WHILE NOT EOF(fR) DO
   BEGIN
       Read(fR, rdSarrerakoIbilgailua) ;

       IrteerakoUneaBilatu(rdSarrerakoIbilgailua.sMatrikula,
                           rdSarrerakoIbilgailua.rdUnea,
                           sIrteeraFitxIzen,
                           rdIrteerakoUnea, boTartetikIrtenDa) ;

       IF boTartetikIrtenDa THEN   { Irteerako daturik aurkitu bada }
       BEGIN
          rBatazbestekoAbiadura := fnrBatazbestekoAbiaduraKalkulatu
                                      (rdSarrerakoIbilgailua.rdUnea,
                                       rdIrteerakoUnea,
                                       rTartearenDistantzia) ;

          IF rBatazbestekoAbiadura > rAbiaduraMuga THEN
          BEGIN
             rdIbilgailuUrratzailea.sMatrikula := rdSarrerakoIbilgailua.sMatrikula ;
             rdIbilgailuUrratzailea.rdUnea := rdSarrerakoIbilgailua.rdUnea ;
             rdIbilgailuUrratzailea.rAbiadura := rBatazbestekoAbiadura ;

             Write(fH, rdIbilgailuUrratzailea) ;
          END ;
       END ;
   END ;
   Close(fH) ;

   Close(fR) ;
END ;


PROCEDURE HausteakFitxategiaErakutsi(sArauHausleFitxIzen: tsKateIzena) ;
VAR
   fAH                      : tfrdArauHausleenFitxategia ;
   rdIbilgailuUrratzailea   : trdArauHauslea ;
BEGIN
   Assign(fAH, sArauHausleFitxIzen) ;
   Reset(fAH) ;

   Writeln('--------------- Arau-hausteak(hasiera) ---------------------------') ;
   Writeln('Matrikula': 12, 'Sarrera':14, 'Batazbesteko abiadura KM/H':36) ;

   WHILE NOT EOF(fAH) DO
   BEGIN
       Read(fAH, rdIbilgailuUrratzailea) ;

       WITH rdIbilgailuUrratzailea, rdUnea DO
           WriteLn(sMatrikula: 12,
                   iOrduak:8, ':', iMinutuak:2, ':', iSegundoak:2,
                   rAbiadura:24:2) ;
   END ;
   Writeln('--------------- Arau-hausteak(bukaera) ---------------------------') ;

   Close(fAH) ;
END ;


 {----------------------- Programa Nagusia -----------------------}
 
VAR
    cAukera, cItxoin                    : Char ;
    sFitxategienData                    : tsKateMatrikula ;
    sSarreraFitxIzen, sIrteeraFitxIzen  : tsKateIzena ;
    sArauHausleFitxIzen                 : tsKateIzena ;
    rTartearenDistantzia, rAbiaduraMuga : Real ;
    aiEstatistikak                      : taiEstatistikaDatuak ;

BEGIN
   Writeln ;
   WriteLn('''', sBIDEA, ''' karpetan lan eginez...') ;
   Writeln ;
   WriteLn('Egunari dagokion data eman UUHHEE formatuan. Adibidez: 190430.') ;
   WriteLn('Sarrerako radarraren fitxategiaren izena A_190430 izango da eta') ;
   WriteLn('irteerako radarraren fitxategiaren izena B_190430 izango da. Sistemak') ;
   WriteLn('DAT luzapena gehitu ondoren "C:\Radarrak" karpetan kokatuko ditu.') ;
   Write('UUHHEE data eman: ') ;   
   ReadLn(sFitxategienData) ;
   sSarreraFitxIzen := sBIDEA + 'A_' + sFitxategienData + '.DAT' ;
   sIrteeraFitxIzen := sBIDEA + 'B_' + sFitxategienData + '.DAT' ;
   
   IF FileExists(sSarreraFitxIzen) AND FileExists(sIrteeraFitxIzen) THEN
   BEGIN
      Writeln ;
      Write('Eman kontrolatu beharreko tartearen distantzia (KM), adibidez 40 KM: ') ;
      ReadLn(rTartearenDistantzia) ;
      Write('Eman batazbesteko abidura maximoa tartean (KM/H), adibidez 120 KM/H: ') ;
      ReadLn(rAbiaduraMuga) ;

      REPEAT
         cAukera := fncAukeraIrakurri ;
         CASE cAukera OF
            '1' : BEGIN
                     EstatistikenArrayaSortu(sSarreraFitxIzen, aiEstatistikak) ;

                     EstatistikakErakutsi(aiEstatistikak) ;
                  END ;
            '2' : BEGIN
                     sArauHausleFitxIzen := sBIDEA + 'I_' + sFitxategienData + '.DAT' ;
                     Write('Arau urratzaileei dagokien fitxategiaren izena: ') ;
                     Writeln(sArauHausleFitxIzen) ;

                     HausteakFitxategiaSortu(sSarreraFitxIzen,
                                             sIrteeraFitxIzen,
                                             sArauHausleFitxIzen,
                                             rTartearenDistantzia, rAbiaduraMuga)
                  END ;
            '3' : BEGIN
                     sArauHausleFitxIzen := sBIDEA + 'I_' + sFitxategienData + '.DAT' ;
                     Write('Arau urratzaileei dagokien fitxategiaren izena: ') ;
                     Writeln(sArauHausleFitxIzen) ;            
  
                     WriteLn ;
                     Write('Tartearen distantzia ', rTartearenDistantzia:0:1, ' Km');
                     WriteLn('Abiaduraren muga tartean ':40, rAbiaduraMuga:0:1, ' Km/h') ;
                     IF FileExists(sArauHausleFitxIzen) THEN
                        HausteakFitxategiaErakutsi(sArauHausleFitxIzen)
                     ELSE
                        Writeln('ERROREA: ''', sArauHausleFitxIzen, ''' fitxategia ez da existitzen!') ;
                  END ;
         END ; { CASE }

         IF cAukera <> '0' THEN
         BEGIN
            Writeln ;
            cItxoin := ReadKey ;
            WriteLn(cItxoin) ;
         END ;
     UNTIL cAukera = '0' ;
     END   { IF existentzia }
     ELSE
     BEGIN
        IF NOT FileExists(sSarreraFitxIzen) THEN
           WriteLn('ERROREA: ''', sSarreraFitxIzen, ''' fitxategia ez da existitzen!') ;
        IF NOT FileExists(sIrteeraFitxIzen) THEN
           WriteLn('ERROREA: ''', sIrteeraFitxIzen, ''' fitxategia ez da existitzen!') ;
        WriteLn('Programa amaitzera doa.') ;
        ReadLn ;
     END;
END. { PROGRAMAREN BUKAERA }

2019(e)ko apirilaren 17(a), asteazkena

32. astea | mintegia prestatzen

31. astea (2019/05/01) mintegirako eginda ekarri behar dena

2019/05/01

Jaia delako ez da laborategirik izango, baina hemen doakizu laborategi saio horretan egin beharko genukeena:

31. astea | mintegian egindakoa

31. astea (2019/04/17) mintegian egin dena
  • Zerrenda pasatu dugu, deitutakoen artean ez etorriak:
    • Markos Mikolta.
    • Jon Vazquez. 
    • Mikel Diaz.
    • Iker Diaz.  (Aintzaneren klasera)
    • Aitzol Gordo.
    • Imanol Loinaz.  (Aintzaneren klasera)
    • Xabier Peña.
    • Sergio Seco.
    • Nerea Zelaia.

  • Fitxategiak lantzeko hainbat baliabide gure eskura daukagu. Fitxategien baliabideak ezagutzeko adibideak prestatu dira. Adibideak exekutatu aurretik hiru iruzkin:
    1. Fitxategi hauek zenbaki osoak gordetzen dituzte.
    2. Fitxategiak gordeko dituen C:\Tokia izeneko karpeta sortu zure konputagailuan.
    3. Adibideak ordenez exekutatu eta landu itzazu.
  • Mintegian ikusitakoa:
    • Assign prozedura.
    • Rewrite eta Reset prozedurak.
    • Read eta Write prozedurak.
    • Close prozedura.
    • FileExists funtzioa eta SysUtils unitatea.
    • Eof funtzioa.
    • FilePos funtzioa.
    • Seek prozedura. 
  • Mintegian ikusi ez duguna baina eskola magistraletan aipaturik dagoena:
    • FileSize funtzioa.
    • Truncate prozedura.
    • Erase prozedura.
    • Rename prozedura.

  • Fitxategien baliabideak ezagutzen ditugularik, fitxategiekin trebatzeko adibideak prestatu dira. Adibideak exekutatu aurretik hiru iruzkin:
    1. Fitxategi hauek zenbaki osoak gordetzen dituzte.
    2. Fitxategiak gordeko dituen C:\Datuak izeneko karpeta sortu zure konputagailuan.
    3. Adibide guzti hauek FITXATEGIEN GAINEKO ERAGIKETAK atalean dauzkazu.
  • Mintegian egindakoa:
    • Fitxategi bat sortu.
    • Fitxategi baten existentzia.
    • Fitxategi oso bat prozesatu:
      • Fitxategi baten edukia ikusi.
      • Fitxategi baten elementu guztien zenbaki bat aldatu (deialdia inkrementatu).
      • Fitxategi bat bitan banatu.
    • Fitxategi batean bilaketa bat egin (honen haritik bilaketa array batean birpasatu dugu).

2019(e)ko apirilaren 10(a), asteazkena

31. astea | mintegia prestatzen

31. astea (2019/04/17) mintegirako eginda ekarri behar dena

Fitxategiak lantzeko hainbat baliabide gure eskura daukagu. Fitxategien baliabideak ezagutzeko adibideak prestatu dira. Adibideak exekutatu aurretik hiru iruzkin:
  1. Fitxategi hauek zenbaki osoak gordetzen dituzte.
  2. Fitxategiak gordeko dituen C:\Tokia izeneko karpeta sortu zure konputagailuan.
  3. Adibideak ordenez exekutatu eta landu itzazu.
Adibide-ariketak:
  • 1FitxategianGorde.pas fitxategi bat sortu Rewrite prozeduraren bitartez, hamar datu idatzi fitxategian, eta bukatzeko fitxategiaren edukia pantailaratu.
  • 2FitxategiaIrakurri.pas existitzen den fitxategia zabaldu Reset prozeduraren bitartez, eta dituen hamar elementuak pantailaratu.
  • 3FitxategiarenExistentzia.pas fitxategi existitzen den ala ez aztertu FileExists funtzioa erabiliz, funtzio honek SysUtils unitatea behar du, horregatik programaren hasieran USES SysUtils agindua derrigorrezkoa da.
  • 4FitxategiaEOF.pas fitxategiaren erakuslea fitxategiaren bukaeran dagoenean EOF funtzio boolearrak TRUE itzultzen du, End Of File egia baita.
  • 5FitxategiaSeekFilePos.pas hurrengo idazketa ala irakurketa fitxategiaren zein posiziotan gertatuko den Seek prozedura eta FilePos funtzioarekin bermatuko dugu, fitxategiak zenbat elementu dituen ezagutzeko FileSize funtzioa erabil daiteke.
  • 6FitxategiaMoztu.pas zabalik aurkitzen den fitxategia moztu Truncate prozeduraren bitartez, erakusleak adierazten duen posiziotik aurrerako datuak galduz.
  • 7FitxategiaEzabatu.pas itxita aukitzen den fitxategia ezabatu Erase prozeduraren bitartez, fitxategia diskotik ezabatuko da.
  • 8FitxategiaBerrizendatu.pas itxita aukitzen den fitxategiari bere izena aldatu Rename prozeduraren bitartez, fitxategia diskotik ez da desagertuko baina izen berri bati esker atzitu ahalko dugu.
  • 9FitxategiakEtaParametroak.pas prozedura eta funtzioetara fitxategiaren izena pasatuko da; azpiprograman definituko da FILE datu-motatako aldagaia, azpiprogramaren hasieran Assign egingo da, gero Reset/Rewrite (bietariko bat, egoerari dagokiona), gero datuekin lan egingo da (Read/Write) eta azpiprogramaren azkenean fitxategia itxi beharko da Close bat erabiliz.

Fitxategien baliabideak ezagutzen ditugularik, fitxategiekin trebatzeko adibideak prestatu dira. Adibideak exekutatu aurretik hiru iruzkin:
  1. Fitxategi hauek erregistroak gordetzen dituzte.
  2. Fitxategiak gordeko dituen C:\Datuak izeneko karpeta sortu zure konputagailuan.
  3. Adibide guzti hauek FITXATEGIEN GAINEKO ERAGIKETAK atalean dauzkazu.

30. astea | laborategian egin dena

30. astea (2019/04/10) laborategian egindakoa
  • Zerrenda pasatu dugu, deitutakoen artean ez etorriak:
    • Aitzol Gordo.
    • Marcos Mikolta.
    • Izaskun Olasagasti.
    • Xabier Peña.
    • June Sagastibeitia.
    • Jon Vazquez.
    • Nerea Zelaia.
    • Uxue Zubeldia.

2019(e)ko apirilaren 4(a), osteguna

Talde-lana edo proiektua

Taldean lan eginez proiektu hau garatu


Zuen lantaldeak hauek dira eta jarraian ematen den ariketa egin behar duzue eta eGela bitartez entregatuko duzue 32-2 Proiektua amaiturik zereginari erantzunez.

Hau da proiektuaren enuntziatua:


Eta hau da egutegia:




Proiektuaren balizko soluzio bat

Soluzio hau bi programetan ematen da:
  • Radarrak2019.pas (eskatzen den ariketaren programa da).
  • Radarrak2019_DatuakLortzen.pas (aurreko programa horrek erabil ditzan datuak lor ditzakeen programa).

Radarrak2019_DatuakLortzen.pas programa exekutatu

Radarrak2019_DatuakLortzen.pas programa exekutatu eta C:\Radarrak karpetan datuen bi fitxategi lortuko dituzu, adibidez A_190430.dat fitxategia eta B_190430.dat fitxategia. Fitxategi horien datuak honelakoak dira:
Radarrak2019_DatuakLortzen.pas programaren exekuzioa bukatu aurretik, lortu diren A_190430.dat eta B_190430.dat fitxategien edukiak pantailan aurkezten dira.


Radarrak2019.pas programa exekutatu

Radarrak2019.pas programa exekutatu eta C:\Radarrak karpetan dauden A_190430.dat eta B_190430.dat fitxategien prozesaketari ekingo zaio. Horretarako, radarren arteko distantzia emango da eta horrekin batera abiadura maximoa ere emango da.
Gero, hiru aukerako menu batek gidatuko du programaren exekuzioa:




Radarrak2019_DatuakLortzen.pas programa eta Radarrak2019.pas programa.



2019(e)ko apirilaren 3(a), asteazkena

30. astea | laborategia prestatzen

29. astea (2019/04/03) laborategirako eginda ekarri behar dena

Datorren saioan proiektuari (edo talde-lanari) buruz hitz egingo dugu. Datorren saioaren gaia erregistroen arrayak dira. Hona hemen enuntziatuak:


Erregistroen bi bektore nahastu


Laborategiko gelan, gehienez, 25 ikasle izango dira. Ikasleen datuak bi bektoretan biltzen dira, bektore bat lehen azterketari dagokio eta beste bektorea bigarren azterketari dagokio.

Bektoreen elementuak kateak dira, eta bertan izena eta zenbaki bat daude / batez banaturik aurkitzen direlarik, zenbakien kopuru maximoa 9.9 izango eta minimoa 0.0 izango da.

Datuak teklatuaren bitartez ematen dira eta ikasleen posizioak bektoretan zaindu behar dira berdinak izan daitezan, hurrengo adibidean erakusten den bezala: Josu ikaslea lehena da abiapuntuko array bietan.

asAzterketa1 eta asAzterketa2 abiapuntuko bektoreak dira eta ardAzterketak bektorea da lortu behar dena. Hona hemen datuen adibide bat:


asAzterketa1
‘Josu/6.1’
‘Ane/7.6’
‘Mikel/2.7’
1
2
3

asAzterketa2
‘Josu/6.9’
‘Ane/5.4’
‘Mikel/6.3’
1
2
3

iLuzera
3



ardAzterketak
‘Josu’
‘Josu’
‘Ane’
‘Ane’
‘Mikel’
‘Mikel’
6.1
6.9
7.6
5.4
2.7
6.3
1
2
3
4
5
6

iZenbat
6



ardAzterketak bektorea lortu ondoren zenbait operazio egingo dira. Hona hemen erabilgarri dauzkazun programa nagusia eta azpiprogramen goiburukoak:


PROGRAM ErregistroenBiArrayNahasten_1 ;
CONST
   BEHEMUGA = 1 ;
   GOIMUGA1 = 25 ;
TYPE
   tsKatea = String[30] ;
   tasAzterketa = ARRAY[BEHEMUGA..GOIMUGA1] OF tsKatea ;


PROCEDURE DatuakSartu(VAR asAzterketa: tasAzterketa;
                          VAR iLuzera: Integer) ;
BEGIN
END ;
PROCEDURE DatuakIkusi(CONST asAzterketa: tasAzterketa;
                                iLuzera: Integer) ; 
BEGIN
END ;
{ =================================================================== }

VAR
   asAzterketa1, asAzterketa2: tasAzterketa ;
   iLuzera: Integer ;

BEGIN
   WriteLn('1. azterketa:') ;
   DatuakSartu(asAzterketa1, iLuzera) ;
   WriteLn ;

   Write('1. azterketaren ') ;
   DatuakIkusi(asAzterketa1, iLuzera) ;
   WriteLn ;

   WriteLn('2. azterketa:') ;
   DatuakSartu(asAzterketa2, iLuzera) ;   (* datuak egoki sartzera  *)
   WriteLn ;                              (* guztiz behartuta gaude *)

   Write('2. azterketaren ') ;
   DatuakIkusi(asAzterketa2, iLuzera) ;
   WriteLn ;

   { hemen idatzi ariketan eskatzen dena }

   WriteLn('Programa amaitzera doa') ;
   ReadLn ;
END.


Ariketa honen enuntziatu inprimagarria hemendik hartu, ariketaren planteamendua eta lehen urratsak programa-iturburu honetan daude ErregistroenBiArrayNahastenEMATEKOA.PAS. Honako hauek egin:
  1. ardAzterketak arrayarekin lan eginez, ikasgelako ikasle baten izena eman (Ane adibidez) eta kalifikazioa orokorra erakutsi (bere noten batezbesteko aritmetikoa).
  2. ardAzterketak arrayarekin lan eginez, lehen azterketako kalifikazioetatik lortzen den batezbesteko aritmetikoa kalkulatu.
  3. ardAzterketak arrayarekin lan eginez, bigarren azterketako kalifikazioetatik lortzen den batezbesteko aritmetikoa kalkulatu.
  4. ardAzterketak arrayarekin lan eginez, nork lortu du notarik onena eta zein azterketan gertatu da.
  5. ardAzterketak arrayarekin lan eginez, ikasgelako ikasle baten izena eman (Ane adibidez) eta aurkitzen bada bere kalifikazioak aldatu.
  6. ardAzterketak arrayarekin lan eginez, ikasgelako ikasle baten izena eman (Ane adibidez) eta aurkitzen bada arraytik ezabatu.
  7. ardAzterketak arrayarekin lan eginez, ikasle aprobatuen zerrenda erakutsi pantailan (ikasle bat aprobatuko du bere nota biren batezbesteko artrmetikoa 5.0 edo handiagoa bada).
  8. ardAzterketak arrayarekin lan eginez, arraya ordenatu/sailkatu ikasleen izenen arabera.
  9. ardAzterketak arrayarekin lan eginez, ...



Ariketa honek begi bistako hobekuntza du datuak ematerako prozeduretan: bigarren azterketako asAzterketa2 bektorea betetzean lehen azterketako asAzterketa1 bektorearen informazioa aintzat hartu, adibidez  prozedura DatuakSartuAurrekoakAintzatHarturik(asAzterketa1, iLuzera, asAzterketa2) idatziz non hiru parametroen jokamoldea sarrera-sarrera-irteera den.


PROGRAM ErregistroenBiArrayNahasten_2 ;
CONST
   BEHEMUGA = 1 ;
   GOIMUGA1 = 25 ;
TYPE
   tsKatea = String[30] ;
   tasAzterketa = ARRAY[BEHEMUGA..GOIMUGA1] OF tsKatea ;


PROCEDURE LehenArrayarenDatuakSartu(VAR asAzterketa: tasAzterketa;
                                        VAR iLuzera: Integer) ; 
BEGIN
END ;
PROCEDURE DatuakIkusi(CONST asAzterketa: tasAzterketa;
                                iLuzera: Integer) ;
BEGIN
END ;
PROCEDURE DatuakSartuAurrekoakAintzatHarturik(CONST asAzterketa1: tasAzterketa;
                                                         iLuzera: Integer;
                                                VAR asAzterketa2: tasAzterketa) ; 
BEGIN
END ;

{ --------------------------------------------------------------------------------------------------------------------------------- }

VAR
   asAzterketa1, asAzterketa2: tasAzterketa ;
   iLuzera: Integer ;

BEGIN
   WriteLn('1. azterketa:') ;
   LehenArrayarenDatuakSartu(asAzterketa1, iLuzera) ;
   WriteLn ;

   Write('1. azterketaren ') ;
   DatuakIkusi(asAzterketa1, iLuzera) ;
   WriteLn ;

   DatuakSartuAurrekoakAintzatHarturik(asAzterketa1, iLuzera,  asAzterketa2) ;  

   Write('2. azterketaren ') ;
   DatuakIkusi(asAzterketa2, iLuzera) ;
   WriteLn ;

   { hemen idatzi ariketan eskatzen dena }

   WriteLn('Programa amaitzera doa') ;
   ReadLn ;
END.


29. astea | laborategian egin dena

29. astea (2019/04/03) laborategian egindakoa
  • Zerrenda pasatu dugu, deitutakoen artean ez etorriak:
    • Marcos Mikolta.
  • 29. astea | zenbakiak kendu ariketa elkarrekin egin dugu, bakoitiak eta negatiboak diren zenbaki osoak array batetik kentzen dira. Horretarako, bi bide erabili dira:
    • Array laguntzailerik gabe (interesgarria).
    • Array laguntzaile bat erabiliz (errazagoa).
  • 29. astea | zenbaki lehen ariketa ez dugu egin, baina horretaz galdera bat egon denez bere planteamendua jarraian doa: funtsean aurreko ariketa bezalako da non  fnboLehenaDa izeneko funtzio boolearra aplikatu behar den.

2019(e)ko martxoaren 28(a), osteguna

29. astea | zenbaki lehen


Zenbaki jakin bat lehena ote den erabakitzen duen funtzioa hau litzateke:
FUNCTION fnboLehenaDa(iZenbakia: Integer): Boolean ;
VAR
   boLehenaDa : Boolean ;
   k : Integer ;
BEGIN
   boLehenaDa := TRUE ;
   k := 2 ;            (* 1 eta iZenbakia kopuruak ez ditugu aintzat hartuko *)
   WHILE (k <= iZenbakia-1) AND boLehenaDa DO
   BEGIN
      IF iZenbakia MOD k = 0 THEN
      BEGIN
         WriteLn('     ZATIGARRIA  iZenbakia MOD k = 0', '    k = ', k) ;
         boLehenaDa := FALSE      (* iZenbakia kopurua zatigarria dela    *)
      END                         (* jakitean WHILE-DO begiztatik irten,  *) 
      ELSE                        (* bestela jarraitu k inkrementatuz.    *)
      BEGIN 
         WriteLn('MOMENTUZ LEHENA  iZenbakia MOD k <> 0', '   k = ', k) ;                                
         k := k + 1 ;             (* Hurrengoa aztertu edo WHILE amaitu.  *)
      END ;   
   END ;
   fnboLehenaDa := boLehenaDa ;
END ;

29. astea | zenbakiak kendu


Programaren balizko exekuzio bat jarraian erakusten da:

Arraya datuz bete ondoren, hauxe da bakoitiak eta negatiboak diren zenbakiak kentzen dituen programa non array laguntzailerik ez den erabiltzen:
PROGRAM NegatiboakBakoitiakKendu ;
CONST
  BEHEMUGA = 1 ;
  GOIMUGA = 25 ;

TYPE
  taiZerrenda = ARRAY[BEHEMUGA..GOIMUGA] OF Integer ;


PROCEDURE ArrayaDatuzBete(VAR aiZerrenda: taiZerrenda;
                             VAR iLuzera: Integer) ;
VAR
   k: Integer ;
BEGIN
   REPEAT
      Write('Zenbat elementu sartuko dituzu? ') ;
      ReadLn(iLuzera) ;
   UNTIL (iLuzera >= BEHEMUGA) AND (iLuzera <= GOIMUGA) ;

   FOR k:=BEHEMUGA TO iLuzera DO
   BEGIN
      Write('Eman ', k, '. zenbaki osoa (negatiboa edo positiboa): ') ;
      ReadLn(aiZerrenda[k]) ;
   END ;
END ;


PROCEDURE ArrayarenEdukiaIkusi(CONST aiZerrenda: taiZerrenda;
                                        iLuzera: Integer) ;
VAR
   k: Integer ;
BEGIN
   FOR k:=BEHEMUGA TO iLuzera DO
   BEGIN
      WriteLn(k, '. zenbaki osoa = ', aiZerrenda[k]) ;
   END ;
END ;


PROCEDURE EzabatuZenbakiBat(VAR aiZerrenda: taiZerrenda;
                               VAR iLuzera: Integer;
                                      iNon: Integer) ;
VAR
   k: Integer ;
BEGIN
   FOR k:=iNon TO iLuzera-1 DO
   BEGIN
      aiZerrenda[k] := aiZerrenda[k+1];
   END ;

   iLuzera := iLuzera-1 ;
END ;


{ programa nagusiko aldagaiak }

VAR
  aiZerrenda: taiZerrenda ;
  iLuzera, i: Integer ;

BEGIN
   WriteLn ('-----------------------------') ;
   ArrayaDatuzBete(aiZerrenda, iLuzera) ;
   WriteLn ;
   ArrayarenEdukiaIkusi(aiZerrenda, iLuzera) ;
   WriteLn ;

   i := BEHEMUGA ;
   WHILE i <= iLuzera DO
   BEGIN
      IF (aiZerrenda[i] < 0) AND (aiZerrenda[i] MOD 2 <> 0) THEN
      BEGIN
         EzabatuZenbakiBat(aiZerrenda, iLuzera, i) ;
      END
      ELSE
         i := i+1 ;
   END ;

   ArrayarenEdukiaIkusi(aiZerrenda, iLuzera) ;
   WriteLn ;

   WriteLn ;
   WriteLn('Amaituta!') ;
   ReadLn ;
END. { programaren bukaera }

Eta hau da bakoitiak eta negatiboak diren zenbakiak kentzen dituen programa non array laguntzaile bat erabiltzen den:
PROGRAM NegatiboakBakoitiakKenduLaguntzailearekin ;
CONST
  BEHEMUGA = 1 ;
  GOIMUGA = 25 ;

TYPE
  taiZerrenda = ARRAY[BEHEMUGA..GOIMUGA] OF Integer ;


PROCEDURE ArrayaDatuzBete(VAR aiZerrenda: taiZerrenda;
                             VAR iLuzera: Integer) ;
VAR
   k: Integer ;
BEGIN
   REPEAT
      Write('Zenbat elementu sartuko dituzu? ') ;
      ReadLn(iLuzera) ;
   UNTIL (iLuzera >= BEHEMUGA) AND (iLuzera <= GOIMUGA) ;

   FOR k:=BEHEMUGA TO iLuzera DO
   BEGIN
      Write('Eman ', k, '. zenbaki osoa (negatiboa edo positiboa): ') ;
      ReadLn(aiZerrenda[k]) ;
   END ;
END ;


PROCEDURE ArrayarenEdukiaIkusi(CONST aiZerrenda: taiZerrenda;
                                        iLuzera: Integer) ;
VAR
   k: Integer ;
BEGIN
   FOR k:=BEHEMUGA TO iLuzera DO
   BEGIN
      WriteLn(k, '. zenbaki osoa = ', aiZerrenda[k]) ;
   END ;
END ;


PROCEDURE Zenbakiakezabatu(VAR aiZerrenda: taiZerrenda;
                              VAR iLuzera: Integer) ;
VAR
   k: Integer ;
   aiLaguntzailea: taiZerrenda ;
   iLuzeraLaguntzailea: Integer ;
BEGIN
   iLuzeraLaguntzailea := 0 ;
   FOR k:=BEHEMUGA TO iLuzera DO
   BEGIN
      IF (aiZerrenda[k] >= 0) OR
         (aiZerrenda[k] MOD 2 = 0) THEN
      BEGIN
         iLuzeraLaguntzailea := iLuzeraLaguntzailea + 1 ;
         aiLaguntzailea[iLuzeraLaguntzailea] := aiZerrenda[k] ;
      END ;
   END ;

   aiZerrenda := aiLaguntzailea ;
   iLuzera := iLuzeraLaguntzailea ;
END ;


{ programa nagusiko aldagaiak }

VAR
  aiZerrenda: taiZerrenda ;
  iLuzera: Integer ;

BEGIN
   WriteLn ('-----------------------------') ;
   ArrayaDatuzBete(aiZerrenda, iLuzera) ;
   WriteLn ;
   ArrayarenEdukiaIkusi(aiZerrenda, iLuzera) ;
   WriteLn ;

   ZenbakiakEzabatu(aiZerrenda, iLuzera) ;

   WriteLn('Ezabatu ondoren:') ;
   ArrayarenEdukiaIkusi(aiZerrenda, iLuzera) ;
   WriteLn ;

   WriteLn ;
   WriteLn('Amaituta!') ;
   ReadLn ;
END. { programa bukaera }