Дали след. задачу: дан файл с неизвестным кол-вом строк, нужно в начало каждой строки поставить кол-во символов, а в конец файла кол-во строк. Первую часть я вроде сделал, а вот со второй никак... Помогите найти ошибку!!! Заранее благодарен!!!
uses crt; var a:array [1..100] of string[105]; i,j,m,k:integer; s:string; f:text; begin assign (f,'chukcha.txt'); reset (f); begin repeat readln (f, a[i]); i:=i+1; j:=j+1; until eof(f); end; close(f);
for i:=1 to j do begin m:=length(a[i]); str(m, s); insert (s, a[i], 1); end;
rewrite (f); for k:=1 to j do begin Writeln(f, a[k]); end; Write (f,j);
close (f); end.
volvo
13.04.2006 22:54
Цитата(Clerick @ 13.04.2006 18:39)
дан файл с неизвестным кол-вом строк
Так может лучше обойтись БЕЗ массива? Ведь количество строк может быть и больше размерности массива...
var j: integer; s: string; f, f_out: text;
begin assign(f,'f.txt'); reset (f); assign(f_out, 'tmp.txt'); rewrite(f_out);
j := 0; while not eof(f) do begin readln(f, s); inc(j); writeln(f_out, length(s), ' ' + s); end; writeln(f_out, j);
Будет работать, если в файле нет строк длиннее 255 символов...
Clerick
13.04.2006 23:00
Цитата(volvo @ 13.04.2006 21:54)
Так может лучше обойтись БЕЗ массива? Ведь количество строк может быть и больше размерности массива...
Спасибо большое за код!!! И все-таки, как исправить мой, что бы он работал(если в задаче ограниченное кол-во строк, скажем всего лишь 50)?
volvo
13.04.2006 23:07
Так:
uses crt; var a:array [1..100] of string[105]; i,j,m,k:integer; s:string; f:text;
begin assign (f,'f.txt'); reset (f); i := 1; j := 0; begin repeat readln (f, a[i]); i:=i+1; j:=j+1; until eof(f); end; close(f);
for i:=1 to j do begin // m:=length(a[i]); str(length(a[i]), s); insert (s + ' ', a[i], 1); end;
rewrite (f); for k:=1 to i do begin { <--- До I а не J } Writeln(f, a[k]); end; Writeln(f, j);
close (f); end.
?
Clerick
13.04.2006 23:18
Хм... Неверно работает... Первая часть все круто, а вот вторая... Прога записывает в файл еще одну строчку(в ней "0"), соотвественно суммирует и ее. Итого получается ровно на одну строчку больше...
volvo
13.04.2006 23:22
Не знаю. У меня работает как положено. Приведи свой входной файл...
Clerick
13.04.2006 23:29
Цитата(volvo @ 13.04.2006 22:22)
Не знаю. У меня работает как положено. Приведи свой входной файл...
Элементарный f fff ff fffff ff fffff ff ------ А выводит 1 f 3 fff 2 ff 5 fffff 2 ff 5 fffff 2 ff 0 8
klem4
14.04.2006 10:56
А ты уверен что в входном файле, в конце нету пустых строк ?
Clerick
20.04.2006 21:54
Уверен! Я же ее не создаю! Кстати, когда она есть, то выводит тоже самое! И в чем ошибка???
ЗЫ: Когда в конце кода меняю след.образом все норм. работает!
... for k:=1 to i-1 do begin Writeln(f, a[k]); end; Writeln(f, j-1); ...
???
Malice
20.04.2006 22:14
Я думаю, что ты в своей проге исправил строку
for i:=1 to j do begin
(кстати, не понял зачем), а строку
i := 1; j := 0;
забыл.
Clerick
20.04.2006 23:14
Цитата(Malice @ 20.04.2006 21:14)
Я думаю, что ты в своей проге исправил строку
for i:=1 to j do begin
(кстати, не понял зачем)
Так сказал volvo...
Цитата
а строку
i := 1; j := 0;
забыл.
А где она должна быть?
volvo
20.04.2006 23:19
А ты программу, которую я привел, внимательно изучил, ПРЕЖДЕ, чем говорить, что она не работает? (Hint: смотри строку №11)
Malice
20.04.2006 23:48
Цитата(Clerick @ 20.04.2006 19:14)
Так сказал volvo...
Тогда, да. Volvo зря не скажет.
Цитата
А где она должна быть?
Сорри модераторам за оффтоп, но большое тебе спасибо, от души посмеялся
Clerick
23.04.2006 18:54
Цитата(Malice @ 20.04.2006 22:48)
Тогда, да. Volvo зря не скажет. Сорри модераторам за оффтоп, но большое тебе спасибо, от души посмеялся
Тоже долго смеялся! Сессия скоро, административные идут, голова еле соображает...
А насчет проги, работает нормально в конфигурации, приведенной volvo! Не знаю почему раньше не шла, мож глюк какой...
Пасибки всем за помощь!!!
Это текстовая версия — только основной контент. Для просмотра полной версии этой страницы, пожалуйста, нажмите сюда.