2023(e)ko apirilaren 23(a), igandea

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





Abiapuntuko fitxategia existitzean datuak gehitzen dira



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:


  • C:\Datuak\Bakoitiak.DAT

  • C:\Datuak\Bikoitiak.DAT   (0 zenbakia bikoititzak hartu)




Hona hemen, proposatutako ariketaren emaitza:

 








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.


 

iruzkinik ez:

Argitaratu iruzkina