Gogoratu datorren asteko asteazkena festa delako, laborategirik ez dugula izango. Kalterik izan ez dezazuen 14. praktikari dagokiona ostegun honetan egingo dugu:
Zerrenda pasatu dugu. Deitutako 24en artean 8 ez dira etorri (zehaztapen gehiago eGela zerbitzuan)
Aguirre Perez de Albeniz, Iker
Auzokoa Pagazaurtundua, Paul
Bayón Calvo, Garikoitz
de Miguel Murillo, Celia
Fernández López, Adrián Ginés
Gutierrez Barrencua, Oier
Sanjuan Malaxechevarria, Beñat
Zalduegi Orue, Oier
Proiektuaren J. aukera egin dugu ondoko hau aplikatuz: FITXATEGIEN GAINEKO ERAGIKETAK. Ondoko lan hauek egiteko, batzutan fitxategi laguntzaile bat erabiliko da eta beste batzuetan fitxategi-array (F→A) eta array-fitxategi (A→F) eragiketak erabiliko dira. Eragiketak hauek izango dira:
Bilaketa, futbolari baten izena teklatuz eman eta fitxategian bilatuz erregistro osoa programa nagusira itzuli [Hau egin dugu]
Ezabaketa, elementu bat (edo gehiago) fitxategiaren erdi aldean kentzeko [Hau egin dugu]
Txertaketa, elementu bat (edo gehiago) fitxategiaren erdi aldetik tartekatzeko [Hau ez]
Gehiketa, elementu bat (edo gehiago) fitxategiaren bukaeran gehitzeko [Hau ez]
Aldaketa, elementu baten (edo gehiagoren) balioa aldatzeko fitxategian [Hau ez]
Proiektuaren J. aukera garatzeko programa nagusian idatzi behar den kodea, non zuen programetan kolorerik ez duzuen marraztu behar pantailan:
...
end;
'J': begin
clrscr;
textcolor(LightRed);
writeln('Bilduma-fitxategitik kromo bat kendu eta beste kromo bat txertatu');
writeln('"J_aukera.exe" programa exekutagarriaren funtzionalitatea hemen kokatu');
textcolor(LightGray);
writeln;
clrscr;
writeln;
writeln('J aukeraren hasieran, hauxe da bildumaren egoera:');
TaulaBezalaErakutsi(sFitxIzen);
writeln('Bilduma osoaren kromo kopurua: ', fniZenbatKromo(sFitxIzen));
writeln;
writeln('J aukeran aurrera egiteko RETURN sakatu...');
readln;
writeln;
writeln('Fitxategi laguntzaile bat erabiliz, kromo bat ezabatuko da bildumatik');
writeln('---------------------------------------------------------------------');
write('Bildumatik kenduko den jokalariaren izena: ');
readln(sJokalaria);
writeln;
JokalariaBilatu(sFitxIzen, sJokalaria, rdKromoBat); { rdKromoBat irteerakoa }
if rdKromoBat.iZenbakia = -1 then
writeln('ERROREA!! "', sJokalaria, '" ez da aurkitu')
else
begin
KromoBatErakutsi(rdKromoBat);
iBerePosizioa := fniPosizioaZehaztu(sFitxIzen, sJokalaria);
iNorainoBai := iBerePosizioa -1;
writeln('0-tik hasita 1. zatiaren amaiera: ', iNorainoBai, ' (posizio hau barne, RETURN sakatu)');
readln;
KromoBatFitxategitikKendu(sFitxIzen, iNorainoBai);
writeln;
writeln('"', upcase(sJokalaria), '" jokalaria kendu ondoren, hauxe da bildumaren egoera:');
TaulaBezalaErakutsi(sFitxIzen);
writeln('Bilduma osoaren kromo kopurua: ', fniZenbatKromo(sFitxIzen));
writeln;
writeln;
writeln('ARRAY laguntzaile bat erabiliz, kromo berri bat txertatuko da bilduman');
writeln('----------------------------------------------------------------------');
iIdaztekoAzkenPosizioa := fniZenbatKromo(sFitxIzen); { filesize }
repeat
write('Txertaketaren helburuko posizioa eman (0 eta ', iIdaztekoAzkenPosizioa, ' arteko balioa): ');
readln(iNonTxertatu);
until (iNonTxertatu >= 0) and (iNonTxertatu <= iIdaztekoAzkenPosizioa);
writeln('Bilduman txertatuko den kromo berriaren datuak jaso');
KromoBerriarenDatuakJaso(rdKromoBat);
writeln;
if iNonTxertatu = iIdaztekoAzkenPosizioa then { gehiketa bat da}
KromoaFitxategiarenBukaeran(sFitxIzen, rdKromoBat)
else { txertaketa bat da}
KromoBatFitxategianTxertatu(sFitxIzen, iNonTxertatu, rdKromoBat);
writeln;
writeln('"', upcase(rdKromoBat.sIzena), '" jokalaria txertatu ondoren, hauxe da bildumaren egoera:');
TaulaBezalaErakutsi(sFitxIzen);
writeln('Bilduma osoaren kromo kopurua: ', fniZenbatKromo(sFitxIzen));
writeln;
writeln('Ikusi zenbakiak txarto daudela. Azken urratsarekin jarraitzeko RETURN sakatu');
readln;
writeln;
writeln('J aukeratik irten aurretik jokalari guztien zenbakiak eguneratuko dira');
JokalarienZenbakiakEguneratu(sFitxIzen);
TaulaBezalaErakutsi(sFitxIzen);
writeln('Bilduma osoaren kromo kopurua: ', fniZenbatKromo(sFitxIzen));
writeln;
end; { else, datu-fitxategirik bada }
end;
'K': begin
clrscr;
textcolor(LightRed);
writeln('Lantaldeak proposatutako duen eta irakasleak onartutako duen lana');
writeln('Blogeko "Proiektua aberasteko ideiak (menuaren K aukera)" artikulua ikusi');
textcolor(LightGray);
writeln;
end;
...
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
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
Proiektua: hobekuntzak aitortu (2024) zereginaren bitartez zuen proiektuaren menuak izango duen K aukera proposatu (Entregatze-data: 2024ko apirilaren 18an, 23:59tan, larunbata)
Ondoko hau urrunago dago: Proiektua amaiturik (2024) zereginaren bitartez zuen proiektua entregatu, hots, menuaren J eta K aukerak programatu (Entregatze-data: 2024ko maiatzaren 1ean, 23:59tan, astelehena)
Zerrenda pasatu dugu. Deitutako 24en artean 8 ez dira etorri (zehaztapen gehiago eGela zerbitzuan)
Gaurko helburua bikoitza da:
Erregistroen arrayekin lan egitea
Erregistroen fitxategi bat sortzea
Erregistroen array bat
Erregistroen array baten adibidea egin dugu. Konkretuki 11. astea | erregistroen bektore baten elementuak ezabatu artikulutik abiatuta, zerbait laburrago egin dugu. Bi eremu (sIzena katea eta iAdina zenbaki osoa) dituen erregistroetako arrayarekin lan egin dugu eragiketa hauek burutuz:
Zerrenda datuz bete (errazagoa izan dadin elementuen izenak errepika daitezke)
Zerrendaren edukia pantailaratu
Ikasle bat bilatu eta bere informazioa pantailaratu
Adin guztien batezbesteko aritmetikoa kalkulatu
Hainbat elementu zerrendatik ezabatu (bietariko bat egin dugu):
Adin txikiko elementuak (media baino txikiagoak direnak) zerrendatik kendu, ondorioz hasierako zerrenda aldatua suertatuko da
A edo a letratik hasten diren izenen elementuak zerrendatik kendu, ondorioz hasierako zerrenda aldatua suertatuko da
Zerrenda berriaren edukia pantailaratu
Erregistroen fitxategi bat
Erregistroen fitxategi bat (bi eremu: sNor katea eta rNota zenbaki erreala) sortu dugu eta ondoren bere edukia pantailan erakutsi dugu. Hona hemen programaren kodea urratsez-urrats azalduta:
program ErregistroenFitxategiaSortuEtaIkusi;
type
tsKate249 = string[249]; { fitxategiaren izena luzea izan daitekeelako }
tsKate15 = string[15];
trdIkaslea = record
sNor: tsKate15;
rNota: real;
end;
tfrdIkasleak = file of trdIkaslea;
{ sFitxIzen katea ezaguna da programa nagusian eta prozedura honetan }
{ izena ez da aldatuko, horregatik sarrerako parametroa da prozeduran }
procedure FitxategiaSortuEtaBete(sFitxIzen: tsKate249);
var
f: tfrdIkasleak; // file datu-motako aldagaia
rdElem: trdIkaslea; // fitxategiaren elementua
begin
end;
{ sFitxIzen katea ezaguna da programa nagusian eta prozedura honetan }
{ izena ez da aldatuko, horregatik sarrerako parametroa da prozeduran }
procedure FitxategiaIkusi(sFitxIzen: tsKate249);
var
f: tfrdIkasleak; // file datu-motako aldagaia
rdElem: trdIkaslea; // fitxategiaren elementua
begin
end;
{=============Programa nagusia eta programa nagusiko aldagaiak=============}
var
sFitxIzen: tsKate249;
begin
writeln;
writeln('Eman fitxategiaren izena, adibidez (C:\NereKarpeta\31Taldea.dat): ');
readln(sFitxIzen);
writeln('===>', sFitxIzen, '<===');
writeln;
writeln('Fitxategiaren datuak jasotzen...');
FitxategiaSortuEtaBete(sFitxIzen);
writeln;
writeln('Fitxategiaren datuak:');
FitxategiaIkusi(sFitxIzen);
writeln;
writeln('=======================');
writeln('RETURN sakatu amaitzeko');
write ('=======================');
readln;
end.