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 }