Одномерный массив - вроде бы просто? |
1. Заголовок темы должен быть информативным. В противном случае тема удаляется ...
2. Все тексты программ должны помещаться в теги [code=pas] ... [/code].
3. Прежде чем задавать вопрос, см. "FAQ", если там не нашли ответа, воспользуйтесь ПОИСКОМ, возможно такую задачу уже решали!
4. Не предлагайте свои решения на других языках, кроме Паскаля (исключение - только с согласия модератора).
5. НЕ используйте форум для личного общения, все что не относится к обсуждению темы - на PM!
6. Одна тема - один вопрос (задача)
7. Проверяйте программы перед тем, как разместить их на форуме!!!
8. Спрашивайте и отвечайте четко и по существу!!!
Одномерный массив - вроде бы просто? |
Petruxa |
14.03.2007 9:25
Сообщение
#1
|
Гость |
Ребят помогите пожалуйста, второй день голову ломаю, что-то никак не выходит!
Найти три наименьших по значению элемента одномерного массива (равные не учитывать) целых чисел, введеных с клавы. Заменить их на соответствующие им индексы. Спасибо |
Lapp |
14.03.2007 10:04
Сообщение
#2
|
Уникум Группа: Модераторы Сообщений: 6 823 Пол: Мужской Реальное имя: Лопáрь (Андрей) Репутация: 159 |
Вот такой код, вроде, должен работать (не проверял).
M:=1; { Общее число минимальных элементов } Добавлено через 6 мин. Однако, нет.. Уже нашел ошибку. В ситации 1, 2, 3, 4 - результат будет неверный. Сейчас попробую исправить... -------------------- я - ветер, я северный холодный ветер
я час расставанья, я год возвращенья домой |
klem4 |
14.03.2007 10:14
Сообщение
#3
|
Perl. Just code it! Группа: Модераторы Сообщений: 4 100 Пол: Мужской Реальное имя: Андрей Репутация: 44 |
const -------------------- perl -e 'print for (map{chr(hex)}("4861707079204E6577205965617221"=~/(.{2})/g)), "\n";'
|
Lapp |
14.03.2007 10:33
Сообщение
#4
|
Уникум Группа: Модераторы Сообщений: 6 823 Пол: Мужской Реальное имя: Лопáрь (Андрей) Репутация: 159 |
Да, схема Klem4 лучше..
Свою я исправил (надо изначально заполнять массив минимумов максимальным элементом), но мусорить ей не хочу. Но, Клем, у тебя все же есть ошибка.. Примерно такая же, как та, что я у себя исправлял. Нельзя на втором и третьем проходе брать первый номер в качестве начального. -------------------- я - ветер, я северный холодный ветер
я час расставанья, я год возвращенья домой |
Petruxa |
14.03.2007 10:36
Сообщение
#5
|
Гость |
'klem4' - огромное спасибо, всё работает!
|
Petruxa |
14.03.2007 10:38
Сообщение
#6
|
Гость |
а может лучше выложить Ваш код?
очень интересно... |
Lapp |
14.03.2007 10:40
Сообщение
#7
|
Уникум Группа: Модераторы Сообщений: 6 823 Пол: Мужской Реальное имя: Лопáрь (Андрей) Репутация: 159 |
И еще одна: надо подсчитывать количество минимумов и распечатывать не все три элемента массива, а только найденные.
Все же я приведу тут свой исправленный вариант. Он отличается тем, что поиск производится за один проход. (Не проверено!) Max:=a[1]; -------------------- я - ветер, я северный холодный ветер
я час расставанья, я год возвращенья домой |
Гость |
14.03.2007 11:32
Сообщение
#8
|
Гость |
помоему код klem4 проще и понятней, а особых изысков не нужно, думаю преподаватель не поймет
Все равно ОГРОМНОЕ СПАСИБО ! |
Lapp |
14.03.2007 11:52
Сообщение
#9
|
Уникум Группа: Модераторы Сообщений: 6 823 Пол: Мужской Реальное имя: Лопáрь (Андрей) Репутация: 159 |
помоему код klem4 проще и понятней, а особых изысков не нужно, думаю преподаватель не поймет Все равно ОГРОМНОЕ СПАСИБО ! Согласен, я выше об этом уже сказал . Правда, в моем тоже можно сделать упрощение: убрать массив минимумов, оставить только индексы (подсмотрено у Клема, сам почему-то не догадался ). Вот так: Max:=1; А что касается сдачи кода с ошибками - твое дело.. Сам исправить не можешь? -------------------- я - ветер, я северный холодный ветер
я час расставанья, я год возвращенья домой |
volvo |
14.03.2007 12:15
Сообщение
#10
|
Гость |
Я бы сделал вот это (для общего случая, а не только для трех минимумов):
const |
Lapp |
14.03.2007 12:28
Сообщение
#11
|
Уникум Группа: Модераторы Сообщений: 6 823 Пол: Мужской Реальное имя: Лопáрь (Андрей) Репутация: 159 |
Пока смотрел код volvo, нашел еще одну ошибку у себя..
Ну и, заодно, переделал на случай поиска произвольного количества минимумов (L)
-------------------- я - ветер, я северный холодный ветер
я час расставанья, я год возвращенья домой |
klem4 |
14.03.2007 12:39
Сообщение
#12
|
Perl. Just code it! Группа: Модераторы Сообщений: 4 100 Пол: Мужской Реальное имя: Андрей Репутация: 44 |
Цитата Но, Клем, у тебя все же есть ошибка.. yes2.gif Примерно такая же, как та, что я у себя исправлял. Нельзя на втором и третьем проходе брать первый номер в качестве начального. У меня то учитывается: Цитата if (A[i] < A[min]) and ((j = 1) or (A[i] > A[M[j - 1]])) then Единственное можно еще опставить {$B-} Или о чем ты ? Поясни, в каком случае будет ошибка. -------------------- perl -e 'print for (map{chr(hex)}("4861707079204E6577205965617221"=~/(.{2})/g)), "\n";'
|
Lapp |
14.03.2007 12:46
Сообщение
#13
|
Уникум Группа: Модераторы Сообщений: 6 823 Пол: Мужской Реальное имя: Лопáрь (Андрей) Репутация: 159 |
Проверь на массиве 1, 2, 3, 4
Твоя прога выдает индексы: 1, 1, 1 Добавлено через 5 мин. Посмотри - я тоже сначала засовывал в минимумы первый элемент. А потом сделал так: сначала нахожу максимальный элемент, и его использую как начальный. В твоем случае нужно примерно так: Max :=1; Или предложи другой выход.. -------------------- я - ветер, я северный холодный ветер
я час расставанья, я год возвращенья домой |
klem4 |
14.03.2007 13:09
Сообщение
#14
|
Perl. Just code it! Группа: Модераторы Сообщений: 4 100 Пол: Мужской Реальное имя: Андрей Репутация: 44 |
Действительно, тогда вот что сочинил:
for j := 1 to 3 do begin -------------------- perl -e 'print for (map{chr(hex)}("4861707079204E6577205965617221"=~/(.{2})/g)), "\n";'
|
Lapp |
14.03.2007 13:44
Сообщение
#15
|
Уникум Группа: Модераторы Сообщений: 6 823 Пол: Мужской Реальное имя: Лопáрь (Андрей) Репутация: 159 |
Действительно, тогда вот что сочинил: Можно и так Только исправь строчку: while (i < n) and (A[i] <= A[M[j - 1]]) do inc(i); { убрано равентсво } - иначе вылетает за пределы массива, если все его элементы равны. Но все же надо как-то считать, сколько минимумов найдено - иначе не разберешься в результатах (например, проверь на 1, 1, 1, 1).. Или, как volvo, по признаку (-1) .. -------------------- я - ветер, я северный холодный ветер
я час расставанья, я год возвращенья домой |
Текстовая версия | 21.05.2024 21:38 |