Вычислите значение выражения, предполагая, что действия выполняются согласно правилам арифметики - 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.
- Для каждого символа в строке выполняется проверка на операцию (сложение, вычитание или умножение) и записывается в соответствующий массив.
- Если символ не является операцией, он преобразуется в число и записывается в массив.
- Если в массиве есть предыдущее число и текущий символ является знаком умножения, то выполняется умножение.
- Происходит проход по массиву с числами, начиная с первого элемента, и выполняется последовательное сложение или вычитание в зависимости от операции.
- Выводится результат.