Untitled
#include <stdio.h> #include <math.h> #include <cstdlib.h> // Funkcja dla f(x) = A * cos(1 - x^2) double f(double x, double A) { return A * cos(1 - x * x); } // Funkcja dla g(x) = B / x^3 double g(double x, double B) { return B / (x * x * x); // x^3 = x * x * x } // Funkcja z malloc'iem zeby VS nie sypal bledami double *my_alloc(int size) { double *ptr = malloc(sizeof(double) * size); // tablica z wartosciami x if (!ptr) { printf("Nie można zaalokowac pamieci\n"); } return ptr; } // Funkcja do obliczenia wartosci f(x) i g(x) z pliku dane.dat void oblicz_funkcje(const char *filename, double A, double B) { FILE *nowy_plik = fopen("dane2.dat", "w"); // Sprawdz czy nowy plik został poprawnie utworzony if (nowy_plik == NULL) { printf("Nie można utworzyc nowego pliku o nazwie: %s\n", "dane2.dat"); return; } FILE *file = fopen(filename, "r"); if (file == NULL) { printf("Nie można utworzyc pliku %s\n", filename); fclose(nowy_plik); return; } double *wartosci_f; // tablica dla wynikow f(x) double *wartosci_g; // tablica dla wynikow g(x) double *tmp; int ilosc_danych_wejsciowych = 0; double *wartosci_x = my_alloc(1); // tablica dla x'ow if (!wartosci_x) { fclose(nowy_plik); return; } // Wczytanie danych z pliku while (fscanf(file, "%lf", &wartosci_x[ilosc_danych_wejsciowych]) == 1) { ilosc_danych_wejsciowych++; tmp = realloc(wartosci_x, sizeof(double) * (ilosc_danych_wejsciowych + 1)); if (!tmp) { fclose(nowy_plik); printf("Nie może zaalokowac pamieci!\n"); free(wartosci_x); return; } wartosci_x = tmp; } fclose(file); wartosci_f = malloc(sizeof(double) * ilosc_danych_wejsciowych); if (!wartosci_f) { free(wartosci_x); fclose(nowy_plik); return; } wartosci_g = malloc(sizeof(double) * ilosc_danych_wejsciowych); if (!wartosci_g) { free(wartosci_x); free(wartosci_f); fclose(nowy_plik); return; } // Obliczanie wartosci f(x) i g(x) dla kazdych danych for (int i = 0; i < ilosc_danych_wejsciowych; i++) { wartosci_f[i] = f(wartosci_x[i], A); wartosci_g[i] = g(wartosci_x[i], B); } // Wyswietlanie danych printf("Results for f(x) and g(x):\n"); for (int i = 0; i < ilosc_danych_wejsciowych; i++) { printf("x = %.2lf, f(x) = %.4lf, g(x) = %.4lf\n", wartosci_x[i], wartosci_f[i], wartosci_g[i]); fprintf(nowy_plik, "x = %.2lf, f(x) = %.4lf, g(x) = %.4lf\n", wartosci_x[i], wartosci_f[i], wartosci_g[I]); //zapis do pliku } // Przeciw wyciekom pamieci wszystko zwalniamy, zeby VS nie darl japy free(wartosci_x); free(wartosci_f); free(wartosci_g); fclose(nowy_plik); } int main() { const char *filename = "dane.dat"; // Plik z wartosciami x dolaczylem Panu do zalacznika na olx double A; // Przykladowa wartosc dla f(x) double B; // Przykladowa wartosc dla g(x) printf("Podaj pierwsza wartosc A\n: "); scanf("%le", &A); printf("Podaj druga wartosc B\n: "); scanf("%le", &B); // Wywolanie funkcji oblicz_funkcje(filename, A, B); return 0; }
Leave a Comment