При отсутствии скобок и операторов деления это выглядит так:
#include <stdio.h>
#include <stdlib.h>
int powq(int a,int k)
{
int b=1; while(k) { if(k%2) b*=a; k/=2,a*=a; } return b;
}
void main()
{
char temp[100]="2^2+3*2";
char *y,t[100],d[100];
int j,k,n,*c,*p;
for(k=j=0;temp[j];j++) if(temp[j]!=32) temp[k++]=temp[j]; temp[k]=0;
for(n=k=j=0;temp[j];j++) if(unsigned(temp[j]-48)<10) t[j]=temp[j],d[j]=32; else t[j]=32,d[j]=temp[j],n++; d[j]=t[j]=0;
for(k=j=0;d[j];j++) if(d[j]!=32) d[k++]=d[j]; d[k]=0;
c=(int*)malloc(++n*sizeof(int));
for(y=&t[0],j=0;j-n;) for(c[j++]=atoi(y++);*y!=32;y++);
p=(int*)malloc(--n*sizeof(int));
do { for(k=j=0;j-n;j++) if(d[j] & 16) { k=1,c[j]=powq(c[j],c[j+1]); break; } for(;j++-n;)d[j-1]=d[j],c[j]=c[j+1]; } while(k);
do { for(k=j=0;j-n;j++) if((d[j] & 33)==32) { k=1,c[j]=c[j]*c[j+1]; break; } for(;j++-n;)d[j-1]=d[j],c[j]=c[j+1]; } while(k);
do { for(k=j=0;j-n;j++) if(d[j] & 1) { k=1,c[j]=c[j]+((d[j] & 2)-1)*c[j+1]; break; } for(;j++-n;)d[j-1]=d[j],c[j]=c[j+1]; } while(k);
printf("%s=%d\n",temp,c[0]);
delete [] c,p;
return;
}
Другие языки программирования и технологии
У меня есть char temp[100] = "2^2+3*2"; Теперь, мне нужно увидеть на экране результат этого уравнения (2^2+3*2).
Придется писать анализатор выражения и вычислять его. Никакой "стандартной" функции для разбора таких строковых выражений нет.
Анализатор пишется сравнительно легко: ищется самый последний оператор (+ в данном случае) , разбирается всё, что слева, потом всё, что справа, таким же образом. Если оператора нет, есть просто число, и оно возвращается. В упрощенном случае 1*2+3:
1*2+3 -> + (1*2), (3)
1*2 -> * (1), (2)
1 -> 1
2 -> 2
3 -> 3
1*2 -> 2
1*2+3 -> 5
UPD: Да, и это не уравнение, а выражение.
Анализатор пишется сравнительно легко: ищется самый последний оператор (+ в данном случае) , разбирается всё, что слева, потом всё, что справа, таким же образом. Если оператора нет, есть просто число, и оно возвращается. В упрощенном случае 1*2+3:
1*2+3 -> + (1*2), (3)
1*2 -> * (1), (2)
1 -> 1
2 -> 2
3 -> 3
1*2 -> 2
1*2+3 -> 5
UPD: Да, и это не уравнение, а выражение.
А так:
double result = temp[100]
cout << result << endl;
double result = temp[100]
cout << result << endl;
Похожие вопросы
- Найти трехзначные числа a, b, c, все цифры которых различны и удовлетворяют уравнению a^2 – b^2 – c^2 = a – b – c.
- Как перевести эти числа буду благодарен:1)0,2122(3)-?(10) 2)3,1415(10)-?(8) 3) 0,2122(8)-?(2) 4)0,1100011(2)-?(10) (((
- Хочу издавать газету в формате 2+2 (3 цвета) , как перевести цветовую палитру макет в 3 цвета (3-й сиреневый)?
- Напишите задачу на C++. Найти, какая оценка наиболее часто встречалась на ЕГЭ. Входные данные: 1 1 1 2 2 3 1 3 4 5 3.
- Что такое Srevice Pack 1 или 2 или 3? если знаешь, то как сделать чтобы изменить с 1 хотябы на 2-ой или 3-ий?
- Даны 2 матрицы 2х3. Нужно поменять местами наибольшее значение из 1 с наименьшим из 2. На C++
- Решение нелинейного уравнения 3^2+2x-3=0
- Pascal. Программа выводит 3 столбца по рядам, а нужно чтоб №1 2 3.. в столбик. Помогите.
- КАК скачать видео с YouTube - начало ролика - экран и цифры 5 - 4 - 3 - 2 - 1 - 0 и начинается ролик
- Програмисты, помогите! В Турбо Паскаль составить программу для решения квадратного уравнения(ax^2+bx=c)