Kezdőoldal » Számítástechnika » Programozás » Miképp lehet fájlbeolvasással...

Peston kérdése:

Miképp lehet fájlbeolvasással kiegészíteni egy programot Free Pascalban?

Figyelt kérdés

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.



2015. ápr. 4. 22:48
1 2
 11/17 ejbenjaro ***** válasza:
100%

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.

2015. ápr. 5. 17:57
Hasznos számodra ez a válasz?
 12/17 A kérdező kommentje:

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.

2015. ápr. 5. 18:09
 13/17 ejbenjaro ***** válasza:
100%
A read helyett readln-t használj.
2015. ápr. 5. 18:11
Hasznos számodra ez a válasz?
 14/17 A kérdező kommentje:
Ugyanazt adja vissza. :/
2015. ápr. 5. 18:17
 15/17 ejbenjaro ***** válasza:
100%
Az lehet a gond, hogy a programodban több helyen is read-el olvasol be adatot. A read annyi adatot olvas be a bemenetről, amennyi paramétere van, a többit otthagyja és egy következő read-del, vagy readln-el elérheted az ottmaradt adatokat. Ezért nem szeretem a read-et használni sima adatbevitelre. Ha fájlokról van szó, akkor más a helyzet, ott kellhet a read, hiszen nem minden fájlt soronként dolgozol fel, illetve nem is minden fájl tartalmaz „sorokat”.
2015. ápr. 5. 18:21
Hasznos számodra ez a válasz?
 16/17 A kérdező kommentje:
Két dologtól hidalok le: hogy mennyi ilyen apróságon képes elcsúszni a program, és hogy mennyire éles szemmel látod meg ezeket. Valóban ez volt a baja, még egy read volt a programban, átírtam, és most tökéletesen lefut ez is. Nem tudom elégszer megköszönni a segítségedet, az már biztos! Sok újat tanultam most ezekből, az tuti. :) Köszönöm szépen még egyszer és milliószor! :)
2015. ápr. 5. 18:26
 17/17 ejbenjaro ***** válasza:
100%
Nincs mit. :)
2015. ápr. 5. 18:31
Hasznos számodra ez a válasz?
1 2

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

A weboldalon megjelenő anyagok nem minősülnek szerkesztői tartalomnak, előzetes ellenőrzésen nem esnek át, az üzemeltető véleményét nem tükrözik.
Ha kifogással szeretne élni valamely tartalommal kapcsolatban, kérjük jelezze e-mailes elérhetőségünkön!