Другие языки программирования и технологии

Паскаль. Почему програмка создает безконечо-большой тексковый файл

program lab8v15; var n,k : integer; f : text; begin assign (f,'veter.txt'); rewrite (f); n:=0; while not eof do begin read (f, a); n:=n+1; end; close (f); append (f); r:=0; for i:=1 to n do begin if a in [':',',','.','-'] then write (f,a); k:=k+1; end; close (f); write (k); end.
Baizak Kambarov
Baizak Kambarov
5 894
Чет я не вижу где ты переменную а объявляешь.. . Может в этом проблема а? :))
Блин, да у тебя не только а не объявлена.. . дауж.

Так ты почему файл читаешь и в него же пишешь :D
read (f, a);
...
write (f,a);
У тебя прога находит пробелы со знаками пунктуации и тут же их дописывает в этот же файл, потом снова находит и снова пишет. От того и бесконечно большой файл происходит.
Федор 7777
Федор 7777
1 080
Лучший ответ
Федор 7777 Не обломался, качнул bp7.0, поправил твой исходник.
Короче вот тебе рабочая прога. Бери и пользуйся:
program lab8v15;
var
n,k,i : integer;
f,w : text;
a : char;
begin
assign (f,'veter.txt'); {связываем файл с переменной}
assign (w,'result.txt');
reset (f); {открываем файл для чтения}
rewrite (w); {открываем файл для записи}
n:=1; {потому что читать начнем с первого символа, т.к. нулевого не бывает}
k:=0; {этикет прогера}
while not eof(f) do {пока не достигнут конец файла,}
begin
read (f, a); {читаем символ из файла}
if a in [':',',','.','-',';'] then {если в 'a' знак пунктуации, то}
begin
write (w,a); {пишем знак в файл}
k:=k+1; {увеличиваем счетчик}
end;
n:=n+1; {переходим к следующему символу}
end;
close (f);
close (w);
write (k);
end.
Доброго времени суток.

Потому что она написана с кучей ошибок.

Про переменную а вам уже сказали, но это не все. Вы используете переменную i в качестве счетчика цикла, но она тоже не объявлена. А еще есть тоже не объявленная переменная r... Далее, подозреваю, что а это массив, т. к. после строчки read (f, a); пошел курсив. А это возможно при такой записи read (f, a[ i ]); (без пробелов перед и после i эти три символа воспринимаются как управляющий тег и включают курсив) . Тем более, что дальше вы проверяете элементы на принадлежность множеству. Еще, while not eof do... еоф что? Где параметр? В таком виде ваша программа не только не будет создавать "безконечо-большой тексковый файл" (с) . Она просто не запустится и не скомпилится.

Удачи!

PS Сорри, Stibiu, не заметил, что про Eof() уже сказано.
Andrey Muhin
Andrey Muhin
59 613
По тому, что здесь написано, определённо ясно, что переменная "a" запоминает только последний считанный символ, и условие "if a in [':',',','.','-'] then" в цикле лишено смысла. И ещё: разве "eof" - это не функция, содержащая в своём параметре файловую переменную? А то получается программа ищет конец хрен знает чего.
Денис Швец
Денис Швец
1 176
напиши условие задачи, а то в коде какая-то чушь
Komilzhon Alikulov
Komilzhon Alikulov
985
офигеть кто то еще на турбопаскале пишет
Федор 7777 Так школьную программу то некому править :D вот и парится народ...
Baizak Kambarov йопт... какая нах школьная....институт ...КПИ самый крутой технический вуз Украиы. Турбопаскаль два года...