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 }

iruzkinik ez:

Argitaratu iruzkina