Вычислите значение выражения, предполагая, что действия выполняются согласно правилам арифметики - C (СИ)

Узнай цену своей работы

Формулировка задачи:

народ выручайте, беда, дали задачу вроде простенькая а справится не могу, аж стыдно. Дана последовательность символов, имеющая следующий вид: p1q1p2q2p3qn–1pn , где pi — цифра, а qi — знак арифметического действия из набора {+, –, *}. Вычислите значение выражения, предполагая, что действия выполняются согласно правилам арифметики. Входные данные На вход программе подается строка указанного вида, состоящая не более чем из 9 цифр, разделенных символами арифметических операций. Выходные данные Выведите значение арифметического выражения. тут же нашел её на паскале, но чёт это мне не помогло ибо алгоритм я и до этого представлял. Вычислить значение арифметического выражения.

Решение задачи: «Вычислите значение выражения, предполагая, что действия выполняются согласно правилам арифметики»

textual
Листинг программы
  1.  int main()
  2. {
  3.     setlocale( LC_ALL,"Russian" );
  4.     char str[20]; // сюда исходную строку
  5.     int  arr[20]; // сюда числа и операции
  6.     char c;
  7.     int i, is, ia; // индексы
  8.     printf("Введите строку цифр и операций: ");
  9.     scanf("%s",str);
  10. //  strcpy(str,"1+2*3+4*5+9");
  11.     ia=0; // индекс элемента, куда пишем число/операцию
  12.     // сканируем строку, заполняем arr
  13.     for (is=0; str[is];++is)  {
  14.         c=str[is];
  15.         switch(c) {
  16.         case '+':  
  17.         case '-':  
  18.         case '*':   arr[ia++]=c;    break;
  19.         default:
  20.             if (ia>0 && arr[ia-1]=='*')
  21.                 // умножаем то, что есть, на очередное число
  22.                 arr[--ia-1]*=str[is]-'0';
  23.             else
  24.             arr[ia++]=str[is]-'0';
  25.         }
  26.     }
  27.     // остались + и -
  28.     i=arr[0]; // результат
  29.     for (is=1;is<ia;is+=2) {
  30.         if (arr[is]=='+')
  31.             i+=arr[is+1];
  32.         else
  33.             i-=arr[is+1];
  34.     }
  35.     printf("%d",i);
  36.     return 0;
  37.  
  38. }

Объяснение кода листинга программы

В этом коде:

  1. Устанавливается локальная настройка для вывода русских символов.
  2. Вводятся две массивы: один для хранения строки, другой для хранения чисел и операций.
  3. Вводится символ, который используется как разделитель между числами и операциями.
  4. Происходит проход по строке, разделенной по символу, используя цикл for.
  5. Для каждого символа в строке выполняется проверка на операцию (сложение, вычитание или умножение) и записывается в соответствующий массив.
  6. Если символ не является операцией, он преобразуется в число и записывается в массив.
  7. Если в массиве есть предыдущее число и текущий символ является знаком умножения, то выполняется умножение.
  8. Происходит проход по массиву с числами, начиная с первого элемента, и выполняется последовательное сложение или вычитание в зависимости от операции.
  9. Выводится результат.

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

Оцени полезность:

8   голосов , оценка 4 из 5

Нужна аналогичная работа?

Оформи быстрый заказ и узнай стоимость

Бесплатно
Оформите заказ и авторы начнут откликаться уже через 10 минут