![]() |
1. Заголовок темы должен быть информативным. В противном случае тема удаляется ...
2. Все тексты программ должны помещаться в теги [code=pas] ... [/code].
3. Прежде чем задавать вопрос, см. "FAQ", если там не нашли ответа, воспользуйтесь ПОИСКОМ, возможно такую задачу уже решали!
4. Не предлагайте свои решения на других языках, кроме Паскаля (исключение - только с согласия модератора).
5. НЕ используйте форум для личного общения, все что не относится к обсуждению темы - на PM!
6. Одна тема - один вопрос (задача)
7. Проверяйте программы перед тем, как разместить их на форуме!!!
8. Спрашивайте и отвечайте четко и по существу!!!
![]() |
Cool_abc |
![]()
Сообщение
#1
|
Группа: Пользователи Сообщений: 5 Пол: Мужской Реальное имя: Кирилл Репутация: ![]() ![]() ![]() |
Текст задачи:
Имеется N населенных пунктов, пронумерованных от 1 до N (N = 10). Некоторые пары пунктов соединены дорогами. Определить, можно ли по дорогам попасть из пункта 1 в N-й пункт. Информация о дорогах задается в виде последовательности пар чисел i и j (i < j), указывающих что i-й и j-й пункты соединены дорогой. Признак конца этой последовательности – пара нулей. Из условия я вынес 1 из основных положений, что по кругу между пунктами мы ходить не будем, т.е. например 1-2-3-5-6-1 (- догора), задача после этого сущаственно упростилась:) написал, но не работает прога, помогите плиз найти ошибку.. или мот я в корне был не прав.. наставьте на путь правильный Мой код:
первый проход вынес в основную программу, т.к. нужно было сделать 1 проход по всем x(i,1)=1, т.е. тем. у которых первый пункт - наш начальный и в процедуре в стоке "if x[A,2]=x[i,1] then .." не смог бы подставить вместо x[i,1] единицу |
![]() ![]() |
TarasBer |
![]()
Сообщение
#2
|
![]() Злостный любитель ![]() ![]() ![]() ![]() ![]() Группа: Пользователи Сообщений: 1 755 Пол: Мужской Репутация: ![]() ![]() ![]() |
> раньше у меня схожее с этим заменялось введением ещё 1 переменной булевского типа и заменой For на While с 2 ограничениями)
Одно из них - когда счётчик доходит до конца, другое - когда мы нашли элемент, удовлетворяющий условию? Так
Я одно время увлекался такими конструкциями типа b := b or a, но в них проще запутаться, например, легко забыть лишнюю скобку вокруг a, если а сложное выражение, типа c and d (c и d тоже состоят из кучи подвыражений и окружены тройными скобками по бокам), то вместо b := b or (c and d) получается по смыслу b := (b or c) and d. После того, как у меня один вагон стал проезжать сквозь другой, я отказался от таких конструкций. Оператор |= тут бы пригодился, но он всё равно не даст возможности выхода при достижении условия. А если a - простое выражение, то запись b := b or a всё так же генерирует ветвления, причём делает это ещё хуже, чем при явной форме if a then b := true; Вот на примере D7: Хотя да, разницы тут, если всмотреться, нет, просто если b уже достигнуто, то надо выходить и не делать каждый раз новых проверок. Короче, так делать имеет смысл только для компактности исходного кода. Сообщение отредактировано: TarasBer - 26.04.2010 16:12 Эскизы прикрепленных изображений ![]() -------------------- |
![]() ![]() |
![]() |
Текстовая версия | 20.07.2025 18:46 |