Задача о стеках |
1. Заголовок темы должен быть информативным. В противном случае тема удаляется ...
2. Все тексты программ должны помещаться в теги [code=pas] ... [/code], либо быть опубликованы на нашем PasteBin в режиме вечного хранения.
3. Прежде чем задавать вопрос, см. "FAQ", если там не нашли ответа, воспользуйтесь ПОИСКОМ, возможно такую задачу уже решали!
4. Не предлагайте свои решения на других языках, кроме Паскаля (исключение - только с согласия модератора).
5. НЕ используйте форум для личного общения, все что не относится к обсуждению темы - на PM!
6. Одна тема - один вопрос (задача)
7. Проверяйте программы перед тем, как разместить их на форуме!!!
8. Спрашивайте и отвечайте четко и по существу!!!
Задача о стеках |
Murderer |
Сообщение
#1
|
Новичок Группа: Пользователи Сообщений: 14 Пол: Мужской Реальное имя: Арслан Репутация: 0 |
Даны три стека, наполненные натуральными числами и четвертый стек пустой. В четвертый стек поместить три числа, являющиеся максимальными числами в первом, втором и третьем стеке. В четвертом стеке числа расположить в порядке неубывания, а в первых трех стеках порядок расположения оставшихся чисел оставить прежним.
Т.е. я понимаю так: через пробел в программе вводится числа в первый стек и нуль завершает ввод, потом второй и соответственно третий стек. Затем программа выводит три максимальных числа из каждого стека в порядке неубывания. Уже которую неделю парюсь и все безуспешно... Ну не могу понять я эти стеки. |
klem4 |
Сообщение
#2
|
Perl. Just code it! Группа: Пользователи Сообщений: 4 100 Пол: Мужской Реальное имя: Андрей Репутация: 44 |
-------------------- perl -e 'print for (map{chr(hex)}("4861707079204E6577205965617221"=~/(.{2})/g)), "\n";'
|
Murderer |
Сообщение
#3
|
Новичок Группа: Пользователи Сообщений: 14 Пол: Мужской Реальное имя: Арслан Репутация: 0 |
Там то я был... но мозг видать у меня не может понять или не хочет....
Вот алгоритм решения я знаю. Сначала из каждого стека находим максимальный элемент. Например, берем первый элемент и записываем его в max и кидаем в 4-й стек... берем сл. элемент и сравниваем с max... если выбранный меньше max, то кидаем его в 4-й стек, а если больше max, то записываем его в max и кидаем в четвертый стек... тем самым находим максимальные элементы в каждом стеке используя 4-й стек... далее идет этап сортировки 3-х максимальных элементов в порядке неубывания... тут я уже затрудняюсь. наверное тут 4-мя стеками не обойтись... видать 5-й стек подключать надо |
volvo |
Сообщение
#4
|
Гость |
Цитата наверное тут 4-мя стеками не обойтись... видать 5-й стек подключать надо Можно обойтись четырьмя...Сначала проходишь по каждому стеку, и находишь максимум в них (простым перекидыванием данных из одного в другой, и запоминанием количества перекинутых элементов), максимум заносится в четвертый стек... А потом из 4-го выбрасываешь элементы в первые 3 (по одному в каждый), и простыми сравнениями определяешь, какой из элементов минимальный, какой средний, а какой максимальный, и заносишь их обратно в четвертый стек в соответствующем порядке... Как у тебя стеки-то реализованы? |
Murderer |
Сообщение
#5
|
Новичок Группа: Пользователи Сообщений: 14 Пол: Мужской Реальное имя: Арслан Репутация: 0 |
Вот именно что никак. У меня даже кода программного нет. Жалко что подфорум про задачи на заказ закрыли временно, а то я готов деньги отдать за решение данной задачи
|
klem4 |
Сообщение
#6
|
Perl. Just code it! Группа: Пользователи Сообщений: 4 100 Пол: Мужской Реальное имя: Андрей Репутация: 44 |
type -------------------- perl -e 'print for (map{chr(hex)}("4861707079204E6577205965617221"=~/(.{2})/g)), "\n";'
|
volvo |
Сообщение
#7
|
Гость |
klem4, список <> стек ... Вся сложность-то как раз в том, что стеке ты имеешь право только на обращение к первому элементу, все остальные тебе не доступны... Да и про доп. массивы тоже речи не было...
|
klem4 |
Сообщение
#8
|
Perl. Just code it! Группа: Пользователи Сообщений: 4 100 Пол: Мужской Реальное имя: Андрей Репутация: 44 |
Цитата Вся сложность-то как раз в том, что стеке ты имеешь право только на обращение к первому элементу, все остальные тебе не доступны... И соответственно после обращения этот элемент из стека удаляется, верно ? -------------------- perl -e 'print for (map{chr(hex)}("4861707079204E6577205965617221"=~/(.{2})/g)), "\n";'
|
volvo |
Сообщение
#9
|
Гость |
Смотря какую операцию вызывать... Может, удаляется (если вызывать Pop, но тогда ты его имеешь в переменной, и можешь с ним делать все, что захочешь), а может и нет - есть же еще Top, о котором все забывают почему-то (просто просмотр элемента на верхушке стека)...
|
klem4 |
Сообщение
#10
|
Perl. Just code it! Группа: Пользователи Сообщений: 4 100 Пол: Мужской Реальное имя: Андрей Репутация: 44 |
Вот что пока выходит:
Добваляем ф-ю Pop, изменяему процедуру Push на функцию и переписываем FindMax: // заталкивае элемент в стек и возвращает указатель на него -------------------- perl -e 'print for (map{chr(hex)}("4861707079204E6577205965617221"=~/(.{2})/g)), "\n";'
|
volvo |
Сообщение
#11
|
Гость |
Вариант №2:
type |
Murderer |
Сообщение
#12
|
Новичок Группа: Пользователи Сообщений: 14 Пол: Мужской Реальное имя: Арслан Репутация: 0 |
Спасибо вам огромное! Не ожидал. А как сделать так, чтобы в программе числа вводить? А то вылетает программа
|
Murderer |
Сообщение
#13
|
Новичок Группа: Пользователи Сообщений: 14 Пол: Мужской Реальное имя: Арслан Репутация: 0 |
Простите. Просто я начинающий в паскале и сейчас его упорно изучаю. Куда элементы стека вводить? Подскажите пожалуйста!
Сообщение отредактировано: Murderer - |
volvo |
Сообщение
#14
|
Гость |
В той программе, которую я тебе привел, в стек заносятся случайные числа, причем их количество тоже случайно... Если хочешь вводить самостоятельно -
for i := 1 to 3 do begin замени на for i := 1 to 3 do beginи опиши еще переменные k, X рядом с i, j ... А чтобы увидеть результаты выполнения программы, перед последним End. добавь ReadLn ... |
Murderer |
Сообщение
#15
|
Новичок Группа: Пользователи Сообщений: 14 Пол: Мужской Реальное имя: Арслан Репутация: 0 |
|
Murderer |
Сообщение
#16
|
Новичок Группа: Пользователи Сообщений: 14 Пол: Мужской Реальное имя: Арслан Репутация: 0 |
А вот в приведенной программе как сделать так, чтобы не код задавал количество элементов в стеках, а самому в программе вводить нужное тебе количество элементов?
Я попробовал убрать строчку с рандомом где k. У меня не вышло. Друзья тоже не смогли это сдлеать. Сообщение отредактировано: Murderer - |
volvo |
Сообщение
#17
|
Гость |
for i := 1 to 3 do begin? |
Murderer |
Сообщение
#18
|
Новичок Группа: Пользователи Сообщений: 14 Пол: Мужской Реальное имя: Арслан Репутация: 0 |
Да, я видать глупость сморозил. Я хотел просто вместо 10-ки какую-нибудь переменную ввести... Но программа в таком случае не запускалась
Сообщение отредактировано: Murderer - |
Murderer |
Сообщение
#19
|
Новичок Группа: Пользователи Сообщений: 14 Пол: Мужской Реальное имя: Арслан Репутация: 0 |
Все равно не выходит! Что мне исправить, чтобы в программе я сам вводил нужное мне количество элементов?
|
volvo |
Сообщение
#20
|
Гость |
Так... Давай договоримся, ты присоединяешь СВОЮ программу (в смысле, ту, с которой работаешь), а мы ее смотрим... Только в Аттаче, чтобы не надо было ничего копировать никуда, просто откомпилировать и посмотреть, почему и КАК именно она у тебя не работает...
|
Текстовая версия | 21.12.2024 21:30 |