+ Ответить в теме
Показано с 1 по 4 из 4

Тема: Не могу найти ошибку в коде. При запускании программы пишет Дамб памяти.

  1. #1
    Neva95 is on a distinguished road
    Регистрация
    18.12.2017
    Возраст
    18
    Сообщений
    1
    Вес репутации
    0

    По умолчанию Не могу найти ошибку в коде. При запускании программы пишет Дамб памяти.

    Код cpp:
    1. #include <math.h>
    2. #include <stdio.h>
    3. #include <stdlib.h>
    4. #include <unistd.h>
    5. #include <time.h>
    6. #include <string.h>
    7. #define pi 3.1415926535
    8. //file - имя файла с входным сигналом, size - размер заданного сигнала
    9. void graph (char file[], char fileout[])
    10. {
    11. FILE *fp, *fv; //создаем файлы для входного сигнала
    12. int i;
    13. float str, s[300];
    14. fp = fopen(file, "r"); //создаем файл для записи
    15. fv = fopen(fileout, "w"); //cоздаеv двоичный файл для записи.
    16. for (i=0; i<=50; i++)
    17. {
    18. fprintf (fv, "-");
    19. }
    20. fprintf (fv, ">\n");
    21. for ( i=0;i<300; i++)
    22. {
    23. fread (&s[i], sizeof (float), 1, fp);
    24. for (str=1; str>=-1; str=str-0.04)
    25. {
    26. if(str-0.04<=s[i] && s[i]<=str)
    27. {
    28. fprintf (fv, "*");
    29. }
    30. else
    31. {
    32. fprintf (fv, " ");
    33. }
    34. }
    35. fprintf (fv, "\n");
    36. }
    37. fclose (fp);//закрываем файл
    38. fclose (fv);//закрываем файл
    39. return;
    40. }
    41. //Чтение коэфицентов КИХ-фильтра
    42. void fir (char ifile[], char ofile [], char ffile [])
    43. {
    44. FILE *fe, *fin, *fout;
    45. float koef [20], *in, *out, max = 0;
    46. int i, j;
    47. fe = fopen ( "ffile.bin", "w"); //файл с импульсной характеристикой фильтра
    48. fin = fopen ( "ifile.txt", "wb"); //файл с входным сигналом
    49. fout = fopen ("ofile.bin", "w"); //файл для записи выходного сигнала
    50. in = malloc (300 *sizeof (float)); //выделяем память для входных сигналов
    51. out = malloc (300*sizeof (float));//выделяем память для записи выходных сигналов
    52. for (i=0; i<300; i++) fread (&in[i], sizeof (float), 1, fin);
    53. for (i=0; i<20; i++) fread (&koef[i], sizeof (float), 1, fe);
    54. for (i=0; i<300; i++)
    55. {
    56. out[i] = 0;
    57. for (j=0; j<20; j++)
    58. {
    59. if ((i-j)>=0)
    60. {
    61. out[i]=koef[j]*in[i-j];
    62. }
    63. }
    64. max = fmax(fabs(out[i]), max);
    65. }
    66. for (i=0; i<300; i++)
    67. {
    68. in[i] = in[i]/max;
    69. fwrite (&in[i], sizeof(float), j, fout);
    70. }
    71. free (in);
    72. free (out);
    73. graph(ifile, "graphiput.txt");
    74. graph(ofile, "graphoutput.txt");
    75. fclose(fe);
    76. fclose(fin);
    77. fclose(fout);
    78. }
    79. //фильтрация входного сигнала КИХ-фильтром
    80. void kihgen (char cfile [], int ncount)
    81. {
    82. FILE *fp; //в данном файле фильтруем коэффиценты входного сигнала
    83. int i;
    84. float kf = (float) 1 / ncount;
    85. fp = fopen(cfile, "w");
    86. for (i=0; i<ncount; i++)
    87. {
    88. fprintf(fp, "%4.2f", kf);
    89. }
    90. fclose(fp); // закрываем файл
    91. return;
    92. }
    93. //Генерация полигармонического сигнала
    94. void signalgen (char gfile[], int ncount)
    95. {
    96. FILE *fp; //в данном файле генерируем входной сигнал
    97. int i, u;
    98. double A[5], f[5], X[ncount], F[ncount],max = 0; //полигармонический сигнал содержит пять гармонических состовляющих
    99. time_t t;
    100. srand((unsigned) time (&t));
    101. fp = fopen(gfile, "w");
    102. for (i = 0; i<5; i++)
    103. {
    104. A[i] = 0.01*(rand() % 201 - 100); //используем генератор случайных чисел диапозоне 201 - 100
    105. f[i] = 0.01 * (rand () % 101)*2*pi;
    106. for (u = 0; u<ncount; u++)
    107. {
    108. X[u] = A[i]*sin(u*(i+1)*4*pi/300+f[i]);
    109. F[u] = F[u]+X[u];
    110. max = fmax(fabs(F[u]), max);
    111. }
    112. }
    113. for (u = 0; u<ncount; u++)
    114. {
    115. F[u] = F[u]/max;
    116. fwrite (&F[u], sizeof(float), 1, fp); //с помощью функции write, мы записываем указанное количество байт в указанный поток.
    117. }
    118. return;
    119. }
    120. //разбор аргументов командной строки функция (argc, *argv)
    121. int main(int argc, char *argv[])
    122. {
    123.  
    124. char ifile[25], ofile[25], ffile[25], gfile[25], cfile[25]; //Файлы которые нужно будет заполнить случаными числми
    125. int rez = 0, scount = 0, ncount = 0;
    126. while ((rez = getopt(argc, argv, "i:f:g:s:q:n:")) !=-1) //С помощю метода getopt будем записывать переменную каждый последующий параметр
    127. {
    128. switch (rez) //сравниваем значение одной переменной с константами.
    129. {
    130. case 'i': strcpy (ifile, optarg); break;
    131. case 'o': strcpy (ofile, optarg); break;
    132. case 'f': strcpy(ffile, optarg); break;
    133. case 'g': strcpy(gfile, optarg); break;
    134. case 's': ncount = atoi (optarg); break;
    135. case 'q': strcpy (cfile, optarg); break;
    136. case 'n': ncount = atoi (optarg); break;
    137. default: printf ("Error\n"); break; //выходим из switch
    138. }
    139. }
    140. if (ifile != NULL &&ofile !=NULL &&ffile !=NULL)
    141. {
    142. fir (ifile, ofile, ffile);
    143. }
    144. if (gfile !=NULL &&scount !=0)
    145. {
    146. signalgen (gfile,scount);
    147. }
    148. if (cfile !=NULL &&ncount !=0)
    149. {
    150. kihgen (cfile,ncount);
    151. }
    152.  
    153. return 0;
    154. }
    Последний раз редактировалось Romeo; 19.12.2017 в 00:53. Причина: [code=cpp][/code]

  2. По умолчанию

     
    Хотите избавиться от рекламы? Зарегистрируйтесь
  3. #2
    Moderator Куратор
    system architect
    Romeo is on a distinguished road Аватар для Romeo
    Регистрация
    02.03.2004
    Адрес
    Крым, Севастополь
    Возраст
    36
    Сообщений
    3,057
    Вес репутации
    20

    По умолчанию Re: Не могу найти ошибку в коде. При запускании программы пишет Дамб памяти.

    А что говорит дебагер? В какой строке падает? Или дебажить мы должны?
    Entites should not be multiplied beyond necessity @ William Occam
    ---
    Для выделения С++ кода используйте конструкцию [ code=cpp ] Код [ /code ] (без пробелов)
    ---
    Сообщение "Спасибо" малоинформативно. Благодарность правильнее высказать, воспользовавшись кнопкой "Reputation" в виде звёздочки, расположенной в левом нижнем углу рамки сообщения.

  4. #3
    developer Слива is on a distinguished road
    Регистрация
    19.03.2016
    Сообщений
    123
    Вес репутации
    2

    По умолчанию Re: Не могу найти ошибку в коде. При запускании программы пишет Дамб памяти.

    Замечания по программе:
    1)
    Код :
    1. fp = fopen(file, "r"); //создаем файл для записи
    - "r" это же вроде для чтения ключ;
    2)
    Код :
    1. #define pi 3.1415926535
    - зачем пи определять? В каждой системе есть свое пи. Например, в C++Builder6 это M_PI. У Вас что за среда вообще?
    3)Хотел бы еще спросить зачем эта программа вообще, да чувствую что автор сюда больше не придет - как обычно.
    Последний раз редактировалось Слива; 19.12.2017 в 08:00.

  5. #4
    Moderator Куратор
    system architect
    Absurd is on a distinguished road
    Регистрация
    26.02.2004
    Адрес
    Pietari, Venäjä
    Возраст
    38
    Сообщений
    1,200
    Вес репутации
    16

    По умолчанию Re: Не могу найти ошибку в коде. При запускании программы пишет Дамб памяти.

    Цитата Сообщение от Слива Посмотреть сообщение
    Замечания по программе:
    1)
    Код :
    1. fp = fopen(file, "r"); //создаем файл для записи
    - "r" это же вроде для чтения ключ;
    2)
    Код :
    1. #define pi 3.1415926535
    - зачем пи определять? В каждой системе есть свое пи. Например, в C++Builder6 это M_PI. У Вас что за среда вообще?
    3)Хотел бы еще спросить зачем эта программа вообще, да чувствую что автор сюда больше не придет - как обычно.
    Среди матшкольников кошерно определять Пи как acos(-1.). Красиво.
    2B OR NOT(2B) = FF

+ Ответить в теме

Похожие темы

  1. Как уменьшить время просчета программы VBA, которая пишет логи в отдельный лист Excel
    Есть большой массив исходных данных. Программа выполняет просчет, результаты выводит в лист Excel. Если параллельно выводить логи в другой лист, то...
    от ManUtd в разделе MS Office и VB(A).
  2. Помогите исправить ошибку в коде ехеl
    У меня есть фаил который считает массу кольца. И я хотел бы чтобы на сводный лист со всех листов выводились названия листа "значения ячейки В11",...
    от Lis000iq в разделе MS Office и VB(A).
  3. Найти сумму элементов главной диагонали матрицы и симетричной ей(Найти ошибку в реш.)
    Дана матрица вещественых чисел P(7,7). Вычислить сумму элементов главной диагонали и симметричной ей. program qwesadf; uses crt; var p:array of...
    от brouken в разделе Решите мне задачку
  4. Помогите найти ошибку в коде Си
    вот программа из книжки Кернигана "Язык программирования Си" (3-е издание) говорит ошибка в 3 строке syntax error before numeric constant что...
    от begem0t в разделе C и C++
  5. Алгоритма перевода чисел: не могу найти ошибку
    Помогите пожалуйста исправить ошибки в данном алгоритме var Form1: TForm1; implementation {$R *.dfm}
    от Drawn в разделе Delphi и Pascal

Ваши права

  • Вы не можете создавать новые темы
  • Вы не можете отвечать в темах
  • Вы не можете прикреплять вложения
  • Вы не можете редактировать свои сообщения