Napisałem cały programik. Nie wiem gdzie mogą być błędy, ale znając mnie jest ich sporo. Program ma działać z wiersza poleceń -> c:\nazwa_programu.exe sygnal_zaszumiony.csv sygnal_odszumiony.csv
Dzięki za jakiekolwiek zainteresowanie
#include <stdio.h>
#include <math.h>
#include <stdlib.h>
int main(int argc, char **argv)
{
struct sygnal
{
double poczatek;
double interwal;
double koniec;
double *tablica;
};
////////////////////////////////////////////////////////////////////FUNKCJE/////////////////////////////////////////////////////////////
int rozmiar (struct sygnal s)
{
return ( ( sizeof(s.tablica) ) / ( sizeof(double) ) );
}
/////////////////////////////////////////////////////////////////////////////////////
void zamiana(char *nazwapliku)
{
FILE *f;
f=fopen(nazwapliku,"a");
while(getc(f) != EOF)
{
if(getc(f) == ',')
putc(';',f);
}
}
/////////////////////////////////////////////////////////////////////////////////////
int SygnalZapisz(struct sygnal s, char* nazwapliku)
{
FILE *f;
f=fopen(nazwapliku,"w");
int i;
double x = s.poczatek;
for (i = 0; i <=( rozmiar(s) - 2 ); i++, x = x + s.interwal)
{
fprintf(f,"%g ; %g \n", x , s.tablica[i]);
x = x + s.interwal;
}
fclose(f);
}
////////////////////////////////////////////////////////////////////////////////////
int SygnalWczytaj(struct sygnal s, char* nazwapliku)
{
double x;
char napis[255];
int wiersz = 0;
int i;
FILE *f;
if ((f=fopen(nazwapliku,"r"))==NULL)
{
printf("Nie moge otworzyc pliku\n");
return 0;
}
f=fopen(nazwapliku,"r");
s.tablica = (float*)malloc(wiersz * sizeof(float));
while(getc(f) != EOF)
{
if(getc(f) == '\n')
++wiersz;
}
for (i = 0 ; i<=wiersz ; i++)
{
if (fgets(napis,1,f) == '#')
fseek(f,1,i);
else
i=wiersz;
}
for (i=0;i <= rozmiar(s); i++)
{
sscanf(f,"%lf;%lf",&x,&s.tablica[i]);
if (i=0)
s.poczatek=x;
if(i=1)
s.interwal=x-s.poczatek;
if(i=rozmiar(s))
s.koniec=x;
}
}
////////////////////////////////////////////////////////////////////////////////////
int Mediana (struct sygnal s)
{
int i=0;
for(i ; i <= ( rozmiar(s) - 2 ) ; i++)
{
int a;
for(a=i;a<=i+2;a++)
{
if (((s.tablica[a] <= s.tablica[a++]) && (s.tablica[a] >= s.tablica[a+=2])) || ((s.tablica[a] >= s.tablica[a++]) && (s.tablica[a] <= s.tablica[a+=2])))
s.tablica[i] = s.tablica[a];
}
}
}
///////////////////////////////////////////////////////////////PROGRAM//////////////////////////////////////////////////////////////////////
/
struct sygnal pierwszy;
SygnalWczytaj(pierwszy,argv[1]);
Mediana(pierwszy);
SygnalZapisz(pierwszy,argv[2]);
free(pierwszy.tablica);
system("pause");
return 0;
};