#include <stdio.h>
#include <math.h>
#include <stdlib.h>
#include <time.h>
#include <string.h>
void menu()
{
puts("1. wczytaj dane poczatkowe dla M elementów.") ;
puts("2. Czyszczenie ekranu.");
puts("3. odczyt z csv") ;
puts("4. Zamknij program.");
}
void skan(int M, float *f, float *phi, float *A)
{
int i ;
for(i=0; i<M; i++)
{
printf(" numer skladowych sinusoidalnych: %d ", i+1) ;
puts("") ;
printf("podaj %d czestotliwosc: ",i+1) ;
scanf("%f", &f[i]) ;
printf("podaj %d przesuniecie fazowe: ",i+1) ;
scanf("%f", &phi[i]) ;
printf("podaj %d amplitude: ",i+1) ;
scanf("%f", &A[i]) ;
puts("") ;
}
}
void X(float tp, float m, float *A, float *f, float *phi, float **x, int M, float W)
{
int i,j,k,a ;
float P=0;
for(i=0; i<W; i++)
x[i][0]= tp+i*m ;
for(j=0; j<W; j++)
{
for(k=0; k<M ; k++)
P=(A[k]*(sin(f[k]*x[j][0]+phi[k]))) + P ;
x[j][1] = P ;
}
P = 0;
}
float maximum(float *f1, int M)
{
int i ;
float p ;
for ( i=0; i<(M-1); i++)
{
if (f1[i]> f1[i+1] )
{
p=f1[i] ;
f1[i]=f1[i+1] ;
f1[i+1]=p ;
}
}
return f1[M-1] ;
}
void drukuj(float **tablica,int p)
{
int i,j ;
for(i=0; i<p; i++)
{
for(j=0; j<2; j++)
{
printf("%f ", tablica[i][j]) ;
}
printf("\n") ;
}
}
void zapisuj(float p, float **x)
{
int i,j;
FILE *plik;
plik=fopen("plik.csv", "w");
for(i=0; i<p; i++)
{
fprintf(plik, "%f; %f", x[i][0], x[i][1]) ;
fprintf(plik, "\n") ;
}
fclose(plik);
}
void odczyt(float **tab)
{
int k, i ;
int n = 0;
FILE* plik ;
plik = fopen("plik.csv","r");
char znak;
while ((znak = fgetc(plik)) != EOF)
{
if (znak == '\n')
++n ;
}
printf("%d\n",n) ;
tab = realloc(tab, n * sizeof(float*)) ;
for(i=0; i<n; i++)
tab[i]=realloc(tab,2*sizeof(float)) ;
rewind(plik);
for(k=0; k<n; k++)
fscanf(plik, "%f;%f;", &tab[k][0],&tab[k][1]) ;
fclose(plik);
}
int main()
{
float to,tf,g,m,p ;
int i,M,y,a ;
float *phi ;
float *f ;
float *A ;
float **x ;
float **xx = NULL ;
do
{
menu();
printf("Wybierz co chcesz zrobic\n:");
scanf("%d", &y);
switch (y)
{
case 1 :
printf("podaj czas poczatkowy:\n ") ;
scanf("%f", &to) ;
printf("podaj czas koncowy:\n") ;
scanf("%f", &tf) ;
M=2 ;
phi=malloc(M*sizeof(float));
A=malloc(M*sizeof(float));
f=malloc(M*sizeof(float)) ;
skan(M,f,phi,A) ;
g=maximum(f, M) ;
m=1/(2*g) ;
p = (tf-to)/m ;
printf("ILOSC POMIAROW TO:%f\n", p) ;
x =malloc(p*sizeof(float*));
for (i=0; i<p; i++)
{
x[i] =(float*) malloc(2*sizeof(float));
}
X(to,m,A,f,phi,x,M,p) ;
drukuj(x,p) ;
zapisuj(p,x) ;
free(x) ;
break ;
case 2:
system("CLS");
break;
case 3 :
/* xx=malloc (sizeof (float*)*1);
for ( a = 0;a <1;a++)
xx [i] = malloc (sizeof (float)*2) ;
*/
odczyt(xx);
free(xx) ;
break ;
case 4:
return 0;
default:
printf("Wybierz liczbe od 1 do 4\n");
}
}
while (y > 0 && y < 5);
system("PAUSE");
return 0 ;
}
Nie jestem na studiach informatycznych, więc nie najlepiej programuje, to dopiero mój drugi semestr z jezykiem C. Zdaje sobie sprawę, że jest źle zoptymalizowany, zformatowany, no ale całość działa, najgorzej jest w ''case 3'' Gdzie zaczynam odczytywać pliki z dysku, wtedy program przestaje odpowiadać. :(