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.