Никак не получается вычеслить значение тригонометрических функций,а точнее разбить строку так, чтобы это зделать.Нужно использовать только C.Я думал разбить строку на значение и текст ,тоисть :получить два масив из одного был
ch[]=»cos30+sin45-tg(44-22)»;
num[] code-snippet»>cos+sin+tn
а потом подставлять но не получается потом это сделать.Может нада использовать другую идею или подскажите как реализовать эту.
#include #include #include #include #include #define PI 3.14159265 int f(char* ch, int n) < int num=0, i; for(i=0; ireturn num; > void main () < char ch[]=»cos30+sin45-tg(44-22)»; char *ptr; int b; char key_num[] = «0123456789»; int arr[100],c=0; char num[50]; ptr = strpbrk (ch, key_num); while (ptr != NULL) < printf («%c %d » , *ptr, ptr-string); num[ c ]=ch[ptr-ch]; ptr = strpbrk (ptr+1,key_num); c++; >getch(); >
Код к задаче: «Вычисление тригонометрических функций»
Листинг программы
//маленький парсер, считываем справа налево========================================= //операции +/- ================================================================ //числа — int ================================================================ #include #include #include struct ARG < int value; char operation; struct ARG *next; >; struct ARG *start; struct ARG *last; //———————————————————————————— //Односвязный список в режиме «write|append» ) //———————————————————————————— void insert ( struct ARG *i, /* новый элемент */ struct ARG **start, /* начало списка */ struct ARG **last) /* конец списка */ < if(!*last) /* первый элемент в списке */ < i->next = NULL; *last = i; *start = i; return; > (*last)->next = i; /* вставка в конец */ i->next = NULL; *last = i; > //———————————————————————————— //Готовим строку к работе — убираем все пробелы и добавляем впереди +, если необходимо //———————————————————————————— char *trimForWork(char *s) < char *res = (char*) malloc (strlen(s)+2); char *resPlus = (char*) malloc (strlen(s)+2); int i=0,k=0; for(; ireturn res; > //———————————————————————————— //считываем число справа — до следующего +/- //———————————————————————————— int getArg(char *s) < int i = strlen(s)-1,len = 0, k; for(; i//———————————————————————————— //укорачиваем строку на считанное число справа //———————————————————————————— char *cutStr(char *s) < int i = strlen(s)-1,len = 0; for(; i//———————————————————————————— //считываем операцию — последний символ текущей строки //———————————————————————————— char getOp(char *s) < return s[strlen(s)-1]; >//———————————————————————————— //укорачиваем строку на 1 символ — считанную операцию — справа //———————————————————————————— char *cutOne(char *s) < if(!strlen(s)) return s; s[strlen(s)-1]=’