Олимпиады по информатике (ХМАО - Югра)

   
 
Югорский НИИ ИТ, Югорский ФМЛ
Логин:   Пароль:    
 
   
 
Новости
О проекте
Регистрация
Гостевая книга
Форум
Архив задач
Состояние системы
Олимпиады
Работа в системе
Рейтинг
Новичкам
Методическое пособие
Дистанционное обучение
Дистрибутивы
Ссылки

















Арифметическое выражение

(Время: 1 сек. Память: 16 Мб Сложность: 71%)

Вычисление арифметического выражения – классическая задача, решать которую можно по-разному. Можно использовать алгоритм перевода выражения в постфиксную форму, а затем производить вычисление данного выражения. Но в данном случае придется использовать стек и обрабатывать его вручную. Более просто использовать рекурсивный алгоритм, где стек рекурсии заменит вышеописанный стек. Опишем суть функции Count(s), которая будет возвращать значение арифметического выражения s.

Первоначально следует удалить из s лишние пробелы и затем удалить лишние соответствующие друг другу скобки, расположенные в начале и конце строки. Далее следует справа налево в строке найти в некоторой k-й позиции операцию «+», не находящуюся внутри скобок и разбить выражение на два выражения, которые можно вычислить рекурсивно: count(s) = count(s[1..k-1]) + count(s[k+1..length(s)]). После чего (если «+» не найден) следует повторить данный процесс для операций «-», «*», «/» именно в данном порядке.

Если же в рассматриваемом таким образом выражении операции не найдены, то это либо число либо вызов тригонометрической функции. Сначала следует проверить на функцию: для этого строка должна начинаться либо на ‘cos(‘, либо на ‘sin(’ и заканчиваться на ‘)’. Если начало – это функция, а окончание – не закрывающая скобка, то следует вывести сообщение об ошибке, иначе вычислить выражение в скобках, вызвав count(s[4..length(s)]), и вернуть значение функции от возвращаемого рекурсией значения.

Когда выражение не содержит знаков и функций, то его стоит рассматривать как число, которое следует перевести в числовой вещественный эквивалент, проверив на корректность перевода.

[Все попытки] [Задача]


 
     
Югорский НИИ ИТ, Югорский ФМЛ