Untitled
unknown
plain_text
10 months ago
2.9 kB
5
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("Wyniki dla f(x) i 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;
} Editor is loading...
Leave a Comment