2023(e)ko uztailaren 5(a), asteazkena

Azterketetara aurkeztu ez diren ikasleen kopuruak


Teoriako eskoletara ikasleen bertaratzea

Klasera ez etortzea dela eta, 2022-23 ikasturtean teoriako klaseen parte-hartzea erregistratu zen eta ondoko irudian ikus daitekeen bezala, astelehenetan gelara datozen ikasleen ehunekoa %71,5ekoa izan da eta ostiraletan %57,6koa. Zenbaki txarrak ez dirudite mediak direlako, baina alde nabaria dago kurtsoaren hasierako eta bukaerako etorreren artean (kurtso hasieran ikasle gehien-gehienak klaseetara etorri ziren eta kurtso bukaerarako hutsegiteak ugariak izan ziren). Esan gabe doa, ostiraletako hutsegiteak askoz gehiago direla astelehenetako hutsegiteak baino:

2022-23 ikasturteko ikasleen parte-hartzea eskola magistraletan asterik aste



Azterketetara aurkeztu ez diren ikasleen kopuruak

Aurreko grafikoaren 15. asteko datuei erreparatuta, 37 ikasle bertaratu ziren azken astelehenean eta 30 ikasle bertaratu ziren azken ostiralean. Horregatik, media bezala, 34 ikasle bertaratu ziren azken astean eta ondorioz esan daiteke 74-34=40 ikaslek bazterturik (edo erdi bazterturik) zeukaten irakasgaia kurtsoa bukatzean.

Bestalde, azterketa desberdinetara zenbat ikasle aurkeztu zirenen kopuruak jaso ziren eta ondoko taulan bildu dira:

2022-23 ikasturteko azterketetara ez aurkeztuak 31. taldean
2022-23 IKASLEAK EZ  AURKEZTUAK GAIAK  ETA  ASTEA/DATA
1. kontrola
74 (%100)
8 (%10,8)
Baldintzazkoak eta errepikakorrak
(5. astea)
2. kontrola
18 (%24,3)
Kateak eta azpiprogramak
(10. astea)
3. kontrola
30 (%40,5)
Arrayak, erregistroak eta fitxategiak
(15. astea)
Maiatza
35 (%47,3)
Dena
(2023-05-24)
Uztaila
43 (%100)
29 (%67,4)
Dena
(2023-06-30)

Goiko taulan adierazten den bezala, 1. kontroleko azterketara ikasle gehienak aurkeztu ziren, baina, hortik aurrera, hurrengo azterketara askoz ikasle gutxiagok parte hartu zuten.

5. astetik 10. astera bitartean gai garrantzitsu bat ematen da: azpiprogramak (7. astea). Dirudienez, azpiprogramak ulertzea eta erabiltzea zaila egiten zaio ikasle askori eta, ziur gaude, irakasgaiaren punturik kritikoena dela.

 

Errendimenduaren bilakaera


Errendimendu-tasa

Aprobatuen eta matrikulatuen arteko zatidurari errendimendu-tasa esaten zaio, eta irakaskuntzan erabiltzen den metrika garrantzitsu bat da.

2014-15 ikasturtearen eta 2022-23 ikasturtearen artean, Informatika irakasgaian 31. taldeko emaitza orokorrak (maiatzako notak eta uztaileko notak kontutan harturik) ondoko hauek izan dira, hots, Informatika irakasgaian 31. taldeko errendimenduak hauek izan dira:

31. taldearen urtez urteko errendimendu-tasa (aprobatuak/matrikulatuak) maiatzeko eta uztaileko deialdien ondoren

2022-23 ikasturteko errendimendu-tasa 31. taldean
IKASLEAK APROBATUAK SUSPENDITUAK
74 (%100)
39 (%52,7)
35 (%47,3)
39 (%52,7)
6 (%8,1)
29 (%39,2)
2022-23 >= 5 < 5 E.A.



Arrakasta-tasa

Aprobatuen eta aurkeztuen arteko zatidurari arrakasta-tasa esaten zaio eta irakaskuntzan erabiltzen den beste metrika bat da. Arrakasta-tasari dagokiola, Informatika irakasgaiak lortu duen emaitza %86,7koa izan zen 2022-23 ikasturtean, hau da, azterketa batera edo/eta bestera aurkeztu ziren zortzi ikasleetatik kasik zazpik aprobatu zuten:

2022-23 ikasturteko arrakasta-tasa 31. taldean
AURKEZTUAK APROBATUAK SUSPENDITUAK
45 (%100)
39 (%86,7)
6 (%13,3)
2022-23 >= 5 < 5

Grafikoki:

31. taldearen arrakasta-tasa (aprobatuak/aurkeztuak) maiatzeko
eta uztaileko deialdi biren ostean 2022-23ko ikasturtean

Arazoa, bistan da, irakasgaia bertan bera uzten duten ikasleen kopuru handian dago, ikasleen %39,2koa ez zen aurkeztu ez maiatzeko ezta uztaileko deialdietan. Hau da, 74 ikasleetatik 29 ikasle ez ziren aurkeztu ez maiatzeko ezta uztaileko deialdietan (gainerako 45 ikasleetatik, 39k aprobatu zuten eta 6 suspendituta geratu ziren).

Klasera ez etortzea dela eta, kurtsoaren zehar jaso ziren datuak aztertzea interesgarria da.

 

2023ko uztailaren deialdiko emaitzak


2022ko uztailaren deialdiari dagozkion kalifikazioak ikusteko, goiko irudiaren gainean klikatu edo esteka hau jarraitu:

Azterketak ikusi ahal izateko, datorren asteazkenean, uztailaren 6an, 11etatik 12etara, B eraikineko 3. solairuko P3B57 bulegoan.


Etortzekoa bazara, mesedez, aldez aurretik posta elektroniko mezu bat bidal egidazu.


2023(e)ko ekainaren 27(a), asteartea

Azterketa: 2023ko uztailaren deialdiko programa (derrigorrezkoak)


 

Ezaguna denez, Azterketa: 2023ko uztailaren deialdia izenburuko artikuluan azterkari buruzko informazio guzti-guztia dago, bai programari buruzkoa zein teoriari buruzkoa.

Berridatz dezagun uztaileko 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.

Uztaileko programa osoa 2023-06-30_Kromoak.pas fitxategian jasota dago eta honek JOKALARIAK.DAT datu-fitxategia edo KROMOAK.DAT datu-fitxategia erabil ditzake. Datu-fitxategi horiek aldez aurretik sortuta daude (adibidez, DatuFitxategiaSortu.pas programari esker).

2023-06-30_Kromoak_DerrigorrezkoAginduak.pas fitxategian jasota dagoen uztaileko programa berezian letra larriz nabarmendu dira ezinbestekoak diren aginduak. Konpiladorearen ingurune barnetik programa hau exekutatzean, KROMOAK.DAT datu-fitxategia (edo JOKALARIAK.DAT datu-fitxategia) C:\Dev-Pas karpetan kokatu behar da derrigorrez. Ikusi jarraian uztaileko programa bereziaren kodea, 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 }
{ edo KROMOAK.DAT datu-fitxategiak C:\Dev-Pas karpetan kokatu behar dira.     }
 
program KromoakDerrigorrezkoAginduak_2023ko_uztaila;

uses
   crt, sysutils;

const
   iMAX = 340;

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;
   
   trdJokalaria = record
                     sIzena   : tsKate25;
                     sTokia   : tsKate25;
                     boHartuta: boolean;
                  end;
   
   tardJokalariak = array[1..iMAX] of trdJokalaria;
   tardNireTaldea = array[1..11] of trdJokalaria;


{------------------TALDEAREN KONFIGURAZIA------------------------------}
function fncKonfigurazioaHautatu: char;
  var
     cHautapena: char;
  begin
     writeln;
     writeln('KONFIGURAZIOAK':20);
     writeln('==============':20);
     writeln('  A)   4-4-2     (atezain 1, 4 atzelari, 4 erdilari eta 2 aurrelari)':74);
     writeln('  B)   4-5-1     (atezain 1, 4 atzelari, 5 erdilari eta aurrelari 1)':74);
     writeln('  C)   4-3-3     (atezain 1, 4 atzelari, 3 erdilari eta 3 aurrelari)':74);
     writeln('  D)   3-4-3     (atezain 1, 3 atzelari, 4 erdilari eta 3 aurrelari)':74);
     writeln;
     repeat
        write('Zure aukera: ':20);
        READLN(cHautapena);                   (* KASU EGOKIA AUKERATU *)
        cHautapena := upcase(cHautapena);
     until (cHautapena >= 'A') and (cHautapena <= 'D');
     FNCKONFIGURAZIOAHAUTATU := cHautapena;          (* BALIOA ITZULI *)
  end;

{------------ARRAY BAT ELIKATU FITXATEGIKO DATUEKIN--------------------}
procedure FitxategikoDatuBatzukArrayBatera(        sFitxIzen: tsKate199;
                                              sPostuaZelaian: tsKate25; 
                                           var ardJokalariak: tardJokalariak; 
                                                 var iLuzera: integer);
  var  
     rdKromoBat: trdKromoa;
     f_B       : tfrdBilduma;
  begin
     assign(f_B, sFitxIzen);
     reset(f_B);
     
     iLuzera := 0;
     while not eof(f_B) do
     begin
        READ(f_B, rdKromoBat);               (* FITXATEGITIK IRAKURRI *)
        IF (rdKromoBat.sTokia = sPostuaZelaian) AND (rdKromoBat.iZenbatAle > 0) THEN
        BEGIN
           iLuzera := iLuzera +1;                   (* ARRAYA ELIKATU *)
           ardJokalariak[iLuzera].sIzena := rdKromoBat.sIzena;
           ardJokalariak[iLuzera].sTokia := sPostuaZelaian;
           ardJokalariak[iLuzera].boHartuta := FALSE;
        END;
     end;
     
     close(f_B);
  end;

{------------LORTUTAKO TALDEA PANTAILARATU----------------}
procedure TaldeaIkusi(const ardJokalariak: tardNireTaldea);
  var  
     iKont: integer;
  begin
     writeln('IZENA':30, 'TOKIA ZELAIAN':20);
     writeln('-----':30, '-------------':20); 
     FOR iKont:=1 TO 11 DO
     BEGIN                                 (* ARRAY OSOA PANTAILARATU *)
        WRITELN(ardJokalariak[iKont].sIzena:30, ardJokalariak[iKont].sTokia:20);
     END;
     writeln;
  end;

{-----------JOKALARI GEHIAGO NIRE TALDEAN------------------------------}
procedure JokalariakAukeratu( var ardJokalariak: tardJokalariak;
                                 iLuzJokalariak: integer;
                              var ardNireTaldea: tardNireTaldea;
                             var iLuzNireTaldea: integer;
                                        iZenbat: integer);
var
   iKont: integer;
   iZbk : integer;
begin
   randomize;
   FOR iKont:=1 TO iZenbat DO            (* ERREPIKAPEN KOPURU JAKINA *)
   BEGIN
      repeat
         iZbk := RANDOM(iLuzJokalariak) +1;   (* AUZAZKO BALIO EGOKIA *)
         write('iLuzJokalariak = ', iLuzJokalariak:3, 'iZbk = ':12, iZbk:3);
         if ardJokalariak[iZbk].boHartuta then
            writeln('JOKALARI HAU HARTUTA DAGO, ERREPIKATU!':42)
         else
            writeln;
      until (not ardJokalariak[iZbk].boHartuta);

      iLuzNireTaldea := iLuzNireTaldea +1;
      ardNireTaldea[iLuzNireTaldea].sIzena := ardJokalariak[iZbk].sIzena;
      ardNireTaldea[iLuzNireTaldea].sTokia := ardJokalariak[iZbk].sTokia;
      ardNireTaldea[iLuzNireTaldea].boHartuta := TRUE;
      ardJokalariak[iZbk].boHartuta := TRUE;        (* ARRAYA ELIKATU *)
   END;
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;

{------------------TAULA BEZALA ERAKUTSI-------------------------------}
procedure TaulaBezalaErakutsi(const rdKromoBat:trdKromoa);
  begin
     with rdKromoBat, rdBalioak do
     begin
        WRITE(iZenbakia:6);                       (* PANTAILAN IDATZI *)
        WRITE(sIzena:17);
        WRITE(sTokia:15);
        WRITE(sTaldea:12);
        WRITE(iDefentsan:6, iKontrolean:6, iErasoan:6, iGuztira:7);
        writeln;
     end;
  end;

{-------------TALDEAREN PUNTUAK KALKULATU------------------------------}
function fniPuntuakKalkulatu(          sFitxIzen: tsKate199; 
                             const ardNireTaldea: tardNireTaldea): integer;
  var  
     rdKromoBat: trdKromoa;
     iKont     : integer;
     iMetatua  : integer;
  begin
     IMETATUA := 0;            (* HASIERAKETA *)
     writeln('ZBK.':7, 'IZENA':16, 'TOKIA':15, 'TALDEA':12, 'DEF.':7,'KON.':6, 'ERA.':6, 'GUZT.':7);
     writeln('--------------------------------------------------------------------------':76);
     for iKont:=1 to 11 do
     begin
        JokalariaBilatu(sFitxIzen, ardNireTaldea[iKont].sIzena, rdKromoBat);
        TaulaBezalaErakutsi(rdKromoBat);
        IMETATUA := IMETATUA + rdKromoBat.rdBalioak.iGuztira;     (* METAKETA *)
     end;
     writeln('--------------------------------------------------------------------------':76);
     FNIPUNTUAKKALKULATU := IMETATUA;                        (* BALIOA ITZULI *)
  end;

{======PROGRAMA NAGUSIAREN ALDAGAIAK===================================}
var
   sFitxIzen       : tsKate199;
   
   ardAtezainak    : tardJokalariak;
   ardAtzelariak   : tardJokalariak;
   ardErdilariak   : tardJokalariak;
   ardAurrelariak  : tardJokalariak;
   iLuzAtezainak   : integer;
   iLuzAtzelariak  : integer;
   iLuzErdilariak  : integer;
   iLuzAurrelariak : integer;
   cAukera         : char;
   
   iNireAtzelariak : integer; 
   iNireErdilariak : integer; 
   iNireAurrelariak: integer; 
   
   ardNireTaldea   : tardNireTaldea;
   iLuzNireTaldea  : integer;
   iPuntuak        : integer;
   
{=========PROGRAMA NAGUSIA=============================================}
begin      
   clrscr;
   write('Fitxategiaren izena eman ("KROMOAK.DAT" edo "JOKALARIAK.DAT"): ');
   readln(sFitxIzen);

   if not fileexists(sFitxIzen) then
      writeln('ERROREA!!! "', sFitxIzen, '" izeneko fitxategirik ez da')
   else
   begin
      writeln;
      writeln;
      writeln('1. URRATSA: LAU ARRAYAK BETE');
      writeln('============================');
      writeln;
      FitxategikoDatuBatzukArrayBatera(sFitxIzen, 'Atezaina', ardAtezainak, iLuzAtezainak);
      FitxategikoDatuBatzukArrayBatera(sFitxIzen, 'Atzelaria', ardAtzelariak, iLuzAtzelariak);
      FitxategikoDatuBatzukArrayBatera(sFitxIzen, 'Erdilaria', ardErdilariak, iLuzErdilariak);
      FitxategikoDatuBatzukArrayBatera(sFitxIzen, 'Aurrelaria', ardAurrelariak, iLuzAurrelariak);
      
      writeln;
      writeln('2. URRATSA: TALDEAREN KONFIGURAZIOA ERABAKIZ TALDEA OSA DAITEKEEN FROGATU');
      writeln('=========================================================================');
      writeln;
      writeln('Zure taldeak zer estrategia erabiliko du? Konfigurazioa bat hautatu');
      cAukera := fncKonfigurazioaHautatu;
      case cAukera of
        'A': begin
                iNireAtzelariak  := 4; 
                iNireErdilariak  := 4; 
                iNireAurrelariak := 2;
             end;
        'B': begin
                iNireAtzelariak  := 4; 
                iNireErdilariak  := 5; 
                iNireAurrelariak := 1;
             end;
        'C': begin
                iNireAtzelariak  := 4; 
                iNireErdilariak  := 3; 
                iNireAurrelariak := 3;
             end;
        'D': begin
                iNireAtzelariak  := 3; 
                iNireErdilariak  := 4; 
                iNireAurrelariak := 3;
             end;
      end;  { case }
         
      if (iLuzAtezainak >= 1) and
         (iLuzAtzelariak >= iNireAtzelariak) and
         (iLuzErdilariak >= iNireErdilariak) and
         (iLuzAurrelariak >= iNireAurrelariak) then
      begin
         writeln;
         writeln;
         writeln('3. URRATSA: TALDEA OSATU');
         writeln('========================');
         iLuzNireTaldea := 0;
         writeln('------------------------------------------');
         JokalariakAukeratu(ardAtezainak, iLuzAtezainak, ardNireTaldea, iLuzNireTaldea, 1);
         writeln('------------------------------------------');
         JokalariakAukeratu(ardAtzelariak, iLuzAtzelariak, ardNireTaldea, iLuzNireTaldea, iNireAtzelariak);
         writeln('------------------------------------------');
         JokalariakAukeratu(ardErdilariak, iLuzErdilariak, ardNireTaldea, iLuzNireTaldea, iNireErdilariak);
         writeln('------------------------------------------');
         JokalariakAukeratu(ardAurrelariak, iLuzAurrelariak, ardNireTaldea, iLuzNireTaldea, iNireAurrelariak);
         writeln('------------------------------------------');
         writeln;
         writeln('Aukeratu den ', iNireAtzelariak, '-', iNireErdilariak, '-', iNireAurrelariak, ' konfigurazioa duen taldea hau da:');
         writeln;
         TaldeaIkusi(ardNireTaldea);
         
         writeln;
         writeln('4. URRATSA: TALDEAREN DATU GUZTIAK ERAKUTSI ETA BALIOA ZENBATU');
         writeln('==============================================================');
         writeln;
         iPuntuak := fniPuntuakKalkulatu(sFitxIzen, ardNireTaldea); 
         writeln;
         writeln('Nere taldearen balioa: ', iPuntuak, ' puntu');
         writeln;
      end   { then, taldea osa daiteke }
      else
         writeln('Eskatu duzun ', iNireAtzelariak, '-', iNireErdilariak, '-', iNireAurrelariak, ' konfigurazioko talderik ezin daiteke osatu!!!');
   end;     { else, datu-fitxategirik ez da }
   
   writeln;
   writeln;
   writeln;
   writeln('-------------------------');
   writeln('Programa bukatzera doa!!!');
   writeln('-------------------------');
   readln;
end. { PROGRAMAREN AMAIERA }
 

Azterketa: 2023ko uztailaren deialdia


2023ko Uztailaren deialdiko programa: Taldea kromoekin


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 edo C:\KromoBilduma karpetan)  

2023-06-30_TaldeaKromoekin.pas programak neurri desberdineko datu-fitxategiak prozesa ditzake, adibidez 21, 30 edo 39 elementuko datu-fitxategiak (gehienez 340 elementu izan ditzake datu-fitxategiak). 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 Uztailaren deialdiko teoria

Galderei dagozkien programak:


 

2023(e)ko ekainaren 26(a), astelehena

Azterketarako deia, uztaila



Iruñea, 2012ko 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
bigarren azterketa
hurbiltzen da ari


Informatika: uztaileko deialdia
Eguna
Ordua
Eraikina
Ikasgela
2023-06-30
08:30
I-G
P3G1A

 

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

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 edo C:\KromoBilduma 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.