Pascal-ban egy fájl olvasása közben szeretném ha a program kiírná a százalékos arányt. Kérhetnék ebben segítséget? (kód lent)
Tehát miközben olvassa a fájlt és írja a másik fájlba szeretném a százalékos arányt látni, lehetőleg olyan módon, hogy minden százalékot csak egyszer írjon ki.
A kód:
uses crt, sysutils;
var
inf,outf:file of byte;
data:array[1..250000] of byte;
nr,nw:longint;
fs,fs2:int64;
begin
assign(inf,paramstr(1));
assign(outf,paramstr(2));
reset(inf);
rewrite(outf);
fs:=filesize(inf);
repeat
blockread(inf,data,sizeof(data),nr);
fs2:=filepos(inf);
blockwrite(outf,data,nr,nw);
until(nr=0);
close(inf);
close(outf);
end.
![*](http://static.gyakorikerdesek.hu/p/vsz2.png)
![*](http://static.gyakorikerdesek.hu/p/vsz2.png)
![*](http://static.gyakorikerdesek.hu/p/vsz2.png)
![*](http://static.gyakorikerdesek.hu/p/vsz2.png)
![*](http://static.gyakorikerdesek.hu/p/vsz1.png)
Köszönöm, pont ez az, amiben segítséget kérnék.
Le tudnád írni ezt a kódba?
![*](http://static.gyakorikerdesek.hu/p/vsz2.png)
![*](http://static.gyakorikerdesek.hu/p/vsz2.png)
![*](http://static.gyakorikerdesek.hu/p/vsz2.png)
![*](http://static.gyakorikerdesek.hu/p/vsz2.png)
![*](http://static.gyakorikerdesek.hu/p/vsz1.png)
![*](http://static.gyakorikerdesek.hu/p/vsz2.png)
![*](http://static.gyakorikerdesek.hu/p/vsz2.png)
![*](http://static.gyakorikerdesek.hu/p/vsz2.png)
![*](http://static.gyakorikerdesek.hu/p/vsz2.png)
![*](http://static.gyakorikerdesek.hu/p/vsz2.png)
Szia.
Aránypár (ha jól olvasom a kódot) :
fs = 100 %
fs2 = x %
- - - - -
x=fs2*100/fs mivel itt a szorzás osztás felcsrélhető :
X=fs2/fs*100
Csak ezt kell leprogramoznod illetve kiiratni a % értéket.
Sok sikert.
Üdv.
![*](http://static.gyakorikerdesek.hu/p/vsz2.png)
![*](http://static.gyakorikerdesek.hu/p/vsz2.png)
![*](http://static.gyakorikerdesek.hu/p/vsz2.png)
![*](http://static.gyakorikerdesek.hu/p/vsz2.png)
![*](http://static.gyakorikerdesek.hu/p/vsz2.png)
Most hogy jobban elolvastam a kérdést :
"szeretném a százalékos arányt látni, lehetőleg olyan módon, hogy minden százalékot csak egyszer írjon ki."
Ez a fenti kóddal nem megvalósitható.
Mivel eleve 25000 byteket olvasol be/irsz ki nem tudod az összes % értéket megjeleniteni (pl nem lesz semmiféle % érték, csak 100 %, ha a fájl mérete kisebb mint 25000 byte, illetve ha 50000 byte alá esik akkor pediglen ezzel a módszerrel csak két % értéket fog megjeleniteni valahol 50+ % és a vége mint 100 %)
Sok sikert.
Üdv.
Én nem ragaszkodom hozzá hogy mindenegyes % megjelenjen...
A fenti képlet azt produkálja, hogy kiírja: 0
Végig nullát ír, végén pedig 2x kiírja hogy: 100
Nagy fájlokkal próbálom, amelyek méret nagyobb 20 MB-nél.
uses crt, sysutils;
var
inf,outf:file of byte;
data:array[1..250000] of byte;
nr,nw:longint;
fs,fs2:int64;
begin
assign(inf,paramstr(1));
assign(outf,paramstr(2));
reset(inf);
rewrite(outf);
assign(output,'');
rewrite(output);
fs:=filesize(inf);
repeat
blockread(inf,data,sizeof(data),nr);
fs2:=filepos(inf);
writeln(fs2 div fs*100);
blockwrite(outf,data,nr,nw);
until(nr=0);
close(inf);
close(outf);
end.
![*](http://static.gyakorikerdesek.hu/p/vsz2.png)
![*](http://static.gyakorikerdesek.hu/p/vsz2.png)
![*](http://static.gyakorikerdesek.hu/p/vsz2.png)
![*](http://static.gyakorikerdesek.hu/p/vsz2.png)
![*](http://static.gyakorikerdesek.hu/p/vsz2.png)
Igen.
Ha igy használod akkor persze, hogy nullát ir.
Mivelhogy "fs2" egészosztás "Fs" az ugyebár a ciklus végéig 0, (mivelhogy a file teljes mérete csak akkor lesz meg egyszer az eddig átmásolt bájtok számában, ha már véget ért a másolás) ez megszorzod 100-al akkor is nulla.
Tehát a következő módszereket próbálhatod :
Hogy az én módszeremnél maradjuk :
- writeln (Fs2/fs*100:0:0);
Vagy maradjunk az eredeti képletnél, ha igy szeretnéd :
- writeln((fs2*100) div fs);
Sok sikert.
üdv.
Kapcsolódó kérdések:
Minden jog fenntartva © 2025, www.gyakorikerdesek.hu
GYIK | Szabályzat | Jogi nyilatkozat | Adatvédelem | Cookie beállítások | WebMinute Kft. | Facebook | Kapcsolat: info(kukac)gyakorikerdesek.hu
Ha kifogással szeretne élni valamely tartalommal kapcsolatban, kérjük jelezze e-mailes elérhetőségünkön!