![]() |
1. Заголовок темы должен быть информативным. В противном случае тема удаляется ...
2. Все тексты программ должны помещаться в теги [code=pas] ... [/code].
3. Прежде чем задавать вопрос, см. "FAQ", если там не нашли ответа, воспользуйтесь ПОИСКОМ, возможно такую задачу уже решали!
4. Не предлагайте свои решения на других языках, кроме Паскаля (исключение - только с согласия модератора).
5. НЕ используйте форум для личного общения, все что не относится к обсуждению темы - на PM!
6. Одна тема - один вопрос (задача)
7. Проверяйте программы перед тем, как разместить их на форуме!!!
8. Спрашивайте и отвечайте четко и по существу!!!
![]() ![]() |
![]() |
dog |
![]()
Сообщение
#1
|
Новичок ![]() Группа: Пользователи Сообщений: 17 Пол: Женский Репутация: ![]() ![]() ![]() |
1. Дан двумерный массив A [NxM] , элементы которого меняются по определенному закону. Определить, есть ли в массиве элемент со значением Q.
Программа работает идеально, ищет элементы выводит их индексы. Но когда задаешь элемент, которого нет в массиве программа зависает. Сообщение отредактировано: dog - 1.04.2010 4:06 |
Lapp |
![]()
Сообщение
#2
|
![]() Уникум ![]() ![]() ![]() ![]() ![]() ![]() ![]() Группа: Модераторы Сообщений: 6 823 Пол: Мужской Реальное имя: Лопáрь (Андрей) Репутация: ![]() ![]() ![]() |
Программа работает идеально, ищет элементы выводит их индексы. Сама себя не похвалишь - кто еще похвалит? ![]() Проограмма работает неправильно и при этом выходит за пределы массива. НИКОГДА не отключай Range Check до полного окончания отладки - и будет тебе ЩАСТЬЕ )). А также желательно не путать буковку i с буковкой j (хоть они и похожи)). А еще - инициализацию j нужно внести внутрь цикла по i. Короче, примерно так: i:=1; Последнее: условие на j при печати - лишнее. Вот так: IF i >n THEN {вывод на печать найденного элемента или сообщение об отсутствии элемента} Успехов тебе )). PS да хорошая у тебя прога, хорошая )) -------------------- я - ветер, я северный холодный ветер
я час расставанья, я год возвращенья домой |
dog |
![]()
Сообщение
#3
|
Новичок ![]() Группа: Пользователи Сообщений: 17 Пол: Женский Репутация: ![]() ![]() ![]() |
Спасибо огромное. Вот что значит свежий взгляд.
И еще один вопросик. Можно ли эту программу усовершенствовать, чтобы она работала не по линейному поиску а по бинарному поиску. В методичке только алгоритм бинарного поиска в одномерном массиве там ничего сложного, а по двумерному массиву ничего. Подскажите хоть алгоритм и смысл как проводить бинарный поиск в двумерном массиве. Программу целиком писать не надо просто объясните на каком-нибудь примере как делать бинарный поиск в условиях двумерного массива. Спасибо. |
volvo |
![]()
Сообщение
#4
|
Гость ![]() |
Цитата просто объясните на каком-нибудь примере как делать бинарный поиск в условиях двумерного массива. А точно так же, как и в условиях одномерного массива. Дело все в том, что при наличии двумерной матрицы мы в любое время и для любого элемента можем получить смещение этого элемента от начала массива, правда? Нам же известны номер строки и номер столбца, а также число элементов в строке. Обратное преобразование (из смещения относительно начала в номера строки и столбца) - тоже делается очень просто. Это все, что нужно.Так что никакой разницы между бинарным поиском в одно- двух- и вообще n-мерном массиве нет. Если у тебя есть программа, осуществляющая бинарный поиск в одномерном массиве, ее очень просто приспособить к любой размерности. Единственное условие - массив должен быть отсортирован, это необходимое условие при котором работает бинарный поиск. Я не рассматриваю хаки, при которых описывается одномерный массив, расположение которого совпадает с расположением многомерного, и весь поиск осуществляется именно в одномерном массиве. Это не совсем честно, хотя многие именно этим способом и пользуются. |
dog |
![]()
Сообщение
#5
|
Новичок ![]() Группа: Пользователи Сообщений: 17 Пол: Женский Репутация: ![]() ![]() ![]() |
Спасибо.
Ну вот допустим у нас есть классический алгоритм бинарного поиска в одномерном массиве:
Тут все более чем понятно. Пробуем его модифицировать под двумерный массив
Сообщение отредактировано: dog - 3.04.2010 16:56 |
volvo |
![]()
Сообщение
#6
|
Гость ![]() |
Я ж написал, что надо делать в случае двумерного массива... Смотри: допустим, у нас матрица, описанная так:
const , то есть матрица, состоящая из M строк по N элементов в каждой. Вот смотри, что происходит с твоим же кодом, чтобы заставить его работать: b := 1; { индекс первого элемента массива }Очень много изменений? |
Lapp |
![]()
Сообщение
#7
|
![]() Уникум ![]() ![]() ![]() ![]() ![]() ![]() ![]() Группа: Модераторы Сообщений: 6 823 Пол: Мужской Реальное имя: Лопáрь (Андрей) Репутация: ![]() ![]() ![]() |
Спасибо огромное. Вот что значит свежий взгляд. Пожалуйста ![]() программу усовершенствовать, чтобы она работала не по линейному поиску а по бинарному поиску. В методичке только алгоритм бинарного поиска в одномерном массиве там ничего сложного, а по двумерному массиву ничего. Подскажите хоть алгоритм и смысл как проводить бинарный поиск в двумерном массиве. dog, твой вопрос не определен.Как сказал уже volvo, для того, чтобы использовать бинарный поиск (БП), массив должен быть упорядочен. Упорядочить одномерный массив - дело нехитрое. С упорядочиванием же двумерного ситуация в корне иная. Чем отличается отличается прямая от плоскости или от трехмерного пространства? В частности, тем, что прямую упорядочить - не проблема, а вот упорядочить плоскость.. Ну, нельзя сказать, какая точка больше - A или B! Я не буду говорить, что этого сделать совершенно невозможно (например, можно опираться на биекцию прямой в плоскость), но для этого нужно ввести дополнительное отношение (отношение порядка) и при этом будет невозможно сохраненить "геометрию": две геометрически близкие точки будут далеки в смысле нашего упорядочивания, и наоборот. Конечно, двумерный массив - это не плоскость. Хотя бы потому, что он конечен. Но все же его упорядочивание остается неоднозначным. volvo, например, опирался на упорядочение по строкам, но кто сказал, что this is the case? Массив может быть упорядочем по столбцам (не вижу никакого преимущества строк перед столбцами в смысле задачи) или, скажем, по диагоналям. Или по спирали.. Вывод такой. Упорядочивание - прерогатива одномерной структуры. Упорядочить двумерное образование - означает сначала спроектировать на одномерное, а потом упорядочивать уже в нем. Именно поэтому в твоей методичке отсутствовала инфа по двумерным массивам, думаю. Вопрос не технический, вопрос принципиальный. Его решение таково: определить способ упорядочивания, сделать отображение двумерной структуры в одномерную - и упорядочить так, как сказано в методичке. А общего бинарного поиска (независимого от способа упорядочивания) просто не существует. Потому не существует его описания. И я бы не рекомендовал думать, что способ упорядочивания по строкам - какой-то выделенный, что он типа дефолтный, обычный и т.п. Обычного выделенного дефолтного способа не существует ВООБЩЕ. Не подумай, что я придираюсь, это действительно важно понять. собака, ты извини за мудреное изложение.. Если что остается неясно - спрашивай ![]() -------------------- я - ветер, я северный холодный ветер
я час расставанья, я год возвращенья домой |
![]() ![]() |
![]() |
Текстовая версия | 21.07.2025 10:07 |