2024(e)ko maiatzaren 8(a), asteazkena

15. ASTEA | laborategi/mintegian egin dena

15. astea (2024/05/08) laborategi/mintegian egindakoa


  • 24 ikasleetatik 12 ikasleek kontrol-ariketaren bidalketa egin dute

  • Hirugarren kontrola egiteko hau eman da:
    • Ariketaren emaitzaren hasiera den Hasiera__2azp__3azter.pas iturburu-programa
    • azter_3.pas unitatearen bi fitxategi hauek:
      • azter_3.ow
      • azter_3.ppw

  • Jarraian, lehen eta hirugarren azpitaldeetako ariketen enuntziatuak eta soluzioak ematen dira:

froga_3.pas



kont_3.pas


 

2024(e)ko maiatzaren 1(a), asteazkena

14. ASTEA | etxerako lana

 14. astea (2024/05/01) etxean egitekoa

AZP-2 azpitaldekoek saio praktiko hau galdu duzuenez, hona hemen, gutxi gora behera, aste honetan AZP-1 eta AZP-3 azpitaldeekin egin duguna.

Fitxategiekin lan eginez, ondoko eragiketak praktikatu ditugu:

  • Fitxategiaren existentzia aztertu
  • Fitxategia sortu
  • Fitxategi osoa prozesatu
  • Bilaketa
  • Elementu baten datu bat aldatu
  • Elementu berri bat bukaeran gehitu
  • Bi fitxategi bakar batera bildu
  • Fitxategi bat bitan banatu

Programa hau datorren asteko kontrola prestatze aldera lagungarria izan daiteke.

program Aste_14__ErregistroenFitxategiarekinLanean;
uses
   crt,        // clrscr erabiltzeko
   sysutils;   // fileexists erabiltzeko

type
   tsKate199 = string[199];
   tsKate12 = string[12];

   trdIkasle = record
                  sIzena: tsKate12;
                  rNota: real;
                  iKontrola: integer;
               end;

   tfrdIkasgela = file of trdIkasle;

{--------------------------------Azpiprogramak---------------------------------}
procedure FitxategiaSortuEtaBete(sFitxIzen: tsKate199);
var
   f: tfrdIkasgela;
   rdElem: trdIkasle;
   iZenbat: integer;
   iKont: integer;
   iZeinKontrol: integer;
begin
   assign(f, sFitxIzen);
   rewrite(f);

   repeat
      write('Zenbat ikasleren datuak gordeko dira? ');
      readln(iZenbat);
   until iZenbat > 0;

   repeat
      write('Zein kontrol da? (1 ala 2) ');
      readln(iZeinKontrol);
   until (iZeinKontrol = 1) or (iZeinKontrol = 2);

   for iKont:=1 to iZenbat do
   begin
      write(iKont:10, '. ikaslearen izena: ');
      readln(rdElem.sIzena);
      rdElem.sIzena := upcase(rdElem.sIzena);
      repeat
         write(iKont:10, '. ikaslearen nota:  ');
         readln(rdElem.rNota);
      until (rdElem.rNota >= 0.0) and (rdElem.rNota <= 10.0);
      rdElem.iKontrola := iZeinKontrol;
      write(f, rdElem);
   end;

   close(f);
end;


procedure FitxategiarenEdukiaIkusi(sFitxIzen: tsKate199);
var
   f: tfrdIkasgela;
   rdElem: trdIkasle;
begin
   assign(f, sFitxIzen);
   reset(f);

   writeln('IZENA':34, 'NOTA':18, 'KONTROLA':18);
   writeln('-----':34, '----':18, '--------':18);
   while not eof(f) do
   begin
      read(f, rdElem);
      writeln(filepos(f):5, '. ikaslea: ', rdElem.sIzena:18, rdElem.rNota:18:2, rdElem.iKontrola:18 );
   end;

   close(f);
end;


procedure Batu(sFitxIzen_1eta2, 
                   sFitxIzen_1, 
                   sFitxIzen_2: tsKate199);
var
   f_1eta2: tfrdIkasgela;
   f_1: tfrdIkasgela;
   f_2: tfrdIkasgela;
   rdElem: trdIkasle;
begin
   assign(f_1, sFitxIzen_1);
   reset(f_1);
   assign(f_2, sFitxIzen_2);
   reset(f_2);
   assign(f_1eta2, sFitxIzen_1eta2);
   rewrite(f_1eta2);

   while not eof(f_1) do
   begin
      read(f_1, rdElem);
      write(f_1eta2, rdElem);
   end;

   while not eof(f_2) do
   begin
      read(f_2, rdElem);
      write(f_1eta2, rdElem);
   end;

   close(f_1);
   close(f_2);
   close(f_1eta2);
end;


procedure Banatu(sFitxIzen_1eta2, 
                 sFitxIzen_Aprob, 
                 sFitxIzen_Suspn: tsKate199);
var
   f_1eta2: tfrdIkasgela;
   f_A: tfrdIkasgela;
   f_S: tfrdIkasgela;
   rdElem: trdIkasle;
begin
   assign(f_1eta2, sFitxIzen_1eta2);
   reset(f_1eta2);
   assign(f_A, sFitxIzen_Aprob);
   rewrite(f_A);
   assign(f_S, sFitxIzen_Suspn);
   rewrite(f_S);


   while not eof(f_1eta2) do
   begin
      read(f_1eta2, rdElem);
      if rdElem.rNota >= 5.0 then
         write(f_A, rdElem)
      else
         write(f_S, rdElem);
   end;

   close(f_1eta2);
   close(f_A);
   close(f_S);
end;


function fniBilatu(sFitxIzen_1eta2: tsKate199;
                              sNor: tsKate12;
                      iZeinKontrol: integer): integer;
var
   f: tfrdIkasgela;
   rdElem: trdIkasle;
   boAurkitua: boolean;
begin
   assign(f, sFitxIzen_1eta2);
   reset(f);

   boAurkitua := FALSE;
   while not eof(f) and not boAurkitua do
   begin
      read(f, rdElem);
      if (rdElem.sIzena = sNor) and (rdElem.iKontrola = iZeinKontrol) then
         boAurkitua := TRUE;
   end;

   if boAurkitua then
      fniBilatu := filepos(f) -1
   else
      fniBilatu := -1;

   close(f);
end;


procedure Aldatu(sFitxIzen_1eta2: tsKate199; 
                        iNonDago: integer);
var
   f: tfrdIkasgela;
   rdElem: trdIkasle;
begin
   assign(f, sFitxIzen_1eta2);
   reset(f);

   seek(f, iNonDago);
   read(f, rdElem);
   repeat
      write('"', rdElem.sIzena, '" ikaslearen nota berria: ');
      readln(rdElem.rNota);
   until (rdElem.rNota >= 0.0) and (rdElem.rNota <= 10.0);
   seek(f, iNonDago);
   write(f, rdElem);

   close(f);
end;


procedure Gehitu(sFitxIzen_1eta2: tsKate199; 
                  const rdBerria: trdIkasle);
var
   f: tfrdIkasgela;
begin
   assign(f, sFitxIzen_1eta2);
   reset(f);

   seek(f, filesize(f));
   write(f, rdBerria);

   close(f);
end;


{---------------------------------Programa nagusia-----------------------------}
var
   sFitxIzen: tsKate199;
   sFitxIzen_1: tsKate199;
   sFitxIzen_2: tsKate199;
   sFitxIzen_1eta2: tsKate199;
   sFitxIzen_Aprob: tsKate199;
   sFitxIzen_Suspn: tsKate199;
   sNor: tsKate12;
   iZeinKontrol: integer;
   iNonDago: integer;
   rdBerria: trdIkasle;
BEGIN
   clrscr;
   writeln('Eman ikasleen datuak gordeko dituen fitxategiaren');
   write('izena (adibidez, "NOTAK" edo "1_KONTROLA"): ');
   readln(sFitxIzen);
   sFitxIzen := 'C:\Users\Docencia\Desktop\Pascal\' + sFitxIzen + '.DAT';
   writeln;

   if fileexists(sFitxIzen) then
   begin
      writeln('"', sFitxIzen, '" badago, bere edukia erakutsi.');
      FitxategiarenEdukiaIkusi(sFitxIzen);
      writeln;
   end
   else
   begin
      writeln('"', sFitxIzen, '" ez dago, sortu eta datuz bete.');
      FitxategiaSortuEtaBete(sFitxIzen);
      writeln;
      FitxategiarenEdukiaIkusi(sFitxIzen);
      writeln;
   end;

   writeln;
   writeln('===============================================================');
   writeln('  HONAINO FITXATEGI BAT SORTU ETA BERE EDUKIA PANTAILARATU DA.');
   writeln('  SORTU "1_KONTROLA" FITXATEGIA ETA "2 KONTROLA" FITXATEGIA.');
   writeln('===============================================================');
   writeln;
   writeln('===============================================================');
   writeln(' HEMENDIK AURRERA BI FITXATEGIEN EDUKIA BAKARRERA EKARRIKO DA');
   writeln(' ETA ALDERANTZIZ FITXATEGI BATEN EDUKIA BITAN BANATUKO DA.');
   writeln('===============================================================');
   writeln;

   sFitxIzen_1 := 'C:\Users\Docencia\Desktop\Pascal\1_KONTROLA.DAT';
   sFitxIzen_2 := 'C:\Users\Docencia\Desktop\Pascal\2_KONTROLA.DAT';

   if (fileexists(sFitxIzen_1)) and (fileexists(sFitxIzen_2)) then
   begin
      sFitxIzen_1eta2 := 'C:\Users\Docencia\Desktop\Pascal\1eta2_KONTROLA.DAT';
      Batu(sFitxIzen_1eta2, sFitxIzen_1, sFitxIzen_2);
      writeln;
      writeln('"', sFitxIzen_1eta2, '" fitxategiaren edukia: ');
      FitxategiarenEdukiaIkusi(sFitxIzen_1eta2);
      writeln;
      writeln('-------------------------------------------------------------');
      writeln;
      write('Nota aldatuko diogun ikaslearen izena eman: ');
      readln(sNor);
      sNor := upcase(sNor);
      repeat
         write('Zein kontroleko nota aldatuko diogu "', sNor, '" ikasleari? ');
         readln(iZeinKontrol);
      until (iZeinKontrol = 1) or (iZeinKontrol = 2);
      iNonDago := fniBilatu(sFitxIzen_1eta2, sNor, iZeinKontrol);
      if iNonDago = -1 then
         writeln('"', sNor, '" ikaslerik ez dago')
      else
         Aldatu(sFitxIzen_1eta2, iNonDago);
      writeln;
      writeln('-------------------------------------------------------------');
      writeln;
      writeln('-------------------------------------------------------------');
      writeln;
      write('Gehituko dugun ikaslearen izena eman: ');
      readln(rdBerria.sIzena);
      rdBerria.sIzena := upcase(rdBerria.sIzena);
      repeat
         write('Zein kontroleko datuak gehituko ditugu (1 ala 2) ');
         readln(rdBerria.iKontrola);
      until (rdBerria.iKontrola = 1) or (rdBerria.iKontrola = 2);
      repeat
         write('"', rdBerria.sIzena, '" ikaslearen nota berria: ');
         readln(rdBerria.rNota);
      until (rdBerria.rNota >= 0.0) and (rdBerria.rNota <= 10.0);

      Gehitu(sFitxIzen_1eta2, rdBerria);
      writeln;
      writeln('-------------------------------------------------------------');

      sFitxIzen_Aprob := 'C:\Users\Docencia\Desktop\Pascal\APROBATUAK.DAT';
      sFitxIzen_Suspn := 'C:\Users\Docencia\Desktop\Pascal\SUSPENDITUAK.DAT';
      Banatu(sFitxIzen_1eta2, sFitxIzen_Aprob, sFitxIzen_Suspn);
      writeln;
      writeln('"', sFitxIzen_Aprob, '" fitxategiaren edukia: ');
      FitxategiarenEdukiaIkusi(sFitxIzen_Aprob);
      writeln;
      writeln('"', sFitxIzen_Suspn, '" fitxategiaren edukia: ');
      FitxategiarenEdukiaIkusi(sFitxIzen_Suspn);
      writeln;
   end
   else
   begin
      writeln('Bi fitxategietatik bat falta da (ala biak falta dira)');
   end;

   writeln;
   writeln;
   writeln('=======================');
   writeln('RETURN sakatu amaitzeko');
   write  ('=======================');
   readln;
end. { PROGRAMAREN BUKAERA }

 

14. ASTEA | laborategian egin dena

 14. astea (2024/05/01) laborategi/mintegian egindakoa

 

2024(e)ko apirilaren 23(a), asteartea

13. ASTEA | etxerako lana

 13. astea (2024/04/23) etxean egitekoa

  • Funtsezkoena une honetan: Proiektuarekin jarrraitzea
  • Gogoratu datorren asteko asteazkena festa delako, laborategirik ez dugula izango. Kalterik izan ez dezazuen 14. praktikari dagokiona ostegun honetan egingo dugu:
    • Eguna: 2024-04-25
    • Ordua: 11:30etatik 13:30etara
    • Lekua: P0A6A ikasgelan
 

2024(e)ko apirilaren 20(a), larunbata

13. ASTEA | laborategi/mintegian egin dena

 13. astea (2024/04/24) laborategi/mintegian egindakoa

  • Zerrenda pasatu dugu. Deitutako 24en artean 8 ez dira etorri (zehaztapen gehiago eGela zerbitzuan)
    1. Aguirre Perez de Albeniz, Iker
    2. Auzokoa Pagazaurtundua, Paul
    3. Bayón Calvo, Garikoitz
    4. de Miguel Murillo, Celia
    5. Fernández López, Adrián Ginés
    6. Gutierrez Barrencua, Oier
    7. Sanjuan Malaxechevarria, Beñat
    8. Zalduegi Orue, Oier
  • Proiektuaren J. aukera egin dugu ondoko hau aplikatuz: FITXATEGIEN GAINEKO ERAGIKETAK. Ondoko lan hauek egiteko, batzutan fitxategi laguntzaile bat erabiliko da eta beste batzuetan fitxategi-array (F→A) eta array-fitxategi (A→F) eragiketak erabiliko dira. Eragiketak hauek izango dira:
    1. Bilaketa, futbolari baten izena teklatuz eman eta fitxategian bilatuz erregistro osoa programa nagusira itzuli  [Hau egin dugu]
    2. Ezabaketa, elementu bat (edo gehiago) fitxategiaren erdi aldean kentzeko   [Hau egin dugu]
    3. Txertaketa, elementu bat (edo gehiago) fitxategiaren erdi aldetik tartekatzeko   [Hau ez]
    4. Gehiketa, elementu bat (edo gehiago) fitxategiaren bukaeran gehitzeko   [Hau ez]
    5. Aldaketa, elementu baten (edo gehiagoren) balioa aldatzeko fitxategian  [Hau ez]
  • Proiektuaren J. aukera garatzeko programa nagusian idatzi behar den kodea, non zuen programetan kolorerik ez duzuen marraztu behar pantailan:
         
                   ...
                end;
           'J': begin
                   clrscr;
                   textcolor(LightRed);
                   writeln('Bilduma-fitxategitik kromo bat kendu eta beste kromo bat txertatu');
                   writeln('"J_aukera.exe" programa exekutagarriaren funtzionalitatea hemen kokatu');
                   textcolor(LightGray);
                   writeln;
                   
                   clrscr;
                   writeln;
                   writeln('J aukeraren hasieran, hauxe da bildumaren egoera:');
                   TaulaBezalaErakutsi(sFitxIzen);    
                   writeln('Bilduma osoaren kromo kopurua: ', fniZenbatKromo(sFitxIzen));
                   writeln;
                   writeln('J aukeran aurrera egiteko RETURN sakatu...');
                   readln;

                   writeln;
                   writeln('Fitxategi laguntzaile bat erabiliz, kromo bat ezabatuko da bildumatik');
                   writeln('---------------------------------------------------------------------');
                   write('Bildumatik kenduko den jokalariaren izena: ');
                   readln(sJokalaria);
                   writeln;
                   JokalariaBilatu(sFitxIzen, sJokalaria, rdKromoBat);   { rdKromoBat irteerakoa }
                   if rdKromoBat.iZenbakia = -1 then
                      writeln('ERROREA!! "', sJokalaria, '" ez da aurkitu')
                   else
                   begin
                      KromoBatErakutsi(rdKromoBat);
                      iBerePosizioa := fniPosizioaZehaztu(sFitxIzen, sJokalaria);
                      iNorainoBai := iBerePosizioa -1;
                      writeln('0-tik hasita 1. zatiaren amaiera: ', iNorainoBai, ' (posizio hau barne, RETURN sakatu)');
                      readln;
                      KromoBatFitxategitikKendu(sFitxIzen, iNorainoBai);
                      writeln;
                      writeln('"', upcase(sJokalaria), '" jokalaria kendu ondoren, hauxe da bildumaren egoera:');
                      TaulaBezalaErakutsi(sFitxIzen);
                      writeln('Bilduma osoaren kromo kopurua: ', fniZenbatKromo(sFitxIzen));
                      writeln;

                      writeln;
                      writeln('ARRAY laguntzaile bat erabiliz, kromo berri bat txertatuko da bilduman');
                      writeln('----------------------------------------------------------------------');
                      iIdaztekoAzkenPosizioa := fniZenbatKromo(sFitxIzen);   { filesize }
                      repeat
                         write('Txertaketaren helburuko posizioa eman (0 eta ', iIdaztekoAzkenPosizioa, ' arteko balioa): ');
                         readln(iNonTxertatu);
                      until (iNonTxertatu >= 0) and (iNonTxertatu <= iIdaztekoAzkenPosizioa);
                      writeln('Bilduman txertatuko den kromo berriaren datuak jaso');
                      KromoBerriarenDatuakJaso(rdKromoBat);
                      writeln;
                      if iNonTxertatu = iIdaztekoAzkenPosizioa then          { gehiketa bat da}
                         KromoaFitxategiarenBukaeran(sFitxIzen, rdKromoBat)
                      else                                                   { txertaketa bat da}
                         KromoBatFitxategianTxertatu(sFitxIzen, iNonTxertatu, rdKromoBat);
                      
                      writeln;
                      writeln('"', upcase(rdKromoBat.sIzena), '" jokalaria txertatu ondoren, hauxe da bildumaren egoera:');
                      TaulaBezalaErakutsi(sFitxIzen);
                      writeln('Bilduma osoaren kromo kopurua: ', fniZenbatKromo(sFitxIzen));
                      writeln;
                      writeln('Ikusi zenbakiak txarto daudela. Azken urratsarekin jarraitzeko RETURN sakatu');
                      readln;

                      writeln;
                      writeln('J aukeratik irten aurretik jokalari guztien zenbakiak eguneratuko dira');
                      JokalarienZenbakiakEguneratu(sFitxIzen);
                      TaulaBezalaErakutsi(sFitxIzen);
                      writeln('Bilduma osoaren kromo kopurua: ', fniZenbatKromo(sFitxIzen));
                      writeln;
                   end;   { else, datu-fitxategirik bada }
                end;
           'K': begin
                   clrscr;
                   textcolor(LightRed);
                   writeln('Lantaldeak proposatutako duen eta irakasleak onartutako duen lana');
                   writeln('Blogeko "Proiektua aberasteko ideiak (menuaren K aukera)" artikulua ikusi');
                   textcolor(LightGray);
                   writeln;
                end;
                   ...
 

2024(e)ko apirilaren 10(a), asteazkena

12. ASTEA | etxerako lana

 12. astea (2024/04/17) etxean egitekoa

  • Dagoeneko zuen izenak eta abizenak idatzi dituzue Proiektuaren taldekideak artikuluan aipatzen den taulan, norbait falta bada edo zeozer zuzendu behar bada e-posta bat idatz egidazue
  • 12. ASTEA | laborategi/mintegian egin dena zuk zeuk etxean, zure ordenagailuan, errepika ezazu. Fitxategiaren ariketa hau izan da:
  • program ErregistroenFitxategiaSortuEtaIkusi;
     
    const
       sBIDEA = 'C:\NereKarpeta\';
     
    type
       tsKate249 = string[249];   { fitxategiaren izena luzea izan daitekeelako }
       tsKate15 = string[15];
       trdIkaslea = record
                       sNor: tsKate15;
                       rNota: real;
                    end;
       tfrdIkasleak = file of trdIkaslea;
     
     
    { sFitxIzen katea ezaguna da programa nagusian eta prozedura honetan  }
    { izena ez da aldatuko, horregatik sarrerako parametroa da prozeduran }
    procedure FitxategiaSortuEtaBete(sFitxIzen: tsKate249);
    var
       f: tfrdIkasleak;
       rdElem: trdIkaslea;
       iKont: integer;
       iZenbat: integer;
    begin
       assign(f, sFitxIzen);    { fitxategia uztartu }
       rewrite(f);              { fitxategia sortu eta existitzekotan datuz hustu }
     
       repeat
           write('Zenbat ikasle dira? ');
           readln(iZenbat);
       until iZenbat > 0;
     
       for iKont:=1 to iZenbat do
       begin
          write(iKont:10, '. ikaslearen izena eman: ');
          readln(rdElem.sNor);          { erregistroaren eremu bat teklatuz irakurri }
          write(iKont:10, '. ikaslearen nota eman:  ');
          readln(rdElem.rNota);         { erregistroaren eremu bat teklatuz irakurri }
     
          write(f, rdElem);   { elementu bat (erregistro bat) fitxategia idatzi }
       end;
     
       close(f);     { fitxategia itxi }
    end;
     
     
    { sFitxIzen katea ezaguna da programa nagusian eta prozedura honetan  }
    { izena ez da aldatuko, horregatik sarrerako parametroa da prozeduran }
    procedure FitxategiaIkusi(sFitxIzen: tsKate249);
    var
       f: tfrdIkasleak;
       rdElem: trdIkaslea;
    begin
       assign(f, sFitxIzen);    { fitxategia uztartu }
       reset(f);                { fitxategia existitzen bada ireki }
     
       while not eof(f) do      { fitxategiaren bukaeran ez gauden bitartean... }
       begin
          read(f, rdElem);      { elementu bat (erregistro bat) fitxategitik irakurri }
     
          { erregistroaren eremu banaren edukia pantailaratu }
          writeln(filepos(f):10, '. ikaslearen izena: ', rdElem.sNor);
          writeln(filepos(f):10, '. ikaslearen nota:  ', rdElem.rNota:0:2);
       end;
     
       close(f);
    end;
     
     
    { sFitxIzen katea ezaguna da programa nagusian eta prozedura honetan  }
    { izena ez da aldatuko, horregatik sarrerako parametroa da prozeduran }
    function fnMediaKalkulatu(sFitxIzen: tsKate249): real;
    var
       f: tfrdIkasleak;
       rdElem: trdIkaslea;
       rMetatua: real;
    begin
       assign(f, sFitxIzen);    { fitxategia uztartu }
       reset(f);                { fitxategia existitzen bada ireki }
     
       rMetatua := 0.0;
       while not eof(f) do      { fitxategiaren bukaeran ez gauden bitartean... }
       begin
          read(f, rdElem);      { elementu bat (erregistro bat) fitxategitik irakurri }
     
          { nota bat gehiago pilatu rMetatua batukarian }
          rMetatua := rMetatua + rdElem.rNota;
       end;
     
       fnMediaKalkulatu := rMetatua / filesize(f);
        
       close(f);
    end;
     
    
    { Hiru fitxategien izenak ezagunak direlako programa nagusian eta   }
    { prozedura honetan aldatzen ez direlako sarrerako parametroak dira }
    procedure BiFitxategiBerriSortu(     sFitxIzen: tsKate249;
                                    sFitxIzenAprob: tsKate249;
                                    sFitxIzenSuspn: tsKate249);
    var
       f, f_A, f_S: tfrdIkasleak;
       rdElem: trdIkaslea;
    begin
       assign(f, sFitxIzen);
       reset(f);
       assign(f_A, sFitxIzenAprob);
       rewrite(f_A);
       assign(f_S, sFitxIzenSuspn);
       rewrite(f_S);
    
       while not eof(f) do
       begin
          read(f, rdElem);
          if rdElem.rNota >= 5.0 then
             write(f_A, rdElem)
          else
             write(f_S, rdElem)
       end;
    
       close(f);
       close(f_A);
       close(f_S);
    end;
    
    
    {=============Programa nagusia eta programa nagusiko aldagaiak=============}
    var
       sFitxIzen: tsKate249;
       rBBA: real;
       sFitxIzenAprob: tsKate249;
       sFitxIzenSuspn: tsKate249;
    begin
       writeln;
       write('Eman fitxategiaren izena, adibidez (31Taldea): ');
       readln(sFitxIzen);
       //sFitxIzen := sBIDEA + sFitxIzen + '.dat';      (* edo hurrengoa *)
       sFitxIzen := concat(sBIDEA, sFitxIzen, '.dat');  (* edo aurrekoa *)
       writeln('==>', sFitxIzen, '<== bidea eta luzapena programak gehituta');
    
       writeln;
       writeln('Fitxategiaren datuak jasotzen...');
       FitxategiaSortuEtaBete(sFitxIzen);
    
       writeln; 
       writeln('Fitxategi osoaren datuak:');
       FitxategiaIkusi(sFitxIzen);
    
       writeln; 
       rBBA := fnMediaKalkulatu(sFitxIzen);
       write('Nota guztien batezbesteko aritmetikoa: ', rBBA:0:2, ' puntu');
    
       writeln;
       sFitxIzenAprob:= sBIDEA + 'Aprobatuak.dat';
       sFitxIzenSuspn:= sBIDEA + 'Suspendituak.dat';
       BiFitxategiBerriSortu(sFitxIzen, sFitxIzenAprob, sFitxIzenSuspn);
    
       writeln; 
       writeln('Aprobatuen datuak:');
       FitxategiaIkusi(sFitxIzenAprob);
    
       writeln; 
       writeln('Suspendituen datuak:');
       FitxategiaIkusi(sFitxIzenSuspn);
    
       writeln;
       writeln('=======================');
       writeln('RETURN sakatu amaitzeko');
       write  ('=======================');
       readln;
    end.
    
  • 12. ASTEA | laborategi/mintegian egin denaren haritik. Erregistroen fitxategi bat daukagula (bi eremu: sNor katea eta rNota zenbakia) ondoko hiru lan hauek laster burutu ahalko dituzu:
    • Ikasle baten izena teklatuz eman eta bilatu; ikaslea aurkitu ondoren bere nota aldatu, nota berria nota guztien batezbesteko aritmetikoa izan dadin
    • Nota maximoa eta nota minimoa zehaztu; nota maximoa eta nota minimoa elkar trukatu 
    • Bi fitxategi sortu: batezbestekoaren gainetik daudenen fitxategia eta batezbestekoaren azpitik daudenen fitxategia
  • Ondoko hau urrunago dago: Proiektua amaiturik (2024) zereginaren bitartez zuen proiektua entregatu, hots, menuaren J eta K aukerak programatu (Entregatze-data: 2024ko maiatzaren 1ean, 23:59tan, astelehena)

12. ASTEA | laborategi/mintegian egin dena

 12. astea (2024/04/17) laborategi/mintegian egindakoa

Zerrenda pasatu dugu. Deitutako 24en artean 8 ez dira etorri (zehaztapen gehiago eGela zerbitzuan)

Gaurko helburua bikoitza da:

  1. Erregistroen arrayekin lan egitea 
  2. Erregistroen fitxategi bat sortzea 


Erregistroen array bat
  • Erregistroen array baten adibidea egin dugu. Konkretuki 11. astea | erregistroen bektore baten elementuak ezabatu artikulutik abiatuta, zerbait laburrago egin dugu. Bi eremu (sIzena katea eta iAdina zenbaki osoa) dituen erregistroetako arrayarekin lan egin dugu eragiketa hauek burutuz:
    1. Zerrenda datuz bete (errazagoa izan dadin elementuen izenak errepika daitezke)
    2. Zerrendaren edukia pantailaratu
    3. Ikasle bat bilatu eta bere informazioa pantailaratu
    4. Adin guztien batezbesteko aritmetikoa kalkulatu
    5. Hainbat elementu zerrendatik ezabatu (bietariko bat egin dugu):
      • Adin txikiko elementuak (media baino txikiagoak direnak) zerrendatik kendu, ondorioz hasierako zerrenda aldatua suertatuko da
      • A edo a letratik hasten diren izenen elementuak zerrendatik kendu, ondorioz hasierako zerrenda aldatua suertatuko da
    6. Zerrenda berriaren edukia pantailaratu


Erregistroen fitxategi bat
  • Erregistroen fitxategi bat (bi eremu: sNor katea eta rNota zenbaki erreala) sortu dugu eta ondoren bere edukia pantailan erakutsi dugu. Hona hemen programaren kodea urratsez-urrats azalduta:
program ErregistroenFitxategiaSortuEtaIkusi;

type
   tsKate249 = string[249];   { fitxategiaren izena luzea izan daitekeelako }
   tsKate15 = string[15];
   trdIkaslea = record
                   sNor: tsKate15;
                   rNota: real;
                end;
   tfrdIkasleak = file of trdIkaslea;


{ sFitxIzen katea ezaguna da programa nagusian eta prozedura honetan  } 
{ izena ez da aldatuko, horregatik sarrerako parametroa da prozeduran }
procedure FitxategiaSortuEtaBete(sFitxIzen: tsKate249);
var
   f: tfrdIkasleak;        // file datu-motako aldagaia
   rdElem: trdIkaslea;     // fitxategiaren elementua
begin
end;


{ sFitxIzen katea ezaguna da programa nagusian eta prozedura honetan  } 
{ izena ez da aldatuko, horregatik sarrerako parametroa da prozeduran }
procedure FitxategiaIkusi(sFitxIzen: tsKate249);
var
   f: tfrdIkasleak;        // file datu-motako aldagaia
   rdElem: trdIkaslea;     // fitxategiaren elementua
begin
end;


{=============Programa nagusia eta programa nagusiko aldagaiak=============}
var
   sFitxIzen: tsKate249;
begin
   writeln;
   writeln('Eman fitxategiaren izena, adibidez (C:\NereKarpeta\31Taldea.dat): ');
   readln(sFitxIzen);
   writeln('===>', sFitxIzen, '<===');

   writeln;
   writeln('Fitxategiaren datuak jasotzen...');
   FitxategiaSortuEtaBete(sFitxIzen);
   writeln;

   writeln('Fitxategiaren datuak:');
   FitxategiaIkusi(sFitxIzen);

   writeln;
   writeln('=======================');
   writeln('RETURN sakatu amaitzeko');
   write  ('=======================');
   readln;
end. 
 

2024(e)ko apirilaren 9(a), asteartea

11. ASTEA | etxerako lana

 11. astea (2024/04/10) etxean egitekoa

Proiektua dela eta, hirukoteak osoatu dituzue eta orain hau egizue:

  • Azterketa bat, eredu bat enuntziatua astiro irakurri eta azpimarratu ulertzen ez dituzuen hitzak (adibidez fitxategi)
  • Azterketa bat, beste eredu bat enuntziatua astiro irakurri eta azpimarratu ulertzen ez dituzuen hitzak (adibidez fitxategi). Bide batez, konturatu zaitez bi azterketa enuntzituek dituzten antzekotasunak
  • Proiektuan eskatzen dena artikula astiro irakurri eta ondokoak egin:
    1. C:\KromoBilduma kartepa sortu, eta bertan ondoko fitxategiak dorde:
      • KromoenProiektua.pas bezero-programa
      • datu_mota.pas unitatea
      • maia_uzta.pas unitatea
      • KROMOAK.DAT datu-fitxategia edo JOKALARIAK.DAT datu-fitxategia
    2. datu_mota.pas unitatea ireki eta bere INTERFACE atala irakurri, ikusi eta identifikatu erabiliko diren konstanteak eta datu-motak
    3. maia_uzta.pas unitatea ireki eta bere INTERFACE atala irakurri, ikusi eta identifikatu erabiliko diren azpiprogramak
    4. KromoenProiektua.pas bezero-programa ireki, aztertu eta konpilatu KromoenProiektua.exe lortzeko
  • KromoenProiektua.exe programa exekutatu, ondokoa eginez:
    1. Menuaren A, B, C, D, E eta F aukerak Azterketa bat, eredu bat enuntziatuarekin bat datozela ikusi
    2. Menuaren G, H eta I aukerak Azterketa bat, beste eredu bat enuntziatuarekin bat datozela ikusi
    3. Menuaren J aukera dela eta, Bilduma-fitxategiarekin lanean (menuaren J aukera) artikulua irakurri eta ulertu
    4. Menuaren K aukera dela eta, Proiektua aberasteko ideiak (menuaren K aukera) artikulua irakurri
  • Zure taldekideekin bildu K aukeran programatuko duzuena erabakitzeko eta, Proiektua: hobekuntzak aitortu (2024) zereginari erantzun
 

11. ASTEA | laborategi/mintegian egin dena

 11. astea (2024/04/10) laborategi/mintegian egindakoa

Gaurko helburua hirukoitza da:

  1. Bigarren kontrola egitea 
  2. Unitateak gaia azaltzea
  3. Proiektuari buruz gain-gainetik hitz egitea (lantaldeak osatu
 


1. Bigarren kontrola


2. Unitatearen kontzeptua


3. Proiektua garatzeko taldekideak
 

2024(e)ko apirilaren 5(a), ostirala

Proiektua ebaluatzen

Ikasturtearen hasierako ebaluazioaren banaketa eta egin beharrekoak:



Proiektuaren kalifikazioa

Proiektuaren programa gehi proiektuari lotutako hirugarren kontrolak honako hau balio dute: 0,5 + 1,0 = 1,5 puntu.


Hirugarren kontrola, ariketa handia (proiektua)


Proiektuaren emaitza (proiektuaren programa).

Lantaldeko partaideek kalifikazio berdina.


    %33a


    0,5 puntu

    Iazko azterketa baten inguruan jardungo dugu kurtsoaren zehar.

    15. astean, azken praktika egunean, proiektuari buruzko bakarkako froga:
    • azp1, 2024-05-07an
    • azp2, 2024-05-08an
    • azp3, 2024-05-06an



       
       
      %66a










      1,0 puntu






      Irakasgaiaren ebaluazioa artikulutik hartutako taula
       

      Proiektuaren taldekideak

      Esan bezala, proiektuak taldeka burutuko dira eta taldeen antolaketa ikasleen esku geratuko da. Taldeak hirukoteka osatuko dira beheko taulan ikasle bakoitzaren izena idatziz:

      Taularen ikuspegi osoa nahiago baduzu esteka honen gainean klikatuz taulara joan zaitezke

      Zure izena taulan idazteko urratsak:
      1. AZP2 taulara joan
      2. Zure gmail kontua erabiliz identifikatu
      3. Taula ireki (hurrengo irudia ikusi)
      4. Taula editatu zure izena idatziz

      Hau egiteko egun tartea: apirilaren 8tik apirilaren 12ra.
       

      2024(e)ko apirilaren 4(a), osteguna

      Proiektua: jorratu beharreko ibilbidea


      Baliabideak

      Proiektuarekin lotutako hasierako informazioa hau da:



      Bidea

      Udaberriko oporralditik itzultzean, apirilaren 10eko laborategi egunean, irakasleak proiektuaren enuntziatua azaldu zuen eta erabiliko diren unitateei dagozkien interfazeen deskribapenak egin zituen (unitateak lau hauek dira: maia_uzta, bilduma21, bilduma30 eta bilduma39).

      Ondoren, bide hau irekitzat ematen da:


      Bideak hiru munarri ditu:
      1. Proiektuaren baliabideak unitate batean garaturik daude, apirilaren 10ean unitatearen funtzionamendua laborategian ikusi da. Zuen lana: etxeko ordenadorean unitate baten funtzionamendua frogatzea, bi adibide: itsas-bataila (i) eta itsas-bataila (ii)
      2. Proiektuari gehituko dizkiozuen hobekuntzen aitorpena, gehien jota apirilaren 18rako (ostegunerako) bete behar duzue Proiektua: hobekuntzak aitortu (2024) izeneko zereginari erantzunez
      3. Proiektua garatu, gehien jota maiatzaren 1erako (astelehenerako) bukatu beharko duzue eta bere entrega Proiektua amaiturik (2024) izeneko zereginaren bitartez egingo duzue
      Goiko irudia begiratu, ikusten duzue bidea bukatzen den tontorraren ostean beste tontor bat agertzen dela? Ba bai, halaxe da, oraindik zerbait gehiago falta da, hau:
      Hirugarren munarrian entregatu duzuen lanaren gaineko azterketa bat pasatu beharko duzue 15. asteko praktika egunean (maiatzaren 8an). Lantaldearen kide bakoitzak froga bera egin beharko du bakarka, ordenagailuaren aurrean garatutako proiektuaren gaineko ariketa bat izango da.


      Entregak

      Goiko irudian proiektuaren urratsak erakusten badira, hurrengo irudi honetan urrats bakoitzean zer entregatuko duzuen erakusten da:

      1. Proiektuari laguntzen dion unitate sorta: zuen etxeko ordenagailuan frogatu. Entregarik ez dago, baina arazorik baduzue tutoretza bat eska ezazue
      2. Proiektuari gehituko dizkiozuen hobekuntzen aitorpena: txosten idatzi bat
      3. Proiektua garatu: txosten bat idatzi bat eta programa bat (programa iruzkindu)
      4. Proiektuaren gaineko bakarkako froga: programa bat



      Kalifikazioa

      Guzti honetatik 1,0 + 0,5 = 1,5 puntu ateratzen dira:


      Hirugarren kontrola, ariketa handia (proiektua)


      Iazko azterketa baten inguruan jardungo dugu kurtsoaren zehar.

      15. astean, azken praktika egunean, proiektuari buruzko bakarkako froga:
      • azp2, 2024-05-07an
      • azp2, 2024-05-08an
      • azp3, 2024-05-06an



         
         
        %66a










        1,0 puntu






        Proiektuaren emaitza (proiektuaren programa).

        Lantaldeko partaideek kalifikazio berdina.


          %33a


          0,5 puntu
          Irakasgaiaren ebaluazioa artikulutik hartutako taula
           

          Proiektua zergatik eta zertarako

          Ikasketa prozesuan ikasleak ariketa laburrak egin beharko ditu kontzeptu zehatz bat edo beste ikaste aldera. Baina, azken azterketa, bilduma bat delako, ariketa handia izango da. Horregatik, komenigarria da azken azterketaren neurriko proiektu bat urratsez urrats ikasturtearen zehar garatzea.

          Proiektua mintegiko (12+24 orduak) eskolekin lotuta dago, batez ere gelaz kanpoko 24 orduekin lotuta dago.

          Proiektua bideratzeko Informatika ☆ 2023-24  |  proiektua izeneko bloga erabiliko dugu, non 2022-23 ikasturteko azterketa pare baten gaineko ariketak erakusten diren. Kromo-biltegi kasu bat aitzakiz hartuz, datuen multzoak prozesatzea izango da proiektuaren helburua.


          Proiektuaren garapenaren urrats bakoitzean, ikasleak argi beharko du izan zer da dagoeneko dakiena eta zer ikasiko duen urrats horretan. Urrats bakoitzaren hasieran, adibidez, honelako informazioa jasoko du ikasleak:

          ZER DAKIDAN:
          Badakit testuak eta konstanteen balioak pantailan idazten.



          ZER IKASIKO DUDAN:
          ReadLn prozedurari esker, teklatuaren bitartez, balio bat aldagai batean gordetzen ikasiko dut. Esleipena operazioaren bitartez aldagai batean balio jakin bat  gordetzen ikasiko dut.

          Azkeneko laborategi egunean, maiatzaren 8an, proiektua gaitzat harturik ikasleak azterketa bat pasatu beharko du.

           

          2024(e)ko martxoaren 23(a), larunbata

          10. ASTEA | etxerako lana

           10. astea (2024/03/27) etxean egitekoa

           

          10. ASTEA | laborategi/mintegian egin dena

           10. astea (2024/03/27) laborategi/mintegian egindakoa

          Zerrenda pasatu dugu. Deitutako 24en artean 12 ez dira etorri (zehaztapen gehiago eGela zerbitzuan)

          Gaurko helburua bikoitza da:

          1. Arrayekin lan egitea 
          2. Unitateak zer diren azaltzea 


          1. Arrayekin lanean, arrayaren elementuak datu-mota soilak (real, integer, string, char,...) 


          2. Unitateak
           

          10. astea | izenen eta noten taula


          asTaula hiru dimentsiotako taula bat da, kateak gorde ditzakeen asTaula arrayak 40 errenkada eta 3 zutabe ditu. Errenkada bakoitza ikasle bati dagokio: Errenkadaren lehen zutabean izena biltegitzen da, bigarrenean abizena eta hirugarren zutabean ikaslearen nota gordetzen da (hirurak string[19] datu-motakoak). Teoriako blogean gehiago...
           

          10. astea | elkar trukatu

          Gehienez 25 elementu gordetzeko gai den array batekin lan egingo dugu. Arrayaren elementuak zenbaki errealak izango dira.


          Datua den zenbaki erreal bat arrayean gorde aurretik, frogatu beharra dago errepikaturik ez dela egongo. Horretarako, teoriako blogearen 9. astea | bilaketa sekuentzialaren aplikazio bat programara jo eta bertako BilaketaLineala izeneko funtzioa erabili gure behar izanetara egokituz, hots, erabili beharko dituen moldapenak eginez.

           
          { Zenbaki erreal desberdinez array bat elikatu ondoren, minimoaren eta }
          { maximoaren posizioak lortu bi haien arteko lekuak elkar trukatzeko.  }
          program ElkarTrukatu;
          uses
             crt;
          
          const
             iBEHEMUGA = 1;
             iGOIMUGA = 20;
          
          type
             tarZerrenda = array[iBEHEMUGA..iGOIMUGA] of real;
          
          
          function fniBilatu(const arZerrenda: tarZerrenda;
                                      iZenbat: integer;
                                       rGakoa: real): integer;
          var
             iKontagailu: integer;
             boAurkitua: boolean;
          begin
             iKontagailu := iBEHEMUGA;
             boAurkitua := FALSE;
             while (iKontagailu <= iZenbat) and not boAurkitua do
             begin
                if arZerrenda[iKontagailu] = rGakoa then
                begin
                   writeln(rGakoa:0:1, ' balioa ', iKontagailu:2, ' posizoan dago!');
                   boAurkitua := TRUE;
                end
                else
                begin 
                   writeln(rGakoa:0:1, ' bilatzen, ', iKontagailu:2, '. elementuarekin ez du bat egiten, hurrengoa aztertu!');
                   iKontagailu := iKontagailu + 1;
                end;
             end;
             
             if boAurkitua then
             begin
                fniBilatu := iKontagailu;
                writeln(rGakoa:0:1, ' balioa badago arrayan. Beste balio batekin saiatu!'); 
             end
             else
             begin
                fniBilatu := 0;
                writeln(rGakoa:0:1, ' balioa berria da eta ', iZenbat+1, '. posizioan kokatuko da');
             end;
             writeln;
          end;
          
          
          procedure ArrayaDatuDesberdinezBete(var arZerrenda: tarZerrenda;
                                                 var iLuzera: integer);
          var
             iKont: integer;
             rZbk: real;
          begin
             randomize;
             iLuzera := random(iGOIMUGA) + 1;      { iBEHEMUGA eta iGOIMUGA arteko balioak }
             //writeln('iLuzera=', iLuzera);
             
             arZerrenda[iBEHEMUGA] := random(10) + 0.1*random(2);   { 0.0, 0.1, 1.0, 1.1, ... 8.0, 8.1, 9.0, 9.1 arteko balioak }
             writeln('1. datua = ', arZerrenda[iBEHEMUGA]:0:1);
             writeln;
             for iKont:=iBEHEMUGA+1 to iLuzera do
             begin     
                repeat 
                   rZbk := random(10) + 0.1*random(2);             { 0.0, 0.1, 1.0, 1.1, ... 8.0, 8.1, 9.0, 9.1 arteko balioak }
                until fniBilatu(arZerrenda, iKont-1, rZbk) = 0;
                arZerrenda[iKont] := rZbk;
             end;
          end;
          
          
          procedure ArrayarenEdukiaIkusi(const arZerrenda: tarZerrenda;
                                                  iLuzera: integer);
          var
             iKont: integer;
          begin   
             for iKont:=iBEHEMUGA to iLuzera do
             begin     
                writeln(iKont:10, '. elementua = ', arZerrenda[iKont]:0:1);
             end;
             writeln;
          end;
          
          
          function fniArrayarenMaximoaNon(const arZerrenda: tarZerrenda;
                                                   iLuzera: integer): integer;
          var
             iKont, iMaxNon: integer;
             rMaximoa: real;
          begin 
             iMaxNon := iBEHEMUGA;
             rMaximoa := arZerrenda[iBEHEMUGA];
             for iKont:=iBEHEMUGA+1 to iLuzera do
             begin
                if arZerrenda[iKont] > rMaximoa then
                begin
                   iMaxNon := iKont;
                   rMaximoa := arZerrenda[iKont];
                end;
             end;
             fniArrayarenMaximoaNon := iMaxNon;
          end;
          
          
          function fniArrayarenMinimoaNon(const arZerrenda: tarZerrenda;
                                                   iLuzera: integer): integer;
          var
             iKont, iMinNon: integer;
             rMinimoa: real;
          begin 
             iMinNon := iBEHEMUGA;
             rMinimoa := arZerrenda[iBEHEMUGA];
                
             for iKont:=iBEHEMUGA+1 to iLuzera do
             begin
                if arZerrenda[iKont] < rMinimoa then
                begin
                   iMinNon := iKont;
                   rMinimoa := arZerrenda[iKont];
                end;
             end;
             fniArrayarenMinimoaNon := iMinNon;
          end;
          
          
          procedure ElementuakTrukatu(var arZerrenda: tarZerrenda;
                                             iPosMax: integer;
                                             iPosMin: integer);
          var
             rLaguntzailea: real;
          begin
             rLaguntzailea := arZerrenda[iPosMax];
             arZerrenda[iPosMax] := arZerrenda[iPosMin];
             arZerrenda[iPosMin] := rLaguntzailea;
          end;
          
          
          { ------------------------- Programa Nagusia ------------------------- }
          var
            arZerrenda: tarZerrenda;
            iLuzera, iPosMax, iPosMin: integer;
            cErantzuna: char;
          begin
            repeat 
              clrscr;
              writeln('----------------------------------------');
              ArrayaDatuDesberdinezBete(arZerrenda, iLuzera);
              writeln('Hasierako datuak:');
              ArrayarenEdukiaIkusi(arZerrenda, iLuzera);
          
              iPosMax := fniArrayarenMaximoaNon(arZerrenda, iLuzera);
              iPosMin := fniArrayarenMinimoaNon(arZerrenda, iLuzera);
              
              writeln('Maximoa ', iPosMax, ' posizioan');
              writeln('Minimoa ', iPosMin, ' posizioan');
              writeln('Elkar trukatu ondoren: ');
              writeln;
              ElementuakTrukatu(arZerrenda, iPosMax, iPosMin);
              writeln('Datuen trukaketa egin ondoren:');
              ArrayarenEdukiaIkusi(arZerrenda, iLuzera);
              
              writeln;
              repeat
                 write('Amaitu nahi duzu? (b/e): ');
                 cErantzuna := readkey;
                 writeln(cErantzuna);
                 cErantzuna := upcase(cErantzuna);
              until (cErantzuna = 'B') or (cErantzuna = 'E');
               
            until cErantzuna = 'B';
          end. { programaren amaiera }
           

          10. astea | zenbakiak kendu

          Gehienez 15 elementu gordetzeko gai diren arrayekin lan egingo dugu. Arrayen elementuak zenbaki osoak izango dira.


          Programaren balizko exekuzio bat jarraian erakusten da:


           
          { Zenbaki osoak array batean gorde ondoren, bakoiti eta negatiboak  }
          { diren elementuak arraytik kendu (array laguntzaile bat erabiliz). }
          program ZenbakiakKendu;
          uses
             crt;
          
          const
             iBEHEMUGA = 1;
             iGOIMUGA = 20;
          
          type
             taiZerrenda = array[iBEHEMUGA..iGOIMUGA] of integer;
          
          
          procedure ArrayaAleatoriokiDatuzBete(var aiZerrenda: taiZerrenda;
                                                 var  iZenbat:integer);
          var
            iKont: integer;
          begin
             repeat
                write('Zenbat datu dira? (gehienez ', iGOIMUGA, '): ');
                readln(iZenbat);
             until  (iZenbat >= iBEHEMUGA) and (iZenbat <= iGOIMUGA);
          
             for iKont:=iBEHEMUGA to iGOIMUGA do
             begin
                aiZerrenda[iKont]:= random(40)-20;     { -20 eta 19 artek balioak }
             end;
          end;
          
          
          procedure ArrayarenEdukiaIkusi(const aiZerrenda: taiZerrenda;
                                                  iLuzera: integer);
          var
             iKont: integer;
          begin   
             for iKont:=iBEHEMUGA to iLuzera do
             begin     
                writeln(iKont:10, '. elementua = ', aiZerrenda[iKont]:3);
             end;
             writeln;
          end;
          
          
          procedure BakoitiNegatiboakKendu(var aiZerrenda: taiZerrenda;
                                              var iLuzera: integer);
          var
             iKont, iLuzeraBerria: integer;
             aiZerrendaBerria: taiZerrenda; 
          begin
             iLuzeraBerria := 0;
             for iKont:=iBEHEMUGA to iLuzera do
             begin     
                if (aiZerrenda[iKont] < 0) and (aiZerrenda[iKont] mod 2 <> 0) then
                begin
                   writeln('Hau saihestu --->  aiZerrenda[', iKont:2,'] = ', aiZerrenda[iKont]:3);
                end    
                else   
                begin
                   iLuzeraBerria := iLuzeraBerria + 1;
                   aiZerrendaBerria[iLuzeraBerria] := aiZerrenda[iKont];
                end;   
             end;
             
             aiZerrenda := aiZerrendaBerria;
             iLuzera := iLuzeraBerria;
          end;
          
          
          { ------------------------- Programa Nagusia ------------------------- }
          var
             aiZerrenda: taiZerrenda;
             iLuzera: integer;
             cErantzuna: char;
          begin
             repeat 
                clrscr;
                writeln('--------------------------------------------');
                writeln('Datuak eskuratzen: '); 
                ArrayaAleatoriokiDatuzBete(aiZerrenda, iLuzera);
                
                writeln('Hasierako datuak: ');
                ArrayarenEdukiaIkusi(aiZerrenda, iLuzera);
          
                BakoitiNegatiboakKendu(aiZerrenda, iLuzera);
                
                writeln;
                writeln('Bakoiti negatiboak kendu ondoren: ');
                ArrayarenEdukiaIkusi(aiZerrenda, iLuzera);
          
                repeat
                   write('Amaitu nahi duzu? (b/e): ');
                   cErantzuna := readkey;
                   cErantzuna := upcase(cErantzuna);
                   writeln(cErantzuna);
                until (cErantzuna = 'B') or (cErantzuna = 'E');
              
                writeln;
                writeln;
                writeln;
                writeln;  
             until cErantzuna = 'B';
          end.    { programaren amaiera }
           

          10. astea | hiru array paralelo

          Gehienez 20 elementu gordetzeko gai diren arrayekin lan egingo dugu. Arrayen elementuak zenbaki osoak izango dira.


           
          { Luzera logikorik ez da erabiltzen hiru arrayak }
          { beti beterik daudela suposatzen delako.        }
          program HiruArray;
          uses
             crt;
          
          const
             iBEHEMUGA = 1;
             iGOIMUGA = 20;
          
          type
             taiZenbakiak = array[iBEHEMUGA..iGOIMUGA] of integer;
          
          
          procedure ArrayakAleatoriokiBete(var aiZenbakiak1: taiZenbakiak;
                                           var aiZenbakiak2: taiZenbakiak);
          var
             iKont: integer;
          begin
             randomize;
             for iKont:=iBEHEMUGA to iGOIMUGA do
             begin
                aiZenbakiak1[iKont] := random(40) - 20;   { -20 eta 19 arteko balioak }
                aiZenbakiak2[iKont] := random(40) - 20;   { -20 eta 19 arteko balioak }
             end;
             writeln;
          end;
          
          
          procedure ArrayaBete(var aiZenbakiak: taiZenbakiak);
          var
             iKont: Integer;
          begin
             for iKont:=iBEHEMUGA to iGOIMUGA do
             begin
                write('Eman ', iKont:2, '. zenbakia: ');
                readln(aiZenbakiak[iKont]) ;
             end;
             writeln;
          end;
          
          
          procedure ArrayaIkusi(const aiZenbakiak: taiZenbakiak);
          var
             iKont: integer;
          begin
             for iKont:=iBEHEMUGA to iGOIMUGA do
             begin
                writeln(iKont:2, '. zenbakia = ', aiZenbakiak[iKont]);
             end;
             writeln;
          end;
             
             
          procedure ArrayaLortu(const aiX, aiY: taiZenbakiak; 
                                       var aiZ: taiZenbakiak);
          var
             iKont: integer;
          begin
             for iKont:=iBEHEMUGA to iGOIMUGA do
             begin
                if aiX[iKont] > aiY[iKont] then
                   aiZ[iKont] := 1;
                if aiX[iKont] = aiY[iKont] then
                   aiZ[iKont] := 0;
                if aiX[iKont] < aiY[iKont] then
                   aiZ[iKont] := -1;      
             end;
          end;
          
          
          function fniKontatuZenbatPlus(const aiZ: taiZenbakiak): integer;
          var
             iKont, iZenbat: integer;
          begin
             iZenbat := 0;
             for iKont:=iBEHEMUGA to iGOIMUGA do
             begin
                if aiZ[iKont] = 1 then
                   iZenbat := iZenbat + 1;
             end;
             fniKontatuZenbatPlus := iZenbat;
          end;
          
          
          function fniKontatuZenbatMinus(const aiZ: taiZenbakiak): integer;
          var
             iKont, iZenbat: integer;
          begin
             iZenbat := 0;
             for iKont:=iBEHEMUGA to iGOIMUGA do
             begin
                if aiZ[iKont] = -1 then
                begin
                   iZenbat := iZenbat + 1;
                end;   
             end;
             fniKontatuZenbatMinus := iZenbat;
          end;
          
          
          function fniKontatuZenbatZero(const aiZ: taiZenbakiak): integer;
          var
             iKont, iZenbat: integer;
          begin
             iZenbat := 0;
             for iKont:=iBEHEMUGA to iGOIMUGA do
             begin
                if aiZ[iKont] = 0 then
                begin
                   iZenbat := iZenbat + 1;
                end;   
             end;
             fniKontatuZenbatZero := iZenbat;
          end;
          
          
          procedure HiruKontaketakEgin(    const aiZeta: taiZenbakiak;
                                        var iZenbatPlus: integer;
                                       var iZenbatMinus: integer;
                                        var iZenbatZero: integer);
          var
             iKont: integer;
          begin
             iZenbatPlus := 0;
             iZenbatMinus := 0;
             iZenbatZero := 0;
             for iKont:=iBEHEMUGA to iGOIMUGA do
             begin
                case aiZeta[iKont] of
                   1: begin
                         iZenbatPlus := iZenbatPlus + 1;
                       end;   
                  -1: begin
                         iZenbatMinus := iZenbatMinus + 1;
                       end;  
                   0: iZenbatZero := iZenbatZero + 1;
                end;
             end;
          end;
          
          
          { ------------------------- programa nagusia ------------------------- }
          var
             aiX, aiY, aiZ: taiZenbakiak;
             iZenbatPlus, iZenbatMinus, iZenbatZero: integer;
          begin
             clrscr;
             writeln('aiX eta aiY arrayen datuak aleatorioki hartuko dira');
             ArrayakAleatoriokiBete(aiX, aiY);
             writeln('aiX arrayaren edukia');
             ArrayaIkusi(aiX);
             writeln('aiY arrayaren edukia');
             ArrayaIkusi(aiY);
             writeln;
             	
             ArrayaLortu(aiX, aiY, aiZ);
             writeln('aiZ arrayaren edukia');
             ArrayaIkusi(aiZ);
             writeln;
             
             iZenbatPlus := fniKontatuZenbatPlus(aiZ);
             iZenbatMinus := fniKontatuZenbatMinus(aiZ);
             iZenbatZero := fniKontatuZenbatZero(aiZ);
             writeln('Hiru funtzioz...');
             writeln('Xi elementuak Yi elementuak baino handiago: ', iZenbatPlus, ' aldiz' );
             writeln('Xi elementuak Yi elementuak baino txikiago: ', iZenbatMinus, ' aldiz' );
             writeln('Xi elementuak eta Yi elementuak berdinak:   ', iZenbatZero, ' aldiz' );
             writeln;
             
             HiruKontaketakEgin(aiZ, iZenbatPlus, iZenbatMinus, iZenbatZero);
             writeln('Prozedura bakarraz...');
             writeln('Xi elementuak Yi elementuak baino handiago: ', iZenbatPlus, ' aldiz' );
             writeln('Xi elementuak Yi elementuak baino txikiago: ', iZenbatMinus, ' aldiz' );
             writeln('Xi elementuak eta Yi elementuak berdinak:   ', iZenbatZero, ' aldiz' );
             
             repeat until keypressed;
          end.    { programaren amaiera }