Об игре
Новости
Войти
Регистрация
Рейтинг
Форум
8:06
2314
 online
Требуется авторизация
Вы не авторизованы
   Форумы-->Форум для внеигровых тем-->

АвторЧтение файла в TP
Условие: создать файл, содержащий целые числа, длину файла задать с клавиатуры. Посчитать количество положительных чисел в файле и их произведение. Во время выполнения процедуры result выдает сотую ошибку: disc read error. Пробовал проверять перед считыванием переменной из файла текущую позицию в файле и длину файла - все норм (изначально позиция 0, длину указывает верно). Может кто подскажет, где я туплю? Вот исходник.

uses crt;

Type
FoI=file of integer;

var
WorkFile:FoI;
{----------------------------------------------------------------------------}
Procedure Vvod(var f:FoI);
var
i,n,znach:integer;
begin
clrscr;
write('Vvedite kolichestvo chisel v fajle: ');
readln(n);
writeln('Vvedite elementy fajla:');
rewrite(f);
for i:=1 to n do
begin
read(znach);
write(f,znach);
end;
close(f);
writeln('Konec vvoda,dlja prodolzenija nazmite lubyu knopky');
readkey;
end;
{----------------------------------------------------------------------------}
Procedure result(var f:FoI);
var
kol,s,znach:integer;
begin
clrscr;
kol:=0;
s:=1;
reset(f);
while not eof do
begin
read(f,znach);
if znach>0 then begin
inc(kol);
s:=s*znach;
end;
end;
if kol>0 then begin
writeln('Polozitelnih elementov faila ',kol,' shtyk');
writeln('Ih proizvedenie ravno ',s);
end
else writeln('V faile net polozitelnih elementov');
writeln('Dlja okonchanija raboty nazmite lubyu knopky');
readkey;
end;
{----------------------------------------------------------------------------}
begin
assign(WorkFile,'c:\Data.dat');
Vvod(WorkFile);
Result(WorkFile);
end.
Есть подозрение, что после close(f) в Procedure Vvod надо заново делать assig
Пробовал обе процедуры в одну скомпоновать (перенес код, добил переменные)-тот же результат. Может, это из-за NTFS?
За внимание спасибо. Люди, запустите кто-нить на FAT 32? если не трудно.
FAT 32. Думаю...
Linux 5 в формате XE тире матрица соотношений,понял?
Почему-то не срабатывает eof (я не такой знаток паскаля, чтобы определить причину)
Пока вижу такой вариант: из процедуры Vvod возвращать ещё и число n. Цикл в Result делать со счетчиком, а не while
ой, ржунимагу... вот ошибка:
while not eof(f) do
ой, ржунимагу... вот ошибка:
while not eof(f) do

Я же говорю-туплю, eof же аргумент требуется))
для Gromozheka: Спасибо!
для дядя_Ребус:
Linux 5 в формате XE тире матрица соотношений,понял? Да, понял, уровень интеллекта...
тема закрыта by Вапекренг (2009-06-11 18:58:43)
К списку тем
2007-2025, онлайн игры HeroesWM