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

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

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

2 страниц V < 1 2  
 Ответить  Открыть новую тему 
> Работа с файлами
Tribunal
сообщение 9.04.2006 6:09
Сообщение #21


Бывалый
***

Группа: Пользователи
Сообщений: 233
Пол: Женский
Реальное имя: Dasha

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


прошу прощения,но
у меня вновь возникли вопросы..
дело в том что программа не может выполнить
нужные операции для n<12, если я не ошибаюсь.
почему это происходит?

и еще вопрос:а для чего нужно
if (p=0) then p:=pred(n);
?

и почему
  if st<>'' then begin
inc(i);
s[i]:=st;
end;

работает только вне цикла
while not eof(f) do
....
end;

?

пожалуйста,помогите разобраться((


--------------------
irreparabilium felix olivio rerum
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
volvo
сообщение 9.04.2006 8:30
Сообщение #22


Гость






Цитата(Tribunal @ 9.04.2006 6:09)
дело в том что программа не может выполнить
нужные операции для n<12, если я не ошибаюсь. почему это происходит?
Не знаю, я проверял только при n >= 25... Попробую подставить маленькие значения - потом напишу, что происходит...

Цитата(Tribunal @ 9.04.2006 6:09)
а для чего нужно
if (p=0) then p:=pred(n);
?

А подумай, когда, собственно, p может быть равно 0? По-моему, есть только один случай, когда это может произойти - если в строке есть только одно слово, более длинное чем N... В этом случае нам надо, чтобы слово было "разрезано" по N-му символу, так? А в программе есть запись:
prev := copy(st, succ(p), 255) + ' ';
Чтобы не делать лишних If ... Then ... Else, я просто присвоил в p значение N - 1, и это удовлетворяет всем условиям...

Цитата(Tribunal @ 9.04.2006 6:09)
почему
  if st<>'' then begin
inc(i);
s[i]:=st;
end;

работает только вне цикла
while not eof(f) do
....
end;

?
Ну, а это - как раз и есть тот самый "хвост", про который я сразу забыл. А "хвост" остается только после обработки всего файла, в самом конце. Вот я и проверяю это уже ПОСЛЕ цикла
While not eof(f) do
 К началу страницы 
+ Ответить 
volvo
сообщение 9.04.2006 8:59
Сообщение #23


Гость






Добавлено:

Так, ну причина того, что это все не работало с N < 12 очень прозаическая - размерности массива S просто напросто не хватало для того, чтобы он мог вместить все строки smile.gif Поскольку реализация идет на Дельфи - я СВОЙ код переписал с использованием динамических массивов вот так:
var
s: array of string;

...

procedure TForm1.Button2Click(Sender: TObject);
var
i, j, p, n: integer;
st, prev: string;

procedure add_string(str: string);
begin
setlength(s, length(s) + 1);
s[length(s) - 1] := str;
end;

begin
n := StrToInt(Edit1.Text); // n = 10
reset(f);

prev := '';
setlength(s, 0);
while not eof(f) do begin
readln(f, st);
st := prev + st; prev := '';

if length(st) > n then begin

repeat

p := n;
while (p > 0) and (st[p] <> ' ') do dec(p);

if p = 0 then p := pred(n);
add_string( copy(st, 1, p) );
prev := copy(st, succ(p), 255) + ' ';
delete(st, 1, p);

until length(prev) < n;

end
else add_string( st );

end;

if st <> '' then add_string( st );

for j := 0 to length(s) - 1 do
Memo2.Lines.Append(s[j] + inttostr(length(s[j])));

setlength(s, 0); // Освобождаем S
end.
и все заработало (если ты что-то меняла после того, как я привел предыдущий вариант - внеси соответствующие изменения и сюда...)
 К началу страницы 
+ Ответить 
Tribunal
сообщение 9.04.2006 9:26
Сообщение #24


Бывалый
***

Группа: Пользователи
Сообщений: 233
Пол: Женский
Реальное имя: Dasha

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


большое спасибо за объяснения!=)
теперь всё понятно=)

я в начале этой темы приводила условие еще одной задачи.
вот то,что я сделала.
но там выдается ошибка о том,что
чтение из файла идет после его закрытия,но
я проверила этот факт.
вроде всё открывается и закрывается в нужных местах...
что не так?посмотрите,пожалуйста...))


Прикрепленные файлы
Прикрепленный файл  matrix_file.rar ( 3.58 килобайт ) Кол-во скачиваний: 103


--------------------
irreparabilium felix olivio rerum
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
volvo
сообщение 9.04.2006 9:41
Сообщение #25


Гость






А тебя не смущает тот факт, что ты записываешь в файл одно число, а читать из того же файла пытаешься несколько чисел? ;)

P.S. Все-таки, тему я передвину в Дельфи...
 К началу страницы 
+ Ответить 
Tribunal
сообщение 12.04.2006 12:48
Сообщение #26


Бывалый
***

Группа: Пользователи
Сообщений: 233
Пол: Женский
Реальное имя: Dasha

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


volvo, а можно попросить вас словесно хотя бы кратко объяснить, как
действует программа, которую вы привели , а то вроде бы всё понятно,
а когда начинаю объяснять путаюсь и сама ничего не понимаю. unsure.gif
прошу вас,объясните,а то получается так,что алгоритм
понятен мне только кусками...а хотелось бы хорошо с ним разобраться

Сообщение отредактировано: Tribunal - 12.04.2006 12:50


--------------------
irreparabilium felix olivio rerum
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
Tribunal
сообщение 12.04.2006 17:25
Сообщение #27


Бывалый
***

Группа: Пользователи
Сообщений: 233
Пол: Женский
Реальное имя: Dasha

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


спасибо.
уже разобралась сама=)))
ура,ура,ура smile.gif


--------------------
irreparabilium felix olivio rerum
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 

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

 



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