Вопрос № 126503: Уважаемые эксперты, очень нужно решение данной задачки::
***
Создать приложение для вычисления значения арифметического выражения, которое может включать в себя действительные числа, а также круглые скобки и следующие операции: +, -, *, /, ^ ...Вопрос № 126518: Уважаемые эксперты! Помогите решить задачи!
1. Написать программу, которая проверяет, находится ли введённое с клавиатуры число в массиве. Массив должен вводиться во время работы программы.
2. Написать программу, которая выводит минимальный э...Вопрос № 126567: Уважаемые эксперты просьба помочь с заданием: необходимо рассортировать в алфавитном порядке слова записанные через пробел (происходит чтение слов из одного файла, а запись в другом). Желательно всё организовать простым и наиболее коротким методом. З...
Вопрос
№ 126.503
Уважаемые эксперты, очень нужно решение данной задачки::
***
Создать приложение для вычисления значения арифметического выражения, которое может включать в себя действительные числа, а также круглые скобки и следующие операции: +, -, *, /, ^ (возведение в степень). Вычисления должны производиться с учетом скобок и приоритетов используемых операций. Предусмотреть корректную обработку возможных ошибок и информирование о них пользователя.
Отвечает: Verena
Здравствуйте, Биюн Виктор Павлович!
Обычно такие задачи решают при помощи польской инверсной записи, в которую преобразуется введённое выражение. Выглядит это так:
((1 + 2) * 4) + 3
1 2 + 4 * 3 +
Преобразование происходит по определённому алгоритму:
1. Заводим вспомогательный стек.
1. Если текущая лексема (неделимая часть выражения) - число, кладём его в результирующий стек.
2. Если текущая лексема - оператор, переписываем в результирующий стек из вспомогательного лексемы с приоритетом большим или равным приоритету текущего оператора (они вынимаются в порядке стека, и из вспомогательного стека они удаляются), а текущий оператор кладём во вспомогательный стек.
3. Если текущая лексема - открывающая скобка, кладём её во вспомогательный стек.
4. Если текущая лексема - закрывающая скобка, переписываем в результирующий стек из вспомогательного все лексемы до открывающей скобки (сами скобки просто удаляются).
Главное её удобство в том, что вычислить полученное выражение можно с помощью одного прохода по стеку по следующему алгоритму:
1. Если текущая лексема - число, переходим на следующую.
2. Если текущая лексема - оператор, берём из стека нужное количество лексем (у Вас все операторы бинарные, т.е. нужно брать по две лексемы), вычисляем значение выражения, и подставляем его вместо оператора и его операндов.
В качестве примера реализации этого подхода, могу предложить написанный мной консольный калькулятор, однако его функционал гораздо шире, чем Вам требуется (описан в приложении), и вычисление он производит не с обычным типом действительных чисел, а с классом "бесконечных" действительных чисел, хранящихся в виде строк, впрочем, переделать программу при желании несложно (Вас будет интересовать класс CCalc, в h-файле есть комментарии к его методам, а работает он
по вышеописанному алгоритму, плюс для проверки выражения используется конечный автомат).
Пример попроще, с полным кодом и подробнейшим описанием можно посмотреть здесь.
Удачи!
Приложение:
--------- Эта история - не для истории, понимаешь?
Ответ отправила: Verena (статус: Практикант)
Ответ отправлен: 09.03.2008, 14:32 Оценка за ответ: 5
Вопрос № 126.518
Уважаемые эксперты! Помогите решить задачи!
1. Написать программу, которая проверяет, находится ли введённое с клавиатуры число в массиве. Массив должен вводиться во время работы программы.
2. Написать программу, которая выводит минимальный элемент введённого с клавиатуры массива целых чисел. Для доступа к элементам массива используйте указатель.
3. Написать программу, которая вычисляет среднее арифметическое элементов массива без учёта минимального и максимального элементов массива. Для доступа к элементам массива используйте указатель на указатель.
4. Написать программу, которая объединяет два упорядоченных по возрастанию массива в один, так же упорядоченный массив.
Рекомендуемый вид экрана во время работы программы приведён ниже, данные, введённые пользователем, выделены полужирным шрифтом.
Введите в одной строке элементы первого массива,
{5 целых чисел} -> 1 3 5 7 9
введите в одной строке элементы второго массива,
{5 целых чисел} -> 2 4 6 8 10
Массив - результат 1 2 3 4 5 6 7 8 9 10
5. Написать программу, которая вводит по строкам с клавиатуры двумерный массив и вычисляет сумму его элементов по столбцам.
P.S. У меня начальный уровень знаний! Только начал изучать C.
Отвечает: Терсков Сергей
Здравствуйте, Волошин Виталий Алексеевич!
Вариант решения четырех задач смотрите в приложении.
Приложение:
Ответ отправил: Терсков Сергей (статус: Практикант)
Ответ отправлен: 13.03.2008, 07:04 Оценка за ответ: 5
Вопрос № 126.567
Уважаемые эксперты просьба помочь с заданием: необходимо рассортировать в алфавитном порядке слова записанные через пробел (происходит чтение слов из одного файла, а запись в другом). Желательно всё организовать простым и наиболее коротким методом. Заранее спасибо.
Отправлен: 09.03.2008, 20:25
Вопрос задал: Kreng (статус: Посетитель)
Всего ответов: 1 Мини-форум вопроса >>> (сообщений: 1)
Отвечает: Ross
Здравствуйте, Kreng!
В приложении самый простой (но далеко не самый рациональный) метод решения задачи с использованием стандартной библиотеки шаблонов.
Приложение:
--------- Доступно только то, что видимо (c) Б. Керниган
Ответ отправил: Ross (статус: Студент)
Ответ отправлен: 10.03.2008, 20:13