2023(e)ko maiatzaren 31(a), asteazkena

2023ko maiatzaren deialdiko emaitzak


2023ko maiatzaren deialdiari dagozkion kalifikazioak ikusteko, goiko irudiaren gainean klikatu edo esteka hau jarraitu:

Azterketak ikusi ahal izateko, datorren astelehenen eta asteazkenean:
  • Egunak:  Ekainaren 5ean eta 7an
  • Ordutegia:  11etatik aurrera
  • Lekua:  Irakaslearen bulegoaren inguruan (B eraikineko 3. solairuko P3B57 aretoan)

Etortzekoa bazara, mesedez, aldez aurretik posta elektroniko mezu bat bidal egiozu irakasleari (jesus.romo@ehu.eus).

 

2023(e)ko maiatzaren 24(a), asteazkena

Azterketa: 2023ko maiatzaren deialdiko programa (derrigorrezkoak)

 
Ezaguna denez, Azterketa: 2023ko maiatzaren deialdia izenburuko artikuluan azterkari buruzko informazio guzti-guztia dago. Heltzear den uztaileko deialdiari dagokion programa prestatze aldera, berridatz dezagun maiatzeko programa baina soilik derrigorrezko aginduak idatziz (letra larrietan idatzirik ematen diren aginduak). Ez dugu esan nahi gainerako aginduak soberan daudenik, baizik eta letra larrietan idatziko ditugunak berebiziko garrantzia dutela eta besteak horien menpekoak direla nolabait.
Maiatzeko programa osoa 2023-05-24_KromoenBilduma.pas fitxategian jasota dago eta honek JOKALARIAK.DAT datu-fitxategia darabil. Datu-fitxategi hori aldez aurretik sortuta dago DatuFitxategiaSortu.pas programari esker.

2023-05-24_Kromoak_DerrigorrezkoAginduak.pas fitxategian jasota dagoen maiatzeko programa berezian letra larriz nabarmendu dira ezinbestekoak diren aginduak. Konpiladorearen ingurune barnetik programa hau exekutatzean, JOKALARIAK.DAT datu-fitxategia C:\Dev-Pas karpetan kokatu behar da derrigorrez. Maiatzeko programa bereziaren kodea jarraian ikusi, non, aurreratu den bezala, azpiprograma bakoitzean letra larrietan jarri diren aginduak garrantzitsutzat jo daitezkeen:
{ Hitz larrietan idatzi diren aginduak funtsezkoenak dira azpiprogrametan,    }
{ larraietan dauden aginduen inguruan dabiltzate gainerako agindu guztiak.    }
{ Konpiladorearen ingurune barrurik programa hau exekutatzean, JOKALARIAK.DAT }
{ delako datu-fitxategiak C:\Dev-Pas karpetan kokatu behar da.                }

{ Programa exekutazean JOKALARIAK.DAT delako datu-fitxategia erabili behar da }
{ derrigorrez, 340 kromo dituen bilduma batekin lan egitea espero delako.     }
{ Bildumaren fitxategiak beti 340 kromo dituelako, programa honek darabilen   }
{ arrayarekin lan egiteko luzera logikoa zehaztean aldagairik ez da behar.    }

program KromoakDerrigorrezkoAginduak_2023;

uses
   crt, sysutils;

const
   iMAX = 340;             // enuntziatuan 471 

type
   integer = smallint;     (* INTEGER-entzat 2 byte erabiltzera behartzen da *)
   
   tsKate25  = string[25];
   tsKate199 = string[199];

   trdBalioak = record
                   iDefentsan,
                   iKontrolean,
                   iErasoan,
                   iGuztira: integer;
                end;

   trdKromoa = record
                  iZenbakia : integer;
                  sIzena    : tsKate25;
                  sTokia,
                  sTaldea   : tsKate25;
                  rdBalioak : trdBalioak;
                  iZenbatAle: integer;
               end;

   tfrdBilduma = file of trdKromoa;

   taiBilduma = array[1..iMAX] of integer;


{------------------menua---------------------}
function fncMenua: char;
  var
     cHautapena: char;
  begin
     clrscr;
     writeln('AUKEREN MENUA':20);
     writeln('=============':20);
     writeln;
     writeln('  1  Kromo guztien informazioa erakutsi');
     writeln('  2  Falta diren kromoak zerrendatu');
     writeln('  3  Kromo bat sartu');
     writeln('  4  Kromo bat trukatu');
     writeln('  5  Jokalari baten informazioa erakutsi');
     writeln('  0  Programatik irten');
     writeln;
     repeat
        write('Zure aukera: ':20);
        READLN(cHautapena);          (* KARAKTERE BAT TEKLADUZ IRAKURRI *)
     until (cHautapena >= '0') and (cHautapena <= '5');
     FNCMENUA := cHautapena;         (* FUNTZIOAK IRTEERAREN BAT IZAN DEZALA *)
  end;

{------------------arraya elikatu fitxategiko datuekin--------------}
procedure FitxategikoDatuakArrayra(sFitxIzen:tsKate199; var aiBilduma:taiBilduma);
  var
     rdKromoBat: trdKromoa;
     f_B       : tfrdBilduma;
  begin
     assign(f_B, sFitxIzen);
     reset(f_B);
     while not eof(f_B) do
     begin
        READ(f_B, rdKromoBat);       (* ERREGISTRO BAT IRAKURRI *)
        aiBilduma[rdKromoBat.iZenbakia] := rdKromoBat.iZenbatAle;
     end;
     close(f_B);
  end;

{------------------taula bezala erakutsi---------------------}
procedure TaulaBezalaErakutsi(const rdKromoBat:trdKromoa);
  begin
     with rdKromoBat, rdBalioak do
     begin
        WRITE(iZenbakia:4);          (* PANTAILAN IDATZI *)
        WRITE(sIzena:16);
        WRITE(sTokia:15);
        WRITE(sTaldea:12);
        WRITE(iDefentsan:6, iKontrolean:5, iErasoan:5, iGuztira:6);
        WRITELN(iZenbatAle:6);
     end;
  end;

{------------------kromo bat erakutsi---------------------}
procedure KromoBatErakutsi(const rdKromoBat:trdKromoa);
  begin
     with rdKromoBat, rdBalioak do
     begin
        WRITELN('Kromo zenbakia: ':25, iZenbakia);    (* PANTAILAN IDATZI *)
        WRITELN('Izena: ':25, sIzena);
        WRITELN('Tokia zelaian: ':25, sTokia);
        WRITELN('Taldea: ':25, sTaldea);
        WRITELN('Balioa Atzelarian: ':25, iDefentsan:3);
        WRITELN('Jokuaren kontrolean: ':25, iKontrolean:3);
        WRITELN('Balioa erasoan: ':25, iErasoan:3);
        WRITELN('Balioa orotara: ':25, iGuztira:3);
        WRITELN('Ale kopurua: ':25, iZenbatAle:3);
     end;
  end;

{------------------bilduma erakutsi------------------}
procedure BildumaErakutsi(sFitxIzen:tsKate199);
  var
     rdKromoBat: trdKromoa;
     f_B       : tfrdBilduma;
  begin
     assign(f_B, sFitxIzen);
     reset(f_B);
     
     writeln;
     writeln('ZBK':4, 'IZENA':16, 'TOKIA':15, 'TALDEA':12, 'DEF':6,'KON':5, 'ERA':5, 'GUZT':6, 'KOP':6);
     writeln(' --------------------------------------------------------------------------');
     while not eof(f_B) do
     begin
        READ(f_B, rdKromoBat);               (* ERREGISTRO BAT IRAKURRI *)
        TAULABEZALAERAKUTSI(rdKromoBat);     (* ERREGISTROA PANTAILARATU *)
     end;
     writeln(' --------------------------------------------------------------------------');
     close(f_B);
  end;

{------------------falta diren kromoen zenbakiak erakutsi------------}
procedure FaltaDirenakZerrendatu(const aiBilduma:taiBilduma);
  var
     iKont     : integer;
     iZenbatBai: integer;
  begin
     iZenbatBai := 0;
     writeln;
     writeln('FALTA DIREN KROMOEN ZERRENDA':54);
     writeln('----------------------------':54);
     FOR iKont:=1 TO iMAX DO            (* ARRAY OSOA PROZESATU *)
     BEGIN
        if aiBilduma[iKont] = 0 then
           WRITE(iKont:4)               (* PANTAILAN IDATZI *)
        else
        begin
           WRITE('---':4);              (* PANTAILAN IDATZI *)
           iZenbatBai := iZenbatBai + 1;
        end;
        if iKont mod 20 = 0 then
           WRITELN;                     (* HURRENGO ERRENKADA *)
     END;
     writeln;
     writeln;
     writeln(iZenbatBai, ' kromo dituzu eta ', iMAX -iZenbatBai, ' kromo falta zaizkizu');
  end;

{------------------kromo berri baten baten balioak eguneratu----------}
procedure KromoBerriarenBalioakEguneratu(sFitxIzen:tsKate199; iZbk:integer);
  var
     rdKromoBat: trdKromoa;
     f_B       : tfrdBilduma;
  begin
     assign(f_B, sFitxIzen);
     reset(f_B);
     
     SEEK(f_B, iZbk-1);              (* POSIZIO EGOKIAN KOKATU *)
     READ(f_B, rdKromoBat);          (* FITXATEGITIK IRAKURRI  *)
     with rdKromoBat,rdBalioak do
     begin
        write('Balioa defensan:  ':25);
        readln(iDefentsan);
        write('Jokuaren kontrolean:  ':25);
        readln(iKontrolean);
        write('Balioa erasoan:  ':25);
        readln(iErasoan);
        iGuztira := iDefentsan + iKontrolean + iErasoan;
        writeln('Guztira: ':25, iGuztira);
     end;
     SEEK(f_B, iZbk-1);              (* POSIZIO EGOKIAN KOKATU *)
     WRITE(f_B, rdKromoBat);         (* ETA FITXATEGIAN IDATZI *)
     
     close(f_B);
  end;

{------------------jokalaria bilatu-------------------------}
procedure JokalariaBilatu(     sFitxIzen:tsKate199; 
                              sJokalaria:tsKate25; 
                          VAR RDKROMOBAT:trdKromoa);    (* ERREGISTROA ITZULI  *)
  var
     f_B       : tfrdBilduma;
     boAurkitua: boolean;
  begin
     assign(f_B, sFitxIzen);
     reset(f_B);
     boAurkitua := FALSE;
     while not boAurkitua and not eof(f_B) do
     begin
        READ(f_B, rdKromoBat);       (* FITXATEGITIK IRAKURRI  *)
        if upcase(rdKromoBat.sIzena) = upcase(sJokalaria) then
           boAurkitua := TRUE
     end;

     if not boAurkitua then
        rdKromoBat.iZenbakia := -1;

     close(f_B);
  end;

{------------------fitxaegiaren datuak arraytik eguneratu---------}
procedure EguneratuAleakFitxategianArraytik(      sFitxIzen:tsKate199; 
                                            const aiBilduma:taiBilduma);
  var
     rdKromoBat: trdKromoa;
     f_B       : tfrdBilduma;
  begin
     assign(f_B, sFitxIzen);
     reset(f_B);
     while not eof(f_B) do
     begin
        READ(f_B, rdKromoBat);                 (* FITXATEGITIK IRAKURRI  *)
        if aiBilduma[rdKromoBat.iZenbakia] <> rdKromoBat.iZenbatAle then
        begin
           rdKromoBat.iZenbatAle := aiBilduma[rdKromoBat.iZenbakia];
           SEEK(f_B, FilePos(f_B)-1);          (* POSIZIO EGOKIAN KOKATU *)
           WRITE(f_B, rdKromoBat);             (* ETA FITXATEGIAN IDATZI *)
        end;
    end;
    close(f_B);
  end;

{==================programa nagusiaren aldagaiak==========}
var
   sFitxIzen : tsKate199;
   aiBilduma : taiBilduma;
   cAukera,
   cJarraitu : char;
   iZbk,
   iZbkJaso,
   iZbkEman  : integer;
   sJokalaria: tsKate25;
   rdKromoBat: trdKromoa;

{==================programa nagusia==================}
begin
   clrscr;
   write('Bildumaren fitxategiaren izena (JOKALARIAK.DAT): ');
   readln(sFitxIzen);
   if not fileexists(sFitxIzen) then
      writeln('ERROREA!!! "', sFitxIzen, '" izeneko fitxaterik ez da')
   else
   begin
      FitxategikoDatuakArrayra(sFitxIzen, aiBilduma);
      repeat
         cAukera := fncMenua;
         case cAukera of
           '1': BildumaErakutsi(sFitxIzen);
           '2': FaltaDirenakZerrendatu(aiBilduma);
           '3': begin
                   repeat
                      writeln;
                      write('Kromoaren zenbakia (1 eta ', iMAX, ' artekoa): ');
                      readln(iZbk);
                   until (iZbk >= 1) and (iZbk <= iMAX);
                   aiBilduma[iZbk] := aiBilduma[iZbk] +1;
                   if aiBilduma[iZbk] = 1 then
                   begin
                      writeln('Kromo berria delako datu hauek behar ditugu:');
                      KromoBerriarenBalioakEguneratu(sFitxIzen, iZbk);
                   end;
                end;
           '4': begin
                   writeln;
                   repeat
                      write('Hartzen duzun kromoaren zenbakia (1 eta ', iMAX, ' artekoa): ');
                      readln(iZbkJaso);
                   until (iZbkJaso >= 1) and (iZbkJaso <= iMAX);
                   repeat
                      write('Emaiten duzun kromoaren zenbakia (1 eta ', iMAX, ' artekoa): ');
                      readln(iZbkEman);
                   until (iZbkEman >= 1) and (iZbkEman <= iMAX);
                   case aiBilduma[iZbkEman] of
                      0: writeln('ERROREA!!! Kromo hori ez daukazu');
                      1: begin
                            write('Kromo horren ale bakarra daukazu. Trukatu nahi duzu? (B/E) ');
                            readln(cJarraitu);
                            if upcase(cJarraitu)='B' then
                            begin
                               aiBilduma[iZbkEman] := 0;       (* kromo hori gabe geratu gara *)
                               aiBilduma[iZbkJaso] := aiBilduma[iZbkJaso] +1;
                               if aiBilduma[iZbkJaso] = 1 then
                                  KromoBerriarenBalioakEguneratu(sFitxIzen, iZbkJaso);
                            end;
                         end;
                      else  { case }
                         begin
                            aiBilduma[iZbkEman] := aiBilduma[iZbkEman] -1;
                            aiBilduma[iZbkJaso] := aiBilduma[iZbkJaso] +1;
                            if aiBilduma[iZbkJaso] = 1 then
                               KromoBerriarenBalioakEguneratu(sFitxIzen, iZbkJaso);
                         end;
                   end;
                end;
           '5': begin
                   writeln;
                   write('Pantailaratuko den jokalariaren izena: ');
                   readln(sJokalaria);
                   JokalariaBilatu(sFitxIzen, sJokalaria, rdKromoBat);
                   if rdKromoBat.iZenbakia <> -1 then
                      KromoBatErakutsi(rdKromoBat)
                   else
                      writeln('ERROREA!! "', sJokalaria, '" ez da aurkitu');
                end;
           '0': EguneratuAleakFitxategianArraytik(sFitxIzen, aiBilduma);
         end;  { case }
         writeln;
         writeln;
         writeln ('RETURN sakatu jarritzeko');
         write   ('========================  ');
         readln;
      until cAukera = '0';
   
      clrscr;
      writeln('Programa bukatzean bildumaren egoera hauxe da:');
      BildumaErakutsi(sFitxIzen);
      readln;
   end;  { else }
end. { programaren amaiera }
 

Azterketa: 2023ko maiatzaren deialdia


2023ko Maiatzaren deialdiko programa: Kromoen bilduma


Ariketari lotutako informazioa:
Datu-fitxategiak sortzeko programak:
  • DatuFitxategiaSortu.pas bezero-programa (bilduma21 unitatearekin, bilduma30 unitatearekin edo bilduma39 unitatearekin batera karpeta berean kokatu, adibidez C:\GurePrograma karpetan)  
  • bilduma21.pas unitatearen iturburu-kodea (DatuFitxategiaSortu.pas bezero-programarekin batera karpeta berean kokatu, adibidez C:\GurePrograma karpetan), edo...  
  • bilduma30.pas unitatearen iturburu-kodea (DatuFitxategiaSortu.pas bezero-programarekin batera karpeta berean kokatu, adibidez C:\GurePrograma karpetan), edo...  
  • bilduma39.pas unitatearen iturburu-kodea (DatuFitxategiaSortu.pas bezero-programarekin batera karpeta berean kokatu, adibidez C:\GurePrograma karpetan)  
Datu-fitxategiak:
  • KROMOAK.DAT datu-fitxategiak 21, 30 edo 39 elementu izan ditzake (bilduma21.pas unitatearekin, bilduma30.pas unitatearekin edo bilduma39.pas unitatearekin sortu bada) 
  • JOKALARIAK.DAT datu-fitxategiak 340 elementu ditu eta bezero-programarekin batera karpeta berean kokatu (adibidez, C:\GurePrograma karpetan)  

2023-05-24_KromoenBilduma.pas programak neurri desberdineko datu-fitxategiak prozesa ditzake, adibidez 21, 30 edo 39 elementuko datu-fitxategiak (gehienez 340 elementu izan ditzake datu-fitxategiak). Ondorioz, programa honetan erabiltzen den arraya zehazteko luzera logikoa adierazten duen aldagaia beharko da, jakinik arrayaren muga 340 elementukoa dela:

   program Kromoak_2023ko_maiatza;

   uses
      crt, sysutils;
   
   const
      iMAX = 340;                  // enuntziatuan 471
      sBIDEA = 'C:\KromoBilduma\';
   
   type
      taiBilduma = array[1..iMAX] of integer;

Hau da bilduma21 izeneko unitatearen interfazea (bilduma30 unitatearen eta bilduma39 unitatearen interfazeak berdinak dira, eta aldea BildumarenFitxategiaSortu prozeduran dago):
(* -------------------------- bilduma21 unitatearen interfazea ------------------ *)

const
   sBIDEA = 'C:\KromoBilduma\';

type
   integer = smallint;     (* INTEGER-entzat 2 byte erabiltzera behartzen da *)
   
   tsKate25  = string[25];
   tsKate199 = string[199];

   trdBalioak = record
                   iDefentsan,
                   iKontrolean,
                   iErasoan,
                   iGuztira: integer;
                end;

   trdKromoa = record
                  iZenbakia : integer;
                  sIzena    : tsKate25;
                  sTokia,
                  sTaldea   : tsKate25;
                  rdBalioak : trdBalioak;
                  iZenbatAle: integer;
               end;

   tfrdBilduma = file of trdKromoa;

   procedure BildumarenFitxategiaSortu(sFitxIzenBilduma: tsKate199);

   procedure BildumarenFitxategiaIkusi(sFitxIzenBilduma: tsKate199);
   
(* ---------------------------- interfazearen amaiera -------------------------- *)




2023ko Maiatzaren deialdiko teoria

Galderei dagozkien programak:


 

2023(e)ko maiatzaren 23(a), asteartea

Azterketarako deia, maiatza



Iruñea, 2015eko uztailaren 6a, San Ferminak abiarazteko gaiteroen deia (bideoaren azpitituluak aktibatu)

Gaita
Fanfarrea
Doinu honen bitartez festarako deia egiten da Nafarroan. Doinu bera erabil dezagun azterketarako deia egiteko:
Adi, ikasleok adi
ikasleok adi
suerterik hoberena
opa dizuet nik


Informatika: maiatzeko deialdia
Eguna
Ordua
Eraikina
Ikasgela
2023-05-24
08:30
I-A
P2A10A


Ebaluazio jarraituari uko egin diozuenek beste froga bat egin beharko duzue ordenagailuaren aurrean. Froga praktiko horren deialdia:
  • Eguna: 2023-05-24 (asteazkena)
  • Ordua: aurreko azterketa bukatu eta gero
  • Lekua: I-B eraikina
  • Laborategiak: P0B17I eta P0B18I
 

2023(e)ko maiatzaren 16(a), asteartea

Laborategiko eta mintegiko notak

Irakasgaiaren ebaluazioa artikulua berriro gogora ekarriz:
  • Laborategiko lanetik 1,5 puntu lor daitezke, 1. kontroleko eta 2. kontroleko azterketekin loturik dago laborategia:
    • 0,5 puntu 1. kontrolean
    • 1,0 puntu 2. kontrolean
  • Mintegiko lanetik 1,5 puntu lor daitezke, honela banaturik:
    • 0,5 puntu proiektuan
    • 1,0 puntu proiektuaren gaineko bakarkako ariketan (3. kontrola)
Zuen kalifikazioak ikusteko ondoko esteka jarrai ezazue eta PDF formatuko fitxategi bat aurkituko duzue:
Fitxategiaren egitura taula batena da eta bertan agertzen diren zutabeen esanahia jarraian azaltzen da.

Ikaslea identifikatzeko NAN delako lehen zutabea erabiltzen da, zutabe horren arabera ordenaturik dago taula. Laborategiko nota hurrengo lau zutabetan ematen da: 1. KONTROLA (maximoa 10 puntu), LABORATEGIA (maximoa 0,5 puntu), 2. KONTROLA (maximoa 10 puntu) eta LABORATEGIA (maximoa 1 puntu) izenburuko zutabeak. Mintegiko nota banaturik dago PROIEKTUA eta 3. KONTROLA zutabeen artean, bien artean maximoa 1,5 puntu dira eta horien batura MINTEGIA zutabean erakusten da. Taularen azken bi zutabeak batukariak dira (batean maximoa 3 puntu dira, eta bestean 10 puntu dira). Taula ikusi:
 



Adieraz dezagun orain, irakasgaiaren azken kalifikazioa osatzeko, 1,5+1,5 puntu horiek nola uztartzen diren azterketa idatzian lortutako puntuekin. Horretarako, gogora dezagun aspaldi bateko Irakasgaiaren ebaluazioa blog-artikulua:
  • Azterketa aurretik 3 puntu lor daitezke ikasturtearen zehar mintegian eta laborategian egindako lanari esker:
    • Laborategiko 1,5 puntu (1. eta 2. kontrolak)
    • Mintegiko 1,5 puntu (3. kontrola)
  • Azterketa idatziak 7 puntu emango dizkio azken notari. Azterketa idatziak bi zati izango ditu (galderak eta programa) banaketa honelakoxea delarik:
    • Azterketa idatziaren alde teorikoak %30eko pisua izango du, eta ondorioz 2,1 puntu emango dizkio irakasgaiaren azken notari
    • Azterketa idatziaren programak %70eko pisua izango du, eta ondorioz 4,9 puntu emango dizkio irakasgaiaren azken notari
  • Irakasgaia gainditu ahal izateko, derrigorrezkoa da azterketa idatziaren erdia egitea, hots, 7 puntuetatik 3,5 puntu lortzea
  • Deialdi berezian ez dira kontutan hartuko ikasturtearen zehar mintegian eta laborategian egindako lanak. Horregatik, deialdi berezian azterketa idatzian lorturiko emaitza irakasgaiaren kalifikazioa izango da
 

2023(e)ko maiatzaren 11(a), osteguna

15. astea | etxerako eguna...

  • John Zaharra (mp3)


  • Mo Ghile Mear (mp3)


Etxerako eguna...
(Doinua: Irlandar herrikoa)

Etxerako eguna
iritsi zaigu, lagunak!
Kanta (de)zagun azkena
alaitzeko gure bidea.
[zuek]  - Ez digu konpilatzen
[nik]    - "FOR" hori zertarako?
[zuek]  - Ez gaude oso ziur
[nik]    - Horrela ezin daiteke!
Etxerako eguna
iritsi zaigu, lagunak!
Kanta (de)zagun azkena
alaitzeko gure bidea.
[zuek]  - Nere programa ez dabil
[nik]    - Fitxategia non dago?
[zuek]  - Zer da fitxategia?
[nik]    - Horrela ezin daiteke!
Etxerako eguna
iritsi zaigu, lagunak!
Kanta (de)zagun azkena
alaitzeko gure bidea.




Bertso batzuk Eskoziako gaelikoz eta gainerakoak Irlandako gaelikoz

2023(e)ko maiatzaren 7(a), igandea

Azterketa: lau test

per aspera ad astra   /   nekearen bidetik izarretaraino

Irakasgaiaren ebaluazioa gogoratuz, badakigu azterketa idatziak test bat izango duela eta azken kalifikazioan 2,1 puntu balioko duela. Hona hemen beste deialdi batzuetan jarritako lau test, guztietan erantzunen nondik norakoak ematen dira.

2017, uztaileko Testa


2017, maiatzeko Testa


2016, uztaileko Testa


2016, maiatzeko Testa


Azterketa: zazpi test

per aspera ad astra   /   ahaleginarekin astroetaraino


Irakasgaiaren ebaluazioa gogoratuz, badakigu azterketa idatziak test bat izango duela eta azken kalifikazioan 2,1 puntu balioko duela. Hona hemen beste deialdi batzuetan jarritako zazpi test, lehenengoan galderei dagozkien erantzunen zantzuak ematen dira.

2015eko Ekainaren 17an jarritako Testa


2015eko Maiatzaren 12an jarritako Testa


2014ko Uztailaren deialdiko teoria


2014ko Maiatzaren deialdiko teoria


2013ko Ekainaren 26an jarritako Testa


2012ko Ekainaren 27an jarritako Testa


2012ko Ekainaren 8an jarritako Testa


2023(e)ko maiatzaren 4(a), osteguna

Azterketa: 2022ko uztailaren deialdiko programa (derrigorrezkoak)


Ezaguna denez, Azterketa: 2022ko uztailaren deialdia izenburuko artikuluan azterkari buruzko informazio guzti-guztia dago, berridatz dezagun uztaileko programa baina soilik derrigorrezko aginduak idatziz. Ez dugu esan nahi gainerako aginduak soberan daudenik, baizik jarraian idatziko ditugunak berebiziko garrantzia dutela eta falta direnak horien menpekoak direla nolabait.
Uztaileko programa osoa 2022-06-29_Liburutegia_BaztertuEtaErreserbakKendu.pas fitxategian jasota dago eta honek liburuak.pas izeneko unitate bat erabiltzen du.

Uztaileko programa berezia 2022-06-29_Liburutegia_DerrigorrezkoAginduak.pas fitxategian jasota dago eta bertan nabarmendu dira ezinbestekoak diren aginduak. Windows sistema batean programa hau exekutatzean, LIBURUAK.DAT eta ERRESERBAK.DAT bi datu-fitxategiak C:\Dev-Pas karpetan kokatu behar dira derrigorrez. Uztaileko programa bereziaren kodea jarraian ikusi, non letra larrietan jarri diren aginduak garrantzitsuenak diren azpiprograma bakoitzean:
{ Hitz larrietan idatzi diren aginduak funtsezkoenak dira azpiprograma    }
{ bakoitzean, agindu horien inguruan dabiltzate gainerako agindu guztiak. }
{ Windows sistema batean programa hau exekutatzean, ERRESERBAK.DAT eta    }
{ LIBURUAK.DAT bi datu-fitxategiak C:\Dev-Pas karpetan kokatu behar dira. }

program Liburutegia_DerrigorrezkoAginduak_BaztertuEtaErreserbakKendu;

uses
   crt, sysutils;

const
   iERRESERBA_MAX = 100;

type
   tsKate10 = string[10];
   tsKate15 = string[15];
   tsKate55 = string[55];
   tsKate199 = string[199];
   trdLiburu = record
                  sLiburuKodea: tsKate15;
                  sIzenburua: tsKate55;
                  sMaileguanNori: tsKate15;
                  iAldizMaileguan: integer;
                  sKokapena: tsKate10;
                  sAzkenMaileguData: tsKate10;
               end;
   tfrdLiburutegiFitxategia = file of trdLiburu;
   trdErreserba = record
                     sLiburuKodea: tsKate15;
                     sErabiltzaileZbk: tsKate15;
                     sTelefonoa: tsKate10;
                     sEskariData: tsKate10;
                  end;
   tardErreserbak = array[1..iERRESERBA_MAX] of trdErreserba;
   tfrdErreserbenFitxategia = file of trdErreserba;


(* HELBURUA: Fitxategi mugatu batetik abiatu eta bere informazioa array      *)
(*           batera igaro.                                                   *)
(* ALGORITMOA: Fitxategia oso-osorik ibili eta arraya elikatuz joan.         *)
(* PARAMETROAK: Sarrerako parametro bakarra (fitxategiaren izena)            *)
(*              Irteerako bi parametro (arraya eta bere luzera).             *)
procedure FitxategitikArrayraIrauli(sFitxIzenErreserbak: tsKate199;
                                      var ardErreserbak: tardErreserbak;
                                            var iLuzera: integer);
var
   f_E: tfrdErreserbenFitxategia;
begin
   iLuzera := 0;
   assign(f_E, sFitxIzenErreserbak);
   reset(f_E);
   while not eof(f_E) do
   begin
      iLuzera := iLuzera + 1;
      READ(f_E, ardErreserbak[iLuzera]);    (* FITXATEGITIK IRAKURRI *)
   end;
   close(f_E);
end;


(* HELBURUA: Array batetik abiatuz bere informazioa fitxategi batean gorde.  *)
(* ALGORITMOA: Arraya oso-osorik ibili eta fitxategia elikatuz joan.         *)
(* PARAMETROAK: Sarrerako hiru parametro (arraya eta bere luzera, eta        *)
(*                                        helburuko fitxategiaren izena).    *)
procedure ArraytikFitxategiraIrauli(const ardErreserbak: tardErreserbak;
                                                iLuzera: integer;
                                    sFitxIzenErreserbak: tsKate199);
var
   i: integer;
   f_E: tfrdErreserbenFitxategia;
begin
   assign(f_E, sFitxIzenErreserbak);
   rewrite(f_E);
   for i:=1 to iLuzera do
      WRITE(f_E, ardErreserbak[i]);    (* FITXATEGIAN IDATZI *)
   close(f_E);
end;


(* HELBURUA: Menuaren aukerak pantailan idaztea eta hautapen bat irakurtzea. *)
(* PARAMETROAK: Parametrorik ez du behar eta bere irteera karaktere bat da.  *)
function fncAukeraHautatu: char;
var
   cAukera: char;
begin
   writeln(' 1.  Erreserbatutako liburuen informazioa bistaratu');
   writeln(' 2.  Mailegu gutxiko liburuak baztertzera eraman');
   writeln(' 3.  Erabiltzaile berankorren erreserbak kendu');
   writeln(' 0.  Amaitu');
   write('Zure aukera: ');
   READLN(cAukera);                  (* AUKERA TEKLATUAREN BITARTEZ IRAKURRI *)
   fncAukeraHautatu := cAukera;      (* FUNTZIOAK IRTEERAREN BAT IZAN DEZALA *)
end;


(* HELBURUA: Erreserba-fitxategirik ez badago hutsik sortu.                  *)
(* PARAMETROAK: Sarrerako parametro bakarra (fitxategiaren izena).           *)
procedure ErreserbaFitxategiaHutsikSortu(sFitxIzenErreserbak: tsKate199);
var
   f_E: tfrdErreserbenFitxategia;
begin
   if not FileExists(sFitxIzenErreserbak) then
   begin
      assign(f_E, sFitxIzenErreserbak);
      REWRITE(f_E);                    (* ERRESERBEN FITXATEGIA HUTSIK SORTU *)
      close(f_E);
   end;
end;


(* HELBURUA:  Baztertuen fitxategirik ez badago hutsik sortu.                *)
(* PARAMETROAK: Sarrerako parametro bakarra (fitxategiaren izena).           *)
procedure SortuExistitzenEzBada(sFitxIzenBazt: tsKate199);
var
   f_L: tfrdLiburutegiFitxategia;
begin
   if not FileExists(sFitxIzenBazt) then
   begin
      assign(f_L, sFitxIzenBazt);
      REWRITE(f_L);                    (* BAZTERTUEN FITXATEGIA HUTSIK SORTU *)
      close(f_L);
   end;
end;


(* HELBURUA: Fitxategi laguntzaile baten izena asmatzeko funtzioa, fitxategi *)
(*           bitartekaria da eta erabili ondoren ezabatuko da.               *)
(* PARAMETROAK: Parametrorik ez du behar eta bere irteera kate bat da.       *)
function fnsIzenBatAsmatu: tsKate199;
var
   iAuzazkoZenbakia: integer;
   sAuzazkoKatea: tsKate199;
begin
   iAuzazkoZenbakia := random(MAXINT);
   writeln('       iAuzazkoZenbakia = ', iAuzazkoZenbakia);
   str(iAuzazkoZenbakia, sAuzazkoKatea);
   writeln('          sAuzazkoKatea = ', sAuzazkoKatea);
   fnsIzenBatAsmatu := 'LAGUNTZAILEA__' + sAuzazkoKatea + '.DAT';
end;


(* HELBURUA: Liburutegiko fitxategitik elementu batzuk bertatik kendu eta baztertuen *)
(*           fitxategian gorde, elementuak aukeratzeko bi irizpide: liburuaren azken *)
(*           mailegu-data eta liburua eskuragarri izatea.                            *)
(* ALGORITMOA: Fitxategi bat bitan banatu, fitxategi laguntzaile bat erabiliz.       *)
(* PARAMETROAK: Sarrerako hiru parametro (data bat eta bi fitxategien izenak).       *)
procedure LiburuakBaztertu(          sAzkenData: tsKate10;
                           sFitxIzenLiburutegia: tsKate199;
                            sFitxIzenBaztertuak: tsKate199);
var
   f_Liburutegia: tfrdLiburutegiFitxategia;
   f_Baztertuak: tfrdLiburutegiFitxategia;
   f_Laguntzailea: tfrdLiburutegiFitxategia;
   sFitxIzenLaguntzailea: tsKate199;
   rdLiburuBat: trdLiburu; 
begin
   assign(f_Liburutegia, sFitxIzenLiburutegia);
   reset(f_Liburutegia);
   
   SortuExistitzenEzBada(sFitxIzenBaztertuak);    
   assign(f_Baztertuak, sFitxIzenBaztertuak);
   reset(f_Baztertuak);
   seek(f_Baztertuak, FileSize(f_Baztertuak));
   
   sFitxIzenLaguntzailea := fnsIzenBatAsmatu; 
   assign(f_Laguntzailea, sFitxIzenLaguntzailea);
   REWRITE(f_Laguntzailea);                            (* FITXATEGI LAGUNTZAILEA SORTU *)
   
   while not eof(f_Liburutegia) do
   begin
      read(f_Liburutegia, rdLiburuBat);
      IF (rdLiburuBat.sAzkenMaileguData <= sAzkenData) AND (rdLiburuBat.sMaileguanNori = 'INORI') THEN
         WRITE(f_Baztertuak, rdLiburuBat)             (* BAZTERTUEN FITXATEGIAN IDATZI *)
      else
         WRITE(f_Laguntzailea, rdLiburuBat);          (* FITXATEGI LAGUNTZAILEAN IDATZI *)
   end;

   close(f_Baztertuak);
   close(f_Liburutegia);
   close(f_Laguntzailea);
   
   (* Informazio eguneratua fitxategi laguntzailean dagoelako, liburutegiko *)
   (* fitxategia ezabatu eta bere izena fitxategi lagunzaileari jarri       *)
   assign(f_Liburutegia, sFitxIzenLiburutegia);
   ERASE(f_Liburutegia);                             (* LIBURUTEGIKO FITXATEGI EZABATU *)
   
   assign(f_Laguntzailea, sFitxIzenLaguntzailea);
   RENAME(f_Laguntzailea, sFitxIzenLiburutegia);     (* FITXATEGI LAGUNTZAILEA BERRIZENDATU *)
end;


(* HELBURUA: Erregistroen array baten eduki guztia pantailaratzea.        *)
(* ALGORITMOA: Array nagusia osoan ibili eta elementu bana eremuka        *)
(*             pantailan idatzi.                                          *)
(* PARAMETROAK: Sarrerako bi parametro (arraya eta bere luzera)           *)
procedure ErreserbakErakutsi(const ardErreserbak: tardErreserbak;
                                         iLuzera: integer); 
var
   k: integer; 
begin
   for k:=1 to iLuzera do 
   begin                                              (* PANTAILAN IDATZI *)
      WRITELN(ardErreserbak[k].sLiburuKodea);
      WRITELN(ardErreserbak[k].sErabiltzaileZbk);
      WRITELN(ardErreserbak[k].sTelefonoa);
      WRITELN(ardErreserbak[k].sEskariData);
      writeln;
   end;
end;


(* HELBURUA: Erabiltzaile jakin baten kodea emanik bere elementuak        *)
(*           arrayatik kendu.                                             *)
(* ALGORITMOA: Array nagusia osoan ibili eta array laguntzaile batek      *)
(*             mantenduko diren elementuak jaso ditzala.                  *)
(* PARAMETROAK: Sarrerako parametro bat (erabiltzailearen kodea)          *)
(*              Sarrera/Irteerako bi parametro (arraya eta bere luzera).  *)
procedure ErabiltzaileBatenErreserbakKendu(var ardErreserbak: tardErreserbak;
                                                 var iLuzera: integer;
                                              sErabiltzailea: tsKate15);
var
   k: integer; 
   ardErabiltzaileOnak: tardErreserbak;
   iIndizea: integer;
begin
   iIndizea := 0;
   FOR k:=1 TO iLuzera DO               (* ERRESERBEN ARRAYA OSORIK IBILI *)
   begin
      IF ardErreserbak[k].sErabiltzaileZbk <> sErabiltzailea THEN
      begin
         iIndizea := iIndizea +1;           (* ARRAY LAGUNTZAILEA ELIKATU *)
         ardErabiltzaileOnak[iIndizea] := ardErreserbak[k];
      end;
   end;
   ardErreserbak := ardErabiltzaileOnak;   (* ERRESERBEN ARRAYA EGUNERATU *)
   iLuzera := iIndizea;                    (* ERRESERBEN ARRAYA EGUNERATU *)
end;


(* HELBURUA: Erreserben arraytik elementu batzuk kendu behar dira. Kendu  *)
(*           beharreko elementu bat identifikatzeko data aztertu behar da *)
(*           liburutegi-fitxategian, liburutegiko elementu horri dagokion *)
(*           erabiltzaile-kodea hartu behar da, kode horiekin bat datozen *)
(*           erreserba guztiak kentzeko erreseben arraytik.               *)
(* ALGORITMOA: Liburutegi-fitxategia osoki ibili eta elementu bakoitzaren *)
(*             data aztertuz erreserba-arraya eguneratu baldin badagokio. *)
(* PARAMETROAK: Sarrerako bi parametro (data eta fitategiaren izena)      *)
(*              Sarrera/Irteerako bi parametro (arraya eta bere luzera).  *)
procedure ErabiltzaileBerankorrenErreserbakKendu(           sAzkenData: tsKate10;
                                                  sFitxIzenLiburutegia: tsKate199;
                                                     var ardErreserbak: tardErreserbak;
                                                 var iLuzeraErreserbak: integer);
var
   f_Liburutegia: tfrdLiburutegiFitxategia;
   rdLiburuBat: trdLiburu;
begin
   assign(f_Liburutegia, sFitxIzenLiburutegia);
   reset(f_Liburutegia);
   
   while not eof(f_Liburutegia) do
   begin
      READ(f_Liburutegia, rdLiburuBat);           (* FITXATEGITIK IRAKURRI ETA  *)
                                                  (* ALDERAKETA KONBINATUA EGIN *)
      IF (rdLiburuBat.sAzkenMaileguData <= sAzkenData) AND (rdLiburuBat.sMaileguanNori <> 'INORI') THEN
      begin
         writeln(rdLiburuBat.sMaileguanNori:12, ' kodea duen erabiltzailearen erreserbak ezabatzen...');
         ErabiltzaileBatenErreserbakKendu(ardErreserbak, iLuzeraErreserbak, rdLiburuBat.sMaileguanNori);
      end;
   end;
   
   close(f_Liburutegia);
end;


var  { ---------------------- Programa Nagusiaren aldagaiak ---------------------- }
   sFitxIzenLiburutegia: tsKate199;
   sFitxIzenErreserbak: tsKate199;
   sFitxIzenBaztertuak: tsKate199;
   ardErreserbak: tardErreserbak;
   iLuzeraErreserbak: integer;
   sAzkenData: tsKate10;
   cAukera: char;

begin { ---------------------------- Programa Nagusia ---------------------------- }
   write('Liburutegiaren fitxategi-izena eman (LIBURUAK.DAT adibidez): ');
   readln(sFitxIzenLiburutegia);
   write('Erreserben fitxategi-izena eman (ERRESERBAK.DAT adibidez): ');
   readln(sFitxIzenErreserbak);
      
   if not FileExists(sFitxIzenLiburutegia) then
      writeln('ERROREA: beharrezkoa den liburutegiaren fitxategia falta da!')
   else
   begin
      if not FileExists(sFitxIzenErreserbak) then
         ErreserbaFitxategiaHutsikSortu(sFitxIzenErreserbak);
         
      FitxategitikArrayraIrauli(sFitxIzenErreserbak, ardErreserbak, iLuzeraErreserbak);
      
      repeat
         cAukera := fncAukeraHautatu;
         writeln;
         case cAukera of
            '1' : begin
                     ErreserbakErakutsi(ardErreserbak, iLuzeraErreserbak);
                  end;
            '2' : begin
                     write('Liburuak baztertzeko aaaa/mm/dd data eman (adibidez, 2021/02/27): ');
                     readln(sAzkenData);
                     write('Baztertuen fitxategiaren izena eman (BAZTERTUAK.DAT adibidez): ');
                     readln(sFitxIzenBaztertuak);
                     LiburuakBaztertu(sAzkenData, sFitxIzenLiburutegia, sFitxIzenBaztertuak);
                  end;  
            '3' : begin
                     write('Liburuak itzuliak izateko azken data eman (adibidez, 2022/04/14): ');
                     readln(sAzkenData);
                     ErabiltzaileBerankorrenErreserbakKendu(sAzkenData, sFitxIzenLiburutegia, ardErreserbak, iLuzeraErreserbak);
                  end;                                                  
         end;
         readln; 
      until cAukera = '0';
      
      ArraytikFitxategiraIrauli(ardErreserbak, iLuzeraErreserbak, sFitxIzenErreserbak);
   end;

   readLn; 
end.
 

Azterketa: 2022ko uztailaren deialdia


2022ko Uztailaren deialdiko programa: Biblioteka


Ariketari lotutako informazioa:
  • 2022-06-29_Biblioteka.pdf (ariketaren enuntziatua)
  • 2022-06-29_Liburutegia_BaztertuEtaErreserbakKendu bezero-programa (unitatearekin batera karpeta berean kokatu, adibidez C:\GurePrograma karpetan)  
  • liburuak.pas unitatearen itrurburu-kodea (bezero-programarekin batera karpeta berean kokatu, adibidez C:\GurePrograma karpetan)  
  • Unitatea-windows.zip (liburuak unitate aurrekonpilatuaren bi fitxategiak eta datuak biltzen dituzten bi datu-fitxategiak). Guztira lau fitxategi, lau fitxategi hauek aurreko iturburu-programei esker lor daitezke:
    • liburuak.ppw eta liburuak.ow fitxategiak (bezero-programarekin batera karpeta berean kokatu, adibidez C:\GurePrograma karpetan)
    • LIBURUAK.DAT eta ERRESERBAK.DAT bi fitxategi hauek C:\Azterketa karpetan kokatu behar dira derrigorrez

Hau da liburu izeneko unitatearen interfazea:
(* -------------------------- liburuak unitatearen interfazea ------------------ *)

type
   tsKate199 = string[199];

procedure LiburutegiarenFitxategiaSortu(sFitxIzenLiburutegia: tsKate199);
procedure LiburutegiarenFitxategiaIkusi(sFitxIzenLiburutegia: tsKate199);
procedure ErreserbenFitxategiaSortu(sFitxIzenErreserbak: tsKate199);
procedure ErreserbenFitxategiaIkusi(sFitxIzenErreserbak: tsKate199);

(* ---------------------------- interfazearen amaiera -------------------------- *)




2022ko Uztailaren deialdiko teoria

Galderei dagozkien programak:


 

Azterketa: 2022ko maiatzaren deialdiko programa (derrigorrezkoak)


Ezaguna denez, Azterketa: 2022ko maiatzaren deialdia izenburuko artikuluan azterkari buruzko informazio guzti-guztia dago. Heltzear den uztaileko deialdiari dagokion programa prestatze aldera, berridatz dezagun maiatzeko programa baina soilik derrigorrezko aginduak idatziz (letra larrietan idatzirik ematen diren aginduak). Ez dugu esan nahi gainerako aginduak soberan daudenik, baizik eta letra larrietan idatziko ditugunak berebiziko garrantzia dutela eta besteak horien menpekoak direla nolabait.
Maiatzeko programa osoa 2022-05-23_Liburutegia_MaileguakEtaErreserbak.pas fitxategian jasota dago eta honek bi unitate erabiltzen ditu: datumota.pas izenekoa eta liburu.pas izenekoa.

Maiatzeko programa berezia 2022-05-23_Liburutegia_DerrigorrezkoAginduak.pas fitxategian jasota dago eta bertan nabarmendu dira ezinbestekoak diren aginduak. Windows sistema batean programa hau exekutatzean, LIBURUAK.DAT eta ERRESERBAK.DAT bi datu-fitxategiak C:\Dev-Pas karpetan kokatu behar dira derrigorrez. Maiatzeko programa bereziaren kodea jarraian ikusi, non letra larrietan jarri diren aginduak garrantzitsuenak diren azpiprograma bakoitzean:
{ Hitz larrietan idatzi diren aginduak funtsezkoenak dira azpiprograma    }
{ bakoitzean, agindu horien inguruan dabiltzate gainerako agindu guztiak. }
{ Windows sistema batean programa hau exekutatzean, ERRESERBAK.DAT eta    }
{ LIBURUAK.DAT bi datu-fitxategiak C:\Dev-Pas karpetan kokatu behar dira. }

program Liburutegia_DerrigorrezkoAginduak_MaileguakEtaErreserbak;

uses
   crt, sysutils;

const
   iERRESERBA_MAX = 100;

type
   tsKate10 = string[10];
   tsKate15 = string[15];
   tsKate55 = string[55];
   tsKate199 = string[199];
   trdLiburu = record
                  sLiburuKodea: tsKate15;
                  sIzenburua: tsKate55;
                  sMaileguanNori: tsKate15;
                  iAldizMaileguan: integer;
                  sKokapena: tsKate10;
                  sAzkenMaileguData: tsKate10;
               end;
   tfrdLiburutegiFitxategia = file of trdLiburu;
   trdErreserba = record
                     sLiburuKodea: tsKate15;
                     sErabiltzaileZbk: tsKate15;
                     sTelefonoa: tsKate10;
                     sEskariData: tsKate10;
                  end;
   tardErreserbak = array[1..iERRESERBA_MAX] of trdErreserba;
   tfrdErreserbenFitxategia = file of trdErreserba;


(* HELBURUA: Fitxategiko informazioa array batera eramatea. Fitxategitik *)
(*           irakurri beharra dago, horregatik READ larrietan.           *)
(* PARAMETROAK: Sarrerako parametro bat (fitxategiaren izena)            *)
(*              Irteerako bi parametro (arraya eta luzera).              *)
procedure FitxategitikArrayraIrauli(sFitxIzenErreserbak: tsKate199;
                                      var ardErreserbak: tardErreserbak;
                                            var iLuzera: integer);
var
   f_E: tfrdErreserbenFitxategia;
begin
   iLuzera := 0;
   assign(f_E, sFitxIzenErreserbak);
   reset(f_E);
   while not eof(f_E) do
   begin
      iLuzera := iLuzera + 1;
      READ(f_E, ardErreserbak[iLuzera]);    (* FITXATEGITIK IRAKURRI *)
   end;
   close(f_E);
end;


(* HELBURUA: Array bateko informazioa fitxategi batera eramatea. Fitxategian idatzi *)
(*           beharra dago, horregatik WRITE larrietan jarri da.                     *)
(* PARAMETROAK: Sarrerako hiru parametro(fitxategiaren izena, arraya eta luzera).   *)
procedure ArraytikFitxategiraIrauli(const ardErreserbak: tardErreserbak;
                                                iLuzera: integer;
                                    sFitxIzenErreserbak: tsKate199);
var
   i: integer;
   f_E: tfrdErreserbenFitxategia;
begin
   assign(f_E, sFitxIzenErreserbak);
   rewrite(f_E);
   for i:=1 to iLuzera do
      WRITE(f_E, ardErreserbak[i]);    (* FITXATEGIAN IDATZI *)
   close(f_E);
end;


(* HELBURUA: Menuaren aukerak pantailan idaztea eta hautapen bat irakurtzea. *)
(* PARAMETROAK: Parametrorik ez du behar eta bere irteera karaktere bat da.  *)
function fncAukeraHautatu: char;
var
   cAukera: char;
begin
   writeln('1.  Mailegu-eskaera berri bat gehitzea');
   writeln('2.  Mailegatutako liburu bat itzultzea');
   writeln('3.  Letra batetik hasten diren liburuei buruzko informazioa bistaratzea');
   writeln('0.  Amaitu');
   write('Zure aukera: ');
   READLN(cAukera);                  (* AUKERA TEKLATUAREN BITARTEZ IRAKURRI *)
   fncAukeraHautatu := cAukera;      (* FUNTZIOAK IRTEERAREN BAT IZAN DEZALA *)
end;


(* HELBURUA: Erregistro baten eremuen informazioa pantailaratzea. *)
(* PARAMETROAK: Parametro bakarra eta sarrerakoa.                 *)
procedure LiburuaErakutsi(const rdLiburuBat: trdLiburu);
begin
   WRITELN('Liburuaren kodea: ':32, rdLiburuBat.sLiburuKodea);
   WRITELN('Liburuaren izenburua: ':32, rdLiburuBat.sIzenburua);
   WRITELN('Maileguan duen erabiltzailea: ':32, rdLiburuBat.sMaileguanNori);
   WRITELN('Zenbatetan maileguan: ':32, rdLiburuBat.iAldizMaileguan);
   WRITELN('Kokapena: ':32, rdLiburuBat.sKokapena);
   WRITELN('Azken maileguaren data: ':32, rdLiburuBat.sAzkenMaileguData);
   writeln;
end;


(* HELBURUA: Fitxategi bat osoki arakatu eta letra jakin batez *)
(*           hasten diren liburuen datuak pantailaratzea.      *)
(* ALGORITMOA: Fitxategi bat ibiltzea hasieratik bukaeraraino. *)
(* PARAMETROAK: Bi parametro eta biak sarrerakoak.             *)
procedure LetraBatezHastenDirenLiburuak(     cHasierakoLetra: char;
                                        sFitxIzenLiburutegia: tsKate199);
var
   f_L: tfrdLiburutegiFitxategia;
   rdLiburuBat: trdLiburu;
begin
   assign(f_L, sFitxIzenLiburutegia);
   reset(f_L);
   while not eof(f_L) do
   begin
      READ(f_L, rdLiburuBat);                               (* FITXATEGITIK IRAKURRI *)
      IF cHasierakoLetra = rdLiburuBat.sIzenburua[1] THEN   (* LETREN ALDERAKETA EGIN *)
         LiburuaErakutsi(rdLiburuBat);
   end;
   close(f_L);
end;


(* HELBURUA: Fitxategi bat arakatu eta kode jakin bateko                             *)
(*           elementua bertan dagoen ala ez erabaki.                                 *)
(* ALGORITMOA: Fitxategi batean bilaketa.                                            *)
(* PARAMETROAK: Sarrerako bi parametro (fitxategiaren izena eta gakoa den kodea)     *)
(*              Irteerako bi parametro (elementuaren posizioa eta erregistroa bera). *)
procedure LiburutegianBilatu(         sLiburuGako: tsKate15;
                             sFitxIzenLiburutegia: tsKate199;
                                    var iPosizioa: integer;
                                  var rdLiburuBat: trdLiburu);
var
   f_L: tfrdLiburutegiFitxategia;
   boAurkitua: Boolean;
begin
   assign(f_L, sFitxIzenLiburutegia);
   reset(f_L);
   
   boAurkitua := FALSE;
   while not boAurkitua and not eof(f_L) do
   begin
      READ(f_L, rdLiburuBat);                             (* FITXATEGITIK IRAKURRI *)
      IF rdLiburuBat.sLiburuKodea = sLiburuGako THEN      (* LETREN ALDERAKETA EGIN *)
         boAurkitua := TRUE;
   end;

   IF boAurkitua THEN
      iPosizioa := filepos(f_L) -1         (* POSIZIOA ITZULI *)
   ELSE
      iPosizioa := -1;                     (* POSIZIOA ITZULI *)
      
   close(f_L);
end;


(* HELBURUA: Fitxategi bateko elementu jakin baten informazioa eguneratu. *)
(* ALGORITMOA: Fitxategi baten informazio aldaketa.                       *)
(* PARAMETROAK: Sarrerako hiru parametro (fitxategiaren izena,            *)
(*              elementu berria eta bere posizioa fitxategian).           *)
procedure LiburuaEguneratuLiburutegian(   const rdLiburuBat: trdLiburu;
                                       sFitxIzenLiburutegia: tsKate199;
                                                  iPosizioa: integer);
var
   f_L:  tfrdLiburutegiFitxategia;
begin
   assign(f_L, sFitxIzenLiburutegia);
   reset(f_L);
   SEEK(f_L, iPosizioa);         (* POSIZIO EGOKIAN KOKATU *)
   WRITE(f_L, rdLiburuBat);      (* ETA FITXATEGIAN IDATZI *)
   close(f_L);
end;


(* HELBURUA: Liburu baten mailegua egin behar da. Hau da, liburuaren kodea eta       *)
(*           erabiltzailearen kodea ezagunak direla, liburua bilatu behar da         *)
(*           fitxategian. Horrelako libururik ez badago mezu bat pantailaratu (hau   *)
(*           ez zen azterketako enuntziatuan eskatu). Horrelako libururik bai badago *)
(*           mailegatuta ala libre dagoen aztertu: liburua libre badago, fitxategia  *)
(*           eguneratu; liburua libre ez badago erreserben arrayan elementu berri    *)
(*           bat gehitu.                                                             *)
(* PARAMETROAK: Sarrerako bi parametro (fitxategiaren izena eta gaurko data)         *)
(*              Irteerako bi parametro (arraya eta bere luzera efektiboa).           *)
procedure MaileguEskariBerria(         sGaurkoData: tsKate10;
                              sFitxIzenLiburutegia: tsKate199;
                                 var ardErreserbak: tardErreserbak;
                                       var iLuzera: integer);
var
   sLiburuarenKodea: tsKate15;
   sErabiltzailearenKodea: tsKate15;
   iPosLiburutegian: integer;
   rdLiburuBat : trdLiburu;
begin
   write('Liburu-kodea: ');
   readln(sLiburuarenKodea);
   write('Erabiltzaile-kodea: ');
   readln(sErabiltzailearenKodea);
   LiburutegianBilatu(sLiburuarenKodea, sFitxIzenLiburutegia, iPosLiburutegian, rdLiburuBat);
   if rdLiburuBat.sMaileguanNori = 'INORI' then
   begin    (* LIBURUA ESKURAGARRI DAGO *)
      rdLiburuBat.sMaileguanNori := sErabiltzailearenKodea;
      rdLiburuBat.iAldizMaileguan := rdLiburuBat.iAldizMaileguan + 1;
      rdLiburuBat.sAzkenMaileguData := sGaurkoData;
      LiburuaEguneratuLiburutegian(rdLiburuBat, sFitxIzenLiburutegia, iPosLiburutegian);
   end
   else
   begin    (* LIBURUA MAILEGUAN HARTUTA DAGO *)
      if iLuzera < iERRESERBA_MAX then
      begin
         iLuzera := iLuzera + 1;
         ardErreserbak[iLuzera].sLiburuKodea := sLiburuarenKodea;
         ardErreserbak[iLuzera].sErabiltzaileZbk := sErabiltzailearenKodea;
         ardErreserbak[iLuzera].sEskariData := sGaurkoData;
         write('Telefonoa: ');
         readln(ardErreserbak[iLuzera].sTelefonoa);
      end;
   end; 
end;


(* HELBURUA: Kode jakin bateko elementua arrayan bilatu.                  *)
(* ALGORITMOA: Array batean bilaketa.                                     *)
(* PARAMETROAK: Sarrerako hiru parametro (gakoa den kodea,                *)
(*              arraya eta bere luzera efektiboa).                        *)
function fniErreserbaBilatuArrayean(    sLiburuKodeGako: tsKate15;
                                    const ardErreserbak: tardErreserbak;
                                      iLuzera: integer): integer;
var
   i: integer;
   boAurkitua: Boolean;
begin
   i := 1;
   boAurkitua := FALSE;
   while not boAurkitua and (i <= iLuzera) do
   begin
      IF sLiburuKodeGako = ardErreserbak[i].sLiburuKodea THEN   (* KODEEN ALDERAKETA EGIN *)
         boAurkitua := TRUE
      else
        i := i +1;
   end;
   if boAurkitua then
      fniErreserbaBilatuArrayean := i          (* FUNTZIOAK IRTEERAREN BAT IZAN DEZALA *)
   else
      fniErreserbaBilatuArrayean := -1;        (* FUNTZIOAK IRTEERAREN BAT IZAN DEZALA *)
end;


(* HELBURUA: Posizio jakin bateko elementua arrayatik kendu.              *)
(* ALGORITMOA: Array batetik elementu bat kendu.                          *)
(* PARAMETROAK: Sarrerako parametro bat (posizioa arrayan)                *)
(*              Irteerako bi parametro (arraya eta bere luzera).          *)
procedure ErreserbaZerrendatikEzabatu(var ardErreserbak: tardErreserbak;
                                            var iLuzera: integer;
                                              iPosizioa: integer);
var
i: integer;
begin
   for i := iPosizioa +1 to iLuzera do
       ardErreserbak[i -1] := ardErreserbak[i];
   iLuzera := iLuzera -1;
end;


(* HELBURUA: Maileguan dagoen liburu bat itzuli behar da. Hau da, liburuaren kodea   *)
(*           ezaguna dela, liburua bilatu behar da fitxategian. Horrelako libururik  *)
(*           ez badago mezu bat pantailaratu. Horrelako libururik badago, eskatuta   *)
(*           dagoen aztertu: liburua erreserben arrayan ez badago, ez bada eskatu,   *)
(*           fitxategia eguneratu; liburua erreserben arrayan bai badago, arraytik   *)
(*           ezabatu eta fitxategia eguneratu.                                       *)
(* PARAMETROAK: Sarrerako bi parametro (fitxategiaren izena eta gaurko data)         *)
(*              Irteerako bi parametro (arraya eta bere luzera efektiboa).           *)
procedure MailegatutakoLiburuaItzuli(         sGaurkoData: tsKate10;
                                     sFitxIzenLiburutegia: tsKate199;
                                        var ardErreserbak: tardErreserbak;
                                              var iLuzera: integer);
var
   sLiburuGako: tsKate15;
   iPosLiburutegian: integer; 
   iPosErreserban: integer;
   rdLiburuBat: trdLiburu;
begin
   write('Liburu-kodea: ');
   readln(sLiburuGako);
   LiburutegianBilatu(sLiburuGako, sFitxIzenLiburutegia, iPosLiburutegian, rdLiburuBat);

   iPosErreserban := fniErreserbaBilatuArrayean(rdLiburuBat.sLiburuKodea, ardErreserbak, iLuzera);
   
   if iPosErreserban = -1 then
      rdLiburuBat.sMaileguanNori := 'INORI'    (* INORK EZ DUELAKO ERRESERBATU, LIBURUA GORDETZEKO PRESTATU *)
   else
   begin    (* ERABILTZAILEREN BATEK ERRESERBATURIK DAUKA, HARI MAILEGATU *)
      rdLiburuBat.sMaileguanNori := ardErreserbak[iPosErreserban].sErabiltzaileZbk;
      rdLiburuBat.iAldizMaileguan := rdLiburuBat.iAldizMaileguan +1;
      rdLiburuBat.sAzkenMaileguData := sGaurkoData;
      ErreserbaZerrendatikEzabatu(ardErreserbak, iLuzera, iPosErreserban);
   end;

   LiburuaEguneratuLiburutegian(rdLiburuBat, sFitxIzenLiburutegia, iPosLiburutegian);
end;


var  { ----------------------------------------- Programa Nagusiaren aldagaiak -------------- }
   sFitxIzenLiburutegia: tsKate199;
   sFitxIzenErreserbak: tsKate199;
   ardErreserbak: tardErreserbak;
   iLuzera: integer;
   sGaurkoData: tsKate10;
   cAukera: char;
   cHasierakoLetra: char;
begin { ---------------------------------------- Programa Nagusia --------------------------- }
   write('Liburutegiaren fitxategi-izena eman (LIBURUAK.DAT adibidez): ');
   readln(sFitxIzenLiburutegia);
   write('Erreserben fitxategi-izena eman (ERRESERBAK.DAT adibidez): ');
   readln(sFitxIzenErreserbak);
   
   if not fileExists(sFitxIzenLiburutegia) or not fileExists(sFitxIzenErreserbak)  then
      writeln('ERROREA: behar diren bi fitxategietatik bat falta da (ala biak falta dira)')
   else
   begin
      FitxategitikArrayraIrauli(sFitxIzenErreserbak, ardErreserbak, iLuzera);
      write('Gaurko data: ');
      readln(sGaurkoData);
      
      repeat
         cAukera := fncAukeraHautatu;
         writeln;
         case cAukera of
           '1': MaileguEskariBerria(sGaurkoData, sFitxIzenLiburutegia, ardErreserbak, iLuzera);
           '2': MailegatutakoLiburuaItzuli(sGaurkoData, sFitxIzenLiburutegia, ardErreserbak, iLuzera);
           '3': begin
                   write('Letra: ');
                   readln(cHasierakoLetra);
                   cHasierakoLetra := upcase(cHasierakoLetra);
                   LetraBatezHastenDirenLiburuak(cHasierakoLetra, sFitxIzenLiburutegia);
                end;
         end;
         readln;
      until cAukera = '0';
      
      ArraytikFitxategiraIrauli(ardErreserbak, iLuzera, sFitxIzenErreserbak);
   end;

   readln;
end.
 

Azterketa: 2022ko maiatzaren deialdia


2022ko Maiatzaren deialdiko programa: Liburutegia


Ariketari lotutako informazioa:

Hau da datumota izeneko unitatearen kodea:
(* -------------------------- datumota unitatearen kodea ------------------ *)

INTERFACE

const
   iERRESERBA_MAX = 20;        { enuntziatuan 100 }
   sBIDEA = 'C:\Azterketa\';
type
   tsKate10 = string[10];
   tsKate15 = string[15];
   tsKate55 = string[55];
   tsKate199 = string[199];

   trdLiburu = record
                  sLiburuKodea: tsKate15;
                  sIzenburua: tsKate55;
                  sMaileguanNori: tsKate15;
                  iAldizMaileguan: integer;
                  sKokapena: tsKate10;
                  sAzkenMaileguData: tsKate10;
               end;
   tfrdLiburutegiFitxategia = file of trdLiburu;

   trdErreserba = record
                     sLiburuKodea: tsKate15;
                     sErabiltzaileZbk: tsKate15;
                     sTelefonoa: tsKate10;
                     sEskariData: tsKate10;
                  end;
   tardErreserbak = array[1..iERRESERBA_MAX] of trdErreserba;
   tfrdErreserbenFitxategia = file of trdErreserba;
   
   
IMPLEMENTATION

   (* hutsik *)
   
END.
   
(* ---------------------------- unitatearen amaiera -------------------------- *)


Eta hau da liburu izeneko unitatearen interfazea:
(* -------------------------- liburu unitatearen interfazea ------------------ *)

uses
   datumota, crt;

type
   tsKate10 = string[10];
   tsKate15 = string[15];
   tsKate55 = string[55];
   tsKate199 = string[199];
   trdLiburu = record
                  sLiburuKodea: tsKate15;
                  sIzenburua: tsKate55;
                  sMaileguanNori: tsKate15;
                  iAldizMaileguan: integer;
                  sKokapena: tsKate10;
                  sAzkenMaileguData: tsKate10;
               end;
   tfrdLiburutegiFitxategia = file of trdLiburu;
   trdErreserba = record
                     sLiburuKodea: tsKate15;
                     sErabiltzaileZbk: tsKate15;
                     sTelefonoa: tsKate10;
                     sEskariData: tsKate10;
                  end;
   tardErreserbak = array[1..iERRESERBA_MAX] of trdErreserba;
   tfrdErreserbenFitxategia = file of trdErreserba;
   
procedure FitxategitikArrayraIrauli(sFitxIzenErreserbak: tsKate199;
                                      var ardErreserbak: tardErreserbak;
                                            var iLuzera: integer);
procedure ArraytikFitxategiraIrauli(const ardErreserbak: tardErreserbak;
                                                iLuzera: integer;
                                    sFitxIzenErreserbak: tsKate199);

procedure ErreserbenArrayaIkusi(const ardErreserbak: tardErreserbak;
                                            iLuzera: integer);
procedure LiburutegiarenFitxategiaSortu(sFitxIzenLiburutegia: tsKate199);
procedure LiburutegiarenFitxategiaIkusi(sFitxIzenLiburutegia: tsKate199);
procedure ErreserbenFitxategiaSortu(sFitxIzenErreserbak: tsKate199);
procedure ErreserbenFitxategiaIkusi(sFitxIzenErreserbak: tsKate199);
   
(* ---------------------------- interfazearen amaiera -------------------------- *)




2022ko Maiatzaren deialdiko teoria

Galderei dagozkien programak:


 

Azterketa: 2021eko uztailaren deialdia

2021eko Uztailaren deialdiko programa: Txertoak


Ariketari lotutako informazioa:
  • 2021-06-30_Txertoak.pdf (ariketaren enuntziatua)
  • Txertoak.zip (programaren balizko emaitza bat eta txerto unitatea). Hiru fitxategiak karpeta berean kokatu:
    • txerto unitatearen
      • txerto.ppw fitxategia eta... 
      • txerto.ow fitxategia
    • iturburu-programaren
      • Txertoak_azterketakoa.pas fitxategia

Hau da txerto izeneko unitatearen interfazea:

(* ---------------------------- txerto unitatearen interfazea -------------------- *)

   const
      iLUZERA = 72 ;        (* ikasle kopuru maximoa *)
      
   type
      integer = longint ;   (* INTEGER-entzat 4 byte erabiltzera behartzen da *)
      real    = double ;    (* REAL-entzat 8 byte erabiltzera behartzen da    *)
         
      tsKateIzena = string[200] ;
      tsKate49    = string[49] ;
      tsKate9     = string[9] ;
      tsKate5     = string[5] ;
      tsKate2     = string[2] ;
  
      trdHitzorduBat = record
                          iEguna: integer ;
                          sOrdua: tsKate5 ;
                          sLekua: tsKate5 ;
                       end ; 
      trdIkasleBatKomunikatu = record
                                         sNAN: tskate9 ;    (* 123456789Z *)
                                         sNor: tsKate49 ;   (* IZA GARAI, MARTIN *)
                                   sTelefonoa: tskate9 ;    (* 123456789 *)
                                  rdHitzordua: trdHitzorduBat ;
                               end ;
      tfrdKomunikazioak = file of trdIkasleBatKomunikatu ;
      
      trdIkasleBatTxertatu = record
                                            sNAN: tskate9 ;    (* 123456789Z *)
                                            sNor: tsKate49 ;   (* IZA GARAI, MARTIN *)                            
                                     rdHitzordua: trdHitzorduBat ;
                                     boTxertatua: boolean ;
                                sMatrilulaAldatu: tskate9 ;    (* uuuuhhee *)
                             end ;
      tfrdTxertaketa = file of trdIkasleBatTxertatu ;

   procedure TxertaketaFitxategiaSortu(sFitxIzenT: tsKateIzena; sFitxIzenK: tsKateIzena) ;
   procedure IkasleBatenTxertoarenDatuakErakutsi(const rdIkaslea: trdIkasleBatTxertatu) ;
   procedure TxertaketaFitxategiaIkusi(sFitxIzenT: tsKateIzena) ;
   procedure TxertaketaFitxategiaHasieratu(sFitxIzenT: tsKateIzena) ;
   
   procedure KomunikazioFitxategiaSortu(sFitxIzenK: tsKateIzena) ;
   procedure KomunikazioHitzorduaOsatu(sFitxIzenK: tsKateIzena) ;
   procedure IkasleBatenKomunikazioaErakutsi(const rdIkaslea: trdIkasleBatKomunikatu) ;
   procedure KomunikazioFitxategiaIkusi(sFitxIzenK: tsKateIzena) ;
   procedure KomunikazioFitxategiaHasieratu(sFitxIzenK: tsKateIzena) ;
   
(* ---------------------------- interfazearen amaiera -------------------------- *)




2021eko Uztailaren deialdiko teoria

Galderei dagozkien programak:


Azterketa: 2019ko uztailaren deialdia

2019ko Uztailaren deialdiko programa: Urrutiko botazioak


Ariketari lotutako informazioa:



2019ko Uztailaren deialdiko teoria


Azterketa: 2019ko maiatzaren deialdia

2019ko Maiatzaren deialdiko programa: Urruneko bozketak


Ariketari lotutako informazioa:



2019ko Maiatzaren deialdiko teoria