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

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.


   

iruzkinik ez:

Argitaratu iruzkina

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