![]() |
|
|
Регистрация Восстановить пароль |
Регистрация | Задать вопрос |
Заплачу за решение |
Новые сообщения |
Сообщения за день |
Расширенный поиск |
Правила |
Всё прочитано |
![]() |
|
Опции темы | Поиск в этой теме |
![]() |
#1 |
Регистрация: 01.04.2011
Сообщений: 7
|
![]()
Помогите, пожалуйста в решении задачи на использование системного стека:
"Произвести проверку соблюдения баланса скобок вида '(', ')' в арифметическом выражении. Использовать системный стек." Решить не получается, а сдать необходимо срочно. |
![]() |
![]() |
![]() |
#2 |
Форумчанин
Регистрация: 11.08.2009
Сообщений: 433
|
![]()
1. Наработки?
2. Или фриланс. |
![]() |
![]() |
![]() |
#3 |
Регистрация: 01.04.2011
Сообщений: 7
|
![]()
Усть алгоритм на Паскале почти такой же задачи. Но как ее в СИ сделать?
"Описание алгоритма задачи имеет следующую последовательность действий: 1. Подготовка экрана; 2. Ввод строки для анализа; 3. Анализ полученной строки процедурой proverka; 4. Выдача сообщений о соблюдении баланса скобок; 5. Запрос новой задачи, если да - возврат к п.1; 6. Выход в систему." Код:
|
![]() |
![]() |
![]() |
#4 |
Регистрация: 01.04.2011
Сообщений: 7
|
![]()
"Процедуpа proverka анализиpует литеpы введенной стpоки, занося в стек с помощью пpоцедуpы push(a) пpинятые коды соответствующих откpывающих скобок: a=1 - для скобок вида '[' и a=2 - для скобок вида '('. Пpи появлении закpывающих скобок пpоизводится выбоpка из стека с помощью пpоцедуpы pop. Пpи этом анализиpуются возможные ситуации, для каждой из котоpой фоpмиpуетcя одно из пpинятых сообщений w1-w6. В пpоцедуpе PROVERKA используются только глобальные пеpеменные.
Пpи pаботе с системным стеком пpи вызове пpоцедуpы PUSH в него будут занесены следующие данные: 2 байта паpаметpа, котоpые необходимо оставить в стеке и 6 байт системной инфоpмации, пpед¬ставляющей собой код возвpата из пpоцедуpы и содеpжимое pегистpа BP. Обычное завеpшение пpоцедуpы pеализуется опеpатоpом end, котоpый тpанслятоpом кодиpуется как последовательность 2 команд: pop bp и retf 2. Пpи этом стек полностью освобождается от содеpжимого, опpеделяемого данной пpоцедуpой. Чтобы паpаметp оставить в стеке необходимо восстановить содеpжимое pегистpа BP и осуществить возвpат, не убиpая паpаметp из стека, что и делается с помощью ассемблеpной вставки. Пpи этом команды pop bp и retf 2, закодиpованные в стpоке end {push} будут пpоигноpиpованы. Для выбоpки значения, уже сохpаненного в системном стеке, пpо¬цедуpа pop, котоpая пpи вызове помещает в стек 6 байт, адpесуясь с помощью pегистpа BP, пеpеносит в память выбиpаемое из стека значение. После этого восстанавливается pегистp BP и пpоисходит возвpат из пpоцедуpы с удалением 4 байт кода возвpата и 2 байт выбpанного паpаметpа. Пpи этом команды pop bp и retf, закодиpованные в стpоке end {pop} будут пpоигноpиpованы." |
![]() |
![]() |
![]() |
#5 |
Форумчанин
Регистрация: 11.08.2009
Сообщений: 433
|
![]()
Не знаю, где вы это взяли, но топик по задаче на плюсах, вообще-то, а не по задаче на паскале. Если у вас есть алгоритм, значит есть решение задачи.
Все переводы с одного языка на другой это тоже фриланс. |
![]() |
![]() |
![]() |
![]() |
||||
Тема | Автор | Раздел | Ответов | Последнее сообщение |
Стеки в Си | Edemchik | Помощь студентам | 1 | 01.05.2011 21:51 |
стеки | ANGELO4EK | Паскаль, Turbo Pascal, PascalABC.NET | 1 | 16.03.2011 08:20 |
Стеки на С++ | innaa639 | Помощь студентам | 2 | 14.10.2010 10:05 |
Pascal. задача на стеки | Avel1989 | Помощь студентам | 2 | 30.11.2009 00:25 |
Стеки | olli | Общие вопросы C/C++ | 7 | 13.11.2009 15:27 |