![]() |
1. Заголовок темы должен быть информативным. В противном случае тема удаляется ...
2. Все тексты программ должны помещаться в теги [code=pas] ... [/code].
3. Прежде чем задавать вопрос, см. "FAQ", если там не нашли ответа, воспользуйтесь ПОИСКОМ, возможно такую задачу уже решали!
4. Не предлагайте свои решения на других языках, кроме Паскаля (исключение - только с согласия модератора).
5. НЕ используйте форум для личного общения, все что не относится к обсуждению темы - на PM!
6. Одна тема - один вопрос (задача)
7. Проверяйте программы перед тем, как разместить их на форуме!!!
8. Спрашивайте и отвечайте четко и по существу!!!
![]() |
Юлия92 |
![]()
Сообщение
#1
|
![]() Новичок ![]() Группа: Пользователи Сообщений: 21 Пол: Женский Реальное имя: Джули Репутация: ![]() ![]() ![]() |
Написала программу по псевдокоду...Но результат работы процедур не выдается....Не пойму в чем проблема...Пседокод прилагаю..заранее благодарю за помощь))
![]() -------------------- ДЖУЛИ
|
![]() ![]() |
Федосеев Павел |
![]()
Сообщение
#2
|
Бывалый ![]() ![]() ![]() Группа: Пользователи Сообщений: 298 Пол: Мужской Реальное имя: Федосеев Павел Репутация: ![]() ![]() ![]() |
1. Обрати внимание, что в этой задаче граф предлагается задавать не матрицей смежности, а списками смежности. Соответственно при инициализации в цикле m:=m+n*n; - совсем ахинея, не считая ввода матрицы смежностей. Хотя подойдёт и матрица, но в методичке предлагается научиться работать со списками.
2. Кроме того, masQ - это не массив чисел, а массив стеков. И в процедуре SAVE операция masQ[nZ]<=i означает занесение числа i в вершину стека (стека под номером nZ в массиве стеков masQ), а не примитивное присвоение. Соответственно и вывод на экран из стека и массива стеков будет иным. 3. В SAVE строка с номером 5 вне тела цикла. Внимательно прочти теорию. Нечестно манипулировать форумчанами выдавая механический перевод псевдокода за попытку разобраться в теме. Хотя несомненно много лучше постановки задачи с последующим "разрешением" сделать всё "под ключ". Предвидя вопрос о стеке... Стек можно реализовать в виде массива [0..max]. В [0] элементе будет храниться глубина стека, а начиная с 1-го элемента будет располагаться сам стек. Соответственно, массив стеков становится двумерным массивом. Занесение в стек номер nZ числа i будет Inc(masQ[nZ][0]); И лучше всего эти строки оформить процедурой. Или же стек можно реализовать в виде динамической структуры. Сообщение отредактировано: Федосеев Павел - 6.05.2012 22:04 |
Юлия92 |
![]()
Сообщение
#3
|
![]() Новичок ![]() Группа: Пользователи Сообщений: 21 Пол: Женский Реальное имя: Джули Репутация: ![]() ![]() ![]() |
спасибо большое за помощь,просто мне преподаватель дал книгу эту и сказала следовать тупо коду,а на деле оказалось не все так просто
-------------------- ДЖУЛИ
|
Федосеев Павел |
![]()
Сообщение
#4
|
Бывалый ![]() ![]() ![]() Группа: Пользователи Сообщений: 298 Пол: Мужской Реальное имя: Федосеев Павел Репутация: ![]() ![]() ![]() |
Если непонятно - задавай вопросы. Конечно, если возможно - преподавателю, он увидит твою работу. Если в методичке слишком заумно, задай поиск в сети.
вот ссылки навскидку "http://rain.ifmo.ru/cat/view.php/theory/graph-circuits-cuts/euler-2004", "http://www.intuit.ru/department/algorithms/gaa/7/3.html" |
Юлия92 |
![]()
Сообщение
#5
|
![]() Новичок ![]() Группа: Пользователи Сообщений: 21 Пол: Женский Реальное имя: Джули Репутация: ![]() ![]() ![]() |
Если быть честной непонятно мне вообще в процедуре Save c 3-5 строчку как оформить это...
-------------------- ДЖУЛИ
|
Федосеев Павел |
![]()
Сообщение
#6
|
Бывалый ![]() ![]() ![]() Группа: Пользователи Сообщений: 298 Пол: Мужской Реальное имя: Федосеев Павел Репутация: ![]() ![]() ![]() |
Я вижу так:
procedure Save(i, j, nZ : integer); Массив стеков я организовал по-детски - по принципу массива строк String. Каждый стек это массив, у которого в элементе с индексом [0] находится глубина стека (его длина): type Это не самый лучший способ, но для упрощения реализации сойдёт. Сообщение отредактировано: Федосеев Павел - 9.05.2012 14:03 |
Юлия92 |
![]()
Сообщение
#7
|
![]() Новичок ![]() Группа: Пользователи Сообщений: 21 Пол: Женский Реальное имя: Джули Репутация: ![]() ![]() ![]() |
спасибо за помощь...как отблагодарить не знаю...
![]() -------------------- ДЖУЛИ
|
Федосеев Павел |
![]()
Сообщение
#8
|
Бывалый ![]() ![]() ![]() Группа: Пользователи Сообщений: 298 Пол: Мужской Реальное имя: Федосеев Павел Репутация: ![]() ![]() ![]() |
Недорого - 3 месяца активной помощи (ответов) страждущим на форуме (по согласованию с администрацией можно и без кандалов) или старушку через дорогу перевести
![]() |
Юлия92 |
![]()
Сообщение
#9
|
![]() Новичок ![]() Группа: Пользователи Сообщений: 21 Пол: Женский Реальное имя: Джули Репутация: ![]() ![]() ![]() |
Ой этим я и так занимаюсь....помогаю бедным и обездоленным....
![]() -------------------- ДЖУЛИ
|
Юлия92 |
![]()
Сообщение
#10
|
![]() Новичок ![]() Группа: Пользователи Сообщений: 21 Пол: Женский Реальное имя: Джули Репутация: ![]() ![]() ![]() |
Прошу прощения за мою тупость ...но есть проблема теперь и с выводом результата,хотя ошибок в процедурах вроде нет -------------------- ДЖУЛИ
|
Федосеев Павел |
![]()
Сообщение
#11
|
Бывалый ![]() ![]() ![]() Группа: Пользователи Сообщений: 298 Пол: Мужской Реальное имя: Федосеев Павел Репутация: ![]() ![]() ![]() |
masQ? Он представляет из себя массив от 1 до nZ - первый (внешний цикл от 1 до nZ), каждый стек представляет из себя массив переменной длины, в котором элемент с нулевым индексом содержит длину стека (внутренний цикл от 1 до masQ[i][0]):
writeln('nZ: ', nZ); А можно замечания к коду? - переменная n вводится, а чуть ниже ей присваивается 0. - переменной m присваивается не то значение. смотри внимательно псевдокод - стек странно инициализируется. достаточно обнулить длины каждого стека for i:=1 to m-n+1 do masQ[i][0]:=0; - из основной программы cicle вызывается один раз с параметром 1 (см. псевдокод) Это из того, что бросается в глаза. Далее, когда я попытался несколько дней назад отладить собственный вариант псевдокода, по ходу выполнения программы возникали исключения вида "полез в чужую память". Пришлось дополнить условия в save. Это увидишь отладчиком включив опци проверки диапазонов {$R+, Q+}. Плюс к этому, в circle формировалась пара-тройка "левых" циклов. Также лечится усложнением условия сохранения вновь найденного цикла. Сообщение отредактировано: Федосеев Павел - 10.05.2012 19:58 |
Юлия92 |
![]()
Сообщение
#12
|
![]() Новичок ![]() Группа: Пользователи Сообщений: 21 Пол: Женский Реальное имя: Джули Репутация: ![]() ![]() ![]() |
Павел это снова я с вопросами...))))Почему n потом обнуляется??сначала я ее ввожу для заполнения матрицы смежности....а остальное по псевдокоду...вот с оформлением m я сама не очень уверена....,но в 7 строке...получается что если m-нечетное,то идет присваение целому ,десятичного числа..А так оно все работает запускается,но процедуры не выводят никаких результатов,а теория никак не помогает((((
-------------------- ДЖУЛИ
|
Федосеев Павел |
![]()
Сообщение
#13
|
Бывалый ![]() ![]() ![]() Группа: Пользователи Сообщений: 298 Пол: Мужской Реальное имя: Федосеев Павел Репутация: ![]() ![]() ![]() |
Юль, ты делаешь все механически, не вникая.
Мне проще отдать тебе готовый код, чем объяснять. В архиве две папки. В одной работающий код по псевдокоду, с учётом примечания, найденного в книге Окулова о том, что к сохранению цикла переходим не только когда j вершина не предыдущая для i, но и когда при построении дерева поиска в глубину i вершина встретилась после j (т.е. найдено обратное ребро - ведущее вверх). Цитата Поиск в глубину является естественным подходом, используемым для нахождения фундаментальных циклов. Строится каркас, а каждое обратное ребро порождает цикл относительно этого каркаса. Для вывода циклов необходимо хранить порядок обхода графа при поиске в глубину (номера вершин) — массив St, а для определения обратных ребер вершины следует «метить» (массив Gnum) в той очередности, в которой они просматриваются. Если для ребра <v,j> оказывается, что значение метки вершины с номером j меньше, чем значение метки вершины с номером i, то ребро обратное и найден цикл. Во второй папке программа с аналогичной функциональностью, встретившаяся мне на одном из форумов. Топикстартер утверждал, что она из книги Иванов Б.Н. "Дискретная математика. Алгоритмы и программы." Она мне просто понравилась. В обоих случаях я использовал пример из твоей методички. Кстати, в интернете она встречается в pdf и с внесёнными исправленями. Сообщение отредактировано: Федосеев Павел - 16.05.2012 19:53 Прикрепленные файлы ![]() |
Юлия92 |
![]()
Сообщение
#14
|
![]() Новичок ![]() Группа: Пользователи Сообщений: 21 Пол: Женский Реальное имя: Джули Репутация: ![]() ![]() ![]() |
Спасибо тебе большое,но я вникала я перерыла все учебники по этой теме...просто сложно когда препод по практике ничего толком на твои вопросы не отвечает...мне самой легче не тупо сделать а понять,а чтобы понять надо чтобы тебе на примере показали хотя бы что -то...чего у нас нет...
-------------------- ДЖУЛИ
|
![]() ![]() |
![]() |
Текстовая версия | 20.07.2025 14:11 |