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 }
iruzkinik ez:
Argitaratu iruzkina
Iruzkinen bat idazteko Google-ko kontu bat behar duzu. Iruzkin guztien moderazio-ardura blogeko administratzaileari dagokio.