14. astea (2024/05/01) etxean egitekoa
AZP-2 azpitaldekoek saio praktiko hau galdu duzuenez, hona hemen, gutxi gora behera, aste honetan AZP-1 eta AZP-3 azpitaldeekin egin duguna.
Fitxategiekin lan eginez, ondoko eragiketak praktikatu ditugu:
- 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 }