Вычислите значение выражения, предполагая, что действия выполняются согласно правилам арифметики - C (СИ)
Формулировка задачи:
народ выручайте, беда, дали задачу вроде простенькая а справится не могу, аж стыдно.
Дана последовательность символов, имеющая следующий вид: p1q1p2q2p3qn–1pn ,
где pi — цифра, а qi — знак арифметического действия из набора {+, –, *}.
Вычислите значение выражения, предполагая, что действия выполняются
согласно правилам арифметики.
Входные данные
На вход программе подается строка указанного вида, состоящая не более чем из
9 цифр, разделенных символами арифметических операций.
Выходные данные
Выведите значение арифметического выражения.
тут же нашел её на паскале, но чёт это мне не помогло ибо алгоритм я и до этого представлял.
Вычислить значение арифметического выражения.
Решение задачи: «Вычислите значение выражения, предполагая, что действия выполняются согласно правилам арифметики»
textual
Листинг программы
- int main()
- {
- setlocale( LC_ALL,"Russian" );
- char str[20]; // сюда исходную строку
- int arr[20]; // сюда числа и операции
- char c;
- int i, is, ia; // индексы
- printf("Введите строку цифр и операций: ");
- scanf("%s",str);
- // strcpy(str,"1+2*3+4*5+9");
- ia=0; // индекс элемента, куда пишем число/операцию
- // сканируем строку, заполняем arr
- for (is=0; str[is];++is) {
- c=str[is];
- switch(c) {
- case '+':
- case '-':
- case '*': arr[ia++]=c; break;
- default:
- if (ia>0 && arr[ia-1]=='*')
- // умножаем то, что есть, на очередное число
- arr[--ia-1]*=str[is]-'0';
- else
- arr[ia++]=str[is]-'0';
- }
- }
- // остались + и -
- i=arr[0]; // результат
- for (is=1;is<ia;is+=2) {
- if (arr[is]=='+')
- i+=arr[is+1];
- else
- i-=arr[is+1];
- }
- printf("%d",i);
- return 0;
- }
Объяснение кода листинга программы
В этом коде:
- Устанавливается локальная настройка для вывода русских символов.
- Вводятся две массивы: один для хранения строки, другой для хранения чисел и операций.
- Вводится символ, который используется как разделитель между числами и операциями.
- Происходит проход по строке, разделенной по символу, используя цикл for.
- Для каждого символа в строке выполняется проверка на операцию (сложение, вычитание или умножение) и записывается в соответствующий массив.
- Если символ не является операцией, он преобразуется в число и записывается в массив.
- Если в массиве есть предыдущее число и текущий символ является знаком умножения, то выполняется умножение.
- Происходит проход по массиву с числами, начиная с первого элемента, и выполняется последовательное сложение или вычитание в зависимости от операции.
- Выводится результат.
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д