Witam,
Mam takie polecenie:
Napisz program, który drukuje na ekranie wzór na pierwszą pochodną funkcji zadanej w pliku. Załóż, że wzór funkcji w pliku jest postaci f(x)⋅g(x), gdzie funkcje f(x) i g(x) to jedno z wyrażeń typu x^n, sin(a⋅x) lub cos(b⋅x). Przykładowy wzór podany w pliku tekstowym to: x^7⋅cos(π⋅x).
Zrobiłem to w sposób łopatologiczny, tzn wczytywanie do tablicy znaków i analiza każdego znaku... Co nie było zrobione do końca tak jak trzeba, bo było ograniczone jedynie do tego, że w cos i sin mogły być liczby 0-9 i 'pi' a w potędze x 0-99 ... i to na tyle, a wymagania są takie, żeby np. jeśli w pliku pojawi się spacja to nic to nie zmieni, a u mnie by to już namieszało wszystko i liczby 'a' i 'b' mają być dowolnymi rzeczywistymi, po prostu wczytywane jako double :), wiem że trzeba kombinowac z fscanf :), a i dodam ze moze być 9 kombinacji w pliku (coscos, cossin, cosx,sinsin,sincos,sinx,xx,xcos,x*sin)
A tu mój kod...
#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
#include <stdlib.h>
#include <math.h>
#include "winbgi2.h"
int main()
{
FILE *plik;
char s;
char *w;
int licznik = 0;
plik = fopen("dane.txt", "r");
if (plik == NULL)
{
printf("Blad");
exit(1);
}
while (!feof(plik))
{
fscanf(plik, "%c", &s);
licznik++;
}
licznik--;
fclose(plik);
plik = fopen("dane.txt", "r");
if (plik == NULL)
{
printf("Blad");
exit(1);
}
w = (char*)malloc(licznik*sizeof(char));
printf("UWAGA!!!\nProgram liczy pochodne:\n -do sinusa i cosinusa mozna wstawic pi*x lub a*x, gdzie a nalezy do [0,9]\n -potegi x moga byc z przedzialu [0,99]\n -jesli chcesz policzyc dla dowolnej liczby rzeczywistej wstaw zamiast niej\n stala np. a i do koncowego wzoru wstaw a :)\n\n");
printf("\nFunckja wyjsciowa: ");
for (int i = 0; i < licznik; i++)
{
fscanf(plik, "%c", &w[i]);
printf("%c", w[i]);
}
printf("\n");
switch (w[0])
{
case 'x':
{
switch (w[3])
{
case '*':
{
switch (w[4])
{
case's':
{
switch (w[8])
{
case 'p':
{
printf("pochodna funckji: %cx^%c*sin(pi*x)+x^%c*cos(pi*x)*pi\n", w[2], w[2] - 1, w[2]);
break;
}
case '0': {printf("pochodna funckji: 0\n"); break; }
default: {printf("pochodna funckji: %cx^%c*sin(%c*x)+x^%c*cos(%c*x)*%c\n", w[2], w[2] - 1, w[8], w[2], w[8], w[8]); break; }
}
break;
}
case'c':
{
switch (w[8])
{
case 'p':
{
printf("pochodna funckji: %cx^%c*cos(pi*x)-x^%c*sin(pi*x)*pi\n", w[2], w[2] - 1, w[2]);
break;
}
case '0': {printf("pochodna funckji : %cx^%c\n", w[2], w[2] - 1); break; }
default: {printf("pochodna funckji: %cx^%c*cos(%c*x)-x^%c*sin(%c*x)*%c\n", w[2], w[2] - 1, w[8], w[2], w[8], w[8]); break; }
break;
}
}
case 'x':
{
switch (licznik)
{
case 7:
{
printf("pochodna funkcji: %c*x^%c*x^%c+x^%c*%c*x^%c", w[2], w[2] - 1, w[6], w[2], w[6], w[6] - 1);
break;
}
case 8:
{
printf("pochodna funkcji: %c*x^%c*x^%c%c+x^%c*x^%c%c*%c%c", w[2], w[2] - 1, w[6], w[7], w[2], w[6], w[7] - 1, w[6], w[7]);
break;
}
}
}
break;
}
}
default:
{
switch (w[5])
{
case's':
{
switch (w[9])
{
case 'p':
{
printf("pochodna funckji: %c%cx^%c%c*sin(pi*x)+x^%c%c*cos(pi*x)*pi\n", w[2], w[3],w[2],w[3]-1, w[2],w[3]);
break;
}
case '0': {printf("pochodna funckji: 0\n"); break; }
default: {printf("pochodna funckji: %c%cx^%c%c*sin(%c*x)+x^%c%c*cos(%c*x)*%c\n", w[2], w[3], w[2], w[3] - 1, w[9], w[2], w[3], w[9], w[9]); break; }
}
break;
}
case'c':
{
switch (w[9])
{
case 'p':
{
printf("pochodna funckji: %c%cx^%c%c*cos(pi*x)-x^%c%c*sin(pi*x)*pi\n", w[2], w[3], w[2], w[3] - 1, w[2], w[3]);
break;
}
case '0': {printf("pochodna funckji: %c%cx^%c%c\n", w[2],w[3],w[2],w[3]-1); break; }
default: {printf("pochodna funckji: %c%cx^%c%c*cos(%c*x)-x^%c%c*sin(%c*x)*%c\n", w[2], w[3], w[2], w[3] - 1, w[9], w[2], w[3], w[9], w[9]); break; }
}
break;
}
case 'x':
{
switch (licznik)
{
case 8:
{
printf("pochodna funkcji: %c%cx^%c%c*x^%c+x^%c%c*x^%c*%c", w[2], w[3], w[2], w[3] - 1, w[7], w[2], w[3], w[7]-1, w[7]);
break;
}
case 9:
{
printf("pochodna funkcji: %c%cx^%c%c*x^%c%c+x^%c%c*x^%c%c*%c%c", w[2], w[3], w[2], w[3] - 1, w[7], w[8], w[2], w[3], w[7], w[8], w[7], w[8] - 1);
break;
}
}
}
}
break;
}
}
break;
}
case's':
{
switch (w[4])
{
case 'p':
switch (w[10])
{
case 'c':
{
switch (w[14])
{
case 'p':
{
printf("pochodna funkcji: pi*((cos(pi*x))^2-(sin(pi*x))^2)\n");
break;
}
default:
{
printf("pochodna funkcji: pi*cos(pi*x)*cos(%c*x)-sin(pi*x)*sin(%c*x)*%c\n",w[14],w[14],w[14]);
break;
}
}
}
case 's':
{
switch (w[14])
{
case 'p':
{
printf("pochodna funkcji: cos(pi*x)*pi*sin(pi*x)+sin(pi*x)*cos(pi*x)*pi\n");
break;
}
default:
{
printf("pochodna funkcji: pi*cos(pi*x)*sin(%c*x)+sin(pi*x)*cos(%c*x)*%c\n", w[14], w[14], w[14]);
break;
}
}
}
case 'x':
{
switch (licznik)
{
case 13:
{
printf("pochodna funckji: cos(pi*x)*pi*x^%c+sin(pi*x)*x^%c*%c\n", w[12], w[12] - 1, w[12]);
break;
}
case 14:
{
printf("pochodna funckji: cos(pi*x)*pi*x^%c%c+sin(pi*x)*x^%c%c*%c%c\n", w[12], w[13], w[12], w[13] - 1, w[12], w[13]);
break;
}
}
}
}
default:
{
switch (w[9])
{
case 'c':
{
switch (w[13])
{
case 'p':
{
printf("pochodna funkcji: cos(%c*x)*%c*cos(pi*x)-sin(%c*x)*sin(pi*x)*pi\n",w[4],w[4],w[4]);
break;
}
default:
{
printf("pochodna funkcji: sin(%c*x)*%c*cos(%c*x)-sin(%c*x)*sin(%c*x)*%c\n", w[4], w[4], w[13],w[4],w[13],w[13]);
break;
}
}
}
case 's':
{
switch (w[13])
{
case 'p':
{
printf("pochodna funkcji: cos(%c*x)*%c*sin(pi*x)+sin(%c*x)*cos(pi*x)*pi\n",w[4],w[4],w[4]);
break;
}
default:
{
printf("pochodna funkcji: cos(%c*x)*%c*sin(%c*x)+sin(%c*x)*cos(%c*x)*%c\n", w[4], w[4], w[13],w[4],w[13],w[13]);
break;
}
}
}
case 'x':
{
switch (licznik)
{
case 13:
{
printf("pochodna funckji: cos(%c*x)*%c*x^%c%c+sin(%c*x)*x^%c%c*%c%c\n", w[4], w[4], w[11],w[12],w[4],w[11],w[12]-1,w[11],w[12]);
break;
}
case 12:
{
printf("pochodna funckji: cos(%c*x)*%c*x^%c+sin(%c*x)*x^%c*%c\n", w[4], w[4], w[11], w[4], w[11]-1, w[11]);
break;
}
}
}
}
}
}
}
case 'c':
{
switch (w[4])
{
case 'p':
switch (w[10])
{
case 'c':
{
switch (w[14])
{
case 'p':
{
printf("pochodna funkcji: -sin(pi*x)*pi*cos(pi*x)-cos(pi*x)*sin(pi*x)*pi\n");
break;
}
default:
{
printf("pochodna funkcji: -sin(pi*x)*pi*cos(%c*x)-cos(pi*x)*sin(%c*x)*%c\n", w[14], w[14], w[14]);
break;
}
}
}
case 's':
{
switch (w[14])
{
case 'p':
{
printf("pochodna funkcji: -sin(pi*x)*pi*sin(pi*x)+cos(pi*x)*cos(pi*x)*pi\n");
break;
}
default:
{
printf("pochodna funkcji: -sin(pi*x)*pi*sin(%c*x)+cos(pi*x)*cos(%c*x)*%c\n", w[14], w[14], w[14]);
break;
}
}
}
case 'x':
{
switch (licznik)
{
case 13:
{
printf("pochodna funckji: -sin(pi*x)*pi*x^%c+cos(pi*x)*x^%c*%c\n", w[12], w[12] - 1, w[12]);
break;
}
case 14:
{
printf("pochodna funckji: -sin(pi*x)*pi*x^%c%c+cos(pi*x)*x^%c%c*%c%c\n", w[12], w[13], w[12], w[13] - 1, w[12], w[13]);
break;
}
}
}
}
default:
{
switch (w[9])
{
case 'c':
{
switch (w[13])
{
case 'p':
{
printf("pochodna funkcji: -sin(%c*x)*%c*cos(pi*x)-cos(%c*x)*sin(pi*x)*pi\n", w[4], w[4], w[4]);
break;
}
default:
{
printf("pochodna funkcji: -sin(%c*x)*%c*cos(%c*x)-cos(%c*x)*sin(%c*x)*%c\n", w[4], w[4], w[13], w[4], w[13], w[13]);
break;
}
}
}
case 's':
{
switch (w[13])
{
case 'p':
{
printf("pochodna funkcji: -sin(%c*x)*%c*sin(pi*x)+cos(%c*x)*cos(pi*x)*pi\n", w[4], w[4], w[4]);
break;
}
default:
{
printf("pochodna funkcji: -sin(%c*x)*%c*sin(%c*x)+cos(%c*x)*cos(%c*x)*%c\n", w[4], w[4], w[13], w[4], w[13], w[13]);
break;
}
}
}
case 'x':
{
switch (licznik)
{
case 13:
{
printf("pochodna funckji: -sin(%c*x)*%c*x^%c%c+cos(%c*x)*x^%c%c*%c%c\n", w[4], w[4], w[11], w[12], w[4], w[11], w[12] - 1, w[11], w[12]);
break;
}
case 12:
{
printf("pochodna funckji: -sin(%c*x)*%c*x^%c+cos(%c*x)*x^%c*%c\n", w[4], w[4], w[11], w[4], w[11] - 1, w[11]);
break;
}
}
}
}
}
}
}
break;
}
fclose(plik);
return 0;
}