| Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
| Форум программистов > Object Pascal: кроссплатформенные технологии > Упорядочить массив по возрастанию без сортировки |
| Автор: Alexey91 6.11.2008, 15:21 | ||
| Прога компилируется, но не выводится новый массив Е (прога виснет). Не понимаю из-за чего.
|
| Автор: Alexey91 6.11.2008, 16:53 |
| И что вы предлагаете? Мы же должны прекратить цикл в том случае, если не будет сделано ни одной операции сравнения. Если в одной части условие сравнения не выполняется, то в другой оно будет выполнено точно. Поэтому я поставил p двух местах, чтобы зафиксировать, что оно произошло. Если мы даже уберем p с одной ветки от этого программа правильно работать не будет |
| Автор: volvo877 6.11.2008, 17:43 | ||||
Я бы тебе предложил сначала сделать корректное упорядочивание массива D, потому что не всегда он упорядочен по возрастанию... Вот, например, что мне сказала однажды твоя программа:
А уж как добьешься того ,что и C и D нормально упорядочены - то "сливать" оба массива:
|
| Автор: Alexey91 6.11.2008, 18:25 |
| Volvo877 Спасибо большое, я бы плюс бы поставил, но не могу Массивы я отсортировал (поставил begin'ы) Только непонятно, а почему мой цикл сортировки не работает? Я так на бумажке цикл проэмулировал, работает.. не понятно. Переменная p до последнего момента равняется 1, поэтому цикл не закрывается, но когда нет никаких операций сравнения p=0 и все ок, почему тут в проге виснет? |
| Автор: volvo877 6.11.2008, 18:44 |
| Потому что в какой-то момент X (или Y) становится больше, чем N, и сравнение с C[X] (или D[Y]) перестает иметь смысл... |
| Автор: Alexey91 6.11.2008, 20:17 | ||
Так Z зависит от X и Y. Сколько было операций сравнение, такое численное значение Z. Не могу представить ситуацию, когда Z будет больше n*2. Отладчик уже раз 10 запускал, еще такого не было. Кстати, почему переменная e[z] в отладчике постоянно равна 0? |
| Автор: mr.Anderson 6.11.2008, 20:42 |
| Alexey91, брейки следят за X и Y, а за Z следит цикл. |
| Автор: Alexey91 6.11.2008, 21:00 |
| Мое сообщение оказалось выше вашего ответа |
| Автор: volvo877 6.11.2008, 21:41 | ||
Потому что 1) Z - это позиция, куда БУДЕТ записываться очередное значение. Понимаешь, не записалось, а только будет, естественно, что записываться очередной элемент должен в пустую ячейку. 2) отладчик работает ПОСТРОЧНО. Поскольку у тебя (вернее, у меня) и изменение e[Z] и изменение Z - в одной строке, то отловить тот момент, когда e[Z] не ноль, ты не можешь... Разбей строку так:
А этого и не должно быть... Просто надо задать граничное условие для выхода из цикла. И вместо того, чтобы задавать Until False я предпочитаю сделать Until Z >= 2*n |
| Автор: Alexey91 6.11.2008, 21:57 |
| |