Untitled

 avatar
unknown
plain_text
a month ago
2.9 kB
1
Indexable
#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