2024(e)ko apirilaren 29(a), astelehena

14. ASTEA | etxerako lana

 14. astea (2023/04/30) 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.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
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.