Kacper Matloka Nr 205117 Politechnika Wroclawska Przed uruchomieniem programu, należy plik z danymi umiescic w folderze, w ktorym znajduje sie program i ZMIENIC JEGO NAZWE. Nazwa pliku z danymi nie powinna przekraczac 15 znakow. */ #include #include #define ROZMIAR 20 //Deklaracja funkcji double rysujWykres(double** ,int Ilosc_punktow , char *, char *); double rysujWlasny(double** ,int Ilosc_punktow , char *); double rysujPochodne(double** , double *, double*, int Ilosc_punktow , char *); int liczWiersze(char *); double **odczytajDane(char *); double **odczytajWlasne(char *); void zamien(char *, char *); unsigned wyswietlMenu(void); double **wpiszWlasne(char *); double *rozniczkujKanal_I(double**, int Ilosc_punktow); double *rozniczkujKanal_II(double** , int Ilosc_punktow); double *calkujDane(double**, int Ilosc_punktow); void zapisz(char *); double liczMax_Kanal_I(double**, int Ilosc_punktow); double liczMax_Kanal_II(double**, int Ilosc_punktow); double liczSrednia_Kanal_I(double**, int Ilosc_punktow); double liczSrednia_Kanal_II(double**, int Ilosc_punktow); int main(int argc, char **argv) { printf("\n\n\t\t* WITAJ W PROGRAMIE! *"); getch(); system("cls"); wyswietlMenu(); getch(); return 0; } double rysujWykres(double** tablica, int IloscPunktow, char *PlikDoZapisu, char *PlikDoOdczytu) { FILE *Wsk_do_pliku; int j; char kolor_I[15]; char kolor_II[15]; char tytul_I[30]; char tytul_II[30]; Wsk_do_pliku = fopen(PlikDoZapisu,"w"); printf("\n Opcje wykresu: \n\n\n"); printf(" # KOLOR [po angielsku]\n\n"); printf(" KANAL I: "); scanf("%s", &kolor_I); printf("\n KANAL II: "); scanf("%s", &kolor_II); printf("\n\n\n # TYTUL [odstepy poprzez znak '_']\n\n"); printf(" KANAL I: "); scanf("%s", &tytul_I); printf("\n KANAL II: "); scanf("%s", &tytul_II); fprintf(Wsk_do_pliku,"\n"); fprintf(Wsk_do_pliku,"\n"); //Wykres dla KANALU I fprintf(Wsk_do_pliku,"\n"); fprintf(Wsk_do_pliku,"\n"); //Wykres dla KANALU II fprintf(Wsk_do_pliku,"\n"); fprintf(Wsk_do_pliku,"\n"); fprintf(Wsk_do_pliku,"\n"); fprintf(Wsk_do_pliku,"\n"); fprintf(Wsk_do_pliku,"
\n"); fprintf(Wsk_do_pliku,"
\n"); fprintf(Wsk_do_pliku,"

Nazwa pliku: %s

\n", PlikDoOdczytu); fprintf(Wsk_do_pliku,"

Ilosc punktow: %d

\n", IloscPunktow); fprintf(Wsk_do_pliku,"

Maksymalna wartosc [KANAL I]: %.2f

\n", liczMax_Kanal_I(tablica, IloscPunktow)); fprintf(Wsk_do_pliku,"

Maksymalna wartosc [KANAL II]: %.2f

\n", liczMax_Kanal_II(tablica, IloscPunktow)); fprintf(Wsk_do_pliku,"

Srednia [KANAL I]: %.4f

\n", liczSrednia_Kanal_I(tablica, IloscPunktow)); fprintf(Wsk_do_pliku,"

Srednia [KANAL I]: %.4f \n", liczSrednia_Kanal_II(tablica, IloscPunktow)); fprintf(Wsk_do_pliku,"\n"); fprintf(Wsk_do_pliku,"\n"); fclose(Wsk_do_pliku); return 0; } double **odczytajDane(char *PlikDoOdczytu) { double **tablica; FILE *plik; plik = fopen(PlikDoOdczytu, "r"); char znak; int j, i; int k = 0; i = 0; while(!feof(plik)) { znak = fgetc(plik); if(znak=='\n') {i++;} } tablica = (double**)malloc(sizeof(double*)*3); for(j=0; j<3; j++) { tablica[j]=(double*)malloc(sizeof(double)*(i-7)); } rewind(plik); j=0; while(!feof(plik)) { znak=fgetc(plik); if(znak=='\n') {k++;} if(k==7) {break;} } // Wskaznik w pliku znajduje sie na poczatku 8 linii. // Od tego momentu funkcja wczytuje dane do pliku. while(!feof(plik)) { fscanf(plik, "%lf %lf %lf", &tablica[0][j], &tablica[1][j], &tablica[2][j]); j++; printf("%f %f %f", tablica[0][j], tablica[1][j], tablica[2][j]); if (j==(i-7)) {break;} } return tablica; } int liczWiersze(char *PlikDoOdczytu) { double **tablica; FILE *plik; plik = fopen(PlikDoOdczytu, "r"); if(plik==NULL) { printf("\n\n Najpierw wczytaj dane!"); getch(); system("cls"); wyswietlMenu(); } char znak; int i = 0; while(!feof(plik)) { znak=fgetc(plik); if(znak=='\n') {i++;} } return i-7; } void zamien(char *PlikDoOdczytu, char *PlikPomocniczy) { FILE *plik_wejscia; FILE *plik_wyjscia; plik_wejscia = fopen(PlikDoOdczytu, "r"); plik_wyjscia = fopen(PlikPomocniczy, "w"); if(plik_wejscia == NULL) { system("cls"); printf("\n\n Podany plik nie istnieje!\n\n PAMIETAJ O WPISANIU ROZSZERZENIA"); getch(); exit(0); } else { char c; while(!feof(plik_wejscia)) { c=fgetc(plik_wejscia); if (c == ':') c = '0'; // Zamiana znakow w pliku z danymi w celu ulatwienia ich odczytu if (c == ',') c = '.'; // if (c == ';') c = ' '; // fprintf(plik_wyjscia, "%c", c); } fclose(plik_wejscia); fclose(plik_wyjscia); } } double *calkujDane(double** tablica, int IloscPunktow) { int i; double suma_I = 0, suma_II = 0; for(i=0; i tablica[0][w+1]) { a=tablica[0][w]; b=tablica[1][w]; tablica[0][w]=tablica[0][w+1]; tablica[1][w]=tablica[1][w+1]; tablica[0][w+1]=a; tablica[1][w+1]=b; } } } printf("\n\n"); for(i=0; i\n"); fprintf(Wsk_do_pliku2,"\n"); fprintf(Wsk_do_pliku2,"\n"); fprintf(Wsk_do_pliku2,"\n"); fprintf(Wsk_do_pliku2,"\n"); fprintf(Wsk_do_pliku2,"\n"); fprintf(Wsk_do_pliku2,"

\n"); fprintf(Wsk_do_pliku2,"\n"); fprintf(Wsk_do_pliku2,"\n"); fclose(Wsk_do_pliku2); return 0; } double **odczytajWlasne(char *PlikDoOdczytu) { double **tablica; FILE *plik_wyjscia; plik_wyjscia = fopen(PlikDoOdczytu, "r"); char znak; int j, i=0; while(!feof(plik_wyjscia)) { znak=fgetc(plik_wyjscia); if(znak=='\n') {i++;} } tablica = (double**)malloc(sizeof(double*)*2); for(j=0; j<2; j++) { tablica[j]=(double*)malloc(sizeof(double)*i); } rewind(plik_wyjscia); j=0; while(!feof(plik_wyjscia)) { fscanf(plik_wyjscia, "%lf %lf", &tablica[0][j], &tablica[1][j]); j++; if (j==i) {break;} } printf("\n\nW pliku jest %d danych pomiarowych.", i); return tablica; } double rysujPochodne(double** tablica, double *pochodna_I, double *pochodna_II, int IloscPunktow, char *PlikDoZapisu) { FILE *Wsk_do_pliku; int j; Wsk_do_pliku = fopen(PlikDoZapisu, "w"); fprintf(Wsk_do_pliku,"\n"); fprintf(Wsk_do_pliku,"\n"); fprintf(Wsk_do_pliku,"\n"); fprintf(Wsk_do_pliku,"\n"); fprintf(Wsk_do_pliku,"\n"); fprintf(Wsk_do_pliku,"\n"); fprintf(Wsk_do_pliku,"\n"); fprintf(Wsk_do_pliku,"\n"); fprintf(Wsk_do_pliku,"
\n"); fprintf(Wsk_do_pliku,"
\n"); fprintf(Wsk_do_pliku,"\n"); fprintf(Wsk_do_pliku,"\n"); fclose(Wsk_do_pliku); return 0; } double liczMax_Kanal_I(double **tablica, int IloscPunktow) { double maksimum = tablica[1][0]; int i; for(i=0; i maksimum) { maksimum = tablica[1][i+1]; } } return maksimum; } double liczMax_Kanal_II(double **tablica, int IloscPunktow) { double maksimum = tablica[2][0]; int i; for(i=0; i maksimum) { maksimum = tablica[2][i+1]; } } return maksimum; } double liczSrednia_Kanal_I(double **tablica, int IloscPunktow) { double srednia, suma = 0; int i; for(i=0; i