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

15. ASTEA | laborategi/mintegian egin dena

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


  • 25 ikasleetatik 15 ikasleek kontrol-ariketaren bidalketa egin dute

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

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

froga_3.pas



azter_3.pas


 

2024(e)ko apirilaren 28(a), igandea

14. ASTEA | etxerako lana

 14. astea (2024/04/29) etxean egitekoa

  • Funtsezkoena une honetan: proiektuaren lana entregatzea eta datorren asteko kontrola prestatzea. Hori dela eta, hauek begiratu:
    • Proiektuan eskatzen dena (zure proiektua birpasa ezazu eta bermatu ondo kontrolatzen duzula)
    • 15. asteko kontrolean arrakasta izateko, fitxategien gaineko eragiketa hauek menperatu behar dituzu:
      1. Bilaketa: kromo bati dagokion daturen bat eman (jokalariaren izena adibidez) eta fitxategian bilatu azpiprograma batez, bilaketaren helburuarekin lotuta dago azpiprograma horrek zer itzuliko duen, aukerak:
        1. Bilatzen dugun kromoaren informazio guztia behar dugu programa nagusian. Azpiprogramak erregistro osoa itzuliko dio programa nagusiari, eta azpiprograma prozedura bat izango da derrigorrez
        2. Bilatzen dugun kromoaren datu bakar bat behar dugu programa nagusian (jokalariaren taldea adibidez). Azpiprogramak katea den erregistroaren eremu hori itzuliko dio programa nagusiari, eta azpiprograma funtzio bat izan daiteke
      2. Gehiketa: kromo berri bat fitxategiaren bukaeran gorde
      3. Txerketa: posizio jakin batean kromo bat txertatu (array laguntzailea), txertaketaren posizioa ezaguna teklatuz irakurtzen delako. Beste aukera bat dago ere:
        • Txerketa: posizio jakin batean kromo bat txertatu (fitxategi laguntzailea), txertaketaren posizioa ezaguna dela 
      4. Ezabaketa: kromo bat fitxategitik kendu (array laguntzailea), ezabaketaren posizioa ezaguna bilaketa bat egiten delako. Beste aukera bat dago ere:
        • Ezabaketa: kromo bat fitxategitik kendu (fitxategi laguntzailea), ezabaketaren posizioa ezaguna dela
      5. Fitxategi bat banatu: kromo bildumatik abiatuta lortu 0_ale.dat izeneko fitxategia eta Errepikatuak.dat izeneko fitxategia lortu
      6. Bi fitxategi batu: Osasuna.dat izeneko eta Erreala.dat izeneko fitxategietatik abiatuta fitxategi bakarra lortu

Fitxategiekin lan eginez, ondoko eragiketak praktikatu ditugu laborategian:

  • 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 | laborategi/mintegian egin dena

 14. astea (2024/04/29) laborategi/mintegian egindakoa | [P0B9I] laborategian


  • Zerrenda ez dugu pasatu tutoretza bat izan delako. Egindakoa eGela  bitartez jarraituko du etxean ikasleak


  • Hau ez dugu egin teoriako ikasgelan ikusiko dugu. 13. astea | fitxategi bat bitan banatu ariketaren aldaera bat egin dugu: erregistroen fitxategi bat (bi eremu: sNor katea eta rNota zenbakia). Hona hemen egindako programa:
         
program FitxategiBatBitanBanatu;
uses
   crt;
const
   iLUZERA = 30 ;
   sBIDEA = 'C:\NireDatuak\';
type
      tsKate49    = string[49] ;
      tasIzenenZerrenda = array [1..iLUZERA] of tsKate49;
      tsKate200 = string[200];
const
      asZERRENDA: tasIzenenZerrenda = ('AGIRRE ROMERO, UNAI',              // 01
                                       'ANGULEMA CARAZO, JON ANDER',       // 02
                                       'BIKARREGI IGLESIAS, JULEN',        // 03
                                       'CANO RUIZ DE HEREDIA, JULIAN',     // 04
                                       'CORRAL EGIA, JOSEBA ANDONI',       // 05
                                       'DIAZ DE ULZURRUN ROY, LEONOR',     // 06
                                       'EGIGUREN MARKINEZ, IRUNE',         // 07
                                       'ERKIAGA ANDONEGI, IKER',           // 08
                                       'FERNANDEZ FEITO, FELIX',           // 09
                                       'GARTZIA DE ALZA GIL, KATALIN',     // 10
                                       'HERRANZ MARTINEZ, REBECA',         // 11
                                       'IRAGORRI COTANO, KIMETZ',          // 12
                                       'JOMA GABILONDO, ASIER',            // 13
                                       'KRUGER GARAI, LUDWING',            // 14
                                       'LANDA ASTORQUIZA, UNAI',           // 15
                                       'LANDAIDA MORENO, XABIER',          // 16
                                       'LIBARRENX BOLLAR, IZAR',           // 17
                                       'MADARI TOXO, MARIA DEL CARMEN',    // 18
                                       'MARTINEZ DE LA CRUZ, IMANOL',      // 19
                                       'NARBAIZA ARIZTONDO, MARKEL',       // 20
                                       'OSORIO ORTIZ, OLATZ',              // 21
                                       'PARIS ECHEVARRIA, AITOR',          // 22
                                       'QUINTAS ESCOBAR, AINHOA',          // 23
                                       'RADA BARANDIKA, TEODORO',          // 24
                                       'SAN JOAN GOIRI, JULIA AUGUSTA',    // 25
                                       'SEGUROLA LOPEZ DE MUNAIN, ANE',    // 26
                                       'TAPIA FERNANDEZ, ENDIKA',          // 27
                                       'URIOSTE ALZAGA, ENEKO',            // 28
                                       'VICINAY URCELAY, ELOY',            // 29
                                       'ZUATZU ZALAKAIN, ZIGOR') ;         // 30
 
type
   trdFitxa = record
                 sNor: tsKate49;
                 rNota: real;
              end;
   tfrdFitxategia = file of trdFitxa;


procedure DatuakErakutsi(const rdElem: trdFitxa);
begin
   writeln('Ikaslearen izena: ':24, rdElem.sNor);
   writeln('Ikaslearen Nota:  ':24, rdElem.rNota:0:1);
   writeln;
end;


procedure FitxategiaIkusi(sFitxIzen: tsKate200);
var
   rdElem: trdFitxa;
   f: tfrdFitxategia;
   k: integer;
begin
   assign(f, sFitxIzen);
   reset(f);

   k := 0;
   while not eof(f) do
   begin
      read(f, rdElem);
      k := k+1 ;
      writeln(k:4,'. ikaslea');
      DatuakErakutsi(rdElem);
   end;

   close(f);
end ;


function fnsIzenaLortu(sIzenDeiturak: tsKate49): tsKate49;
var
   sIzena: tsKate49;
   iKomaNon: integer;
begin
   iKomaNon := pos(',', sIzenDeiturak);
   sIzena := copy(sIzenDeiturak, iKomaNon+2, length(sIzenDeiturak)-(iKomaNon+1));
   //writeln('sIzena >>>', sIzena, '<<<');
   fnsIzenaLortu := sIzena;
end;


procedure DatuakJaso(var rdElem: trdFitxa);
var
   iZbk: integer;
   iHamarreko, iUnitate: integer;
begin
   iZbk:= random(iLUZERA)+1;
   rdElem.sNor := fnsIzenaLortu(asZERRENDA[iZbk]) ;

   iHamarreko := random(9);
   iUnitate := random(9);

   rdElem.rNota := iUnitate + 0.1*iHamarreko;
end;


procedure FitxategiaSortuEtaDatuzBete(sFitxIzen: tsKate200);
var
   rdElem: trdFitxa;
   f: tfrdFitxategia;
   iKopurua, k: integer;
begin
   assign(f, sFitxIzen);
   rewrite(f);

   randomize;
   iKopurua := random(20)+1;
   writeln('iKopurua = ', iKopurua);
   readln;

   for k:=1 to iKopurua do
   begin
      DatuakJaso(rdElem);
      write(f, rdElem);
   end;


   close(f);
end ;


procedure FitxategiaBanatu(sFitxIzen, sAprobatuak, sSuspendituak: tsKate200);
var
   rdElem: trdFitxa;
   f, f_A, f_S: tfrdFitxategia;
begin
   assign(f, sFitxIzen);
   reset(f);
   assign(f_A, sAprobatuak);
   rewrite(f_A);
   assign(f_S, sSuspendituak);
   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---------------------------- *)
var
   sFitxIzen, sAprobatuak, sSuspendituak: tsKate200;
begin
   clrscr;
   writeln;
   writeln;
   
   write('Datuen fitxategiaren izena eman (adibidez "Ikasleak"): ');
   readln(sFitxIzen);
   sFitxIzen :=  sBIDEA + sFitxIzen + '.dat';
   writeln('sFitxIzen >>>>>', sFitxIzen, '<<<<<<');

   FitxategiaSortuEtaDatuzBete(sFitxIzen);
   
   writeln('---Denak----------------------------------');
   FitxategiaIkusi(sFitxIzen);
   writeln;
   writeln;

   sAprobatuak := sBIDEA + 'Aprobatuak.dat';
   sSuspendituak := sBIDEA + 'Suspendituak.dat';

   FitxategiaBanatu(sFitxIzen, sAprobatuak, sSuspendituak);

   writeln('---Aprobatuak-----------------------------');
   FitxategiaIkusi(sAprobatuak);
   writeln;
   writeln;

   writeln('---Suspendituak---------------------------');
   FitxategiaIkusi(sSuspendituak);
   writeln;
   writeln;

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

  • 13. astea | fitxategi bat bitan banatu ariketa aztertu dugu ere, kasu honetan zenbakien fitxategi batetik abiatzen da beste bi fitxategi berri eskuratzeko. Eta kasu honetan hasierako fitxategiaren existentzia aztertzen da

  • Bilaketa ariketa: Fitxategi baten elementua beste fitxategi batean bilatu ondoren bere informazio guztia pantailaratu dugu


 

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

13. ASTEA | etxerako lana

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

  • Funtsezkoena une honetan: Proiektuarekin jarrraitzea
 

13. ASTEA | laborategi/mintegian egin dena

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

  • Eguneko bidalketaren bitartez pasatu dugu zerrenda. Deitutako 25en artean 12 ez dira etorri (zehaztapen gehiago eGela zerbitzuan)
  • 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/15) 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/15) laborategi/mintegian egindakoa

Zerrenda pasatu dugu ariketen bidalketen bitartez. Deitutako 25en artean 14 ikaslek ez dute bidalketarik egin (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.