IPB
ЛогинПароль:

> Прочтите прежде чем задавать вопрос!

1. Заголовок темы должен быть информативным. В противном случае тема удаляется ...
2. Все тексты программ должны помещаться в теги [code=pas] ... [/code].
3. Прежде чем задавать вопрос, см. "FAQ", если там не нашли ответа, воспользуйтесь ПОИСКОМ, возможно такую задачу уже решали!
4. Не предлагайте свои решения на других языках, кроме Паскаля (исключение - только с согласия модератора).
5. НЕ используйте форум для личного общения, все что не относится к обсуждению темы - на PM!
6. Одна тема - один вопрос (задача)
7. Проверяйте программы перед тем, как разместить их на форуме!!!
8. Спрашивайте и отвечайте четко и по существу!!!

> Файлы, Ошибка в коде...
Clerick
сообщение 13.04.2006 18:39
Сообщение #1


студент..
***

Группа: Пользователи
Сообщений: 287
Пол: Мужской
Реальное имя: Дмитрий

Репутация: -  2  +


Дали след. задачу: дан файл с неизвестным кол-вом строк, нужно в начало каждой строки поставить кол-во символов, а в конец файла кол-во строк. Первую часть я вроде сделал, а вот со второй никак... Помогите найти ошибку!!! Заранее благодарен!!! smile.gif
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.


--------------------
После дождя обязательно выглянет солнце)
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
 
 Ответить  Открыть новую тему 
Ответов(1 - 13)
volvo
сообщение 13.04.2006 18:54
Сообщение #2


Гость






Цитата(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);

close(f); close(f_out);
erase(f); rename(f_out, 'f.txt');
end.

Будет работать, если в файле нет строк длиннее 255 символов...
 К началу страницы 
+ Ответить 
Clerick
сообщение 13.04.2006 19:00
Сообщение #3


студент..
***

Группа: Пользователи
Сообщений: 287
Пол: Мужской
Реальное имя: Дмитрий

Репутация: -  2  +


Цитата(volvo @ 13.04.2006 21:54) *

Так может лучше обойтись БЕЗ массива? Ведь количество строк может быть и больше размерности массива...

Спасибо большое за код!!! И все-таки, как исправить мой, что бы он работал(если в задаче ограниченное кол-во строк, скажем всего лишь 50)? blink.gif


--------------------
После дождя обязательно выглянет солнце)
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
volvo
сообщение 13.04.2006 19:07
Сообщение #4


Гость






Так:
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 19:18
Сообщение #5


студент..
***

Группа: Пользователи
Сообщений: 287
Пол: Мужской
Реальное имя: Дмитрий

Репутация: -  2  +


Хм... Неверно работает... Первая часть все круто, а вот вторая... Прога записывает в файл еще одну строчку(в ней "0"), соотвественно суммирует и ее. Итого получается ровно на одну строчку больше... blink.gif


--------------------
После дождя обязательно выглянет солнце)
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
volvo
сообщение 13.04.2006 19:22
Сообщение #6


Гость






Не знаю. У меня работает как положено. Приведи свой входной файл...
 К началу страницы 
+ Ответить 
Clerick
сообщение 13.04.2006 19:29
Сообщение #7


студент..
***

Группа: Пользователи
Сообщений: 287
Пол: Мужской
Реальное имя: Дмитрий

Репутация: -  2  +


Цитата(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

Сообщение отредактировано: Clerick - 13.04.2006 19:33


--------------------
После дождя обязательно выглянет солнце)
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
klem4
сообщение 14.04.2006 6:56
Сообщение #8


Perl. Just code it!
******

Группа: Модераторы
Сообщений: 4 100
Пол: Мужской
Реальное имя: Андрей

Репутация: -  44  +


А ты уверен что в входном файле, в конце нету пустых строк ?

Сообщение отредактировано: klem4 - 14.04.2006 6:56


--------------------
perl -e 'print for (map{chr(hex)}("4861707079204E6577205965617221"=~/(.{2})/g)), "\n";'
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
Clerick
сообщение 20.04.2006 17:54
Сообщение #9


студент..
***

Группа: Пользователи
Сообщений: 287
Пол: Мужской
Реальное имя: Дмитрий

Репутация: -  2  +


Уверен! Я же ее не создаю! Кстати, когда она есть, то выводит тоже самое! И в чем ошибка???

ЗЫ: Когда в конце кода меняю след.образом все норм. работает!

...
for k:=1 to i-1 do begin
Writeln(f, a[k]);
end;
Writeln(f, j-1);
...


??? blink.gif

Сообщение отредактировано: volvo - 2.11.2006 19:01


--------------------
После дождя обязательно выглянет солнце)
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
Malice
сообщение 20.04.2006 18:14
Сообщение #10


Профи
****

Группа: Пользователи
Сообщений: 705
Пол: Мужской

Репутация: -  20  +


Я думаю, что ты в своей проге исправил строку
 for i:=1 to j do begin
(кстати, не понял зачем),
а строку
 i := 1; j := 0;
забыл.
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
Clerick
сообщение 20.04.2006 19:14
Сообщение #11


студент..
***

Группа: Пользователи
Сообщений: 287
Пол: Мужской
Реальное имя: Дмитрий

Репутация: -  2  +


Цитата(Malice @ 20.04.2006 21:14) *

Я думаю, что ты в своей проге исправил строку
 for i:=1 to j do begin
(кстати, не понял зачем)

Так сказал volvo...

Цитата
а строку
i := 1; j := 0;

забыл.

А где она должна быть?

Сообщение отредактировано: volvo - 2.11.2006 19:02


--------------------
После дождя обязательно выглянет солнце)
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
volvo
сообщение 20.04.2006 19:19
Сообщение #12


Гость






А ты программу, которую я привел, внимательно изучил, ПРЕЖДЕ, чем говорить, что она не работает? (Hint: смотри строку №11)
 К началу страницы 
+ Ответить 
Malice
сообщение 20.04.2006 19:48
Сообщение #13


Профи
****

Группа: Пользователи
Сообщений: 705
Пол: Мужской

Репутация: -  20  +


Цитата(Clerick @ 20.04.2006 19:14) *

Так сказал volvo...

Тогда, да. Volvo зря не скажет.

Цитата
А где она должна быть?

Сорри модераторам за оффтоп, но большое тебе спасибо, от души посмеялся lol.gif
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
Clerick
сообщение 23.04.2006 14:54
Сообщение #14


студент..
***

Группа: Пользователи
Сообщений: 287
Пол: Мужской
Реальное имя: Дмитрий

Репутация: -  2  +


Цитата(Malice @ 20.04.2006 22:48) *

Тогда, да. Volvo зря не скажет.
Сорри модераторам за оффтоп, но большое тебе спасибо, от души посмеялся lol.gif


smile.gif Тоже долго смеялся! Сессия скоро, административные идут, голова еле соображает... mega_chok.gif

А насчет проги, работает нормально в конфигурации, приведенной volvo! Не знаю почему раньше не шла, мож глюк какой...

Пасибки всем за помощь!!! smile.gif


--------------------
После дождя обязательно выглянет солнце)
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 

 Ответить  Открыть новую тему 
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 



- Текстовая версия 20.06.2025 13:24
Хостинг предоставлен компанией "Веб Сервис Центр" при поддержке компании "ДокЛаб"