Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > IT форум > Помощь студентам
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 18.12.2017, 17:36   #1
Neva_95
Новичок
Джуниор
 
Регистрация: 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;
}
Neva_95 вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Помогите найти ошибку в коде, пишет 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