Главная Контакты


  На сайте

  Java, JavaScript
  Документация Perl
  Документация PHP
  Документация ASP
  Новости сайта
  Flash
  Интернет протоколы
  Apache
  Уроки программирования
  Язык программирования C
 


Функции и структура программ


В обратном польском записи, каждый оператор следует за операндами; инфиксний выражение
(1 - 2) * (4 + 5)
будет введено как
1 февраля - 4 5 + *


Скобки лишние; нотация будет недвусмысленным, пока мы знаем сколько операндов каждый оператор ожидает.

Воплощение - простое. Каждый операнд проталкивается в стек; когда поступает оператор, надлежащее число операндов (два - для бинарных операторов) выталкиваются из стека, и применен оператор; результат проталкивается обратно в стек. В примере выше, скажем, 1 и 2 проталкиваются, а затем заменяются следствием их вычитания: -1. Впоследствии, 4 и 5 проталкиваются, и заменяются 9. Результат умножения -1 на 9, равна -9, заменит и их в стеке. Наконец, когда наступает конец строки ввода значения с верхушки стека выталкивается и выводится на экран.

Таким образом, структура программы будет состоять из цикла, который будет выполнять соответствующее действие, в зависимости от оператора или операнда, поступил:
while (следующий оператор или операнд не является концом файла)
if (число)
проштовхуты его
else if (оператор)
вытолкнуть операнды
выполнить действие
проштовнуты результат
else if (красная строка)
вытолкнуть и вывести верхушку стека
else
ошибка

Операции проталкивания и выталкивания из стека простые, но, как только добавляется проверка ошибок и восстановление, код становится слишком длинным, поэтому лучше поместить каждую из них в отдельную функцию, чтобы можно было повторить тот же код течение выполнения программы. Также нужна отдельная функция для извлечения следующего введенного операнда или оператора.

Основным вопросом разработки, к которому мы еще не дошли, является местонахождение стеке, то есть - какие функции имеют прямой доступ к нему? Одно из возможных решений - сохранить его в main, и передавать стек и текущее положение в нем функциям, которые проталкивать и выталкивать его данные. Но main не должна знать о переменных, управляющих стеком, он должен осуществлять только операции проталкивания и выталкивания. Поэтому мы решили сохранить стек и соответствующую информацию во внешних переменных, доступных функциям проталкивания и выталкивания, а не в main.

Другие статьи по теме:

- Типы, операторы и выражения
- Введение в c++
- Внешние переменные и область действия
- Символьные массивы
- Функции и структура программ


Голосование:
Чего Вы хотели бы видеть больше на сайте?

Статей, документации
Скриптов
Программ для вебмастера
Я не знаю



Другие голосования

Обмен кнопочками:



Приглашаем Вас обменяться кнопочками! Обращайтесь к администратору.


Новые статьи:


Наши партнеры:





2006-2024 © SMTI.RU
Главная страница | Связаться с нами