Одномерный массив - вроде бы просто? |
1. Заголовок темы должен быть информативным. В противном случае тема удаляется ...
2. Все тексты программ должны помещаться в теги [code=pas] ... [/code], либо быть опубликованы на нашем PasteBin в режиме вечного хранения.
3. Прежде чем задавать вопрос, см. "FAQ", если там не нашли ответа, воспользуйтесь ПОИСКОМ, возможно такую задачу уже решали!
4. Не предлагайте свои решения на других языках, кроме Паскаля (исключение - только с согласия модератора).
5. НЕ используйте форум для личного общения, все что не относится к обсуждению темы - на PM!
6. Одна тема - один вопрос (задача)
7. Проверяйте программы перед тем, как разместить их на форуме!!!
8. Спрашивайте и отвечайте четко и по существу!!!
Одномерный массив - вроде бы просто? |
Petruxa |
Сообщение
#1
|
Гость |
Ребят помогите пожалуйста, второй день голову ломаю, что-то никак не выходит!
Найти три наименьших по значению элемента одномерного массива (равные не учитывать) целых чисел, введеных с клавы. Заменить их на соответствующие им индексы. Спасибо |
Lapp |
Сообщение
#2
|
Уникум Группа: Пользователи Сообщений: 6 823 Пол: Мужской Реальное имя: Лопáрь (Андрей) Репутация: 159 |
Вот такой код, вроде, должен работать (не проверял).
M:=1; { Общее число минимальных элементов } Добавлено через 6 мин. Однако, нет.. Уже нашел ошибку. В ситации 1, 2, 3, 4 - результат будет неверный. Сейчас попробую исправить... -------------------- я - ветер, я северный холодный ветер
я час расставанья, я год возвращенья домой |
klem4 |
Сообщение
#3
|
Perl. Just code it! Группа: Пользователи Сообщений: 4 100 Пол: Мужской Реальное имя: Андрей Репутация: 44 |
const -------------------- perl -e 'print for (map{chr(hex)}("4861707079204E6577205965617221"=~/(.{2})/g)), "\n";'
|
Lapp |
Сообщение
#4
|
Уникум Группа: Пользователи Сообщений: 6 823 Пол: Мужской Реальное имя: Лопáрь (Андрей) Репутация: 159 |
Да, схема Klem4 лучше..
Свою я исправил (надо изначально заполнять массив минимумов максимальным элементом), но мусорить ей не хочу. Но, Клем, у тебя все же есть ошибка.. Примерно такая же, как та, что я у себя исправлял. Нельзя на втором и третьем проходе брать первый номер в качестве начального. -------------------- я - ветер, я северный холодный ветер
я час расставанья, я год возвращенья домой |
Petruxa |
Сообщение
#5
|
Гость |
'klem4' - огромное спасибо, всё работает!
|
Petruxa |
Сообщение
#6
|
Гость |
а может лучше выложить Ваш код?
очень интересно... |
Lapp |
Сообщение
#7
|
Уникум Группа: Пользователи Сообщений: 6 823 Пол: Мужской Реальное имя: Лопáрь (Андрей) Репутация: 159 |
И еще одна: надо подсчитывать количество минимумов и распечатывать не все три элемента массива, а только найденные.
Все же я приведу тут свой исправленный вариант. Он отличается тем, что поиск производится за один проход. (Не проверено!) Max:=a[1]; -------------------- я - ветер, я северный холодный ветер
я час расставанья, я год возвращенья домой |
Гость |
Сообщение
#8
|
Гость |
помоему код klem4 проще и понятней, а особых изысков не нужно, думаю преподаватель не поймет
Все равно ОГРОМНОЕ СПАСИБО ! |
Lapp |
Сообщение
#9
|
Уникум Группа: Пользователи Сообщений: 6 823 Пол: Мужской Реальное имя: Лопáрь (Андрей) Репутация: 159 |
помоему код klem4 проще и понятней, а особых изысков не нужно, думаю преподаватель не поймет Все равно ОГРОМНОЕ СПАСИБО ! Согласен, я выше об этом уже сказал . Правда, в моем тоже можно сделать упрощение: убрать массив минимумов, оставить только индексы (подсмотрено у Клема, сам почему-то не догадался ). Вот так: Max:=1; А что касается сдачи кода с ошибками - твое дело.. Сам исправить не можешь? -------------------- я - ветер, я северный холодный ветер
я час расставанья, я год возвращенья домой |
volvo |
Сообщение
#10
|
Гость |
Я бы сделал вот это (для общего случая, а не только для трех минимумов):
const |
Lapp |
Сообщение
#11
|
Уникум Группа: Пользователи Сообщений: 6 823 Пол: Мужской Реальное имя: Лопáрь (Андрей) Репутация: 159 |
Пока смотрел код volvo, нашел еще одну ошибку у себя..
Ну и, заодно, переделал на случай поиска произвольного количества минимумов (L)
-------------------- я - ветер, я северный холодный ветер
я час расставанья, я год возвращенья домой |
klem4 |
Сообщение
#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 |
Сообщение
#13
|
Уникум Группа: Пользователи Сообщений: 6 823 Пол: Мужской Реальное имя: Лопáрь (Андрей) Репутация: 159 |
Проверь на массиве 1, 2, 3, 4
Твоя прога выдает индексы: 1, 1, 1 Добавлено через 5 мин. Посмотри - я тоже сначала засовывал в минимумы первый элемент. А потом сделал так: сначала нахожу максимальный элемент, и его использую как начальный. В твоем случае нужно примерно так: Max :=1; Или предложи другой выход.. -------------------- я - ветер, я северный холодный ветер
я час расставанья, я год возвращенья домой |
klem4 |
Сообщение
#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 |
Сообщение
#15
|
Уникум Группа: Пользователи Сообщений: 6 823 Пол: Мужской Реальное имя: Лопáрь (Андрей) Репутация: 159 |
Действительно, тогда вот что сочинил: Можно и так Только исправь строчку: while (i < n) and (A[i] <= A[M[j - 1]]) do inc(i); { убрано равентсво } - иначе вылетает за пределы массива, если все его элементы равны. Но все же надо как-то считать, сколько минимумов найдено - иначе не разберешься в результатах (например, проверь на 1, 1, 1, 1).. Или, как volvo, по признаку (-1) .. -------------------- я - ветер, я северный холодный ветер
я час расставанья, я год возвращенья домой |
Текстовая версия | 19.09.2024 20:48 |