Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <stdio.h>
- #include <stdlib.h>
- #include <math.h>
- double wartoscFunkcji(double wspolczynniki[], int stopien, double x) //obliczanie wartości funkcji w danym miejscu
- {
- double wartosc = 0;
- for(int i = 0, j = stopien - 1; i < stopien; i++, j--)
- {
- wartosc += wspolczynniki[i] * pow(x, j);
- }
- return wartosc;
- }
- void zapisDoPliku(double pole, int powtorzenie) //zapisywanie wyników do pliku tekstowego
- {
- FILE *file;
- file = fopen("test.txt", "r+");
- char c = fgetc(file);
- while(c != EOF)
- {
- if(c=='\n' && powtorzenie == 0)
- {
- break;
- }
- c = fgetc(file);
- if(c == '\n')
- {
- powtorzenie--;
- }
- }
- fprintf(file, " %f", pole);
- printf("%f\n", pole);
- fclose(file);
- }
- void pobranieZPliku(double *minimum, double *maksimum, int *rozdzialka, double wspolczynniki[], int powtorzenie) // pobranie z pliku danych do całkowania
- {
- int czytaj = 0, pozycja = 0, zmienna = 0, pozycja2 = 0;
- FILE *file;
- file = fopen("test.txt", "r");
- char c, c1[20];
- while(powtorzenie != 0) // ustawienie na odpowiednia linie
- {
- c = fgetc(file);
- if(c == '\n')
- {
- powtorzenie--;
- }
- }
- do // odczytywanie wspolczynnikow przy "x"
- {
- c= fgetc(file);
- if(c == '+' || c == '-' || c == '=')
- {
- czytaj = 1;
- if(c != '=')
- {
- c1[pozycja] = c;
- pozycja++;
- }
- }
- if(czytaj == 1 && ((c > 47 && c < 58) || c == '.'))
- {
- c1[pozycja] = c;
- pozycja++;
- }
- else if(czytaj == 1 && (c == 'x' || c == ';'))
- {
- wspolczynniki[pozycja2] = atof(c1);
- pozycja = 0;
- czytaj = 0;
- pozycja2++;
- for(int i = 0; i < 20; i++)
- c1[i]=' ';
- }
- }
- while(c != ';'); //zczytywanie wzoru funkcji
- for(int i = 0; i < 20; i++)
- c1[i]=' '; //nie wiem dlaczego, jezeli nie ma tej linijki, niektore wspolczynniki "glupieja"
- c = fgetc(file);
- do //zczytywanie minimum, maximum i rozdzielczosci
- {
- if(c != ';')
- {
- c1[pozycja] = c;
- pozycja++;
- }
- else
- {
- if(zmienna == 0)
- {
- *minimum = atof(c1);
- }
- else
- {
- *maksimum = atof(c1);
- }
- for(int i = 0; i < 20; i++)
- {
- c1[i] = ' ';
- }
- zmienna++;
- pozycja = 0;
- }
- c = fgetc(file);
- }
- while(c != '\n' && c != EOF);
- *rozdzialka = atoi(c1);
- fclose(file);
- }
- int main()
- {
- double wspolczynniki[4];
- double minimum = 0, maksimum = 0, pole = 0, delta;
- int rozdzialka = 0, stopien = 0;
- for(int j = 0; j < 3; j++) // aby zczytac wszystkie 3 funkcje
- {
- pobranieZPliku(&minimum, &maksimum, &rozdzialka, wspolczynniki, j); // przekazujemy "oryginaly" zmiennych, dlatego "&"
- stopien = sizeof wspolczynniki / sizeof *wspolczynniki; // określa nam jakiego stopnia jest dany wielomian
- delta = (maksimum - minimum) / rozdzialka; //jak duzy musi byc kolejny krok aby osiagnac oczekiwana rozdzielczosc
- pole = 0;
- for(int i = 0; i < rozdzialka; i++)
- {
- double x = minimum + (delta * i) + (0.5 * delta); // znajdujemy kolejne punkty
- double y = wartoscFunkcji(wspolczynniki, stopien, x); // podstawiamy wartosci do danych punktow
- pole += delta * y; // obliczamy pole pod wykresem (wynik calki) sumujac wartosci kolejnych prostokatow
- }
- zapisDoPliku(pole, j);
- }
- return 0;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement