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

15. ASTEA | laborategi/mintegian egin dena

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









  • 24 ikasleetatik 11 ikasleek kontrol-ariketaren bidalketa egin dute







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



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

    • Ariketaren emaitzaren hasierak diren A_eredua__3_azp__3_kontr.pas iturburu-programa eta B_eredua__3_azp__3_kontr.pas iturburu-programa

    • kontr_3 unitatearen bi fitxategi hauek:


      • kontr_3.ow

      • kontr_3.ppw











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













3_kontrola__AZP-1.zip









3_kontrola__AZP-2.zip







 

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

14. ASTEA | etxerako lana

 14. astea (2023/04/27) etxean egitekoa | [P0B9I] laborategikoa ulertu ondoren






  • 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





 

14. ASTEA | laborategi/mintegian egin dena

 14. astea (2023/04/27) laborategi/mintegian egindakoa | [P0B9I] laborategian








  • Zerrenda ez dugu pasatu tutoretza bat izan delako. Egindakoa eGela zerbitzuko 14. saioan egindako programak bidalketaren bitartez jarraituko du etxean ikasleak












  • Proiektuaren 9. aukeraren adibide hau egin dugu (egindakoa eGela zerbitzuko foroan aurki dezakezu gaurko aktarekin batera 31azp3_13eta14asteak.zip izenarekin):


    1. Bilaketa, elementu baten sLiburuKodea teklatuz eman eta bilatu dugu funtzio bati esker, funtzioak bilatu nahi den elementuaren posizioa itzultzen du

    2. Ezabaketa, posizio jakin bateko elementua fitxategitik kentzeko array laguntzaile bat edo beste fitxategi laguntzaile bat beharko da (posizioa aurreko bilaketaren emaitza izan daiteke edo hurrengo urratseko teklatuaren bitartez egindako irakurketa)

    3. Posizioa, elementu baten posizioa fitxategian teklatuz eman eta fitxategiaren posizio horretan elementu berri bat txertatu

    4. Txertaketa, fitxategiaren posizio jakin batean elementu berri bat sartzeko array laguntzaile bat edo beste fitxategi laguntzaile bat beharko da







  • 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



 

13. ASTEA | etxerako lana

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






  • Funtsezkoena une honetan: Proiektuarekin jarrraitzea





 

13. ASTEA | laborategi/mintegian egin dena

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






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


    1. Unai Aguinagalde del Barrio

    2. Jon Arana San Anton

    3. Ibon Carro Valladares

    4. Leire Garcia Baz

    5. Nagore Garcia Ibarra

    6. Garazi Iparragirre Martinez

    7. June Postigo Colas

    8. Maria Saenz de Buruaga Echevarria

    9. Ainara Sancho Alcibar-Arechuluaga

    10. Haizea Seijo Gabicagogeascoa

    11. Naia Talles Nanclares






  • 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

    3. Sailkatzea, fitxategiaren elementuak ordenatzeko






  • Proiektuaren 9. aukeraren adibide hau egin dugu:


    1. Gehiketa, elementu berri bat fitxategiaren bukaeran gehitu


    2. Sailkatzea, liburutegi fitxategiaren elementuak ordenatzeko ondoko hau aplikatuz: fitxategi-array (F→A), arraya ordenatu eta array-fitxategi (A→F)





program LiburutegiProiektua_Azp3_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;


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

seek(f_L, filesize(f_L));

write('Liburu berriaren kodea eman: ');
readln(rdLiburuBat.sLiburuKodea);
write('Liburu berriaren izenburua eman: ');
readln(rdLiburuBat.sIzenburua);
rdLiburuBat.sMaileguanNori := 'INORI';
rdLiburuBat.iAldizMaileguan := 0;
rdLiburuBat.sKokapena := '3-B';
rdLiburuBat.sAzkenMaileguData := '2022/05/02';

write(f_L, rdLiburuBat);

close(f_L)
end;


procedure LiburutegiaSailkatu(var ardLaguntzailea: tardLiburutegiZerrenda;
iZenbatLiburu: integer);
var
iPosMax, j, k: integer;
rdMax: trdLiburu;
begin
writeln('"LiburutegiaSailkatu" prozedura exekutatzen.');
writeln('RETURN sakatu aurrera jarraitzeko...');
readln;

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


procedure FitxategitikArrayra(sFitxIzenLiburutegia: tsKate199; var ardLaguntzailea: tardLiburutegiZerrenda; var iLuzera: integer);
var
f_L: tfrdLiburutegiFitxategia;
rdLiburuBat: trdLiburu;
begin
assign(f_L, sFitxIzenLiburutegia);
reset(f_L);

iLuzera := 0;
while not eof(f_l) do
begin
read(f_L, rdLiburuBat);

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

rewrite(f_L);

close(f_L);
end;


procedure ArraytikFitxategira(sFitxIzenLiburutegia: tsKate199; const ardLaguntzailea: tardLiburutegiZerrenda; iLuzera: integer);
var
f_L: tfrdLiburutegiFitxategia;
iKont: integer;
begin
assign(f_L, sFitxIzenLiburutegia);
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 }
cErantz: char; { Menuaren 8. aukerarako }

sFitxIzenOrdenatua: tsKate199; { Menuaren 9. aukerarako }
ardLaguntzailea: tardLiburutegiZerrenda; { Menuaren 9. aukerarako }
iZenbatLiburu: 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); { "top10" unitatean garatu behar duzue }
readln;
writeln('-------Bektore laguntzailea ordenatu-------------------------');
KopuruzEtaIzenburuzOrdenatu(ardSailkatuenZerrenda, iLuzeraTOP10); { "top10" unitatean garatuta }
writeln('-------Ordenatutako bektorea---------------------------------');
BektoreaIkusi(ardSailkatuenZerrenda, iLuzeraTOP10); { "top10" unitatean garatu behar duzue }
readln;
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);

repeat
write('Liburu berri bat sartuko duzu liburutegian (B/E): ');
readln(cErantz);
cErantz := upcase(cErantz);
until (cErantz = 'B') or (cErantz = 'E');
if cErantz='B' then
begin
Liburu_1_Gehiago(sFitxIzenLiburutegia);
writeln;
writeln('Liburu berria sartu ondoren:');
LiburutegiarenFitxategiaIkusi(sFitxIzenLiburutegia);
end;
writeln;
writeln('Ordenaturik dagoen liburutegiaren fitxategi berriaren izena...');
sFitxIzenOrdenatua := sBIDEA + 'LiburutegiOrdenatua.DAT';
writeln('"', sFitxIzenOrdenatua, '" aurrera egiteko RETURN egin.');
readln;

FitxategitikArrayra(sFitxIzenLiburutegia, ardLaguntzailea, iZenbatLiburu);
LiburutegiaSailkatu(ardLaguntzailea, iZenbatLiburu);
ArraytikFitxategira(sFitxIzenOrdenatua, ardLaguntzailea, iZenbatLiburu);

writeln;
writeln('Hona hemen ordenaturik dagoen liburutegiaren edukia:');
readln;
LiburutegiarenFitxategiaIkusi(sFitxIzenOrdenatua);
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 14(a), ostirala

12. ASTEA | etxerako lana

 12. astea (2023/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 (2023) zereginaren bitartez zuen proiektua entregatu, hots, menuaren 8. eta 9. aukerak programatu (Entregatze-data: 2023ko maiatzaren 1ean, 23:59tan, astelehena)





12. ASTEA | laborategi/mintegian egin dena

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






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


    1. Unai Aguinagalde del Barrio

    2. Naia Aldasoro Urdangarin

    3. Ibon Carro Valladares

    4. Leire Garcia Baz

    5. Nagore Garcia Ibarra

    6. Garazi Iparragirre Martinez

    7. June Postigo Colas

    8. Maria Saenz de Buruaga Echevarria

    9. Ainara Sancho Alcibar-Arechuluaga

    10. Haizea Seijo Gabicagogeascoa

    11. Naia Talles Nanclares





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


 

15. ASTEA | laborategi/mintegian egin dena

 15. astea (2023/05/08) laborategi/mintegian egindakoa 24 ikasleetatik 11 ikasleek kontrol-ariketaren bidalketa egin dute Hirugarren kont...