13. astea (2022/04/25) laborategi/mintegian egindakoa
- Zerrenda pasatzeko, eGela zerbitzuko 13. saioan egindako programak bidalketaren bitartez. Lanik bidali ez dutenak:
- Unai Aguinagalde del Barrio
- Jon Arana San Anton
- Ibon Carro Valladares
- Leire Garcia Baz
- Nagore Garcia Ibarra
- Garazi Iparragirre Martinez
- June Postigo Colas
- Maria Saenz de Buruaga Echevarria
- Ainara Sancho Alcibar-Arechuluaga
- Haizea Seijo Gabicagogeascoa
- 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:
- Txertaketa, elementu bat edo gehiago fitxategiaren erdi aldean tartekatzeko
- Ezabaketa, elementu bat edo gehiago fitxategiaren erdi aldetik kentzeko
- Sailkatzea, fitxategiaren elementuak ordenatzeko
- Proiektuaren 9. aukeraren adibide hau egin dugu:
- Gehiketa, elementu berri bat fitxategiaren bukaeran gehitu
- 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.