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

33. Ariketa: unitateak (II)

ZER DAKIDAN:
Karpeta batean kokaturik dagoen .PAS iturburu-programa batetik abiatuta .EXE programa exekutagarria lortzen ikasi dut. Bestalde, badakit ere unitate bat sortzen eta konpilatzen aurreko 32. Ariketa: unitateak (I) atalean ikasi dudalako. 



ZER IKASIKO DUDAN:
Aurrekonpilatutako Unitateak erabiltzen ikasiko dut, datu-fitxategi bat sortzen duen unitatea erabiltzen ikasiko dut hain zuzen ere.




Fitxategiak kokatzeko karpetak 

Unitateak direla eta, gaiaren nondik norako teorikoak Konpiladorea eta estekatzailea artikuluan biltzen dira eta oinarrizko adibide bat Unitateak artikuluan erakusten da, beste bi adibide aberatsago 10. astea | itsas-bataila (I) artikuluan eta 10. astea | itsas-bataila (II) artikuluan kontsulta daitezke.

Orain unitate bat erabiltzen ikasiko dugu, eta unitate horrek datu-fitxategiekin lan egingo duenez karpeten antolaketa egoki bat egitea premiazkoa da. Baina, prozesua osoa bi ataletan banatuko dugu:

  • Programa exekutagarria lortzeko behar diren fitxategiak eta hauek kokatzeko karpeta
  • Programa exekutagarria egikaritzeko (exekutatzeko) behar diren fitxategiak eta hauek kokatzeko karpeta

Gure iturburu-programa Bezeroa.pas bada, hura konpilatu eta Bezeroa.exe lortu nahi dugu.




unitatea izeneko unitatearen interfazea

Unitate honek, bi datu-mota eta bi prozedura partekatzen ditu bezero-programarekin. Horrez gain, integer datu-mota longint bihurtzen du unitate honek:

{---------------------------------------------------------------------------} 
INTERFACE

type
integer = longint ; (* INTEGER-entzat 4 byte erabili *)
tfrAbiadurak = file of real ;
tsKate250 = string[250] ;

procedure UNITATEA_Real_FitxategiaSortu(sFitxIzen: tsKate250) ;
procedure UNITATEA_Real_FitxategiaIkusi(sFitxIzen: tsKate250) ;
{---------------------------------------------------------------------------}

unitatea delako unitatea zenbaki errealen fitxategiak lantzeko erabil daiteke, hau da, unitatea unitateari esker errealen fitxategi bat sortu eta erakusten da.

Bezeroa.exe programak hainbat abiaduren batezbesteko aritmetikoa kalkulatuko du, datuak fitxategi batetik hartuz. Horretarako, bezero-programak unitatea izeneko unitatea erabiliko du, zeinek abiaduren fitxategia sortzen duen eta bere edukia erakusten duen.




Bezeroa.exe fitxategia lortzen

Ordenadorearen disko gogorreko edozein tokitan (mahaigainean adibidez) karpeta bat sortuko dugu, esate baterako Enekuri izeneko karpeta. Enekuri karpetan hiru fitxategi hauek kokatuko ditugu konpilazioa hasi aurretik:

  1. Bezeroa.pas iturburu-programa
  2. unitatea.ow unitatearen objektu-kodea
  3. unitatea.ppw unitate konpilatua


Bezeroa.pas fitxategia konpilatu ondoren eta dena ondo badoa, Enekuri karpetan bost fitxategi hauek izango ditugu:

  1. Bezeroa.pas iturburu-programa
  2. unitatea.ow unitatearen objektu-kodea
  3. unitatea.ppw unitate konpilatua
  4. Bezeroa.ow iturburu-programaren objektu-programa
  5. Bezeroa.exe programa exekutagarria


Bezeroa.pas fitxategiak unitatea izeneko unitatea erabili behar du, horregatik derrigorrezkoak dira unitatea.ow eta unitatea.ppw fitxategi aurrekonpilatuak Enekuri karpetan.


Bezeroa.exe fitxategia exekutatzen

Bezeroa.exe fitxategia exekutatzean datu-fitxategi bat sortuko da, adibidez Abiadurak.dat izeneko datu-fitxategia, datu-fitxategi horrek ibilgailuen abiadurak adierazten dituzten zenbaki errealak biltzen ditu. Ez bada besterik adierazten, Abiadurak.dat datu-fitxategia Bezeroa.exe exekutagarria dagoen Enekuri karpetan sortuko da. Horregatik Bezeroa.exe fitxategia exekutatu ondoren Enekuri karpetaren edukia hau izango da:

  1. Bezeroa.pas iturburu-programa
  2. unitatea.ow unitatearen objektu-kodea
  3. unitatea.ppw unitate konpilatua
  4. Bezeroa.ow iturburu-programaren objektu-programa
  5. Bezeroa.exe programa exekutagarria
  6. Adibideak.dat datuen fitxategia

Erabaki daiteke ere, Bezeroa.exe fitxategiaren exekuzioaren ondorioz Abiadurak.dat datu-fitxategia beste kapeta desberdin batean sortzea. Esate baterako, Enekuri karpeta barruko Datuak izeneko karpetan.




Bezeroa.pas fitxategitik Bezeroa.exe fitxategira

Orain programa bat idatziko dugu unitatea izeneko unitatea erabiliko duena, programa honi Bezeroa.pas deituko diogu, eta bere kodea programatuko duen programatzaileak unitatearen interfazea ezagutu behar du (INTERFACE blokea ezagutu behar du). Ikusi Bezeroa.pas iturburu-programaren kodea:

{------------------------------------------------------------------------
'Bezeroa.exe' programak hainbat abiaduren batezbesteko aritmetikoa
kalkulatuko du, datuak fitxategi batetik hartuz. Horretarako, bezero-
programak 'unitatea' izeneko unitatea erabiliko du, zeinek abiaduren
fitxategia sortzen duen eta bere edukia erakusten duen.

'unitatea' delako unitatea erabili errealen fitxategiak lantzeko.
'unitatea' unitatean errealen fitxategi bat sortu eta erakusten da,
bere TYPE atalean Integer datu-mota Longint bihurtzen da.
------------------------------------------------------------------------}

{------------------------------------------------------------------------
INTERFACE

type
integer = longint ; (* INTEGER-entzat 4 byte erabili *)
tfrAbiadurak = file of real ;
tsKate250 = string[250] ;

procedure UNITATEA_Real_FitxategiaSortu(sFitxIzen: tsKate250) ;
procedure UNITATEA_Real_FitxategiaIkusi(sFitxIzen: tsKate250) ;
------------------------------------------------------------------------}

program Bezeroa ;

uses
unitatea,
sysutils ; { fileexists() funtzioak behar duelako }


function fnrBatezBestekoaKalkulatu(sFitxIzen: tsKate250): real ;
var
f: tfrAbiadurak ;
rAbiadura, rMetatua: real ;
begin
assign(f, sFitxIzen) ;
reset(f) ;

rMetatua := 0.0 ;
while not eof(f) do
begin
read(f, rAbiadura) ;
rMetatua := rMetatua + rAbiadura ;
end ;

fnrBatezBestekoaKalkulatu := rMetatua / filesize(f) ;

close(f) ;
end ;

{------------------------------------------- Programa Nagusia -------------------}

var
sFitxIzen: tsKate250 ;
rBatezBestekoa: real ;

begin
writeln ;
writeln ;
writeln('================================================================================') ;
writeln(' Uneko direktorioa: ', GetCurrentDir) ;
writeln('================================================================================') ;
writeln ;
writeln ;

writeln('================================================================================') ;
writeln(' ''Enekuri'' izeneko karpeta bat sortu eta fitxategi hauek bertan kokatu:') ;
writeln(' - ''unitatea.ow'' objektu-kodea') ;
writeln(' - ''unitatea.ppw'' unitate konpilatua') ;
writeln(' - ''Bezeroa.pas'' programaren iturburu-kodea') ;
writeln ;
writeln(' ''Enekuri'' karpetan beste karpeta bat sortu ''Datuak'' izenekoa bertan kokatu:') ;
writeln(' - ''Abiadurak.dat'' datuen fitxategia') ;
writeln(' - ''Autoak.dat'' datuen fitxategia') ;
writeln(' - ''Bolidoak.dat'' datuen fitxategia') ;
writeln(' - ...') ;
writeln ;
writeln(' ''Bezeroa.exe'' fitxategia ''Enekuri'' karpetan badago, bere datu-fitxategiak') ;
writeln(' ''Enekuri\Datuak'' karpetan badaude, fitxategi horien bidea ''.\Datuak\'' da,') ; (* WINDOWS sistemetan *)
writeln(' beste bide egoki bat ''Datuak\'' da. Sarrera bat ''Abiadurak.dat'' adibidez.') ; (* WINDOWS sistemetan *)
//writeln(' ''Enekuri/Datuak'' karpetan badaude, fitxategi horien bidea ''./Datuak/'' da.') ; (* MAC sistemetan *)
writeln('================================================================================') ;
writeln ;

writeln('Ibilgailuen abiadura gordeko duen fitxategiaren izena eman ezazu.') ;
write('Adibidez, ''Abiadurak.dat'' izena: ') ;
readln(sFitxIzen) ;

//sFitxizen := '.\Datuak\' + sFitxIzen ; (* WINDOWS sistemetan *)
sFitxizen := './Datuak/' + sFitxIzen ; (* MAC sistemetan *)
writeln('Datuen-fitxategia: ', sFitxIzen) ;
writeln ;

UNITATEA_Real_FitxategiaSortu(sFitxIzen) ;
writeln ;

if FileExists(sFitxIzen) then { Konprobatu ea existitzen den ala ez }
begin
writeln(sFitxIzen, ' fitxategiaren edukia:') ;
writeln('----------------------------------------------------------------------') ;
UNITATEA_Real_FitxategiaIkusi(sFitxIzen) ;
writeln('----------------------------------------------------------------------') ;
writeln ;
rBatezBestekoa := fnrBatezBestekoaKalkulatu(sFitxIzen) ;
writeln('Abiaduren batezbestekoa = ', rBatezBestekoa:0:2, ' Km/h') ;
end
else
begin
writeln(sFitxIzen, ' fitxategirik ez dago. Gogoratu ''unitatea'' izeneko unitatea') ;
writeln('behar dela. Beraz, fitxategi hauek karpeta berean kokatu behar dira:') ;
writeln(' - ''unitatea.ow'' objektu-kodea') ;
writeln(' - ''unitatea.ppw'' unitate konpilatua') ;
writeln(' - ''Bezeroa.pas'' programaren iturburu-kodea') ;
writeln ;
writeln('Hiru fitxategi horiekin ''Bezeroa.exe'' programa exekutagarria lor daiteke:') ;
writeln(' - ''unitatea.ow'' objektu-kodea') ;
writeln(' - ''unitatea.ppw'' unitate konpilatua') ;
writeln(' - ''Bezeroa.pas'' programaren iturburu-kodea') ;
writeln(' - ''Bezeroa.exe'' programaren exekutagarria') ;
writeln ;
writeln('''Bezeroa.exe'' exekutatzean ''Abiadurak.dat'' fitxategia lor daiteke:') ;
writeln(' - ''unitatea.ow'' objektu-kodea') ;
writeln(' - ''unitatea.ppw'' unitate konpilatua') ;
writeln(' - ''Bezeroa.pas'' programaren iturburu-kodea') ;
writeln(' - ''Bezeroa.exe'' programaren exekutagarria') ;
writeln(' - ''Abiadurak.dat'' datuen fitxategia') ;
end ;

writeln ;
writeln('Programa amaitzeko RETURN tekla sakatu') ;
readln ;

end. { PROGRAMAREN BUKAERA }

Bezeroa.exe programa exekutagarria eskuratzeko, Bezeroa.pas programaren iturburu-kodea konpilatu beharra dago. Horretarako, Bezeroa.pas programaren iturburu-kodea eta unitatea izeneko unitatea karpeta berean kokatu behar ditugu. Gure helburua den Bezeroa.exe programa exekutagarria eskuratzeko, hiru fitxategi hauek beharko ditugu Enekuri karpetan:

  1. Bezeroa.pas programaren iturburu-kodea,
  2. unitatearen unitatea.ow objektu-programa eta
  3. unitatearen unitatea.ppw unitate konpilatua

Azken bi fitxategiak unitatea.pas unitatearen konpilaziotik eratorriak dira eta baliteke programatzaileak unitatea.pas iturburu-koderik ez izatea.




Bezeroa.exe exekutagarria eta Abiadurak.dat datuen fitxategia

Bezero-programaren Bezeroa.pas iturburu-kodea konpilatu/estekatu ondoren Bezeroa.exe programa exekutagarria eskuratuko dugu, eta azken hau exekutatzean Abiadurak.dat datu-fitxategia lortuko dugu. Baina, non, zein karpetatan, sortuko da Abiadurak.dat datu-fitxategia?

Goiko galderaren erantzuna Bezeroa.pas iturburu-kodean bilatu behar dugu, baina ezer baino lehen gomendio garrantzitsu bat eman dezagun: fitxategiak sortuko dituen programa bat exekutatzerakoan ez exekutatu Dev-Pas ingurunetik, joan programa exekutagarria dagoen karpetara eta programa exekutagarriaren gainean klikatuz hura exekutatu. Ondoko irudia ikusi, non Bezeroa.exe programa exekutagarria Enekuri karpetan dagoen, gorriz egingo ez duguna eta berdez gomendatzen duguna:


Datu-fitxategia non sortzen den goiko galderaren erantzuna, Bezeroa.pas iturburu-kodea aztertuz asmatuko dugula aurreratu dugu lehenago. Demagun Bezeroa.exe programa exekutagarria Enekuri karpetan dagoela eta Abiadurak.dat datu-fitxategiaren izena teklatuz irakurri ondoren hiru kate hauek eraikitzen ditugula:

  1. Datu-fitxategiaren izen soila: Esate baterako, Abiadurak.dat katea bada, datu-fitxategia sortuko da Bezeroa.exe programa exekutagarria dagoen tokian, hots, Abiadurak.dat datu-fitxategia Enekuri karpetan sortuko da
  2. Datu-fitxategiaren izena eta bidea:
    • ./Datuak/Abiadurak.dat katea bada, datu-fitxategia Enekuri karpeta barruan dagoen Datuak karpetan sortuko da, hots, Abiadurak.dat datu-fitxategia Enekuri/Datuak karpetan sortuko da
    • Datuak/Abiadurak.dat katea bada, lehentxoago bezala, datu-fitxategia Enekuri/Datuak karpetan sortuko da

Iturburu-programa aztertuz, datu-fitxategiaren izen soila: 

...
writeln('Ibilgailuen abiadura gordeko duen fitxategiaren izena eman ezazu.') ;
write('Adibidez, ''Abiadurak.dat'' izena: ') ;
readln(sFitxIzen) ; (* Abiadurak.dat karaktere-katea eman teklatuz *)

UNITATEA_Real_FitxategiaSortu(sFitxIzen) ;
writeln ;
...

Iturburu-programa aztertuz, datu-fitxategiaren izen konposatua (bidea gehi izena):

...
writeln('Ibilgailuen abiadura gordeko duen fitxategiaren izena eman ezazu.') ;
write('Adibidez, ''Abiadurak.dat'' izena: ') ;
readln(sFitxIzen) ; (* Abiadurak.dat karaktere-katea eman teklatuz *)
sFitxizen := '.\Datuak\' + sFitxIzen ; (* bidea ezarri fitxategiari *)

UNITATEA_Real_FitxategiaSortu(sFitxIzen) ;
writeln ;
...

Laburbilduz, datu-fitxategiaren izen soila ematen badugu (biderik gabe), datu-fitxategia sortuko da programa exekutagarrian dagoen tokian: Bezeroa.exe programa eta Abiadurak.dat datu-fitxategia elkarrekin aurkituko dira. Baina, datu-fitxategiaren izena zehaztean, diskoaren bide bat jarri bada, Abiadurak.dat datu-fitxategia sortuko da bide horrek adierazten duen karpetan.






    Windows:
Enekuri.zip   bere barnean Enekuri izeneko karpeta bat ondoko edukiarekin:
  • Programa-bezeroaren Bezero.pas iturburu-kodea
  • unitatea.ow unitatearen objektu-kodea
  • unitatea.ppw unitate konpilatua
  • Datuak karpeta (datu-fitxategi batekin) 
    Mac:
  • Bezeroa.pas   bezero-programaren iturburu-kodea
  • unitatea.o   unitatearen objektu-kodea
  • unitatea.ppu   unitate konpilatua
  • Bezeroa   programa exekutagarria (beharbada fitxategi hau jasotzea antibirusak ukatuko du, goikoekin lor daiteke)
  • Abiadurak.dat   datuen fitxategia


 

iruzkinik ez:

Argitaratu iruzkina

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