2024(e)ko apirilaren 28(a), igandea

14. ASTEA | etxerako lana

 14. astea (2024/04/29) etxean egitekoa

  • Funtsezkoena une honetan: proiektuaren lana entregatzea eta datorren asteko kontrola prestatzea. Hori dela eta, hauek begiratu:
    • Proiektuan eskatzen dena (zure proiektua birpasa ezazu eta bermatu ondo kontrolatzen duzula)
    • 15. asteko kontrolean arrakasta izateko, fitxategien gaineko eragiketa hauek menperatu behar dituzu:
      1. 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:
        1. Bilatzen dugun kromoaren informazio guztia behar dugu programa nagusian. Azpiprogramak erregistro osoa itzuliko dio programa nagusiari, eta azpiprograma prozedura bat izango da derrigorrez
        2. 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
      2. Gehiketa: kromo berri bat fitxategiaren bukaeran gorde
      3. 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 
      4. 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
      5. Fitxategi bat banatu: kromo bildumatik abiatuta lortu 0_ale.dat izeneko fitxategia eta Errepikatuak.dat izeneko fitxategia lortu
      6. 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 }

 

iruzkinik ez:

Argitaratu iruzkina

Iruzkinen bat idazteko Google-ko kontu bat behar duzu. Iruzkin guztien moderazio-ardura blogeko administratzaileari dagokio.