|
Lehen, orai eta bethi |
2024(e)ko apirilaren 29(a), astelehena
Irakaslearen irakas-jardueraz duzun iritzia
2024(e)ko apirilaren 28(a), igandea
14. ASTEA | ikasgelan egindakoa
- Irakaslearen irakas-jardueraz duzun iritzia dela eta, inkestaren sarrera egin dugu Lehen, orai eta bethi artikuluaren bitartez.
- Galdetegi laburra bete dezazuen gonbidapena egingo dugu
- Azken hiru asteak (13, 14 eta 15) artikuluaren bitartez azken hiru asteen planifikazioa ikusi dugu
- Aurreko astean aipatu genuen 13. astea | fitxategi beraren edukia modu desberdinez pantailaratzen artikuluarekin lotuta dago FILE datu-mota artikuluaren ondoko azpiatal hauek:
- DATU-FITXATEGI BAT LANTZEKO PROGRAMAK (I)
- DATU-FITXATEGI BAT LANTZEKO PROGRAMAK (II)
- 13. astea | fitxategi bat bitan banatu ariketa [aste honetako laborategian egingo dugu]
- 2023-24ko ikasturteko azterketak egingo ditugu:
- 2023ko maiatzeko azterketa delako programa
- 2023ko uztaileko azterketa delako programa
- Azken hiru asteak (13, 14 eta 15) artikuluaren bitartez azken hiru asteen planifikazioa ikusi dugu
- Galdetegi laburra bete dezazuen gonbidapena egina dago
- Azterketako test ariketak...
- ... nola erantzun eta
- nola prestatu
2024(e)ko apirilaren 21(a), igandea
Direktorioak: Non gaude?
Gure programetan sarritan egiten dugu hau, baina zer balio jarriko dugu sBIDEA kostantean:
1 2 3 | write (Fitxategiaren izena eman (LIBURUAK adibidez): '); readln(sFitxIzenLiburutegia); sFitxIzenLiburutegia := sBIDEA + sFitxIzenLiburutegia + '.DAT' ; |
Beste modu batez galdeturik: datu-fitxategia non sortzen da?
- HemenGaude direktorio bat sortu ordenadorearen edozein tokitan (mahaigainean adibidez), bere barnean HemenGorde direktorio bat sortu
- HanGorde direktorio bat sortu C:\Dev-Pas direktorioan
Datu-fitxategia non sortzen da? galderari erantzuteko programa bat erakusten da beherago. Zenbakiak gordetzen dituen FitxategiakEtaDirektorioak programa deskriba dezagun urratsez urrats:
- Hasieran uneko direktorioa erakusten da pantailan GetCurrentDirectory funtzioari esker
- Ondoren, datu-fitxategiaren sIzena izena teklatuaren bitartez emango du erabiltzaileaak
- Datu-fitxaregiaren izen osoa eraikitzen da aurretik bidea jarriz eta ostean gehiagarri bat eta luzapena jarriz, bidearen aukerak hauek dira:
- ''
- 'HemenGorde\'
- GetCurrentDir + ''\''
- 'HanGorde\'
- '\Dev-Pas\HanGorde\'
- 'C:\Dev-Pas\HanGorde\'
- 'E:\Dev-Pas\HanGorde\'
- 'E:\'
- Datu-fitxategiaren izen osoa finkaturik bere existentzia aztertzen du programak, eta horren arabera bi bide irekitzen dira:
- Datu-fitxategia ez bada existitzen sortu eta elementuak biltegitzen dira
- Datu-fitxategia existitzen bada elementu berriak gehitzen dira bukaeran
Iturburu-programa konpilatu ondoren FitxategiakEtaDirektorioak.exe programa exekutagarria lortuko dugu eta egikaratzeko bi modu daude: Dev-Pas programazio-ingurune barrutik eta Dev-Pas programazio-ingurunetik kanpo.
Dev-Pas programazio-ingurunetik kanpo
Iturburu-programa konpilatuz FitxategiakEtaDirektorioak.exe programa exekutagarria lortu ondoren, Dev-Pas ingurunetik irten HemenGaude direktoriora joateko eta FitxategiakEtaDirektorioak.exe gainean klik egiteko.
Uneko direktorioa HemenGaude delarik, datu-fitxategiarentzat bide desberdinak aukeratu eta emaitza hauek ikertu:
Bidea | Datu-fitxategia non sortzen da | |
1 | '' | datu-fitxategia HemenGaude direktorioan |
2 | 'HemenGorde\' | datu-fitxategia HemenGorde direktorioan |
3 | GetCurrentDir + '\' | datu-fitxategia HemenGaude direktorioan |
4 | 'HanGorde\' | exekuzio-denborako errorea |
5 | '\Dev-Pas\HanGorde\' | datu-fitxategia HanGorde direktorioan |
6 | 'C:\Dev-Pas\HanGorde\' | datu-fitxategia HanGorde direktorioan |
7 | 'E:\Dev-Pas\HanGorde\' | errorea E: unitatean dauden direktorioen arabera |
8 | 'E:\' | E: unitatearen erroan (E: unitatean diskorik badago) |
Dev-Pas programazio-ingurune barrutik
FitxategiakEtaDirektorioak.pas iturburu-programa konpilatu eta Dev-Pas programazio-ingurunearen menuko Run project aukera hautatu programa exekutatzeko.
Kasu honetan uneko direktorioa C:\Dev-Pas dela jakinik, datu-fitxategiarentzat bide desberdinak aukeratu eta emaitza hauek ikertu:
Bidea | Datu-fitxategia non sortzen da | |
1 | '' | datu-fitxategia C:\Dev-Pas direktorioan |
2 | 'HemenGorde\' | exekuzio-denborako errorea |
3 | GetCurrentDir + '\' | datu-fitxategia C:\Dev-Pas direktorioan |
4 | 'HanGorde\' | datu-fitxategia C:\Dev-Pas\HanGorde direktorioan |
5 | '\Dev-Pas\HanGorde\' | datu-fitxategia C:\Dev-Pas\HanGorde direktorioan |
6 | 'C:\Dev-Pas\HanGorde\' | datu-fitxategia C:\Dev-Pas\HanGorde direktorioan |
7 | 'E:\Dev-Pas\HanGorde\' | errorea E: unitatean dauden direktorioen arabera |
8 | 'E:\' | E: unitatearen erroan (E: unitatean diskorik badago) |
FitxategiakEtaDirektorioak.pas iturburu-programa:
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 | program FitxategiakEtaDirektorioak; uses sysutils; (* GetCurrentDir eta FileExists funtzioek behar dutelako *) type tfFitxategia = file of integer ; tsKatea = string [ 199 ]; procedure FitxategiaIkusi(sFitxIzen: tsKatea); var f: tfFitxategia; iElementua: integer ; begin { uztartu } assign(f, sFitxIzen); reset(f); writeln ( '"' , sFitxIzen, '" fitxategiak ' , filesize(f), ' elementu ditu, bere edukia:' ); while not eof(f) do begin read(f, iElementua); writeln (iElementua: 5 ); end ; writeln ( '.....................................................................' ); writeln ; { itxi } close(f); end ; procedure FitxategiaSortuEtaBete(sFitxIzen: tsKatea); var f: tfFitxategia; iElementua, i, kopurua: integer ; begin { uztartu } assign(f, sFitxIzen); rewrite(f); write ( 'Zenbat elementu nahi dituzu "' , sFitxIzen, '" fitxategian? ' ); readln(kopurua); randomize; { random-aren hazia hasieratu } for i:= 1 to kopurua do begin iElementua:=random( 10 ); { 0 eta 9 arteko zenbakia } write (f,iElementua); { fitxategian idatzi eta hurrengo elementura pasa } end ; { itxi } close(f); end ; procedure FitxategiariElementuakGehitu(sFitxIzen: tsKatea); var f: tfFitxategia; iElementua: integer ; cErantz: char ; begin { uztartu } assign(f, sFitxIzen); reset(f); seek(f, filesize(f)); repeat write ( '"' , sFitxIzen, '" fitxategian gordetzeko zenbaki bat eman: ' ); readln(iElementua); write (f, iElementua); write ( 'Datu gehiagorik gorde nahi duzu? (B/E): ' ); readln(cErantz); cErantz := upcase(cErantz); until cErantz <> 'B' ; { itxi } close(f); end ; {============================PROGRAMA NAGUSIA============================} var sIzena: tsKatea; cAukera: char ; begin writeln ; writeln ; writeln ( 'Uneko direktorioa: ' , GetCurrentDir); writeln ; writeln ( 'Lanerako fitxategiaren izena eman ezazu (luzapenik gabe)...' ); write ( 'Adibidez, "Datuak" izena: ' ); readln(sIzena); writeln ; writeln ; repeat writeln ( ' "' , sIzena, '" fitxategiaren bidea aukeratu:' ); writeln ( ' 1. ""' );; writeln ( ' 2. "HemenGorde\"' ); writeln ( ' 3. GetCurrentDir + "\"' ); writeln ( ' 4. "HanGorde\"' ); writeln ( ' 5. "\Dev-Pas\HanGorde\"' ); writeln ( ' 6. "C:\Dev-Pas\HanGorde\"' ); writeln ( ' 7. "E:\Dev-Pas\HanGorde\"' ); writeln ( ' 8. "E:\"' ); writeln ; write ( 'Exekuzio-denborako errorea gerta daitekeen arren, bide bat aukeratu: ' ); readln(cAukera); until (cAukera >= '1' ) and (cAukera <= '8' ); case cAukera of '1' : sIzena := '' + sIzena + '_aukera-' + cAukera + '.DAT' ; //'1': sIzena := sIzena + '_aukera-' + cAukera + '.DAT'; '2' : sIzena := 'HemenGorde\' + sIzena + ' _aukera- ' + cAukera + ' .DAT'; '3' : sIzena := GetCurrentDir + '\' + sIzena + ' _aukera- ' + cAukera + ' .DAT'; '4' : sIzena := 'HanGorde\' + sIzena + ' _aukera- ' + cAukera + ' .DAT'; '5' : sIzena := '\Dev-Pas\HanGorde\' + sIzena + ' _aukera- ' + cAukera + ' .DAT'; '6' : sIzena := 'C:\Dev-Pas\HanGorde\' + sIzena + ' _aukera- ' + cAukera + ' .DAT'; '7' : sIzena := 'E:\Dev-Pas\HanGorde\' + sIzena + ' _aukera- ' + cAukera + ' .DAT'; '8' : sIzena := 'E:\' + sIzena + ' _aukera- ' + cAukera + ' .DAT'; end ; writeln ; if fileexists(sIzena) then begin writeln ( '"' , sIzena, '" fitxategia existitzen da, lan egin dezagun.' ); writeln ; FitxategiaIkusi(sIzena); FitxategiariElementuakGehitu(sIzena); FitxategiaIkusi(sIzena); end else begin writeln ( '"' , sIzena, '" fitxategia ez da existitzen, sortuko dugu.' ); writeln ; FitxategiaSortuEtaBete(sIzena); FitxategiaIkusi(sIzena); end ; writeln ; write ( 'RETURN sakatu programa bukatzeko' ); readln; end . |
2024(e)ko apirilaren 20(a), larunbata
13. astea | kaosa sortzen (fitxategi ordenatu bat desordenatzen)
![]() |
kaosa sortzen |
Ariketa honen algoritmoa 11. astean ikusitako kaosa sortzen (array ordenatu bat desordenatzen) ariketan programatu zen berbera da. Orduan informazioa erregistroen array batean zegoen, eta orain erregistroen fitxategi batean.
Erregistroen fitxategi bat daukagu. Erregistroak hiru eremuz osaturik daude: kate bat, zenbaki oso bat eta zenbaki erreal bat. Erregistroen fitxategiaren datu batzuk konstante array batetik hartzen dira. Honako hau da erregistroen fitxategiaren datu-mota:
1 2 3 4 5 6 7 8 9 10 | const iKOPURUMAX = 15 ; type tsKate49 = string [ 49 ]; trdFitxa = record sIzenDeiturak: tsKate49; byDeialdia: byte ; (* osoa, txikia eta positiboa *) rNota: real ; end ; tfrdFitxategi = file of trdFitxa ; |
asIZENAK array konstantea da eta horretaz oinarriturik balioak hartuko ditu fitxategiak. Datuen asIZENAK array konstantea alfabetikoki ordenaturik dagoenez, fitxategia ordenaturik egongo da ere. Fitxategia desordenatzeko ardIkasleak eta ardKaotikoak array laguntzaileak erabiliko dira.
Fitxategiaren edukia ardIkasleak arrayra igaro ondoren, nahasketa burutzen da ardKaotikoak arraya lortzeko. Behin ardKaotikoak arraya daukagula, bere edukia berriro fitxategian gordetzen da. Arrayaren nahasketa ZerrendaNahastu izeneko prozeduran burutzen da eta horretarako datu-mota berezi pare bat sortuko dugu, trdLaguntzaile erregistroa eta tardLaguntzaile arraya. Programaren gainerako tokietan erabilpenik ez dutenez, datu-mota espezifiko horiek ZerrendaNahastu prozedura barruan sortzen dira:
1 2 3 4 5 6 7 8 9 10 11 12 13 | { bi datu-mota berri sortzen dira, soilik prozedura honetan erabiliko direnak } procedure ZerrendaNahastu( const ardIkasleak: tardIkasleak; iLuzera: integer ; var ardKaotikoak: tardIkasleak); type trdLaguntzaile = record rdIkaslea: trdFitxa; boGordeta: boolean ; end ; tardLaguntzaile = array [ 1.. iKOPURUMAX] of trdLaguntzaile; var ardLaguntzailea: tardLaguntzaile; ... |
Fitxategi ordenatu bat desordenatzen duen programa hau 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 | program KaosaSortzenFitxategiBatean; uses crt; const iZENBATIKASLE = 12 ; type tsKate49 = string [ 49 ]; tasIzenenZerrenda = array [ 1.. iZENBATIKASLE] of tsKate49; tarNotenZerrenda = array [ 1.. iZENBATIKASLE] of real ; const asIZENAK: tasIzenenZerrenda = ( 'AGIRRE ROMERO, UNAI' , // 01 'ANGULEMA CARAZO, JON ANDER' , // 02 'BIKARREGI IGLESIAS, JULEN' , // 03 'CANO RUIZ DE HEREDIA, JULIAN' , // 04 'CORRAL EGIA, JOSEBA ANDONI' , // 05 'DIAZ DE ULZURRUN, ROY, LEONOR' , // 06 'EGIGUREN MARKINEZ, IRUNE' , // 07 'ERKIAGA ANDONEGI, IKER' , // 08 'FERNANDEZ FEITO, FELIX' , // 09 'GARTZIA DE ALZA GIL, KATALIN' , // 10 'HERRANZ MARTINEZ, REBECA' , // 11 'IRAGORRI COTANO, MARTIN' ); // 12 const arNOTAK: tarNotenZerrenda = ( 4.6 , // 01 3.2 , // 02 5.7 , // 03 4.8 , // 04 5.1 , // 05 6.1 , // 06 7.3 , // 07 7.6 , // 08 2.8 , // 09 9.2 , // 10 2.9 , // 11 8.5 ); // 12 type trdIkasle = record sNor: tsKate49; rNota: real ; end ; tardIkasleak = array [ 1.. iZENBATIKASLE] of trdIkasle; tsKateLuze = string [ 199 ]; tfrdFitxategi = file of trdIkasle; { ikasleen izenak eta notak array konstanteetan daude } procedure FitxategiaSortuEtaBete(sFitxIzen: tsKateLuze; iLuzera: integer ); var f: tfrdFitxategi; rdIkasleBat: trdIkasle; k: integer ; begin assign(f, sFitxIzen); rewrite(f); for k:= 1 to iLuzera do begin rdIkasleBat . sNor := asIZENAK[k]; rdIkasleBat . rNota := arNOTAK[k]; write (f, rdIkasleBat); end ; close(f); end ; { fitxategiaren edukia pantailaratu } procedure FitxategiaIkusi(sFitxIzen: tsKateLuze); var f: tfrdFitxategi; rdIkasleBat: trdIkasle; begin assign(f, sFitxIzen); reset(f); while not eof(f) do begin read(f, rdIkasleBat); writeln (rdIkasleBat . sNor: 57 , rdIkasleBat . rNota: 15 : 1 ); end ; close(f); end ; { fitxategiaren edukia array batera eraman. iLuzera ez da behar ezaguna delako programa nagusian } procedure FitxategiArray(sFitxIzen: tsKateLuze; var ardIkasleak: tardIkasleak); var f: tfrdFitxategi; rdIkasleBat: trdIkasle; k: integer ; begin assign(f, sFitxIzen); reset(f); k := 0 ; while not eof(f) do begin read(f, rdIkasleBat); k := k + 1 ; ardIkasleak[k] := rdIkasleBat; end ; close(f); end ; { arrayaren edukia fitxategian gorde } procedure ArrayFitxategi( const ardKaotikoak: tardIkasleak; iLuzera: integer ; sFitxIzen: tsKateLuze); var f: tfrdFitxategi; rdIkasleBat: trdIkasle; k: integer ; begin assign(f, sFitxIzen); rewrite(f); for k:= 1 to iLuzera do begin rdIkasleBat := ardKaotikoak[k]; write (f, rdIkasleBat); end ; close(f); end ; { arrayaren edukia pantailaratu } procedure DatuakIkusi( const ardIkasleak: tardIkasleak; iLuzera: integer ); var k: integer ; begin for k:= 1 to iLuzera do begin writeln (k: 10 , ' . ikaslea: ' , ardIkasleak[k].sNor: 40 , ardIkasleak[k].rNota: 10 : 1 ); end ; end ; { bi datu-mota berri sortzen dira, soilik prozedura honetan erabiliko direnak } procedure ZerrendaNahastu( const ardIkasleak: tardIkasleak; iLuzera: integer ; var ardKaotikoak: tardIkasleak); type trdLaguntzaile = record rdIkaslea: trdIkasle; boGordeta: boolean ; end ; tardLaguntzaile = array [ 1.. iZENBATIKASLE] of trdLaguntzaile; var ardLaguntzailea: tardLaguntzaile; k, iZbk: integer ; begin for k:= 1 to iLUZERA do begin ardLaguntzailea[k].boGordeta := FALSE ; end ; randomize; for k:= 1 to iLuzera do begin repeat iZbk := random(iLUZERA) + 1 ; //writeln('k=', k:2, '----------'); until ardLaguntzailea[iZbk].boGordeta = FALSE ; ardLaguntzailea[iZbk].boGordeta := TRUE ; ardLaguntzailea[iZbk].rdIkaslea := ardIkasleak[k]; end ; for k:= 1 to iLUZERA do begin ardKaotikoak[k] := ardLaguntzailea[k].rdIkaslea; end ; end ; { ---------------------------------- Programa Nagusia ---------------------------------- } var sFitxIzen: tsKateLuze; ardIkasleak: tardIkasleak; iLuzera: integer ; ardKaotikoak: tardIkasleak; begin clrscr; writeln ; writeln ; repeat write ( 'Zenbat ikasle dira? (1 eta ' , iZENBATIKASLE, ' artean): ' ); readln(iLuzera); until (iLuzera >= 1 ) and (iLuzera <= iZENBATIKASLE); writeln ; sFitxIzen := 'C:\Ikasleak.dat' ; FitxategiaSortuEtaBete(sFitxIzen, iLuzera); writeln ( '===Fitxategi ordenatuaren edukia===============================================' ); FitxategiaIkusi(sFitxIzen); writeln ; FitxategiArray(sFitxIzen, ardIkasleak); writeln ( '---Array Laguntzailea Nahastu aurretik-----------------------------------------' ); DatuakIkusi(ardIkasleak, iLuzera); writeln ; ZerrendaNahastu(ardIkasleak, iLuzera, ardKaotikoak); writeln ( '---Array Laguntzailea Nahastu ondoren------------------------------------------' ); DatuakIkusi(ardKaotikoak, iLuzera); writeln ; ArrayFitxategi(ardKaotikoak, iLuzera, sFitxIzen); writeln ( '===Fitxategi desordenatuaren edukia============================================' ); FitxategiaIkusi(sFitxIzen); writeln ; writeln ; repeat until keypressed; end . |
13. astea | fitxategi bat bitan banatu
Aurreko 13. astea | bi fitxategi nahastu ariketaren aurkakoa dela esan genezake!
Zenbakien fitxategi bateko datuak banatu
Demagun abiapuntuko fitxategiak zenbaki osoak dituela, eta datuak sailkatzeko baldintza zenbakia bakoitia/bikoitia izatea dela. Horren arabera progamak banaketa hau egingo du: zenbaki bakoitak fitxategi batera eta zenbaki bikoitiak beste fitxategi batera.
Abiapuntuko fitxategia ez da existitzen horregatik berria sortzen da
Hasierako fitxategiaren izena erabiltzaileak erabakiko du, goiko irudietan sartzen den izena Zenbakiak da eta programak C:\Datuak\Zenbakiak.DAT osatzen du. Ariketaren emaitza diren bi fitxategien izenak ez ditu erabiltzaileak hautatzen, emaitza diren fitxategiak hauek izango dira:Abiapuntuko fitxategia existitzean datuak gehitzen dira
Hona hemen, proposatutako ariketaren emaitza: |
Fitxategi bat bitan banatzen duen programa hau 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 | program FitxategiBatBitanBanatzen; uses sysutils; type tfFitxategia = file of integer ; tsKatea199 = string [ 199 ]; procedure FitxategiaIkusi(sFitxIzen: tsKatea199); var f: tfFitxategia; iElementua: integer ; begin { uztartu } assign(f, sFitxIzen); reset(f); writeln (sFitxIzen, ' fitxategiak ' , filesize(f), ' elementu ditu, bere edukia:' ); while not eof(f) do begin read(f, iElementua); write (iElementua: 5 ); end ; writeln ; { itxi } close(f); end ; procedure FitxategiaBete(sFitxIzen: tsKatea199); var f: tfFitxategia; iElementua, k, iKopurua: integer ; begin { uztartu } assign(f, sFitxIzen); rewrite(f); write ( 'Zenbat elementu nahi dituzu ' , sFitxIzen, ' fitxategian? ' ); readln(iKopurua); randomize; { Random-aren hazia hasieratu } for k:= 1 to iKopurua do begin iElementua:=random( 10 ); { 0 eta 9 arteko zenbakia } write (f,iElementua); { fitxategian idatzi eta hurrengo elementura pasa } end ; { itxi } close(f); end ; procedure FitxategiariElementuakGehitu(sFitxIzen: tsKatea199); var f: tfFitxategia; iElementua: integer ; cErantz: char ; begin {uztartu} assign(f, sFitxIzen); reset(f); seek(f, filesize(f)); repeat write (sFitxIzen, ' fitxategian gordetzeko zenbaki bat eman: ' ); readln(iElementua); write (f, iElementua); write ( 'Datu gehiagorik gorde nahi duzu?(B/E): ' ); readln(cErantz); cErantz := Upcase(cErantz); until cErantz <> 'B' ; { itxi } close(f); end ; procedure FitxategiaBanatu(sFitxIzen, sFitxIzen1, sFitxIzen2: tsKatea199); var f, f1, f2: tfFitxategia; iElementua: integer ; begin { uztartu } assign(f, sFitxIzen); reset(f); assign(f1, sFitxIzen1); rewrite(f1); assign(f2, sFitxIzen2); rewrite(f2); while not eof(f) do begin read(f, iElementua); if iElementua mod 2 <> 0 then write (f1, iElementua) else write (f2, iElementua); end ; { itxi } close(f); close(f1); close(f2); end ; {===================PROGRAMA NAGUSIA=====================} var sIzena, sIzen1, sIzen2: tsKatea199; begin writeln ( 'Zenbakiak gordeko dituen fitxategiaren izena ' 'Zenbakiak' ' izan daiteke' ); write ( 'Fitxategiaren izena: ' ); readln(sIzena); sIzena := 'C:\' + sIzena + ' .DAT'; if fileexists(sIzena) then begin FitxategiaIkusi(sIzena); FitxategiariElementuakGehitu(sIzena); FitxategiaIkusi(sIzena); end else begin FitxategiaBete(sIzena); FitxategiaIkusi(sIzena); end ; sIzen1 := 'C:\' + ' Bakoitiak ' + ' .DAT'; sIzen2 := 'C:\' + ' Bikoitiak ' + ' .DAT'; writeln ( 'Datuak banatzean ' , sIzen1, ' eta ' , sIzen2, ' fitxategietan gordeko dira' ); FitxategiaBanatu(sIzena, sIzen1, sIzen2); FitxategiaIkusi(sIzen1); FitxategiaIkusi(sIzen2); writeln ; write ( 'RETURN sakatu programa bukatzeko' ); readln; end . |
13. astea | bi fitxategi nahastu
Ezaguna den ariketa hau fitxategiak erabiliz egin!
Erregistroen bi
Laborategiko gelan, gehienez, 25 ikasle izango dira. Ikasleen datuak bi arrayetan biltzen dira, array bat lehen azterketari dagokio eta beste arraya bigarren azterketari dagokio.
Arrayaren elementuak kateak dira, eta bertan izena eta zenbaki bat / batez banaturik daude, zenbakien kopuru maximoa 9.9 izango eta minimoa 0.0 izango da.
Datuak teklatuaren bitartez ematen dira eta ikasleen posizioak arrayetan zaindu behar dira berdinak izan daitezan, hurrengo adibidean erakusten den bezala. asAzterketa1 eta asAzterketa2 abiapuntuko arrayak dira eta ardAzterketak arraya lortu behar dena. Hona hemen datuen adibide bat:
asAzterketa1
asAzterketa2
iLuzera
ardAzterketak
iZenbat
|
Datu zerrenda bat array batean gorde daiteke, edo bestela fitxategi batean ere gorde daiteke. Ondoko ariketa egin dezagun: bi fitxategietatik abiatuta aurreko biak nahastuz fitxategi bakarra lortu.
Hona hemen, proposatutako ariketaren hasiera:
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 | program ErregistroenBiFitxategiNahastenEMATEKOA; type tsKate30 = string [ 30 ]; tsKate250 = string [ 250 ]; tfsAgendaZahar = file of tsKate30; procedure DatuakSartu(sFitxIzen1, sFitxIzen2: tsKate250); var f1, f2: tfsAgendaZahar; iZenbatElementu: integer ; sDatua: tsKate30; sIzena: tsKate30; sZenbakiUnitate: tsKate30; sZenbakiHamarreko: tsKate30; iZenbakiUnitate: integer ; iZenbakiHamarreko: integer ; n: integer ; begin assign(f1, sFitxIzen1); rewrite(f1); assign(f2, sFitxIzen2); rewrite(f2); repeat write ( 'Zenbat elementu gordeko dira bi fitxategietan? ' ); readln(iZenbatElementu); until iZenbatElementu > 0 ; for n:= 1 to iZenbatElementu do begin write (n, '. lagunaren izena eman: ' ); readln(sIzena); iZenbakiUnitate := random( 10 ); (* 0 eta 9 artean *) Str(iZenbakiUnitate, sZenbakiUnitate); iZenbakiHamarreko := random( 10 ); (* 0 eta 9 artean *) Str(iZenbakiHamarreko, sZenbakiHamarreko); sDatua := sIzena + '/' + sZenbakiUnitate + '.' + sZenbakiHamarreko; write (f1, sDatua); (* Fitxategi batean idatzi *) iZenbakiUnitate := random( 10 ); (* 0 eta 9 artean *) Str(iZenbakiUnitate, sZenbakiUnitate); iZenbakiHamarreko := random( 10 ); (* 0 eta 9 artean *) Str(iZenbakiHamarreko, sZenbakiHamarreko); sDatua := sIzena + '/' + sZenbakiUnitate + '.' + sZenbakiHamarreko; write (f2, sDatua); (* Fitxategi batean idatzi *) end ; close(f1); (* Fitxategiak itxi *) close(f2); end ; procedure DatuakIkusi(sFitxIzen: tsKate250); var f: tfsAgendaZahar; sDatua: tsKate30; begin assign(f, sFitxIzen); reset(f); while not eof(f) do begin read(f, sDatua); writeln (FilePos(f)- 1 , '. posizioko datua: ' , sDatua); end ; close(f); (* Fitxategia itxi *) writeln ; end ; { ============================================================== } var sAgendaIzen1, sAgendaIzen2: tsKate250; begin write ( '1. agenda fitxategiaren izena eman: ' ); readln(sAgendaIzen1); write ( '2. agenda fitxategiaren izena eman: ' ); readln(sAgendaIzen2); DatuakSartu(sAgendaIzen1, sAgendaIzen2); writeln ; writeln ( '1. agendaren datuak: ' ); DatuakIkusi(sAgendaIzen1); writeln ; writeln ( '2. agendaren datuak: ' ); DatuakIkusi(sAgendaIzen2); writeln ; { hemen idatzi ariketan eskatzen dena } writeln ( 'Programa amaitzera doa' ); readln; end . |
13. astea | fitxategi beraren edukia modu desberdinez pantailaratzen
Demagun erregistroen fitxategi bat sortu dugula. Fitxategiaren elementu bakoitza erregistro bat da, eta erregistroak bi eremu ditu: lehena Integer datu-motakoa eta bigarrena Real datu-motakoa.trdIntReal = RECORD Lehena : integer ; Bigarrena: real ; END ;Demagun sortutako fitxategiaren izena Zenbakiak.dat dela eta bere edukia datu-mota desberdineko fitxategien bitartez pantailaratzea nahi dugula. Eduki bera pantailaratzeko lau fitxategiren datu-motak erabiliko dira. |
1
Zenbakiak.dat fitxategiaren edukia pantailaratzeko erabiliko dugun datu-mota DM_rdIntReal da, hots, sorrerako datu-mota berbera. Ondorioz, pantailaratuko den informazioa "jatorrizkoa" izango da. Adibidean:
1. eremuan 163 balioa eta 2. eremuan 1.1295338E+001 balioa.
2
Zenbakiak.dat fitxategiaren edukia pantailaratzeko erabiliko dugun datu-mota DM_rdRealInt da, jatorrizkoaren antzekoa baina eremuen datu-motak elkar trukaturik (lehena Real datu-motakoa eta bigarrena Integer datu-motakoa):
trdRealInt = RECORD Lehena : real ; Bigarrena: integer ; END ;Ondorioz, nahiz eta Zenbakiak.dat fitxategiaren edukia ez den aldatu, pantailaratuko den informazioa bestelakoa izango da. Adibidean:
1. eremuan 9.7150463E+302 balioa eta 2. eremuan 1076270902 balioa.
3
Zenbakiak.dat fitxategiaren edukia pantailaratzeko erabiliko dugun FILE datu-mota DM_fbyBytak da, hots, fitxategian BYTE datu-motako informazioa dagoela interpretatzen duen fitxategia. Horregatik, Zenbakiak.dat fitxategiaren edukia hainbat byten sorta delakoan, byte guztiak banan-banan pantailaratuko dira.
4
Zenbakiak.dat fitxategiaren edukia pantailaratzeko erabiliko dugun FILE datu-mota DM_fcKaraktereak da, hots, fitxategian CHAR datu-motako informazioa dagoela interpretatzen duen fitxategia. Horregatik, Zenbakiak.dat fitxategiaren edukia hainbat karakteren sorta delakoan, karaktere guztiak banan-banan pantailaratuko dira; bide batez, karaktere bakoitzaren ordinala ere erakusten da (3 urratseko informazio bera da).
Hona hemen, fitxategi beraren edukia modu desberdinez pantailaratzen duen programa:
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 | {---------------------------------------------------------------- Erregistroak gordetzen dituen "Zenbakiak.dat" fitxategia sortu eta datu-mota desberdineko fitxategien bitartez atzitu. ----------------------------------------------------------------} program Fitxategi_integerrealbytechar; type tsKate99 = string [ 99 ]; trdIntReal = record Lehena : integer ; Bigarrena: real ; end ; tfrdIntReal = file of trdIntReal; trdRealInt = record Lehena : real ; Bigarrena: integer ; end ; tfrdRealInt = file of trdRealInt; tfbyBytak = file of byte ; tfcKaraktereak = file of char ; {--------------bakarra den fitxategia sortu--------------} procedure INTEGER_REAL_FitxategiaSortu(sFitxIzen: tsKate99); var f: tfrdIntReal; rdZenbakiak: trdIntReal; k, iZenbat: integer ; begin assign(f, sFitxIzen); rewrite(f); write ( 'Zenbat elementu nahi dituzu (2 elementu adibidez): ' ); readln(iZenbat); randomize; for k:= 1 to iZenbat do begin rdZenbakiak . Lehena := random( 256 ); (* byte baten balioak *) rdZenbakiak . Bigarrena := random* 100 ; (* 0.0 eta 99.99 artekoa *) write (f, rdZenbakiak); end ; close(f); end ; {-----bakarra den fitxategia INTEGER_REAL bezala ikusi-----} procedure INTEGER_REAL_FitxategiaIkusi(sFitxIzen: tsKate99); var f: tfrdIntReal; rdZenbakiak: trdIntReal; begin assign(f, sFitxIzen); reset(f); while not eof(f) do begin read(f, rdZenbakiak); writeln (filepos(f)- 1 , ' posizioan 1. eremua = ' , rdZenbakiak . Lehena: 3 , '2. eremua = ' : 25 , rdZenbakiak . Bigarrena: 0 : 2 ); end ; close(f); end ; {-----bakarra den fitxategia REAL_INTEGER bezala ikusi-----} procedure REAL_INTEGER_FitxategiaIkusi(sFitxIzen: tsKate99); var f: tfrdRealInt; rdZenbakiak: trdRealInt; begin assign(f, sFitxIzen); reset(f); while not eof(f) do begin read(f, rdZenbakiak); writeln (filepos(f)- 1 , ' POSIZIOAN 1. EREMUA =' , rdZenbakiak . Lehena: 12 , '2. EREMUA = ' : 16 , rdZenbakiak . Bigarrena: 2 ); end ; close(f); end ; {-----bakarra den fitxategia CHAR bezala ikusi-----} procedure CHAR_FitxategiaIkusi(sFitxIzen: tsKate99); var f: tfcKaraktereak; cKarakterea: char ; k: integer ; begin assign(f, sFitxIzen); reset(f); k:= 0 ; while not eof(f) do begin read(f, cKarakterea); k := k + 1 ; writeln (k: 3 , '. elementua = |' , cKarakterea, '| ' , Ord(cKarakterea): 3 ); end ; close(f); end ; {-----bakarra den fitxategia BYTE bezala ikusi-----} procedure BYTE_FitxategiaIkusi(sFitxIzen: tsKate99); var f: tfbyBytak; byByte: byte ; k: integer ; begin assign(f, sFitxIzen); reset(f); k:= 0 ; while not eof(f) do begin read(f, byByte); k := k + 1 ; writeln (k: 3 , '. elementua = ' , byByte: 3 ); end ; close(f); end ; var {---------------------- Programa Nagusiko aldagaiak ---------------} sFitxIzen: tsKate99; begin {--------------------------- Programa Nagusia -------------------} { sFitxIzen := 'C:\Datuak\Zenbakiak.dat'; writeln('Fitxategi bitarraren izena: ', sFitxIzen); } sFitxIzen := 'Zenbakiak.dat' ; writeln ( 'Fitxategi bitarraren izena: ' , sFitxIzen); writeln ; writeln ( 'sizeof(tsKate99) = ' , sizeof(tsKate99): 3 , ' byte' ); writeln ( 'sizeof(integer) = ' , sizeof( integer ): 3 , ' byte' ); writeln ( 'sizeof(real) = ' , sizeof( real ): 3 , ' byte' ); writeln ( 'sizeof(byte) = ' , sizeof( byte ): 3 , ' byte' ); writeln ( 'sizeof(char) = ' , sizeof( char ): 3 , ' byte' ); writeln ( 'sizeof(trdIntReal) = ' , sizeof(trdIntReal): 3 , ' byte' ); writeln ( 'sizeof(trdRealInt) = ' , sizeof(trdRealInt): 3 , ' byte' ); writeln ; writeln ( 'RETURN sakatu aurrera egiteko!' ); readln; INTEGER_REAL_FitxategiaSortu(sFitxIzen); { Lehen eremua integer } writeln ; { Bigarren eremua real } writeln ( 'Zenbakiak.dat fitxategiaren edukia integer-real bezala azterturik:' ); writeln ( '------------------------------------------------------------' ); INTEGER_REAL_FitxategiaIkusi(sFitxIzen); writeln ( '------------------------------------------------------------' ); writeln ; writeln ( 'Zenbakiak.dat fitxategi bera real-integer bezala azterturik:' ); writeln ( '------------------------------------------------------------' ); REAL_INTEGER_FitxategiaIkusi(sFitxIzen); writeln ( '------------------------------------------------------------' ); writeln ; writeln ( 'Zenbakiak.dat fitxategi bera BYTE bezala azterturik:' ); writeln ( '------------------------------------------------------------' ); BYTE_FitxategiaIkusi(sFitxIzen); writeln ( '------------------------------------------------------------' ); writeln ; writeln ( 'Zenbakiak.dat fitxategi bera CHAR bezala azterturik:' ); writeln ( '------------------------------------------------------------' ); CHAR_FitxategiaIkusi(sFitxIzen); writeln ( '------------------------------------------------------------' ); writeln ; writeln ; writeln ( 'Programa amaitzeko RETURN tekla sakatu' ); readln; end . { PROGRAMAREN BUKAERA } |
13. ASTEA | ikasgelan egindakoa
- 1. eta 2. kontroleko emaitza orokorrak beste urte batzuetan gertatukoen antzekoak izan dira
- Azken hiru asteak (13, 14 eta 15) artikuluaren bitartez azken hiru asteen planifikazioa ikusi dugu
- FILE datu-mota artikulutik abiatuta kontzeptu hauek zeharka berrikusi ditugu:
- DATU-MOTA SORTZEN
- OINARRIZKO ERAGIKETAK:
- Irakurri elementu oso bat fitxategitik memoria ekarriz (read)
- Idatzi elementu oso bat fitxategian memoriatik hartuz (write)
- LAN EGITEKO BALIABIDEAK:
- read (prozedura)
- write (prozedura)
- LAN EGITEKO BALIABIDEAK:
- assign (prozedura)
- rewrite (prozedura)
- reset (prozedura)
- close (prozedura)
- fileexists (funtzio, programa nagusian eta sysutils unitatea behar da)
- seek (prozedura)
- filepos (funtzio)
- filesize (funtzio)
- eof (funtzio)
- truncate (prozedura, fitxategia mozteko)
- erase (prozedura, fitxategia ezabatzeko)
- rename (prozedura, fitxategia berrizendatzeko)
- PARAMETRO IZATEAN JOKAMOLDEA
- FITXATEGIEN GAINEKO ERAGIKETAK:
- Fitxategia sortu
- Fitxategiaren existentzia
- Fitxategi osoa prozesatu
- Bilaketa fitxategian
- Elementu bat fitxategiari gehitu
- Fitxategiaren datu baten aldaketa
- Fitxategian elementu bat txertatu (F → A → F) [datorren asteko laborategirako]
- Fitxategitik elementu bat kendu (F → A → F) [datorren asteko laborategirako]
- Fitxategitik elementuak kendu (F → A → F) [datorren asteko laborategirako]
- Fitxategi bat ordenatu (F → A → F) [hurrengo asteetako laborategietan egitekoa]
- 13. astea | fitxategi bat bitan banatu ariketa [aste honetako laborategian egingo dugu]
- Batez ere Azp-3 ikasleentzat zuzendurik dago 14. asteko praktika galduko dutelako, baina tutoretza bezala planteaturik dagoelako edozein ikasle etor daiteke. Hau egin dugu:
- Proiektua: 2023ko maiatzeko programa azterketaren enuntziatua irakurriko dugu
- Proiektuaren J aukeraren programazioa bukatuko dugu:
- Bilaketa, jokalari baten sNor edo sJokalari katea teklatuz eman eta bilatuko dugu prozedura batean erregistro osoa itzuli behar badu eta funtzio batean bilatu nahi den elementuaren posizioa itzuli behar badu [Hau eginik daukagu]
- Ezabaketa, posizio jakin bateko elementua fitxategitik kentzeko array laguntzaile bat edo beste fitxategi laguntzaile bat beharko da (guk fitxategi laguntzaile bat erabili dugu) [Hau eginik daukagu]
- Posizioa, elementu baten posizioa fitxategian teklatuz eman eta fitxategiaren posizio horretan elementu berri bat txertatu [Hau egingo dugu]
- Txertaketa, fitxategiaren posizio jakin batean elementu berri bat sartzeko array laguntzaile bat edo beste fitxategi laguntzaile bat beharko da (guk array laguntzaile bat erabili dugu) [Hau egingo dugu]
- Aldaketa, fitxategiaren duen aldaketa egingo dugu kromo guztien iZenbakia eremuaren balioak 1-etik hasita sekuentzialki jarriz [Hau egingo dugu]
- Proiektuaren K aukerari buruz hitz egingo dugu zuen zalantzak argituz
- Proiektuarekin zuzenean lotuta ez dauden zalantzak argitzen saiatuko gara
- 13. astea | fitxategi beraren edukia modu desberdinez pantailaratzen artikulua
- Direktorioak: Non gaude? artikulua aipatu eta laborategian sakonago azalduko dugu
- Azken hiru asteak (13, 14 eta 15) artikuluaren bitartez azken hiru asteen planifikazioa ikusi dugu
- FILE datu-mota artikulutik abiatuta kontzeptu hauek zeharka berrikusi ditugu:
- DATU-MOTA SORTZEN
- OINARRIZKO ERAGIKETAK:
- Irakurri elementu oso bat fitxategitik memoria ekarriz (read)
- Idatzi elementu oso bat fitxategian memoriatik hartuz (write)
- LAN EGITEKO BALIABIDEAK:
- read (prozedura)
- write (prozedura)
- LAN EGITEKO BALIABIDEAK:
- assign (prozedura)
- rewrite (prozedura)
- reset (prozedura)
- close (prozedura)
- fileexists (funtzio, programa nagusian eta sysutils unitatea behar da)
- seek (prozedura)
- filepos (funtzio)
- filesize (funtzio)
- eof (funtzio)
- truncate (prozedura, fitxategia mozteko)
- erase (prozedura, fitxategia ezabatzeko)
- rename (prozedura, fitxategia berrizendatzeko)
- TRUNCATE, RENAME ETA ERASE ADIBIDE BANA:
- Erdiko posizioa, elementu baten posizioa fitxategian teklatuz eman eta fitxategiaren posizio horretan elementu berri bat txertatu (edo kendu) fitxategi laguntzaile bat erabiliz, azkenean jatorrizko fitxategiari erase(f) aplikatu eta laguntzaileari rename(f,sFitxIzen)
- Azken posizioa, fitxategiaren azken elementua kendu nahi denean bertan kokatu seek(f,filesize(f)-1) eginez eta truncate(f) aplikatu (hortik aurrerako elementuak ezabatuko dira, egia esan elementu bakarra ezabatuko da)
- Azken posizioa, fitxategiaren azken elementuan ostean berri bat gehitu nahi denean seek(f,filesize(f)) eta ondoren write(f,rdElem) eginez bertan idatzi
- PARAMETRO IZATEAN JOKAMOLDEA
- FITXATEGIEN GAINEKO ERAGIKETAK:
- Fitxategia sortu
- Fitxategiaren existentzia
- Fitxategi osoa prozesatu
- Bilaketa fitxategian
- Elementu bat fitxategiari gehitu
- Fitxategiaren datu baten aldaketa
- Fitxategian elementu bat txertatu (F → A → F) [datorren astelehenean]
- Fitxategitik elementu bat kendu (F → A → F) [datorren astelehenean]
- Fitxategitik elementuak kendu (F → A → F) [datorren astelehenean]
- Fitxategi bat ordenatu (F → A → F) [hau ez da galdetuko]
- 13. astea | fitxategi beraren edukia modu desberdinez pantailaratzen artikulua
- Direktorioak: Non gaude? artikulua aipatu eta laborategian sakonago azalduko dugu