Ezaguna denez, Azterketa: 2022ko uztailaren deialdia izenburuko artikuluan azterkari buruzko informazio guzti-guztia dago, berridatz dezagun uztaileko programa baina soilik derrigorrezko aginduak idatziz. Ez dugu esan nahi gainerako aginduak soberan daudenik, baizik jarraian idatziko ditugunak berebiziko garrantzia dutela eta falta direnak horien menpekoak direla nolabait. |
Uztaileko programa berezia 2022-06-29_Liburutegia_DerrigorrezkoAginduak.pas fitxategian jasota dago eta bertan nabarmendu dira ezinbestekoak diren aginduak. Windows sistema batean programa hau exekutatzean, LIBURUAK.DAT eta ERRESERBAK.DAT bi datu-fitxategiak C:\Dev-Pas karpetan kokatu behar dira derrigorrez. Uztaileko programa bereziaren kodea jarraian ikusi, non letra larrietan jarri diren aginduak garrantzitsuenak diren azpiprograma bakoitzean:
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 324 325 326 | { Hitz larrietan idatzi diren aginduak funtsezkoenak dira azpiprograma } { bakoitzean, agindu horien inguruan dabiltzate gainerako agindu guztiak. } { Windows sistema batean programa hau exekutatzean, ERRESERBAK.DAT eta } { LIBURUAK.DAT bi datu-fitxategiak C:\Dev-Pas karpetan kokatu behar dira. } program Liburutegia_DerrigorrezkoAginduak_BaztertuEtaErreserbakKendu; uses crt, sysutils; const iERRESERBA_MAX = 100 ; type tsKate10 = string [ 10 ]; tsKate15 = string [ 15 ]; tsKate55 = string [ 55 ]; tsKate199 = string [ 199 ]; trdLiburu = record sLiburuKodea: tsKate15; sIzenburua: tsKate55; sMaileguanNori: tsKate15; iAldizMaileguan: integer ; sKokapena: tsKate10; sAzkenMaileguData: tsKate10; end ; tfrdLiburutegiFitxategia = file of trdLiburu; trdErreserba = record sLiburuKodea: tsKate15; sErabiltzaileZbk: tsKate15; sTelefonoa: tsKate10; sEskariData: tsKate10; end ; tardErreserbak = array [ 1.. iERRESERBA_MAX] of trdErreserba; tfrdErreserbenFitxategia = file of trdErreserba; (* HELBURUA: Fitxategi mugatu batetik abiatu eta bere informazioa array *) (* batera igaro. *) (* ALGORITMOA: Fitxategia oso-osorik ibili eta arraya elikatuz joan. *) (* PARAMETROAK: Sarrerako parametro bakarra (fitxategiaren izena) *) (* Irteerako bi parametro (arraya eta bere luzera). *) procedure FitxategitikArrayraIrauli(sFitxIzenErreserbak: tsKate199; var ardErreserbak: tardErreserbak; var iLuzera: integer ); var f_E: tfrdErreserbenFitxategia; begin iLuzera := 0 ; assign(f_E, sFitxIzenErreserbak); reset(f_E); while not eof(f_E) do begin iLuzera := iLuzera + 1 ; READ(f_E, ardErreserbak[iLuzera]); (* FITXATEGITIK IRAKURRI *) end ; close(f_E); end ; (* HELBURUA: Array batetik abiatuz bere informazioa fitxategi batean gorde. *) (* ALGORITMOA: Arraya oso-osorik ibili eta fitxategia elikatuz joan. *) (* PARAMETROAK: Sarrerako hiru parametro (arraya eta bere luzera, eta *) (* helburuko fitxategiaren izena). *) procedure ArraytikFitxategiraIrauli( const ardErreserbak: tardErreserbak; iLuzera: integer ; sFitxIzenErreserbak: tsKate199); var i: integer ; f_E: tfrdErreserbenFitxategia; begin assign(f_E, sFitxIzenErreserbak); rewrite(f_E); for i:= 1 to iLuzera do WRITE (f_E, ardErreserbak[i]); (* FITXATEGIAN IDATZI *) close(f_E); end ; (* HELBURUA: Menuaren aukerak pantailan idaztea eta hautapen bat irakurtzea. *) (* PARAMETROAK: Parametrorik ez du behar eta bere irteera karaktere bat da. *) function fncAukeraHautatu: char ; var cAukera: char ; begin writeln ( ' 1. Erreserbatutako liburuen informazioa bistaratu' ); writeln ( ' 2. Mailegu gutxiko liburuak baztertzera eraman' ); writeln ( ' 3. Erabiltzaile berankorren erreserbak kendu' ); writeln ( ' 0. Amaitu' ); write ( 'Zure aukera: ' ); READLN(cAukera); (* AUKERA TEKLATUAREN BITARTEZ IRAKURRI *) fncAukeraHautatu := cAukera; (* FUNTZIOAK IRTEERAREN BAT IZAN DEZALA *) end ; (* HELBURUA: Erreserba-fitxategirik ez badago hutsik sortu. *) (* PARAMETROAK: Sarrerako parametro bakarra (fitxategiaren izena). *) procedure ErreserbaFitxategiaHutsikSortu(sFitxIzenErreserbak: tsKate199); var f_E: tfrdErreserbenFitxategia; begin if not FileExists(sFitxIzenErreserbak) then begin assign(f_E, sFitxIzenErreserbak); REWRITE(f_E); (* ERRESERBEN FITXATEGIA HUTSIK SORTU *) close(f_E); end ; end ; (* HELBURUA: Baztertuen fitxategirik ez badago hutsik sortu. *) (* PARAMETROAK: Sarrerako parametro bakarra (fitxategiaren izena). *) procedure SortuExistitzenEzBada(sFitxIzenBazt: tsKate199); var f_L: tfrdLiburutegiFitxategia; begin if not FileExists(sFitxIzenBazt) then begin assign(f_L, sFitxIzenBazt); REWRITE(f_L); (* BAZTERTUEN FITXATEGIA HUTSIK SORTU *) close(f_L); end ; end ; (* HELBURUA: Fitxategi laguntzaile baten izena asmatzeko funtzioa, fitxategi *) (* bitartekaria da eta erabili ondoren ezabatuko da. *) (* PARAMETROAK: Parametrorik ez du behar eta bere irteera kate bat da. *) function fnsIzenBatAsmatu: tsKate199; var iAuzazkoZenbakia: integer ; sAuzazkoKatea: tsKate199; begin iAuzazkoZenbakia := random(MAXINT); writeln ( ' iAuzazkoZenbakia = ' , iAuzazkoZenbakia); str(iAuzazkoZenbakia, sAuzazkoKatea); writeln ( ' sAuzazkoKatea = ' , sAuzazkoKatea); fnsIzenBatAsmatu := 'LAGUNTZAILEA__' + sAuzazkoKatea + '.DAT' ; end ; (* HELBURUA: Liburutegiko fitxategitik elementu batzuk bertatik kendu eta baztertuen *) (* fitxategian gorde, elementuak aukeratzeko bi irizpide: liburuaren azken *) (* mailegu-data eta liburua eskuragarri izatea. *) (* ALGORITMOA: Fitxategi bat bitan banatu, fitxategi laguntzaile bat erabiliz. *) (* PARAMETROAK: Sarrerako hiru parametro (data bat eta bi fitxategien izenak). *) procedure LiburuakBaztertu( sAzkenData: tsKate10; sFitxIzenLiburutegia: tsKate199; sFitxIzenBaztertuak: tsKate199); var f_Liburutegia: tfrdLiburutegiFitxategia; f_Baztertuak: tfrdLiburutegiFitxategia; f_Laguntzailea: tfrdLiburutegiFitxategia; sFitxIzenLaguntzailea: tsKate199; rdLiburuBat: trdLiburu; begin assign(f_Liburutegia, sFitxIzenLiburutegia); reset(f_Liburutegia); SortuExistitzenEzBada(sFitxIzenBaztertuak); assign(f_Baztertuak, sFitxIzenBaztertuak); reset(f_Baztertuak); seek(f_Baztertuak, FileSize(f_Baztertuak)); sFitxIzenLaguntzailea := fnsIzenBatAsmatu; assign(f_Laguntzailea, sFitxIzenLaguntzailea); REWRITE(f_Laguntzailea); (* FITXATEGI LAGUNTZAILEA SORTU *) while not eof(f_Liburutegia) do begin read(f_Liburutegia, rdLiburuBat); IF (rdLiburuBat . sAzkenMaileguData <= sAzkenData) AND (rdLiburuBat . sMaileguanNori = 'INORI' ) THEN WRITE (f_Baztertuak, rdLiburuBat) (* BAZTERTUEN FITXATEGIAN IDATZI *) else WRITE (f_Laguntzailea, rdLiburuBat); (* FITXATEGI LAGUNTZAILEAN IDATZI *) end ; close(f_Baztertuak); close(f_Liburutegia); close(f_Laguntzailea); (* Informazio eguneratua fitxategi laguntzailean dagoelako, liburutegiko *) (* fitxategia ezabatu eta bere izena fitxategi lagunzaileari jarri *) assign(f_Liburutegia, sFitxIzenLiburutegia); ERASE(f_Liburutegia); (* LIBURUTEGIKO FITXATEGI EZABATU *) assign(f_Laguntzailea, sFitxIzenLaguntzailea); RENAME(f_Laguntzailea, sFitxIzenLiburutegia); (* FITXATEGI LAGUNTZAILEA BERRIZENDATU *) end ; (* HELBURUA: Erregistroen array baten eduki guztia pantailaratzea. *) (* ALGORITMOA: Array nagusia osoan ibili eta elementu bana eremuka *) (* pantailan idatzi. *) (* PARAMETROAK: Sarrerako bi parametro (arraya eta bere luzera) *) procedure ErreserbakErakutsi( const ardErreserbak: tardErreserbak; iLuzera: integer ); var k: integer ; begin for k:= 1 to iLuzera do begin (* PANTAILAN IDATZI *) WRITELN (ardErreserbak[k].sLiburuKodea); WRITELN (ardErreserbak[k].sErabiltzaileZbk); WRITELN (ardErreserbak[k].sTelefonoa); WRITELN (ardErreserbak[k].sEskariData); writeln ; end ; end ; (* HELBURUA: Erabiltzaile jakin baten kodea emanik bere elementuak *) (* arrayatik kendu. *) (* ALGORITMOA: Array nagusia osoan ibili eta array laguntzaile batek *) (* mantenduko diren elementuak jaso ditzala. *) (* PARAMETROAK: Sarrerako parametro bat (erabiltzailearen kodea) *) (* Sarrera/Irteerako bi parametro (arraya eta bere luzera). *) procedure ErabiltzaileBatenErreserbakKendu( var ardErreserbak: tardErreserbak; var iLuzera: integer ; sErabiltzailea: tsKate15); var k: integer ; ardErabiltzaileOnak: tardErreserbak; iIndizea: integer ; begin iIndizea := 0 ; FOR k:= 1 TO iLuzera DO (* ERRESERBEN ARRAYA OSORIK IBILI *) begin IF ardErreserbak[k].sErabiltzaileZbk <> sErabiltzailea THEN begin iIndizea := iIndizea + 1 ; (* ARRAY LAGUNTZAILEA ELIKATU *) ardErabiltzaileOnak[iIndizea] := ardErreserbak[k]; end ; end ; ardErreserbak := ardErabiltzaileOnak; (* ERRESERBEN ARRAYA EGUNERATU *) iLuzera := iIndizea; (* ERRESERBEN ARRAYA EGUNERATU *) end ; (* HELBURUA: Erreserben arraytik elementu batzuk kendu behar dira. Kendu *) (* beharreko elementu bat identifikatzeko data aztertu behar da *) (* liburutegi-fitxategian, liburutegiko elementu horri dagokion *) (* erabiltzaile-kodea hartu behar da, kode horiekin bat datozen *) (* erreserba guztiak kentzeko erreseben arraytik. *) (* ALGORITMOA: Liburutegi-fitxategia osoki ibili eta elementu bakoitzaren *) (* data aztertuz erreserba-arraya eguneratu baldin badagokio. *) (* PARAMETROAK: Sarrerako bi parametro (data eta fitategiaren izena) *) (* Sarrera/Irteerako bi parametro (arraya eta bere luzera). *) procedure ErabiltzaileBerankorrenErreserbakKendu( sAzkenData: tsKate10; sFitxIzenLiburutegia: tsKate199; var ardErreserbak: tardErreserbak; var iLuzeraErreserbak: integer ); var f_Liburutegia: tfrdLiburutegiFitxategia; rdLiburuBat: trdLiburu; begin assign(f_Liburutegia, sFitxIzenLiburutegia); reset(f_Liburutegia); while not eof(f_Liburutegia) do begin READ(f_Liburutegia, rdLiburuBat); (* FITXATEGITIK IRAKURRI ETA *) (* ALDERAKETA KONBINATUA EGIN *) IF (rdLiburuBat . sAzkenMaileguData <= sAzkenData) AND (rdLiburuBat . sMaileguanNori <> 'INORI' ) THEN begin writeln (rdLiburuBat . sMaileguanNori: 12 , ' kodea duen erabiltzailearen erreserbak ezabatzen...' ); ErabiltzaileBatenErreserbakKendu(ardErreserbak, iLuzeraErreserbak, rdLiburuBat . sMaileguanNori); end ; end ; close(f_Liburutegia); end ; var { ---------------------- Programa Nagusiaren aldagaiak ---------------------- } sFitxIzenLiburutegia: tsKate199; sFitxIzenErreserbak: tsKate199; sFitxIzenBaztertuak: tsKate199; ardErreserbak: tardErreserbak; iLuzeraErreserbak: integer ; sAzkenData: tsKate10; cAukera: char ; begin { ---------------------------- Programa Nagusia ---------------------------- } write ( 'Liburutegiaren fitxategi-izena eman (LIBURUAK.DAT adibidez): ' ); readln(sFitxIzenLiburutegia); write ( 'Erreserben fitxategi-izena eman (ERRESERBAK.DAT adibidez): ' ); readln(sFitxIzenErreserbak); if not FileExists(sFitxIzenLiburutegia) then writeln ( 'ERROREA: beharrezkoa den liburutegiaren fitxategia falta da!' ) else begin if not FileExists(sFitxIzenErreserbak) then ErreserbaFitxategiaHutsikSortu(sFitxIzenErreserbak); FitxategitikArrayraIrauli(sFitxIzenErreserbak, ardErreserbak, iLuzeraErreserbak); repeat cAukera := fncAukeraHautatu; writeln ; case cAukera of '1' : begin ErreserbakErakutsi(ardErreserbak, iLuzeraErreserbak); end ; '2' : begin write ( 'Liburuak baztertzeko aaaa/mm/dd data eman (adibidez, 2021/02/27): ' ); readln(sAzkenData); write ( 'Baztertuen fitxategiaren izena eman (BAZTERTUAK.DAT adibidez): ' ); readln(sFitxIzenBaztertuak); LiburuakBaztertu(sAzkenData, sFitxIzenLiburutegia, sFitxIzenBaztertuak); end ; '3' : begin write ( 'Liburuak itzuliak izateko azken data eman (adibidez, 2022/04/14): ' ); readln(sAzkenData); ErabiltzaileBerankorrenErreserbakKendu(sAzkenData, sFitxIzenLiburutegia, ardErreserbak, iLuzeraErreserbak); end ; end ; readln; until cAukera = '0' ; ArraytikFitxategiraIrauli(ardErreserbak, iLuzeraErreserbak, sFitxIzenErreserbak); end ; readLn; end . |
iruzkinik ez:
Argitaratu iruzkina