15. asteko kontrolean arrakasta izateko, fitxategien gaineko eragiketa hauek menperatu behar dituzu:
Bilaketa: kromo bati dagokion daturen bat eman (jokalariaren izena adibidez) eta fitxategian bilatu azpiprograma batez, bilaketaren helburuarekin lotuta dago azpiprograma horrek zer itzuliko duen, aukerak:
Bilatzen dugun kromoaren informazio guztia behar dugu programa nagusian. Azpiprogramak erregistro osoa itzuliko dio programa nagusiari, eta azpiprograma prozedura bat izango da derrigorrez
Bilatzen dugun kromoaren datu bakar bat behar dugu programa nagusian (jokalariaren taldea adibidez). Azpiprogramak katea den erregistroaren eremu hori itzuliko dio programa nagusiari, eta azpiprograma funtzio bat izan daiteke
Gehiketa: kromo berri bat fitxategiaren bukaeran gorde
Txerketa: posizio jakin batean kromo bat txertatu (array laguntzailea), txertaketaren posizioa ezaguna teklatuz irakurtzen delako. Beste aukera bat dago ere:
Txerketa: posizio jakin batean kromo bat txertatu (fitxategi laguntzailea), txertaketaren posizioa ezaguna dela
Ezabaketa: kromo bat fitxategitik kendu (array laguntzailea), ezabaketaren posizioa ezaguna bilaketa bat egiten delako. Beste aukera bat dago ere:
Ezabaketa: kromo bat fitxategitik kendu (fitxategi laguntzailea), ezabaketaren posizioa ezaguna dela
Fitxategi bat banatu: kromo bildumatik abiatuta lortu 0_ale.dat izeneko fitxategia eta Errepikatuak.dat izeneko fitxategia lortu
Bi fitxategi batu: Osasuna.dat izeneko eta Erreala.dat izeneko fitxategietatik abiatuta fitxategi bakarra lortu
Fitxategiekin lan eginez, ondoko eragiketak praktikatu ditugu laborategian:
Fitxategiaren existentzia aztertu
Fitxategia sortu
Fitxategi osoa prozesatu
Bilaketa
Elementu baten datu bat aldatu
Elementu berri bat bukaeran gehitu
Bi fitxategi bakar batera bildu
Fitxategi bat bitan banatu
Programa hau datorren asteko kontrola prestatze aldera lagungarria izan daiteke.
program Aste_14__ErregistroenFitxategiarekinLanean;
uses
crt, // clrscr erabiltzeko
sysutils; // fileexists erabiltzeko
type
tsKate199 = string[199];
tsKate12 = string[12];
trdIkasle = record
sIzena: tsKate12;
rNota: real;
iKontrola: integer;
end;
tfrdIkasgela = file of trdIkasle;
{--------------------------------Azpiprogramak---------------------------------}
procedure FitxategiaSortuEtaBete(sFitxIzen: tsKate199);
var
f: tfrdIkasgela;
rdElem: trdIkasle;
iZenbat: integer;
iKont: integer;
iZeinKontrol: integer;
begin
assign(f, sFitxIzen);
rewrite(f);
repeat
write('Zenbat ikasleren datuak gordeko dira? ');
readln(iZenbat);
until iZenbat > 0;
repeat
write('Zein kontrol da? (1 ala 2) ');
readln(iZeinKontrol);
until (iZeinKontrol = 1) or (iZeinKontrol = 2);
for iKont:=1 to iZenbat do
begin
write(iKont:10, '. ikaslearen izena: ');
readln(rdElem.sIzena);
rdElem.sIzena := upcase(rdElem.sIzena);
repeat
write(iKont:10, '. ikaslearen nota: ');
readln(rdElem.rNota);
until (rdElem.rNota >= 0.0) and (rdElem.rNota <= 10.0);
rdElem.iKontrola := iZeinKontrol;
write(f, rdElem);
end;
close(f);
end;
procedure FitxategiarenEdukiaIkusi(sFitxIzen: tsKate199);
var
f: tfrdIkasgela;
rdElem: trdIkasle;
begin
assign(f, sFitxIzen);
reset(f);
writeln('IZENA':34, 'NOTA':18, 'KONTROLA':18);
writeln('-----':34, '----':18, '--------':18);
while not eof(f) do
begin
read(f, rdElem);
writeln(filepos(f):5, '. ikaslea: ', rdElem.sIzena:18, rdElem.rNota:18:2, rdElem.iKontrola:18 );
end;
close(f);
end;
procedure Batu(sFitxIzen_1eta2,
sFitxIzen_1,
sFitxIzen_2: tsKate199);
var
f_1eta2: tfrdIkasgela;
f_1: tfrdIkasgela;
f_2: tfrdIkasgela;
rdElem: trdIkasle;
begin
assign(f_1, sFitxIzen_1);
reset(f_1);
assign(f_2, sFitxIzen_2);
reset(f_2);
assign(f_1eta2, sFitxIzen_1eta2);
rewrite(f_1eta2);
while not eof(f_1) do
begin
read(f_1, rdElem);
write(f_1eta2, rdElem);
end;
while not eof(f_2) do
begin
read(f_2, rdElem);
write(f_1eta2, rdElem);
end;
close(f_1);
close(f_2);
close(f_1eta2);
end;
procedure Banatu(sFitxIzen_1eta2,
sFitxIzen_Aprob,
sFitxIzen_Suspn: tsKate199);
var
f_1eta2: tfrdIkasgela;
f_A: tfrdIkasgela;
f_S: tfrdIkasgela;
rdElem: trdIkasle;
begin
assign(f_1eta2, sFitxIzen_1eta2);
reset(f_1eta2);
assign(f_A, sFitxIzen_Aprob);
rewrite(f_A);
assign(f_S, sFitxIzen_Suspn);
rewrite(f_S);
while not eof(f_1eta2) do
begin
read(f_1eta2, rdElem);
if rdElem.rNota >= 5.0 then
write(f_A, rdElem)
else
write(f_S, rdElem);
end;
close(f_1eta2);
close(f_A);
close(f_S);
end;
function fniBilatu(sFitxIzen_1eta2: tsKate199;
sNor: tsKate12;
iZeinKontrol: integer): integer;
var
f: tfrdIkasgela;
rdElem: trdIkasle;
boAurkitua: boolean;
begin
assign(f, sFitxIzen_1eta2);
reset(f);
boAurkitua := FALSE;
while not eof(f) and not boAurkitua do
begin
read(f, rdElem);
if (rdElem.sIzena = sNor) and (rdElem.iKontrola = iZeinKontrol) then
boAurkitua := TRUE;
end;
if boAurkitua then
fniBilatu := filepos(f) -1
else
fniBilatu := -1;
close(f);
end;
procedure Aldatu(sFitxIzen_1eta2: tsKate199;
iNonDago: integer);
var
f: tfrdIkasgela;
rdElem: trdIkasle;
begin
assign(f, sFitxIzen_1eta2);
reset(f);
seek(f, iNonDago);
read(f, rdElem);
repeat
write('"', rdElem.sIzena, '" ikaslearen nota berria: ');
readln(rdElem.rNota);
until (rdElem.rNota >= 0.0) and (rdElem.rNota <= 10.0);
seek(f, iNonDago);
write(f, rdElem);
close(f);
end;
procedure Gehitu(sFitxIzen_1eta2: tsKate199;
const rdBerria: trdIkasle);
var
f: tfrdIkasgela;
begin
assign(f, sFitxIzen_1eta2);
reset(f);
seek(f, filesize(f));
write(f, rdBerria);
close(f);
end;
{---------------------------------Programa nagusia-----------------------------}
var
sFitxIzen: tsKate199;
sFitxIzen_1: tsKate199;
sFitxIzen_2: tsKate199;
sFitxIzen_1eta2: tsKate199;
sFitxIzen_Aprob: tsKate199;
sFitxIzen_Suspn: tsKate199;
sNor: tsKate12;
iZeinKontrol: integer;
iNonDago: integer;
rdBerria: trdIkasle;
BEGIN
clrscr;
writeln('Eman ikasleen datuak gordeko dituen fitxategiaren');
write('izena (adibidez, "NOTAK" edo "1_KONTROLA"): ');
readln(sFitxIzen);
sFitxIzen := 'C:\Users\Docencia\Desktop\Pascal\' + sFitxIzen + '.DAT';
writeln;
if fileexists(sFitxIzen) then
begin
writeln('"', sFitxIzen, '" badago, bere edukia erakutsi.');
FitxategiarenEdukiaIkusi(sFitxIzen);
writeln;
end
else
begin
writeln('"', sFitxIzen, '" ez dago, sortu eta datuz bete.');
FitxategiaSortuEtaBete(sFitxIzen);
writeln;
FitxategiarenEdukiaIkusi(sFitxIzen);
writeln;
end;
writeln;
writeln('===============================================================');
writeln(' HONAINO FITXATEGI BAT SORTU ETA BERE EDUKIA PANTAILARATU DA.');
writeln(' SORTU "1_KONTROLA" FITXATEGIA ETA "2 KONTROLA" FITXATEGIA.');
writeln('===============================================================');
writeln;
writeln('===============================================================');
writeln(' HEMENDIK AURRERA BI FITXATEGIEN EDUKIA BAKARRERA EKARRIKO DA');
writeln(' ETA ALDERANTZIZ FITXATEGI BATEN EDUKIA BITAN BANATUKO DA.');
writeln('===============================================================');
writeln;
sFitxIzen_1 := 'C:\Users\Docencia\Desktop\Pascal\1_KONTROLA.DAT';
sFitxIzen_2 := 'C:\Users\Docencia\Desktop\Pascal\2_KONTROLA.DAT';
if (fileexists(sFitxIzen_1)) and (fileexists(sFitxIzen_2)) then
begin
sFitxIzen_1eta2 := 'C:\Users\Docencia\Desktop\Pascal\1eta2_KONTROLA.DAT';
Batu(sFitxIzen_1eta2, sFitxIzen_1, sFitxIzen_2);
writeln;
writeln('"', sFitxIzen_1eta2, '" fitxategiaren edukia: ');
FitxategiarenEdukiaIkusi(sFitxIzen_1eta2);
writeln;
writeln('-------------------------------------------------------------');
writeln;
write('Nota aldatuko diogun ikaslearen izena eman: ');
readln(sNor);
sNor := upcase(sNor);
repeat
write('Zein kontroleko nota aldatuko diogu "', sNor, '" ikasleari? ');
readln(iZeinKontrol);
until (iZeinKontrol = 1) or (iZeinKontrol = 2);
iNonDago := fniBilatu(sFitxIzen_1eta2, sNor, iZeinKontrol);
if iNonDago = -1 then
writeln('"', sNor, '" ikaslerik ez dago')
else
Aldatu(sFitxIzen_1eta2, iNonDago);
writeln;
writeln('-------------------------------------------------------------');
writeln;
writeln('-------------------------------------------------------------');
writeln;
write('Gehituko dugun ikaslearen izena eman: ');
readln(rdBerria.sIzena);
rdBerria.sIzena := upcase(rdBerria.sIzena);
repeat
write('Zein kontroleko datuak gehituko ditugu (1 ala 2) ');
readln(rdBerria.iKontrola);
until (rdBerria.iKontrola = 1) or (rdBerria.iKontrola = 2);
repeat
write('"', rdBerria.sIzena, '" ikaslearen nota berria: ');
readln(rdBerria.rNota);
until (rdBerria.rNota >= 0.0) and (rdBerria.rNota <= 10.0);
Gehitu(sFitxIzen_1eta2, rdBerria);
writeln;
writeln('-------------------------------------------------------------');
sFitxIzen_Aprob := 'C:\Users\Docencia\Desktop\Pascal\APROBATUAK.DAT';
sFitxIzen_Suspn := 'C:\Users\Docencia\Desktop\Pascal\SUSPENDITUAK.DAT';
Banatu(sFitxIzen_1eta2, sFitxIzen_Aprob, sFitxIzen_Suspn);
writeln;
writeln('"', sFitxIzen_Aprob, '" fitxategiaren edukia: ');
FitxategiarenEdukiaIkusi(sFitxIzen_Aprob);
writeln;
writeln('"', sFitxIzen_Suspn, '" fitxategiaren edukia: ');
FitxategiarenEdukiaIkusi(sFitxIzen_Suspn);
writeln;
end
else
begin
writeln('Bi fitxategietatik bat falta da (ala biak falta dira)');
end;
writeln;
writeln;
writeln('=======================');
writeln('RETURN sakatu amaitzeko');
write ('=======================');
readln;
end. { PROGRAMAREN BUKAERA }
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
Blogeko 13. astea | kaosa sortzen (fitxategi ordenatu bat desordenatzen) ariketa egin dugu egin dugu non array laguntzaileak beharko diren
Eguneko bidalketaren bitartez pasatu dugu zerrenda. Deitutako 25en artean 9 ez dira etorri (zehaztapen gehiago eGela zerbitzuan)
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 25en 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.
Proiektua dela eta, hirukoteak osoatu dituzue eta orain hau egizue:
Azterketa bat, eredu bat enuntziatua astiro irakurri eta azpimarratu ulertzen ez dituzuen hitzak (adibidez fitxategi)
Azterketa bat, beste eredu bat enuntziatua astiro irakurri eta azpimarratu ulertzen ez dituzuen hitzak (adibidez fitxategi). Bide batez, konturatu zaitezte bi azterketa enuntzituek dituzten antzekotasunak
Esan bezala, proiektuak taldeka burutuko dira eta taldeen antolaketa ikasleen esku geratuko da. Taldeak hirukoteka osatuko dira beheko taulan ikasle bakoitzaren izena idatziz:
Udaberriko oporralditik itzultzean, apirilaren 9ko laborategi egunean, irakasleak proiektuaren enuntziatua azaldu zuen eta erabiliko diren unitateei dagozkien interfazeen deskribapenak egin zituen (unitateak lau hauek dira: maia_uzta, bilduma21, bilduma30 eta bilduma39).
Ondoren, bide hau irekitzat ematen da:
Bideak hiru munarri ditu:
Proiektuaren baliabideak unitate batean garaturik daude, apirilaren 9an unitatearen funtzionamendua laborategian ikusi da. Zuen lana: etxeko ordenadorean unitate baten funtzionamendua frogatzea, bi adibide: itsas-bataila (i) eta itsas-bataila (ii)
Proiektuari gehituko dizkiozuen hobekuntzen aitorpena, gehien jota apirilaren 18rako (ostegunerako) bete behar duzue Proiektua: hobekuntzak aitortu (2024) izeneko zereginari erantzunez
Proiektua garatu, gehien jota maiatzaren 1erako (astelehenerako) bukatu beharko duzue eta bere entrega Proiektua amaiturik (2024) izeneko zereginaren bitartez egingo duzue
Goiko irudia begiratu, ikusten duzue bidea bukatzen den tontorraren ostean beste tontor bat agertzen dela? Ba bai, halaxe da, oraindik zerbait gehiago falta da, hau:
Hirugarren munarrian entregatu duzuen lanaren gaineko azterketa bat pasatu beharko duzue 15. asteko praktika egunean (maiatzaren 7an). Lantaldearen kide bakoitzak froga bera egin beharko du bakarka, ordenagailuaren aurrean garatutako proiektuaren gaineko ariketa bat izango da.
Entregak
Goiko irudian proiektuaren urratsak erakusten badira, hurrengo irudi honetan urrats bakoitzean zer entregatuko duzuen erakusten da:
Proiektuari laguntzen dion unitate sorta: zuen etxeko ordenagailuan frogatu. Entregarik ez dago, baina arazorik baduzue tutoretza bat eska ezazue
Proiektuari gehitu dizkiozuen hobekuntzen aitorpena: txosten idatzi bat
Proiektua garatu: txosten bat idatzi bat eta programa bat (programa iruzkindu)
Proiektuaren gaineko bakarkako froga: programa bat
Ikasketa prozesuan ikasleak ariketa laburrak egin beharko ditu kontzeptu zehatz bat edo beste ikaste aldera. Baina, azken azterketa, bilduma bat delako, ariketa handia izango da. Horregatik, komenigarria da azken azterketaren neurriko proiektu bat urratsez urrats ikasturtearen zehar garatzea.
Proiektua mintegiko (12+24 orduak) eskolekin lotuta dago, batez ere gelaz kanpoko 24 orduekin lotuta dago.
Proiektua bideratzekoInformatika ☆ 2023-24 | proiektua izeneko bloga erabiliko dugu, non 2022-23 ikasturteko azterketa pare baten gaineko ariketak erakusten diren. Kromo-biltegi kasu bat aitzakiz hartuz, datuen multzoak prozesatzea izango da proiektuaren helburua.
Proiektuaren garapenaren urrats bakoitzean, ikasleak argi beharko du izan zer da dagoeneko dakiena eta zer ikasiko duen urrats horretan. Urrats bakoitzaren hasieran, adibidez, honelako informazioa jasoko du ikasleak:
ZER DAKIDAN: Badakit testuak eta konstanteen balioak pantailan idazten.
ZER IKASIKO DUDAN: ReadLn prozedurari esker, teklatuaren bitartez, balio bat aldagai batean gordetzen ikasiko dut. Esleipena operazioaren bitartez aldagai batean balio jakin bat gordetzen ikasiko dut.
Azkeneko laborategi egunean, maiatzaren 7an, proiektua gaitzat harturik ikasleak azterketa bat pasatu beharko du.
01 Prozesaketa (osorik prozesaketu), arrayaren elementu guztiei prozesu jakin bat aplikatu (ikus 01_Prozesaketa.pas programa). Klasean adibide bat egin dugu: array bat datuz bete eta array horren edukia erakutsi
asTaula hiru dimentsiotako taula bat da, kateak gorde ditzakeen asTaula arrayak 40 errenkada eta 3 zutabe ditu. Errenkada bakoitza ikasle bati dagokio: Errenkadaren lehen zutabean izena biltegitzen da, bigarrenean abizena eta hirugarren zutabean ikaslearen nota gordetzen da (hirurak string[19] datu-motakoak). Teoriako blogean gehiago...
Gehienez 25 elementu gordetzeko gai den array batekin lan egingo dugu. Arrayaren elementuak zenbaki errealak izango dira.
Datua den zenbaki erreal bat arrayean gorde aurretik, frogatu beharra dago errepikaturik ez dela egongo. Horretarako, teoriako blogearen 10. astea | bilaketa sekuentzialaren aplikazio bat programara jo eta bertako BilaketaLineala izeneko funtzioa erabili gure behar izanetara egokituz, hots, erabili beharko dituen moldapenak eginez.
{ Zenbaki erreal desberdinez array bat elikatu ondoren, minimoaren eta }
{ maximoaren posizioak lortu bi haien arteko lekuak elkar trukatzeko. }
program ElkarTrukatu;
uses
crt;
const
iBEHEMUGA = 1;
iGOIMUGA = 20;
type
tarZerrenda = array[iBEHEMUGA..iGOIMUGA] of real;
function fniBilatu(const arZerrenda: tarZerrenda;
iZenbat: integer;
rGakoa: real): integer;
var
iKontagailu: integer;
boAurkitua: boolean;
begin
iKontagailu := iBEHEMUGA;
boAurkitua := FALSE;
while (iKontagailu <= iZenbat) and not boAurkitua do
begin
if arZerrenda[iKontagailu] = rGakoa then
begin
writeln(rGakoa:0:1, ' balioa ', iKontagailu:2, ' posizoan dago!');
boAurkitua := TRUE;
end
else
begin
writeln(rGakoa:0:1, ' bilatzen, ', iKontagailu:2, '. elementuarekin ez du bat egiten, hurrengoa aztertu!');
iKontagailu := iKontagailu + 1;
end;
end;
if boAurkitua then
begin
fniBilatu := iKontagailu;
writeln(rGakoa:0:1, ' balioa badago arrayan. Beste balio batekin saiatu!');
end
else
begin
fniBilatu := 0;
writeln(rGakoa:0:1, ' balioa berria da eta ', iZenbat+1, '. posizioan kokatuko da');
end;
writeln;
end;
procedure ArrayaDatuDesberdinezBete(var arZerrenda: tarZerrenda;
var iLuzera: integer);
var
iKont: integer;
rZbk: real;
begin
randomize;
iLuzera := random(iGOIMUGA) + 1; { iBEHEMUGA eta iGOIMUGA arteko balioak }
//writeln('iLuzera=', iLuzera);
arZerrenda[iBEHEMUGA] := random(10) + 0.1*random(2); { 0.0, 0.1, 1.0, 1.1, ... 8.0, 8.1, 9.0, 9.1 arteko balioak }
writeln('1. datua = ', arZerrenda[iBEHEMUGA]:0:1);
writeln;
for iKont:=iBEHEMUGA+1 to iLuzera do
begin
repeat
rZbk := random(10) + 0.1*random(2); { 0.0, 0.1, 1.0, 1.1, ... 8.0, 8.1, 9.0, 9.1 arteko balioak }
until fniBilatu(arZerrenda, iKont-1, rZbk) = 0;
arZerrenda[iKont] := rZbk;
end;
end;
procedure ArrayarenEdukiaIkusi(const arZerrenda: tarZerrenda;
iLuzera: integer);
var
iKont: integer;
begin
for iKont:=iBEHEMUGA to iLuzera do
begin
writeln(iKont:10, '. elementua = ', arZerrenda[iKont]:0:1);
end;
writeln;
end;
function fniArrayarenMaximoaNon(const arZerrenda: tarZerrenda;
iLuzera: integer): integer;
var
iKont, iMaxNon: integer;
rMaximoa: real;
begin
iMaxNon := iBEHEMUGA;
rMaximoa := arZerrenda[iBEHEMUGA];
for iKont:=iBEHEMUGA+1 to iLuzera do
begin
if arZerrenda[iKont] > rMaximoa then
begin
iMaxNon := iKont;
rMaximoa := arZerrenda[iKont];
end;
end;
fniArrayarenMaximoaNon := iMaxNon;
end;
function fniArrayarenMinimoaNon(const arZerrenda: tarZerrenda;
iLuzera: integer): integer;
var
iKont, iMinNon: integer;
rMinimoa: real;
begin
iMinNon := iBEHEMUGA;
rMinimoa := arZerrenda[iBEHEMUGA];
for iKont:=iBEHEMUGA+1 to iLuzera do
begin
if arZerrenda[iKont] < rMinimoa then
begin
iMinNon := iKont;
rMinimoa := arZerrenda[iKont];
end;
end;
fniArrayarenMinimoaNon := iMinNon;
end;
procedure ElementuakTrukatu(var arZerrenda: tarZerrenda;
iPosMax: integer;
iPosMin: integer);
var
rLaguntzailea: real;
begin
rLaguntzailea := arZerrenda[iPosMax];
arZerrenda[iPosMax] := arZerrenda[iPosMin];
arZerrenda[iPosMin] := rLaguntzailea;
end;
{ ------------------------- Programa Nagusia ------------------------- }
var
arZerrenda: tarZerrenda;
iLuzera, iPosMax, iPosMin: integer;
cErantzuna: char;
begin
repeat
clrscr;
writeln('----------------------------------------');
ArrayaDatuDesberdinezBete(arZerrenda, iLuzera);
writeln('Hasierako datuak:');
ArrayarenEdukiaIkusi(arZerrenda, iLuzera);
iPosMax := fniArrayarenMaximoaNon(arZerrenda, iLuzera);
iPosMin := fniArrayarenMinimoaNon(arZerrenda, iLuzera);
writeln('Maximoa ', iPosMax, ' posizioan');
writeln('Minimoa ', iPosMin, ' posizioan');
writeln('Elkar trukatu ondoren: ');
writeln;
ElementuakTrukatu(arZerrenda, iPosMax, iPosMin);
writeln('Datuen trukaketa egin ondoren:');
ArrayarenEdukiaIkusi(arZerrenda, iLuzera);
writeln;
repeat
write('Amaitu nahi duzu? (b/e): ');
cErantzuna := readkey;
writeln(cErantzuna);
cErantzuna := upcase(cErantzuna);
until (cErantzuna = 'B') or (cErantzuna = 'E');
until cErantzuna = 'B';
end. { programaren amaiera }