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

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

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

2 страниц V < 1 2  
 Ответить  Открыть новую тему 
> Работа с файлами
сообщение
Сообщение #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 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #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
 К началу страницы 
+ Ответить 
сообщение
Сообщение #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.
и все заработало (если ты что-то меняла после того, как я привел предыдущий вариант - внеси соответствующие изменения и сюда...)
 К началу страницы 
+ Ответить 
сообщение
Сообщение #24


Бывалый
***

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

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


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

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


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


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


Гость






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

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


Бывалый
***

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

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


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

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


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


Бывалый
***

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

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


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


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

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

 




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