|
|
Регистрация Восстановить пароль |
Регистрация | Задать вопрос |
Заплачу за решение |
Новые сообщения |
Сообщения за день |
Расширенный поиск |
Правила |
Всё прочитано |
|
Опции темы | Поиск в этой теме |
18.12.2017, 17:36 | #1 |
Новичок
Джуниор
Регистрация: 18.12.2017
Сообщений: 1
|
Не могу найти ошибвку в коде. При запускании программы пишет Дамб памяти.
#include <math.h>
#include <stdio.h> #include <stdlib.h> #include <unistd.h> #include <time.h> #include <string.h> #define pi 3.1415926535 //file - имя файла с входным сигналом, size - размер заданного сигнала void graph (char file[], char fileout[]) { FILE *fp, *fv; //создаем файлы для входного сигнала int i; float str, s[300]; fp = fopen(file, "r"); //создаем файл для записи fv = fopen(fileout, "w"); //cоздаеv двоичный файл для записи. for (i=0; i<=50; i++) { fprintf (fv, "-"); } fprintf (fv, ">\n"); for ( i=0;i<300; i++) { fread (&s[i], sizeof (float), 1, fp); for (str=1; str>=-1; str=str-0.04) { if(str-0.04<=s[i] && s[i]<=str) { fprintf (fv, "*"); } else { fprintf (fv, " "); } } fprintf (fv, "\n"); } fclose (fp);//закрываем файл fclose (fv);//закрываем файл return; } //Чтение коэфицентов КИХ-фильтра void fir (char ifile[], char ofile [], char ffile []) { FILE *fe, *fin, *fout; float koef [20], *in, *out, max = 0; int i, j; fe = fopen ( "ffile.bin", "w"); //файл с импульсной характеристикой фильтра fin = fopen ( "ifile.txt", "wb"); //файл с входным сигналом fout = fopen ("ofile.bin", "w"); //файл для записи выходного сигнала in = malloc (300 *sizeof (float)); //выделяем память для входных сигналов out = malloc (300*sizeof (float));//выделяем память для записи выходных сигналов for (i=0; i<300; i++) fread (&in[i], sizeof (float), 1, fin); for (i=0; i<20; i++) fread (&koef[i], sizeof (float), 1, fe); for (i=0; i<300; i++) { out[i] = 0; for (j=0; j<20; j++) { if ((i-j)>=0) { out[i]=koef[j]*in[i-j]; } } max = fmax(fabs(out[i]), max); } for (i=0; i<300; i++) { in[i] = in[i]/max; fwrite (&in[i], sizeof(float), j, fout); } free (in); free (out); graph(ifile, "graphiput.txt"); graph(ofile, "graphoutput.txt"); fclose(fe); fclose(fin); fclose(fout); } //фильтрация входного сигнала КИХ-фильтром void kihgen (char cfile [], int ncount) { FILE *fp; //в данном файле фильтруем коэффиценты входного сигнала int i; float kf = (float) 1 / ncount; fp = fopen(cfile, "w"); for (i=0; i<ncount; i++) { fprintf(fp, "%4.2f", kf); } fclose(fp); // закрываем файл return; } //Генерация полигармонического сигнала void signalgen (char gfile[], int ncount) { FILE *fp; //в данном файле генерируем входной сигнал int i, u; double A[5], f[5], X[ncount], F[ncount],max = 0; //полигармонический сигнал содержит пять гармонических состовляющих time_t t; srand((unsigned) time (&t)); fp = fopen(gfile, "w"); for (i = 0; i<5; i++) { A[i] = 0.01*(rand() % 201 - 100); //используем генератор случайных чисел диапозоне 201 - 100 f[i] = 0.01 * (rand () % 101)*2*pi; for (u = 0; u<ncount; u++) { X[u] = A[i]*sin(u*(i+1)*4*pi/300+f[i]); F[u] = F[u]+X[u]; max = fmax(fabs(F[u]), max); } } for (u = 0; u<ncount; u++) { F[u] = F[u]/max; fwrite (&F[u], sizeof(float), 1, fp); //с помощью функции write, мы записываем указанное количество байт в указанный поток. } return; } //разбор аргументов командной строки функция (argc, *argv) int main(int argc, char *argv[]) { char ifile[25], ofile[25], ffile[25], gfile[25], cfile[25]; //Файлы которые нужно будет заполнить случаными числми int rez = 0, scount = 0, ncount = 0; while ((rez = getopt(argc, argv, "i:f:g:s:q:n:")) !=-1) //С помощю метода getopt будем записывать переменную каждый последующий параметр { switch (rez) //сравниваем значение одной переменной с константами. { case 'i': strcpy (ifile, optarg); break; case 'o': strcpy (ofile, optarg); break; case 'f': strcpy(ffile, optarg); break; case 'g': strcpy(gfile, optarg); break; case 's': ncount = atoi (optarg); break; case 'q': strcpy (cfile, optarg); break; case 'n': ncount = atoi (optarg); break; default: printf ("Error\n"); break; //выходим из switch } } if (ifile != NULL &&ofile !=NULL &&ffile !=NULL) { fir (ifile, ofile, ffile); } if (gfile !=NULL &&scount !=0) { signalgen (gfile,scount); } if (cfile !=NULL &&ncount !=0) { kihgen (cfile,ncount); } return 0; } |
Похожие темы | ||||
Тема | Автор | Раздел | Ответов | Последнее сообщение |
Помогите найти ошибку в коде, пишет Undeclared identifier 'Edit' | Dexal | Общие вопросы Delphi | 24 | 21.05.2016 18:21 |
не могу найти ошибку в коде С++ | kirillkucelap | Помощь студентам | 4 | 06.04.2014 19:03 |
Не могу найти ошибку в коде | youngster | Паскаль, Turbo Pascal, PascalABC.NET | 3 | 17.11.2013 22:26 |
Не могу найти ошибку в коде при авторизации вконтакте | Arsenx777 | Работа с сетью в Delphi | 10 | 27.07.2011 02:44 |
не могу найти ошибку в коде | pavelstraut | Общие вопросы C/C++ | 5 | 24.07.2009 23:20 |