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

15. ASTEA | laborategi/mintegian egin dena

15. astea (2023/05/09) laborategi/mintegian egindakoa








  • 25 ikasleetatik 17 ikasleek kontrol-ariketaren bidalketa egin dute





  • Hirugarren kontrola egin dugu eta ondoko hau galdetu da. Ematen den 3_kontrola__AZP-1.zip fitxategi trinkoaren edukia ondoko hau da:



    • 2022-23ko_HirugarrenKontrola_AZP1-A.pdf fitxategian ariketaren enuntziatua jaso da eta 2022-23ko_HirugarrenKontrola_AZP1-B.pdf fitxategian ariketaren enuntziatua jaso da

    • Ariketaren emaitzaren hasierak diren A_eredua__1_azp__3_froga.pas iturburu-programa eta B_eredua__1_azp__3_froga.pas iturburu-programa 

    • froga_3 unitatearen bi fitxategi hauek:


      • froga_3.ow

      • froga_3.ppw











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













3_kontrola__AZP-2.zip









3_kontrola__AZP-3.zip







 

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

14. ASTEA | etxerako lana

 14. astea (2023/05/02) etxean egitekoa






  • Funtsezkoena une honetan: datorren asteko kontrola prestatzea. Hori dela eta, hauek begiratu:


    • Proiektuan eskatzen dena (zure proiektua birpasa ezazu eta bermatu ondo kontrolatzen duzula)

    • 15. asteko kontrola prestatzeko, proiektuaren 9. aukerako adibide hau ikus eta ikas ezazu 2023koProiektua9AukerarenAdibidea.zip (9. aukerako azken ariketaren helburua fitxategi bat ordenatzea da, dagokion "LiburutegiaSailkatu" prozedura ez ikasi).
      Hona hemen proiektuaren 9. aukerako zereginak:


      1. Gehiketa: liburu berri bat fitxategiaren bukaeran gorde

      2. Txerketa: posizio jakin batean liburu bat txertatu (array laguntzailea), txertaketaren posizioa ezaguna teklatuz irakurtzen delako

      3. Ezabaketa: liburu bat fitxategitik kendu (array laguntzailea), ezabaketaren posizioa ezaguna bilaketa bat egiten delako

      4. Ezabaketa: liburu bat fitxategitik kendu (fitxategi laguntzailea), ezabaketaren posizioa ezaguna bilaketa bat egiten delako

      5. Fitxategi bat banatu: liburutegik abiatuta lortu "maileguan" fitxategia eta "mailegugabeak" fitxategia

      6. Bi fitxategi batu: "maileguan" eta "mailegugabeak" fitxategietatik abiatuta fitxategi berrantolatu bakarra lortu





 


2023(e)ko maiatzaren 1(a), astelehena

14. ASTEA | laborategian egin dena

 14. astea (2023/05/02) laborategi/mintegian egindakoa






  • Zerrenda pasatzeko, eGela zerbitzuko 14. saioan egindako programak bidalketaren bitartez. Lanik bidali ez dutenak:


    1. Danel Agirre Olaeta

    2. Izaro Barañano Arrizabalaga

    3. Xabier Garay Berganza

    4. Jon González Belategui

    5. Gaizka Martin Zorrozua

    6. Maider Nogueira Alonso

    7. Asier Ochoa Espiña

    8. Izaro Prieto Sarria

    9. Antxon Zubiaurre Peñalba


















  • 13. astea | fitxategi bat bitan banatu ariketan hasierako fitxategiaren existentzia aztertzen da. Ariketa horren aldaera bat egin dugu: erregistroen fitxategi bat (bi eremu: sNor katea eta rNota zenbakia). Hona hemen egindako programaren abiapuntua:



program FitxategiBatBitanBanatu_EMATEKOA;
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;
begin
assign(f, sFitxIzen);
reset(f);

close(f);
end;


function fnsIzenaLortu(sIzenDeiturak: tsKate49): tsKate49;
var
sIzena: tsKate49;
iKomaNon: integer;
begin

fnsIzenaLortu := sIzena;
end;


procedure DatuakJaso(var rdElem: trdFitxa; iKont: integer);
var
iHamarreko, iUnitate: integer;
begin
rdElem.sNor := fnsIzenaLortu(asZERRENDA[iKont]);

iHamarreko := random(10); // 0 eta 9 artekoa
iUnitate := random(10); // 0 eta 9 artekoa

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


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

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

for k:=1 to iKopurua do
begin
DatuakJaso(rdElem, k);
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);


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, '|||');

FitxategiaSortuEtaSekuentzialkiBete(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.





Aurreko FitxategiBatBitanBanatu.pas programa osaturik:





 

2023(e)ko apirilaren 25(a), asteartea

13. ASTEA | etxerako lana

 13. astea (2023/04/25) etxean egitekoa






  • Funtsezkoena une honetan: Proiektuarekin jarrraitzea





 

13. ASTEA | laborategi/mintegian egin dena

 13. astea (2023/04/25) laborategi/mintegian egindakoa






  • Zerrenda pasatzeko, eGela zerbitzuko 13. saioan egindako programak bidalketaren bitartez. Lanik bidali ez dutenak:


    • Danel Agirre Olaeta

    • Alex Arroitajauregui Elguea

    • Xabier Garay Berganza

    • Jon Gonzalez Belategui

    • Gaizka Martin Zorrozua

    • Maider Nogueira Alonso

    • Asier Ochoa Espiña

    • Maialen Roman Payas

    • Antxon Zubiaurre Peñalba





  • Proiektuaren 8. aukera egin dugu ondoko hau aplikatuz: FITXATEGIEN GAINEKO ERAGIKETAK. Fitxategi-array (F→A) eta array-fitxategi (A→F) eragiketak erabiliko dira ondoko lan hauek egiteko:


    1. Txertaketa, elementu bat edo gehiago fitxategiaren erdi aldean tartekatzeko

    2. Ezabaketa, elementu bat edo gehiago fitxategiaren erdi aldetik kentzeko (adibide hau egin dugu)

    3. Sailkatzea, fitxategiaren elementuak ordenatzeko





  • Proiektuaren 9. aukeraren adibide hau egin dugu:


    1. Bilaketa, elementu baten sLiburuKodea teklatuz eman eta bilatu, bilatu ondoren aldaketa bat egin

    2. Aldaketa, elementu jakin bati bere iAldizMaileguan aldatu balio berri bat gordez

    3. Bilaketa, elementu baten sLiburuKodea teklatuz eman eta bilatu, bilatu ondoren liburu hori fitxategitik kendu

    4. Ezabaketa, elementu jakin bat fitxategitik kentzeko array laguntzaile bat edo beste fitxategi laguntzaile bat beharko da




program LiburutegiProiektua_Azp1_13astea;

uses
datu_mota, biblioteka, erabiltzaile, top10, crt, sysutils;


(* 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;
writeln(' =============================================================================');
writeln(' | MENUA |');
writeln(' =============================================================================');
writeln(' | 1. Mailegu-eskaera berri bat gehitzea |');
writeln(' | 2. Mailegatutako liburu bat itzultzea |');
writeln(' | 3. Letra batetik hasten diren liburuei buruzko informazioa bistaratzea |');
write(' | 4. Liburutegiaren fitxategia ikusi');
textcolor(Yellow);
write(' (AZTERKETAN EZ ZEN ESKATU)');
textcolor(LightGray);
writeln(' |');
write(' | 5. Erreserben arraya ikusi');
textcolor(Yellow);
write(' (AZTERKETAN EZ ZEN ESKATU)');
textcolor(LightGray);
writeln(' |');
writeln(' |---------------------------------------------------------------------------|');
write(' | ');
textcolor(Cyan);
write('6. Erabiltzaileen fitxategia sortu eta ikusi');
textcolor(LightGray);
textcolor(Yellow);
write(' (7. AUKERA PRESTATZEKO)');
textcolor(LightGray);
writeln(' |');
write(' | ');
textcolor(Cyan);
write('7. Mailegurik duten erabiltzaileen izenak pantailaratu');
textcolor(LightGray);
writeln(' |');
writeln(' |---------------------------------------------------------------------------|');
write(' | ');
textcolor(LightRed);
write('8. Gehien mailegatutako 10 liburuen fitxategia sortu eta pantailaratu');
textcolor(LightGray);
writeln(' |');
write(' | ');
textcolor(LightRed);
write('9. Lantaldeak proposatutako aukera');
textcolor(LightGray);
textcolor(Yellow);
write(' (BLOGEKO ADIBIDEAK IKUSI)');
textcolor(LightGray);
writeln(' |');
writeln(' |---------------------------------------------------------------------------|');
writeln(' | 0. Amaitu |');
writeln(' =============================================================================');
repeat
write(' Zure aukera: ' );
readln(cAukera);
until(cAukera >= '0') and (cAukera <= '9');
fncAukeraHautatu := cAukera;
end;


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


(* HELBURUA: Fitxategi bat arakatu eta letra jakin batez *)
(* hasten diren liburuen datuak pantailaratzea. *)
(* ALGORITMOA: Fitxategi bat ibiltzea hasieratik bukaeraraino. *)
(* PARAMETROAK: Bi parametro eta biak sarrerakoak. *)
procedure LetraBatezHastenDirenLiburuak( cHasierakoLetra: char;
sFitxIzenLiburutegia: tsKate199);
var
f_L: tfrdLiburutegiFitxategia;
rdLiburuBat: trdLiburu;
begin
assign(f_L, sFitxIzenLiburutegia);
reset(f_L);
while not eof(f_L) do
begin
read(f_L, rdLiburuBat);
if upcase(cHasierakoLetra) = upcase(rdLiburuBat.sIzenburua[1]) then
begin
LiburuaErakutsi(rdLiburuBat);
//Readln;
end;
end;
close(f_L);
end;


(* HELBURUA: Fitxategi bat arakatu eta kode jakin bateko *)
(* elementua bertan dagoen ala ez erabaki. *)
(* ALGORITMOA: Fitxategi batean bilaketa. *)
(* PARAMETROAK: Sarrerako bi parametro (fitxategiaren izena eta gakoa den kodea) *)
(* Irteerako bi parametro (elementuaren posizioa eta erregistroa bera). *)
procedure LiburutegianBilatu( sLiburuGako: tsKate15;
sFitxIzenLiburutegia: tsKate199;
var iPosizioa: integer;
var rdLiburuBat: trdLiburu);
var
f_L: tfrdLiburutegiFitxategia;
boAurkitua: Boolean;
begin
assign(f_L, sFitxIzenLiburutegia);
reset(f_L);

boAurkitua := FALSE;
while not boAurkitua and not eof(f_L) do
begin
read(f_L, rdLiburuBat);
if rdLiburuBat.sLiburuKodea = sLiburuGako then
boAurkitua := TRUE;
end;

if boAurkitua then
iPosizioa := filepos(f_L) -1
else
iPosizioa := -1;

close(f_L);
end;


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


(* HELBURUA: Liburu baten mailegua egin behar da. Hau da, liburuaren kodea eta *)
(* erabiltzailearen kodea ezagunak direla, liburua bilatu behar da *)
(* fitxategian. Horrelako libururik ez badago mezu bat pantailaratu (hau *)
(* ez zen azterketako enuntziatuan eskatu). Horrelako libururik bai badago *)
(* mailegatuta ala libre dagoen aztertu: liburua libre badago, fitxategia *)
(* eguneratu; liburua libre ez badago erreserben arrayan elementu berri *)
(* bat gehitu. *)
(* PARAMETROAK: Sarrerako bi parametro (fitxategiaren izena eta gaurko data) *)
(* Irteerako bi parametro (arraya eta bere luzera efektiboa). *)
procedure MaileguEskariBerria( sGaurkoData: tsKate10;
sFitxIzenLiburutegia: tsKate199;
var ardErreserbak: tardErreserbak;
var iLuzera: integer);
var
sLiburuarenKodea: tsKate15;
sErabiltzailearenKodea: tsKate15;
iPosLiburutegian: integer;
rdLiburuBat : trdLiburu;
begin
write('Liburuaren kodea: ');
readln(sLiburuarenKodea);
write('Erabiltzailearen kodea: ');
readln(sErabiltzailearenKodea);
LiburutegianBilatu(sLiburuarenKodea, sFitxIzenLiburutegia, iPosLiburutegian, rdLiburuBat);
if iPosLiburutegian = -1 then { Konprobazio hau ez da eskatzen enuntziatuan }
writeln('ERRORA: "', sLiburuarenKodea, '" kodea duen libururik ez dago')
else
begin
writeln;
LiburuaErakutsi(rdLiburuBat); { Hau ez da eskatzen enuntziatuan }
if rdLiburuBat.sMaileguanNori = 'INORI' then
begin { Liburua eskuragarri dago }
with rdLiburuBat do
begin
sMaileguanNori := sErabiltzailearenKodea;
iAldizMaileguan := iAldizMaileguan + 1;
sAzkenMaileguData := sGaurkoData;
writeln;
writeln;
writeln('Liburuaren izenburua: ', sIzenburua);
writeln('Hemen dago: ', sKokapena);
writeln('Maileguan hartzen duen erabiltzailea: ', sErabiltzailearenKodea);
end;
LiburuaEguneratuLiburutegian(rdLiburuBat, sFitxIzenLiburutegia, iPosLiburutegian);
end
else
begin { Liburua maileguan hartuta dago }
writeln('Liburua ez dago eskuragarri une honetan: erreserba-eskaera berria sortu');
if iLuzera < iERRESERBA_MAX then
begin
iLuzera := iLuzera + 1;
with ardErreserbak[iLuzera] do
begin
sLiburuKodea := sLiburuarenKodea;
sErabiltzaileZbk := sErabiltzailearenKodea;
sEskariData := sGaurkoData;
write('Liburua itzultzen dutenean abisatzeko telefonoa eman: ');
readln(sTelefonoa);
end;
end
else
begin
writeln('"', sLiburuarenKodea, '" kodea duen liburua ez dago eskuragarri, eta horren');
writeln('erreserba-eskaerarik ezin daiteke egin zerrenda beterik dagoelako.');
end;
end;
end;
end;


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


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


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

if iPosLiburutegian = -1 then { Konprobazio hau ez da eskatzen enuntziatuan }
writeln('ERROREA: "', sLiburuGako, '" kodea duen libururik ez dago')
else
begin
writeln;
LiburuaErakutsi(rdLiburuBat); { Hau ez da eskatzen enuntziatuan }

if rdLiburuBat.sMaileguanNori = 'INORI' then { Hau ez da eskatzen enuntziatuan }
writeln('Maileguan ez dagoen liburua ezin daiteke itzuli!!!')
else
begin
iPosErreserban := fniErreserbaBilatuArrayean(rdLiburuBat.sLiburuKodea, ardErreserbak, iLuzera);

if iPosErreserban = -1 then
begin
writeln('Itzuli den libururako erreserbarik ez dago');
writeln('Hemen bilegitu: ', rdLiburuBat.sKokapena);
rdLiburuBat.sMaileguanNori := 'INORI'; { Inork ez du erreserbatu, liburua gorde }
end
else
begin { Erabiltzaileren batek erreserbaturik dauka, hari mailegatu }
writeln;
writeln('Maileguan eduki duen erabiltzailea: ', rdLiburuBat.sMaileguanNori);
writeln('Maileguan hartu duen erabiltzailea: ', ardErreserbak[iPosErreserban].sErabiltzaileZbk);
writeln(' Abisatzeko telefono-zenbakia: ', ardErreserbak[iPosErreserban].sTelefonoa);
rdLiburuBat.sMaileguanNori := ardErreserbak[iPosErreserban].sErabiltzaileZbk;
rdLiburuBat.iAldizMaileguan := rdLiburuBat.iAldizMaileguan +1;
rdLiburuBat.sAzkenMaileguData := sGaurkoData;
ErreserbaZerrendatikEzabatu(ardErreserbak, iLuzera, iPosErreserban);
end;

LiburuaEguneratuLiburutegian(rdLiburuBat, sFitxIzenLiburutegia, iPosLiburutegian);
end;
end;
end;


(* HELBURUA: Array bat arakatu eta bere elementuen informazioa pantailaratu. *)
(* ALGORITMOA: Array bat ibiltzea hasieratik bukaeraraino. *)
(* PARAMETROAK: Sarrerako bi parametro (arraya eta bere luzera efektiboa). *)
procedure ErreserbenArrayaIkusi(const ardErreserbak: tardErreserbak; iLuzera: integer);
var
k: integer;
begin
for k:=1 to iLuzera do
begin
with ardErreserbak[k] do
begin
writeln('================================== ', k:2, '. elementua ======');
writeln('Liburu-kodea: ':20, sLiburuKodea);
writeln('Erabiltzaile-kodea: ':20, sErabiltzaileZbk);
writeln('Telefono-zenbakia: ':20, sTelefonoa);
writeln('Eskariaren data: ':20, sEskariData);
writeln('=======================================================');
writeln;
end;
end;
end;


(* HELBURUA: Fitxategi bat arakatu eta kode jakin bateko *)
(* elementua bertan dagoen ala ez erabaki. *)
(* ALGORITMOA: Fitxategi batean bilaketa. *)
(* PARAMETROAK: Sarrerako bi parametro (fitxategiaren izena eta gakoa den kodea) *)
(* Irteerako bi parametro (elementuaren posizioa eta erregistroa bera). *)
function fnsNorBilatu(sFitxIzenBezeroak: tsKate199; sErabilGako: tsKate15): tsKate55;
var
f_B: tfrdBezeroenFitxategia;
rdBezeroBat: trdBezero;
boAurkitua: Boolean;
begin
assign(f_B, sFitxIzenBezeroak);
reset(f_B);

boAurkitua := FALSE;
while not boAurkitua and not eof(f_B) do
begin
read(f_B, rdBezeroBat);
if rdBezeroBat.sErabilKodea = sErabilGako then
boAurkitua := TRUE;
end;

if boAurkitua then
fnsNorBilatu := rdBezeroBat.sNor
else
fnsNorBilatu := '';

close(f_B);
end;


(* HELBURUA: Fitxategi bat ibili eta beste fitxategi batean datua bilatu. *)
(* ALGORITMOA: Fitxategi bat oso prozesatu eta beste fitxategi batean *)
(* bilaketa bat burutu. *)
(* PARAMETROAK: Sarrerako bi parametro (fitxategi biren izenak). *)
procedure MailegurikDutenErabiltzaileak(sFitxIzenLiburutegia: tsKate199;
sFitxIzenBezeroak: tsKate199);
var
f_L: tfrdLiburutegiFitxategia;
rdLiburuBat: trdLiburu;
sIzenDeiturak: tsKate55;
begin
assign(f_L, sFitxIzenLiburutegia);
reset(f_L);
while not eof(f_L) do
begin
read(f_L, rdLiburuBat);
sIzenDeiturak := fnsNorBilatu(sFitxIzenBezeroak, rdLiburuBat.sMaileguanNori);
if sIzenDeiturak <> '' then
writeln(sIzenDeiturak);
end;

close(f_L);
end;


function fniBilatu(sLiburuarenKodea: tsKate15; sFitxIzenLiburutegia: tsKate199): integer;
var
f_L: tfrdLiburutegiFitxategia;
rdLiburuBat: trdLiburu;
boAurkitua: boolean;
begin
assign(f_L, sFitxIzenLiburutegia);
reset(f_L);

boAurkitua := FALSE;
while not eof(f_L) and not boAurkitua do
begin
read(f_L, rdLiburuBat);
if rdLiburuBat.sLiburuKodea = sLiburuarenKodea then
boAurkitua := TRUE
end;

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

close(f_L);
end;


procedure Aldatu(sFitxIzenLiburutegia: tsKate199; iNon: integer);
var
f_L: tfrdLiburutegiFitxategia;
rdLiburuBat: trdLiburu;
begin
assign(f_L, sFitxIzenLiburutegia);
reset(f_L);

seek(f_L, iNon);
read(f_L, rdLiburuBat);
rdLiburuBat.iAldizMaileguan := 40;
seek(f_L, iNon);
write(f_L, rdLiburuBat);

close(f_L);
end;


procedure Kendu(sFitxIzenLiburutegia: tsKate199; iNon: integer);
var
f_L: tfrdLiburutegiFitxategia;
rdLiburuBat: trdLiburu;
ardLaguntzailea: tardLiburutegia;
iKont: integer;
iLuzera: integer;
begin
assign(f_L, sFitxIzenLiburutegia);
reset(f_L);

iLuzera := 0;
for iKont:=0 to iNon-1 do
begin
read(f_L, rdLiburuBat);

iLuzera := iLuzera +1;
ardLaguntzailea[iLuzera] := rdLiburuBat;
end;

seek(f_L, iNon+1);
while not eof(f_l) do
begin
read(f_L, rdLiburuBat);

iLuzera := iLuzera +1;
ardLaguntzailea[iLuzera] := rdLiburuBat;
end;

rewrite(f_L);

for iKont:=1 to iLuzera do
begin
write(f_L, ardLaguntzailea[iKont]);
end;

close(f_L);
end;



var { ----------------------------------------- Programa Nagusiaren aldagaiak -------------- }
sFitxIzenLiburutegia: tsKate199;
sFitxIzenErreserbak: tsKate199;
ardErreserbak: tardErreserbak;
iLuzera: integer;
sGaurkoData: tsKate10;
cAukera: char;
cHasierakoLetra: char;
sFitxIzenBezeroak: tsKate199;
boErabiltzaileenFitxategiaSortuta: boolean;
sFitxIzenTop10: tsKate199; { Menuaren 8. aukerarako }
ardSailkatuenZerrenda: tardSailkatuenZerrenda; { Menuaren 8. aukerarako }
iLuzeraTOP10: integer; { Menuaren 8. aukerarako }

sLiburuarenKodea: tsKate15; { Menuaren 9. aukerarako }
iPosizioa: integer; { Menuaren 9. aukerarako }

begin { ---------------------------------------- Programa Nagusia --------------------------- }
writeln;
writeln;
boErabiltzaileenFitxategiaSortuta := FALSE;
write('Liburutegiko fitxategiaren izena eman (LIBURUAK adibidez): ');
readln(sFitxIzenLiburutegia);
sFitxIzenLiburutegia := sBIDEA + sFitxIzenLiburutegia + '.DAT';
write('Erreserben fitxategiaren izena eman (ERRESERBAK adibidez): ');
readln(sFitxIzenErreserbak);
sFitxIzenErreserbak := sBIDEA + sFitxIzenErreserbak + '.DAT';
writeln;

LiburutegiarenFitxategiaSortu(sFitxIzenLiburutegia); { "biblioteka" unitatean garatuta }
// LiburutegiarenFitxategiaIkusi(sFitxIzenLiburutegia); { "biblioteka" unitatean garatuta }
ErreserbenFitxategiaSortu(sFitxIzenErreserbak); { "biblioteka" unitatean garatuta }
// ErreserbenFitxategiaIkusi(sFitxIzenErreserbak); { "biblioteka" unitatean garatuta }

if not fileExists(sFitxIzenLiburutegia) or not fileExists(sFitxIzenErreserbak) then
writeln('ERROREA: behar diren bi fitxategietatik bat falta da (ala biak falta dira)')
else
begin
FitxategitikArrayraIrauli(sFitxIzenErreserbak, ardErreserbak, iLuzera);
write('Gaurko data eman uuuu/hh/ee formatuan (adibidez 2022/06/01): ');
readln(sGaurkoData);
repeat
cAukera := fncAukeraHautatu;
writeln;
case cAukera of
'1': begin
writeln;
MaileguEskariBerria(sGaurkoData, sFitxIzenLiburutegia, ardErreserbak, iLuzera);
end;
'2': begin
writeln;
MailegatutakoLiburuaItzuli(sGaurkoData, sFitxIzenLiburutegia, ardErreserbak, iLuzera);
end;
'3': begin
writeln;
write('Erakutsi beharreko liburuen hasierako letra: ');
readln(cHasierakoLetra);
LetraBatezHastenDirenLiburuak(cHasierakoLetra, sFitxIzenLiburutegia);
end;
'4': begin
writeln;
LiburutegiarenFitxategiaIkusi(sFitxIzenLiburutegia);
end;
'5': begin
writeln;
ErreserbenArrayaIkusi(ardErreserbak, iLuzera);
end;
'6': begin
writeln;
writeln('Erabiltzaileen BEZEROAK.DAT fitxategia sortu eta erakutsi');
sFitxIzenBezeroak := sBIDEA + 'BEZEROAK.DAT';
BezeroenFitxategiaSortu(sFitxIzenBezeroak);
BezeroenFitxategiaIkusi(sFitxIzenBezeroak);
boErabiltzaileenFitxategiaSortuta := TRUE;
writeln;
end;
'7': begin
writeln;
writeln('Mailegurik duten erabiltzaileen izenak erakutsi');
if not boErabiltzaileenFitxategiaSortuta then
writeln('BEZEROAK.DAT fitxategirik ez dago, menuaren 6. aukera hautatu beharra dago')
else
begin
MailegurikDutenErabiltzaileak(sFitxIzenLiburutegia, sFitxIzenBezeroak);
end;
writeln;
end;
'8': begin
writeln;
textcolor(LightRed);
writeln(' Sarriago mailegatu diren 10 liburuen sailkapena lortu eta fitxategi batean');
writeln(' gorde. Suposa daiteke liburutegiak 125 liburu izan ditzakeela gehienez.');
writeln;
writeln(' Bi liburuk "iAldizMaileguan" kopuru bera badute, horien arteko sailkapen');
writeln(' erlatiboa alfabetikoki erabakiko da "sIzenburua" delako eremuari jarraituz.');
writeln(' Sarriago mailegatu izan diren 10 liburuen sailkapena jasoko duen helburuko');
writeln(' fitxategiaren elementuak erregistroak dira, erregistroen eremuak ondoko 3');
writeln(' hauek izango dira:');
writeln;
writeln(' iAldizMaileguan: integer; { liburutegi fitxategian dagoen datua }');
writeln(' sIzenburua: tsKate55; { liburutegi fitxategian dagoen datua }');
writeln(' sLiburuKodea: tsKate15; { liburutegi fitxategian dagoen datua }');
textcolor(LightGray);
writeln;

writeln;
writeln('8. aukerako lana: Gehien mailegatutako 10 liburuak');
sFitxIzenTop10 := sBIDEA + 'TOP-10.DAT';
writeln;

writeln('-------Ordenatuko den bektore laguntzailea lortu-------------');
FitxategitikBektoreaBete(sFitxIzenLiburutegia, ardSailkatuenZerrenda, iLuzeraTOP10); { "top10" unitatean garatu behar duzue }
writeln('-------Ordenatu gabeko bektorea------------------------------');
BektoreaIkusi(ardSailkatuenZerrenda, iLuzeraTOP10);

writeln('HONAINO');
readln; { "top10" unitatean garatu behar duzue }
writeln('-------Bektore laguntzailea ordenatu-------------------------');
KopuruzEtaIzenburuzOrdenatu(ardSailkatuenZerrenda, iLuzeraTOP10); { "top10" unitatean garatuta }
writeln('-------Ordenatutako bektorea---------------------------------');
BektoreaIkusi(ardSailkatuenZerrenda, iLuzeraTOP10); { "top10" unitatean garatu behar duzue }
writeln('-------Ordenatutako bektoretik helburuko fitxategia lortu----');
BektoretikFitxategiaBete(sFitxIzenTop10, ardSailkatuenZerrenda, iLuzeraTOP10); { "top10" unitatean garatu behar duzue }

writeln('========================== ', sFitxIzenTop10, ' ==========================');
writeln;
SailkapenarenFitxategiaIkusi(sFitxIzenTop10); { "top10" unitatean garatu behar duzue }
writeln;
end;
'9': begin
writeln;
textcolor(LightRed);
writeln('Lantaldeak proposatutako duen (eta onartuko zaion) zereginen bat');
textcolor(LightGray);

write('Aldatu nahi duzun liburuaren kodea eman: ');
readln(sLiburuarenKodea);
iPosizioa := fniBilatu(sLiburuarenKodea, sFitxIzenLiburutegia);
if iPosizioa = -1 then
writeln(sLiburuarenKodea, ' kodea duen libururik ez dago!!!')
else
Aldatu(sFitxIzenLiburutegia, iPosizioa);

writeln;
write('Kendu nahi duzun liburuaren kodea eman: ');
readln(sLiburuarenKodea);
iPosizioa := fniBilatu(sLiburuarenKodea, sFitxIzenLiburutegia);
if iPosizioa = -1 then
writeln(sLiburuarenKodea, ' kodea duen libururik ez dago!!!')
else
Kendu(sFitxIzenLiburutegia, iPosizioa);
end;
end;
if cAukera <> '0' then
begin
writeln;
textcolor(LightGreen);
writeln('RETURN sakatu aurrera egiteko...');
textcolor(LightGray);
readln;
end;
until cAukera = '0';

ArraytikFitxategiraIrauli(ardErreserbak, iLuzera, sFitxIzenErreserbak);
end;

writeln;
textcolor(Yellow);
writeln('=== Amaitu =================================================');
textcolor(LightGray);
readln;
end.









unit top10;

INTERFACE

uses
datu_mota, crt;

procedure FitxategitikBektoreaBete( sFitxIzenLiburutegia: tsKate199;
var ardSailkatuenZerrenda: tardSailkatuenZerrenda;
var iLuzeraTOP10: integer);

procedure SailkapenarenFitxategiaIkusi(sFitxIzenSailkatuak: tsKate199);

procedure BektoretikFitxategiaBete( sFitxIzenSailkatuak: tsKate199;
const ardSailkatuenZerrenda: tardSailkatuenZerrenda;
iLuzeraTOP10: integer);

procedure BektoreaIkusi(const ardSailkatuenZerrenda: tardSailkatuenZerrenda;
iLuzeraTOP10: integer);

procedure KopuruzEtaIzenburuzOrdenatu(var ardSailkatuenZerrenda: tardSailkatuenZerrenda;
iLuzeraTOP10: integer);


IMPLEMENTATION

procedure FitxategitikBektoreaBete( sFitxIzenLiburutegia: tsKate199;
var ardSailkatuenZerrenda: tardSailkatuenZerrenda;
var iLuzeraTOP10: integer);
var
fLiburutegia: tfrdLiburutegiFitxategia;
rdLiburuBat: trdLiburu;
begin
assign(fLiburutegia, sFitxIzenLiburutegia);
reset(fLiburutegia);

writeln('"FitxategitikBektoreaBete" prozedura exekutatzen.');
writeln('RETURN sakatu aurrera jarraitzeko...');
readln;

iLuzeraTOP10 := 0;
while not eof(fLiburutegia) do
begin
read(fLiburutegia, rdLiburuBat);

iLuzeraTOP10 := iLuzeraTOP10 +1;
ardSailkatuenZerrenda[iLuzeraTOP10].iAldizMaileguan := rdLiburuBat.iAldizMaileguan;
ardSailkatuenZerrenda[iLuzeraTOP10].sIzenburua := rdLiburuBat.sIzenburua;
ardSailkatuenZerrenda[iLuzeraTOP10].sLiburuKodea := rdLiburuBat.sLiburuKodea;
end;

close(fLiburutegia);
end;


procedure BektoretikFitxategiaBete( sFitxIzenSailkatuak: tsKate199;
const ardSailkatuenZerrenda: tardSailkatuenZerrenda;
iLuzeraTOP10: integer);
var
fSailkatuak: tfrdSailkatuenFitxategia;
rdElem: trdSailkatua;
iKont: integer;
iZenbatLiburu: integer;
begin
assign(fSailkatuak, sFitxIzenSailkatuak);
rewrite(fSailkatuak);

if iLuzeraTOP10 >= 10 then
iZenbatLiburu := 10
else
iZenbatLiburu := iLuzeraTOP10;

for iKont:=1 to iZenbatLiburu do
begin
rdElem := ardSailkatuenZerrenda[iKont];
write(fSailkatuak, rdElem);
end;
writeln('"BektoretikFitxategiaBete" prozedura exekutatzen.');
writeln('RETURN sakatu aurrera jarraitzeko...');
readln;

close(fSailkatuak);
end;


procedure BektoreaIkusi(const ardSailkatuenZerrenda: tardSailkatuenZerrenda;
iLuzeraTOP10: integer);
var
iKont: integer;
begin
writeln('"BektoreaIkusi" prozedura exekutatzen.');
writeln('RETURN sakatu aurrera jarraitzeko...');
readln;

for iKont:=1 to iLuzeraTOP10 do
begin
writeln(' aldiak:', ardSailkatuenZerrenda[iKont].iAldizMaileguan);
writeln(' izenburua:', ardSailkatuenZerrenda[iKont].sIzenburua);
writeln(' kodea:', ardSailkatuenZerrenda[iKont].sLiburuKodea);
writeln;
end;
end;


(* Bektore baten ordenazioa AUKERAKETA metodoaren bitartez. *)
(* Parametro bat irteerakoa den bitartean bestea sarrerakoa *)
(* da. Horregatik arraya erreferentziaz pasatzen da baina *)
(* aldatzen ez den luzera logikoari dagokion osoa balioz. *)
procedure KopuruzEtaIzenburuzOrdenatu(var ardSailkatuenZerrenda: tardSailkatuenZerrenda;
iLuzeraTOP10: integer);
var
iPosMax, j, k: integer;
rdMax: trdSailkatua;
begin
writeln('"KopuruzEtaIzenburuzOrdenatu" prozedura exekutatzen.');
writeln('RETURN sakatu aurrera jarraitzeko...');
readln;

for k:=1 to iLuzeraTOP10-1 do
begin
rdMax := ardSailkatuenZerrenda[k];
iPosMax := k;
for j:=k+1 to iLuzeraTOP10 do (* ordenatu gabekoen artean *)
begin
if (rdMax.iAldizMaileguan < ardSailkatuenZerrenda[j].iAldizMaileguan) or
((rdMax.iAldizMaileguan = ardSailkatuenZerrenda[j].iAldizMaileguan) and (rdMax.sIzenburua > ardSailkatuenZerrenda[j].sIzenburua)) then
begin
rdMax := ardSailkatuenZerrenda[j];
iPosMax := j;
end;
end;
ardSailkatuenZerrenda[iPosMax] := ardSailkatuenZerrenda[k]; (* trukatu, tokiz aldatuz *)
ardSailkatuenZerrenda[k] := rdMax;
end;
end;


procedure SailkapenarenFitxategiaIkusi(sFitxIzenSailkatuak: tsKate199);
var
fSailkatuak: tfrdSailkatuenFitxategia;
rdSailkatuBat: trdSailkatua;
begin
assign(fSailkatuak, sFitxIzenSailkatuak);
reset(fSailkatuak);

writeln('"SailkapenarenFitxategiaIkusi" prozedura exekutatzen.');

textcolor(Cyan);
writeln(filesize(fSailkatuak), ' elementu fitxategian');
writeln;

while not eof(fSailkatuak) do
begin
read(fSailkatuak, rdSailkatuBat);

writeln(' Aldiak:', rdSailkatuBat.iAldizMaileguan);
writeln(' Izenburua:', rdSailkatuBat.sIzenburua);
writeln(' Kodea:', rdSailkatuBat.sLiburuKodea);
writeln;
end;

textcolor(LightGray);

close(fSailkatuak);
end;


END.


   

2023(e)ko apirilaren 17(a), astelehena

12. ASTEA | etxerako lana

 12. astea (2023/04/18) 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 (2023) zereginaren bitartez zuen proiektuaren menuak izango duen 4. aukera proposatu (Entregatze-data: 2023ko maiatzaren 1ean, 23:59tan, astelehena)





2023(e)ko apirilaren 11(a), asteartea

12. ASTEA | laborategi/mintegian egin dena

 12. astea (2023/04/18) laborategi/mintegian egindakoa






  • Zerrenda pasatzeko, eGela zerbitzuko 12. saioan egindako programak bidalketaren bitartez. Lanik bidali ez dutenak:


    • Gaizka Martin Zorrozua

    • Maider Nogueira Alonso

    • Antxon Zubiaurre Peñalba





  • Erregistroen array baten adibidea egin dugu. Konkretuki 11. astea | erregistroen bektore baten elementuak ezabatu artikulutik abiatuta, ikasle gazteak kendu array laguntzaile bat erabiliz. Bi eremu (sIzena katea eta iAdina zenbaki osoa) dituen erregistroetako arrayarekin lan egin dugu eragiketa hauek burutuz:


    1. Zerrenda datuz bete (suposatuz arrayak gehienez 25 elementu izan ditzakeela)

    2. Zerrendaren edukia pantailaratu

    3. Adin guztien batezbesteko aritmetikoa kalkulatu

    4. Adin txikiko elementuak (media baino txikiagoak direnak) zerrendatik kendu, ondorioz hasierako zerrenda aldatua suertatuko da

    5. Zerrenda berriaren edukia pantailaratu





  • 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);
begin
end;


{ sFitxIzen katea ezaguna da programa nagusian eta prozedura honetan }
{ izena ez da aldatuko, horregatik sarrerako parametroa da prozeduran }
procedure FitxategiaIkusi(sFitxIzen: tsKate249);
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.


 

2023(e)ko apirilaren 1(a), larunbata

11. astea | erregistroen bi bektore nahastu bektore bakar batean





 

11. 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...


 

11. 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 10. astea | bilaketa sekuentzialaren aplikazio bat programara jo eta bertako BilaketaLineala izeneko funtzioa erabili gure behar izanetara egokituz, hots, erabili beharko dituen moldapenak eginez.





 

11. 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:







 

11. astea | hiru array paralelo

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







 

11. ASTEA | etxerako lana

 11. astea (2023/04/04) etxean egitekoa













  • Hauxe da HiruArrayParalelo ariketa non randomize prozedura estandarra programa nagusian kokatu dugun, ArrayaBete prozedura birritan deitu beharra dagoelako. ArrayaBete prozedurak random funtzio estandarrari dei egiten dio for-to-do barruan, eta normalean randomize prozedura estandarra for-to-do horren aurrean kokatzen da



{------------------------------------------------------------------------------
randomize non?
Normalean prozeduran doa, konkretuki for-to-do aurrean (ikusi gaurko beste
bi ariketak). Baina kasu honetan hobe programa nagusian.
-------------------------------------------------------------------------------}
program HiruArrayParalelo ;
uses
crt;
const
BEHEMUGA = 1;
GOIMUGA = 10;
type
taiZerrenda = array[BEHEMUGA..GOIMUGA] of integer;


procedure ArrayaBete(var aiZerrenda: taiZerrenda);
var
k: integer;
begin
//randomize;
for k:=BEHEMUGA to GOIMUGA do
begin
aiZerrenda[k] := random(10); (* 0 eta 9 arteko balio bat *)
end;
end;


procedure ArrayaErakutsi(const aiZerrenda: taiZerrenda);
var
k: integer;
begin
for k:=BEHEMUGA to GOIMUGA do
begin
writeln(k:2, '. elementua = ',aiZerrenda[k]:2);
end;
end;


procedure EmaitzaLortu(const aiZerrenda1: taiZerrenda;
const aiZerrenda2: taiZerrenda;
var aiZerrenda3: taiZerrenda);
var
k: integer;
begin
for k:=BEHEMUGA to GOIMUGA do
begin
if aiZerrenda1[k] > aiZerrenda2[k] then
aiZerrenda3[k] := 1;
if aiZerrenda1[k] = aiZerrenda2[k] then
aiZerrenda3[k] := 0;
if aiZerrenda1[k] < aiZerrenda2[k] then
aiZerrenda3[k] := -1;
end;
end;


(* ---------------------------------------------- *)
var
aiX, aiY, aiZ: taiZerrenda;
BEGIN
clrscr;

randomize;

ArrayaBete(aiX);
writeln('X bektorea:');
ArrayaErakutsi(aiX);
writeln;

ArrayaBete(aiY);
writeln('Y bektorea:');
ArrayaErakutsi(aiY);
writeln;

EmaitzaLortu(aiX, aiY, aiZ);
writeln('Z bektorea:');
ArrayaErakutsi(aiZ);
writeln ;

WriteLn ;
WriteLn ('=======================') ;
WriteLn ('RETURN sakatu amaitzeko') ;
Write ('=======================') ;
ReadLn ;
end.







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)

  • Proiektuan eskatzen dena artikula astiro irakurri eta ondokoak egin:


    1. Proiektua kartepa eta Datuak karpeta sortu, zer gordetzen da bakoitzean?

    2. datu_mota.pas unitatea ireki eta bere INTERFACE atala irakurri, ikusi eta identifikatu erabiliko diren datu-motak

    3. biblioteka.pas unitatea ireki eta bere INTERFACE atala irakurri, ikusi eta identifikatu erabiliko diren azpiprogramak

    4. erabiltzaile.pas unitatea ireki eta bere INTERFACE atala irakurri, ikusi eta identifikatu erabiliko diren azpiprogramak

    5. top10.pas unitatea ireki eta bere INTERFACE atala irakurri, ikusi eta identifikatu erabiliko diren azpiprogramak

    6. LiburutegiProiektua.pas bezero-programa ireki, aztertu eta konpilatu LiburutegiProiektua.exe lortzeko


  • LiburutegiProiektua.exe programa exekutatu, ondokoa ikusiz:


    1. Menuaren 1, 2, 3, 4 eta 5 aukerekin LIBURUAK.DAT eta ERRESERBAK.DAT fitxategiak erabiltzen dira

    2. Menuaren 6 eta 7 aukerekin BEZEROAK.DAT fitxategia erabiltzen da

    3. Menuaren 8 eta 9 aukerekin TOP10.DAT fitxategia erabiltzen da (eta beharbada zuek sortutako beste fitxategiren bat)







 

11. ASTEA | laborategi/mintegian egin dena

 11. astea (2023/04/04) laborategi/mintegian egindakoa





Zerrenda pasatzeko, eGela zerbitzuko 11. saioan egindako programak bidalketaren bitartez. Lanik bidali ez dutenak:

  • Eñaut Calvo Gaztañaga

  • Gaizka Martin Zorrozua

  • Maider Nogueira Alonso

  • Antxon Zubiaurre Peñalba




Gaurko saioaren helburua hirukoitza da:



  1. Proiektuari buruz gain-gainetik hitz egitea (lantaldeak osatu

  2. Arrayekin lan egitea 

  3. Erregistroen arrayekin lan egitea   






1. Proiektua garatzeko taldekideak








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







3. Erregistroen arrayekin lanean




 

2023(e)ko martxoaren 30(a), osteguna

10. ASTEA | etxerako lana

10. astea (2023/03/28) etxean egitekoa








    ARRAYEKIN LAN EGITEKO BALIABIDEAK:



 

15. ASTEA | laborategi/mintegian egin dena

15. astea (2023/05/09) laborategi/mintegian egindakoa 25 ikasleetatik 17 ikasleek kontrol-ariketaren bidalketa egin dute Hirugarren ko...