Создать консольный калькулятор, в который подаются значения одной строкой, без скобок - C (СИ)

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

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

Задача следующая: создать консольный калькулятор, в который подаются значения одной строкой, без скобок, например calc 2+6/8-9*4+7/8. Операции должны выполнятся по правилам математики. Вопрос в том, как в этом случае обрабатывать строку? пробовал выделять отдельно числа и знаки в массивы, но дальше не могу ничего придумать, как работать с этими массивами..

Решение задачи: «Создать консольный калькулятор, в который подаются значения одной строкой, без скобок»

textual
Листинг программы
int calc(double *f,char *s,int *n,char ch1,char ch2)
{
    int i=0,j;
    while(i!=*n-1)
    for(i=0;i<*n-1;i++)
    if(s[i]==ch1 || s[i]==ch2)
    {
        if(s[i]=='*') f[i]*=f[i+1];
        if(s[i]=='/') f[i]/=f[i+1];
        if(s[i]=='+') f[i]+=f[i+1];
        if(s[i]=='-') f[i]-=f[i+1];
        for(j=i;j<*n-2;j++)s[j]=s[j+1];
        for(j=i+1;j<*n-1;j++)f[j]=f[j+1];
        --*n;
        break;
    }
    return 0;
}
 
int main()
{
    char s[30],str[60];
    int i,ns,b,e;
    double f[30];
    
    setlocale(LC_ALL,"Russian_russia.1251");
    printf("ÑòðîêГ*:");
    scanf("%s",str);
    if(strlen(str))
    {
        for(b=ns=i=0;str[i];i++)
        if(i &&(str[i]=='+' || str[i]=='-' || str[i]=='*' || str[i]=='/' || !str[i+1]))
        {
            e=i;
            if(str[i+1]) s[ns]=str[i];
            else e++;
            str[e]=0;
            f[ns++]=atof(str+b);
            b=i+1;
        }
        calc(f,s,&ns,'*','/');
        calc(f,s,&ns,'+','-');
        printf("=%f\n",f[0]);
    }
    system("pause");
    return 0;
}

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

  1. Функция calc принимает в качестве параметров указатель на массив f (для хранения результатов операций), указатель на строку s (содержащую математическую операцию), указатель на переменную n (для хранения количества элементов в операции), а также два символа ch1 и ch2 (обозначающие операцию).
  2. В функции main создается строка str, в которую считывается математическая операция из консоли.
  3. Далее в цикле происходит разбиение строки str на отдельные числа и операции.
  4. Полученные числа конвертируются в тип double и сохраняются в массиве f.
  5. Операции (символы +, -, *, /) сохраняются в массиве s.
  6. Переменная ns инициализируется нулем и используется для хранения количества чисел в операции.
  7. Переменная b используется для отслеживания начала следующей операции.
  8. Переменная e используется для отслеживания конца текущей операции.
  9. После заполнения массива s вызывается функция calc, которая выполняет операции над числами из массива f согласно указанным в s операциям.
  10. После выполнения всех операций выводится результат.
  11. В конце программы вызывается функция system(pause), чтобы программа не закрылась сразу после выполнения операции.
  12. Возвращаемое значение функции main равно нулю, что означает успешное выполнение программы.

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


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

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

13   голосов , оценка 4 из 5
Похожие ответы