Помощь - Поиск - Пользователи - Календарь
Полная версия: ФАЙЛЫ
Форум «Всё о Паскале» > Pascal, Object Pascal > Задачи
Танкистка
Я неочень хорошо поняла тему Файлы.... вообщем вотЪ такая вотЪ задачка... я там чет пыталась написать. Вообщем там наверно много неочень разумного...жду ЛЮБЫХ советов и поправок... Пасибки, кто поможет)

Заполнить файл последовательного доступа f целыми числами, полученными с помощью генератора случайных чисел. Получить в файле q те компоненты файла f, которые являются четными.

const n=30;
Var f,q:text;
a:array[1..n] of integer;
i:integer;
Begin
randomize;
for i:=1 to n do
a[i]:=random(100);
Assign(f,'e:\celie.txt');
rewrite(f);
for i:=1 to n do
writeln(f,a[i]);
close(f);
reset(f);
assign(q,'e:\chetnie.txt');
rewrite(q);
while Not(Eof(f)) do
if a[i] mod 2=0 then writeln(q,a[i]);
close(f);
close(q);
Writeln('vot tak','e:\celie.txt','e:\chetnie.txt');
readln;
end.
Bokul
А тебе можно работать с типизированными файлами?
мисс_граффити
файл последовательного доступа - это текстовый?
Lapp
Файл последовательного доступа - это практически любой файл. Это понятие относится к организации доступа к устройству, а не к наполнению.

У тебя была ошибка в цикле записи файла четных чисел. Ты не читала файл целых, а писала четные прямо из старого массива (кстати, зачем тебе вообще массив?.. убери его). При этом заканчивала цикл по концу файла, который никогда не заканчивался, раз ты его не читала..
Исправленный вариант:
const
n=30;
Var
f,q:text;
a:array[1..n] of integer;
i:integer;

Begin
randomize;
for i:=1 to n do a[i]:=random(100);
Assign(f,'e:\celie.txt');
rewrite(f);
for i:=1 to n do writeln(f,a[i]);
close(f);
reset(f);
assign(q,'e:\chetnie.txt');
rewrite(q);
while Not(Eof(f)) do begin
ReadLn(f,i);
if not Odd(i) then writeln(q,i)
end;
close(f);
close(q);
Writeln('vot tak: ',' e:\celie.txt ',' e:\chetnie.txt ');
readln;
end.

PS
не забывай про пробелы при выводе результатов smile.gif
volvo
Цитата
Файл последовательного доступа - это практически любой файл.
Грубейшая ошибка!!!

Файл последовательного доступа - ТОЛЬКО текстовый, и никакой другой, ибо только к текстовому файлу неприменим Seek, и для того, чтобы обратиться к символу с №120, надо прочесть все 119, которые идут перед ним... Все остальные (типизированные/бестиповые) файлы имеют фиксированный размер компонента, и позволяют обращаться к любому компоненту напрямую...

P.S. Очень жаль, что приходится перепечатывать FAQ ( Файлы -> "Последовательный и примой доступ" ), да еще и в ответ на заявление админа форума dry.gif
мисс_граффити
volvo,Lapp, не ссорьтесь...
я почему уточнила...
совсем недавно делала лабу - многофазную сортировку слиянием. она вообще-то расчитана на ленты - то есть штуки только с последовательным доступом. сортировались числа, поэтому, чтобы не делать лишний перевод, использовался file of integer. но - никаких seek (это противоречило бы классическому алгоритму).
вот и тут вопрос - то ли речь о том, какой должен быть файл, то ли о том, как с ним работать...
просто формулировка "заполнить файл целыми числами" не совсем точная - если речь именно о текстовом.
Lapp
Цитата(мисс_граффити @ 21.12.2006 12:51) *

volvo,Lapp, не ссорьтесь...

А кто ссорится? smile.gif
volvo, спасибо за напоминание теории - ошибку понял, исправлюсь smile.gif. В следующий раз буду осторожнее в ответах.. Действительно ведь, чушь спорол sad.gif
Танкистка, извини тоже..
Танкистка
Lapp , пасибки... большие.... smile.gif Ты мне как всегда помог))))) wink.gif
volvo и тебе пасиба!!!!! yes2.gif
Это текстовая версия — только основной контент. Для просмотра полной версии этой страницы, пожалуйста, нажмите сюда.