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

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

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

2 страниц V < 1 2  
 Ответить  Открыть новую тему 
> алгоритмы поиска
сообщение
Сообщение #21


Гость






А что будет делать этот цикл, расскажешь? Чего ты добиться хочешь?
 К началу страницы 
+ Ответить 
сообщение
Сообщение #22


Пионер
**

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

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


Цитата(volvo @ 24.05.2010 19:55) *

А что будет делать этот цикл, расскажешь? Чего ты добиться хочешь?



хочу найти наибольшую подстроку в 2х списках - и удалить ее.
в полученных списках снова найти наибольшую подстроку - и снова удалить.
и так до тех пор, пока наибольшая подстрока не будет меньше или равна 10.
а все это для того, чтобы потом получить значение суммы всех найденных kmax.
вот как-то так)

Сообщение отредактировано: *оля* -
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #23


Гость






Ну, так и будет, если не ошибаюсь:

sum := 0;
repeat

kmax : = { тут находишь kmax }
if kmax > 10 then begin
sum := sum + kmax;
{ Что там тебе еще надо было? Удалять подпоследовательности? Удаляем здесь }
end;

until kmax <= 10; { Как только kmax станет меньше 11, цикл закончится }


А что, не работает? Или что-то неправильно делает?
 К началу страницы 
+ Ответить 
сообщение
Сообщение #24


Пионер
**

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

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


Цитата(volvo @ 24.05.2010 20:30) *

Ну, так и будет, если не ошибаюсь:

sum := 0;
repeat

kmax : = { тут находишь kmax }
if kmax > 10 then begin
sum := sum + kmax;
{ Что там тебе еще надо было? Удалять подпоследовательности? Удаляем здесь }
end;

until kmax <= 10; { Как только kmax станет меньше 11, цикл закончится }


А что, не работает? Или что-то неправильно делает?


ну вот без цикла делает все как надо, а как пишу цикл, то выдает ошибку:  Ошибка: попытка разыменовать нулевой указатель А почему выдает не понятно...
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #25


Гость






Полный код (в виде PAS-файла) присоедини, посмотрим почему ошибка возникает...
 К началу страницы 
+ Ответить 
сообщение
Сообщение #26


Пионер
**

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

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


Цитата(volvo @ 25.05.2010 18:09) *

Полный код (в виде PAS-файла) присоедини, посмотрим почему ошибка возникает...


правда с оформлением проблемы, не умею я пока оформлять(


Прикрепленные файлы
Прикрепленный файл  Program1.pas ( 1.72 килобайт ) Кол-во скачиваний: 309
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #27


Гость






*оля*, а причина - тривиальна, и Андрей уже говорил о ней: обнулить kmax надо. Если б ты это сделала в программе, то при оборачивании куска программы циклом, задумалась бы, а не надо ли инициализацию переменной делать внутри цикла. А так - нет и нет ее, и ничего не приходит в голову... Все просто:

{ Вот начало твоего цикла }
sum := 0;
repeat

kmax := 0; { <--- Фокус вот в этом !!! }

p := L.first;
{ ... }

Добавляешь инициализацию и все работает.

Теперь - почему это НЕ работало без обнуления переменной... Хотя нет. Давай, не я расскажу тебе, почему это не работало, а ты разберешься и расскажешь? Договорились?

Добавлено через 7 мин.
P.S. Если тебе надо удалять подпоследовательность из обоих списков - я бы вынес этот код в отдельную процедуру и вызывал бы ее дважды с разными параметрами. Так будет лучше.
 К началу страницы 
+ Ответить 
сообщение
Сообщение #28


Пионер
**

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

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


Цитата(volvo @ 27.05.2010 12:36) *

Добавляешь инициализацию и все работает.


да, действительно работает!)
Цитата(volvo @ 27.05.2010 12:36) *

Теперь - почему это НЕ работало без обнуления переменной... Хотя нет. Давай, не я расскажу тебе, почему это не работало, а ты разберешься и расскажешь? Договорились?


yes2.gif , просто мы каждый раз искали наибольшую общую подстроку заново, и поэтому на входе kmax должно было ровняться 0, а до исправления ошибки оно в начале цикла ровнялось длине предыдущей подстроки. И следовательно условие k > kmax не может больше выполниться.
Ну вот, наверное, так)

Спасибо большое, я эту ошибку без вашей помощи не нашла бы!)

 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #29


Уникум
*******

Группа: Пользователи
Сообщений: 6 823
Пол: Мужской
Реальное имя: Лопáрь (Андрей)

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


Цитата(*оля* @ 28.05.2010 20:07) *
Спасибо большое, я эту ошибку без вашей помощи не нашла бы!)
А между тем, на нее было указано еще в посте №13.. Ты читаешь ответы полностью или так - по диагонали? постарайся обращать внимание на то, что говорят - сэкономишь как свое время, так и чужое..

Обнаружить ошибку подобного рода на самом деле предельно просто - достаточно наконец обратить внимание на то, что пытается тебе сказать компилятор (warning'и). Считай его в некотором роде участником форума.. ))

А, вообще, общее правило таково: ВСЕ переменные должны быть инициированы.


--------------------
я - ветер, я северный холодный ветер
я час расставанья, я год возвращенья домой
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #30


Пионер
**

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

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


Цитата(Lapp @ 29.05.2010 1:32) *

А между тем, на нее было указано еще в посте №13.. Ты читаешь ответы полностью или так - по диагонали?


3. ВСЕ переменные перед использованием должны быть инициированы (у тебя не инициированы k и kmax).
Да, вы уже говорили об этом, я все внимательно читаю. Я сделала инициализацию,но не там, где надо. Программа работала, а как появилась необходимость немного изменить задачу, то уже забыла об этом.

Цитата(Lapp @ 29.05.2010 1:32) *

А, вообще, общее правило таково: ВСЕ переменные должны быть инициированы.

спасибо, теперь я о нем точно не забуду)

Цитата(Lapp @ 29.05.2010 1:32) *

постарайся обращать внимание на то, что говорят - сэкономишь как свое время, так и чужое.

прошу прощения за невнимательность...

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

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

 





- Текстовая версия 29.04.2024 13:52
500Gb HDD, 6Gb RAM, 2 Cores, 7 EUR в месяц — такие хостинги правда бывают
Связь с администрацией: bu_gen в домене octagram.name