Miképp lehet fájlbeolvasással kiegészíteni egy programot Free Pascalban?
Adott egy kész program, ami billentyűzetes bevitellel készült, és tökéletesen fut. Most feladatul kaptuk azt, hogy ezt bővítsük ki választható opciókkal, úgyhogy a billentyűzet mellett fájlból olvasva is le kell tudnia futnia. Addig még megvagyok, hogy a fájlbeolvasást lefuttatom, de ott már elakadtam, hogy a meglévő eljárásokba ezt hogy integrálom bele? Mert jelen állapotában ha a billentyűzetes beolvasást választom, akkor fut, ha a fájlból olvasást, runtime errort kapok. Miképp ágyazzam bele az eljárásokba is a fájlműveletet, hogy működjön? (A TXT-ben egy darabszám szerepel, és annak megfelelő mennyiségű további szám)
A kód:
program beadando;
const MaxN=10000;
type
meres=Array [1..MaxN] of integer;
var
N:integer;
mm,st,veg,szakk,szakv: meres;
f: text;
//Beolvas
Procedure beolvas(var N:integer);
Var
i,ssz: integer;
Begin
Writeln('Adj meg egy szamot: 0 (billentyuzetrol bevitel) vagy 1 (fajlbol olvasas)?');
Read(ssz);
if (ssz = 0) then
Begin
readln(N);
for i:=1 to N do begin
readln(mm[i]);
end;
end;
if (ssz = 1) then
Begin
Assign(f,'adat.txt');
reset(f);
Readln(f,N);
for i:=1 to N do
begin
Readln(f,mm[i]);
end;
close(f);
reset(f);
End;
if ((ssz <> 0) and (ssz <> 1)) then
Begin
Writeln('Hibas szam! Add meg ujra!');
End;
end;
//1. feladat
Procedure arviz(const N: integer; const mm: meres);
var i,K: integer;
Begin
i:=0;
K:=0;
while (i<=N) do
begin
i:=i+1;
if (mm[i]>800) then
begin
K:=K+1;
while (mm[i]>800) do
begin
i:=i+1;
end;
end;
end;
writeln(K);
end;
//2-3-4. feladat
Procedure szakasz(const N: integer; const mm: meres; var st,veg,szakk,szakv: meres);
var i,j,z,l,sv: integer;
Begin
j:=0;
i:=0;
while (i<=N) do
begin
i:=i+1;
if (mm[i] > 800) then
begin
j:=j+1;
st[j]:=i;
while (mm[i] > 800) do
begin
i:=i+1;
end;
veg[j]:=i-1;
end;
end;
i:=0;
sv:=0;
while (i<=j) do
begin
i:=i+1;
z:=st[i];
l:=0;
while (z<veg[i]) do
begin
if (((mm[z]>1000) and (mm[z+1]<=1000)) or ((mm[z]>900) and (mm[z+1]<=900))) then
begin
l:=1;
end;
z:=z+1;
end;
if (l=1) then
begin
sv:=sv+1;
szakk[sv]:=st[i];
szakv[sv]:=veg[i];
end;
end;
for i:=1 to j do
begin
write(st[i],' ');
write(veg[i],' ');
end;
writeln();
writeln(sv);
for i:=1 to sv do
begin
write(szakk[i],' ');
write(szakv[i],' ');
end;
writeln();
end;
Begin
beolvas(N);
arviz(N,mm);
szakasz(N,mm,st,veg,szakk,szakv);
End.
Hibaüzenet van? Szúrjál be writeln-eket és írasd ki mindig, hogy hol jár a program, így ki tudod deríteni, hogy hol száll el.
Illetve módosítsd így a kódod:
if (ssz = 1) then
begin
writeln('Add meg a fajl nevet: ');
read(fajlnev);
if FileExists(fajlnev) then
begin
... kód többi része
end else writeln('A fájl nem létezik!');
[...]
end;
Mint látod rákerült egy else ág az fájl létezését vizsgáló if-re.
Beleírtam az else ágat is.
Ha 1-est nyomok, akkor kiírja, hogy Add meg a fájl nevét:
Majd rögtön alá, hogy a fájl nem létezik, kiír két 0-át (úgy mint nincs a feladatnak megfelelő szakasz), és billentyűre várva kilép. Nem is engedi, hogy beírjak valamit is fájlnévnek, rögtön beadja ezt.
Kapcsolódó kérdések:
Minden jog fenntartva © 2024, 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!