Форум программистов, компьютерный форум CyberForum.ru
Наши страницы

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
de-pre
32 / 31 / 3
Регистрация: 04.07.2013
Сообщений: 232
Записей в блоге: 1
#1

Часть чисел записывается с совсем противоположным знаком, чем они выводятся в консоли - C++

12.07.2014, 14:15. Просмотров 460. Ответов 14
Метки нет (Все метки)

Есть следующий код:
C++ (Qt)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
#include <iostream>
#include <math.h>
#include <fstream>
using namespace std;
void filter(double x[],double y[],int N)
{
    int M = 10; //длина фильтра
    double prop = 20; //частота пропускания
    double zat = 50; //частота затухания
    double diskr = 50000; //частота дискретизации
    double H_real[M] ; //импульсная характеристика практическая
    double H_id[M] ; //идеальная импульсная характеристика
    double W[M] ; //весовая функция
    double fc = (prop + zat)/(2*diskr);
    for(int i = 0; i < M; i++)
    {
        if(i == 0) H_id[i] = 2*M_PI*fc;
        else H_id[i] = (sin(2*M_PI*fc*i))/M_PI*i;
        W[i] = 0.42 - 0.5*cos((2*M_PI*i)/M-1) + 0.08*cos((4*M_PI*i)/M-1); //весовая функция Блэкмана
        H_real[i] = H_id[i] * W[i]; //получили коэффициенты фильтра
    }
    for(int i = 0; i < N; i++)
    {
        y[i] = 0;
        for(int j = 0; j < M - 1; j++)
        {
          y[i] += H_real[j]*x[i-j];
        }
    }
}
 
int main()
{
    int N = 500;
    double x[N];
    double y[N];
    ofstream f;
    f.open("out.txt",ios::out);
    for(int i = 0; i < N; i++)
    {
        x[i] = 5*sin(0.75*M_PI*i);
    }
    filter(x,y,N);
 
    for(int i = 0;i < N;i++)
    {
        cout << y[i] << endl;
        f << y[i] << "," << endl;
    }
    f.close();
}
Я хочу сохранить в файл значения, которые записываются в массив y. Проблема в том, что часть чисел записывается с совсем противоположным знаком,чем они выводятся в консоли,а часть чисел вообще непонятного происхождения,и только числа ближе к концу файла походят на правильные. В чем проблема?
0
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
12.07.2014, 14:15
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Часть чисел записывается с совсем противоположным знаком, чем они выводятся в консоли (C++):

С + + и Visual C + + и чем они отличаются? Есть ли их изучение взаимно дополняющее или это совсем разные языки? - C++
Просветите убогого =)

В заданной матрице заменить максимальный элемент каждой строки на такой же с противоположным знаком - C++
Дан двумерный массив размера 5х6, заполненный случайным образом. Заменить максимальный элемент каждой строки на такой же с...

Выводятся крякозябры в консоли - C++
Подскажите, добрые люди, не могу сам понять в чем проблема? class String { private: char* _string;

Данные выводятся на клиентской стороне, раньше чем они обрабатываются на серверной - C# ASP.NET
Добрый день, вновь я столкнулся с проблемой. В поиске не нашел ничего полезного. Есть серверный метод, вызываемый при событии OnClick...

Является ли каждый следующий элемент последовательности удвоенным предыдущим с противоположным знаком? - PascalABC.NET
Дана числовая последовательность, значения ее элементов могут быть не уникальны, и не превышают по модулю число 32000. Определить, верно ли...

Найти первые равные элементы массива и заменить их на элемент с противоположным знаком - Pascal ABC
условие: 1. Дан массив положительных чисел. Среди них есть равные. Найти первые равные элементы массива и заменить их на элемент с...

Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
orange_fox
34 / 34 / 6
Регистрация: 06.04.2014
Сообщений: 189
12.07.2014, 15:53 #2
Цитата Сообщение от de-pre Посмотреть сообщение
int M = 10; //длина фильтра
Цитата Сообщение от de-pre Посмотреть сообщение
int N = 500;
Здесь должен быть const int, без понятия как у вас код скомпилировался

Добавлено через 2 минуты
Цитата Сообщение от de-pre Посмотреть сообщение
x[i] = 5*sin(0.75*M_PI*i);
M_PI в main не видно
1
nexen
187 / 180 / 3
Регистрация: 27.01.2012
Сообщений: 1,335
12.07.2014, 16:03 #3
de-pre, для M_PI нужен:
C++
1
#define _USE_MATH_DEFINES
А вот как скомпилировалось это - действительно вопрос.
0
gromo
370 / 269 / 24
Регистрация: 04.09.2009
Сообщений: 1,214
12.07.2014, 17:23 #4
Цитата Сообщение от orange_fox Посмотреть сообщение
без понятия как у вас код скомпилировался
variable length array
0
nexen
187 / 180 / 3
Регистрация: 27.01.2012
Сообщений: 1,335
12.07.2014, 17:40 #5
gromo, у вас компилируется исходный вариант?
0
gromo
370 / 269 / 24
Регистрация: 04.09.2009
Сообщений: 1,214
12.07.2014, 17:42 #6
nexen, да
0
gromo
370 / 269 / 24
Регистрация: 04.09.2009
Сообщений: 1,214
12.07.2014, 17:44 #7
Часть чисел записывается с совсем противоположным знаком, чем они выводятся в консоли
0
gromo
370 / 269 / 24
Регистрация: 04.09.2009
Сообщений: 1,214
12.07.2014, 17:45 #8
если компилить с флагом -gnu++11 (что по умолчанию в gcc) то и предупреждения исчезнут.
0
de-pre
32 / 31 / 3
Регистрация: 04.07.2013
Сообщений: 232
Записей в блоге: 1
15.07.2014, 01:01  [ТС] #9
Окей,я исправил так:
C++ (Qt)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
#include <iostream>
#include <math.h>
#include <fstream>
#define _USE_MATH_DEFINES
using namespace std;
void filter(double x[],double y[],int N)
{
    const int M = 10; //длина фильтра
    double prop = 20; //частота пропускания
    double zat = 50; //частота затухания
    double diskr = 50000; //частота дискретизации
    double H_real[M] ; //импульсная характеристика практическая
    double H_id[M] ; //идеальная импульсная характеристика
    double W[M] ; //весовая функция
    double fc = (prop + zat)/(2*diskr);
    for(int i = 0; i < M; i++)
    {
        if(i == 0) H_id[i] = 2*M_PI*fc;
        else H_id[i] = (sin(2*M_PI*fc*i))/M_PI*i;
        W[i] = 0.42 - 0.5*cos((2*M_PI*i)/M-1) + 0.08*cos((4*M_PI*i)/M-1); //весовая функция Блэкмана
        H_real[i] = H_id[i] * W[i]; //получили коэффициенты фильтра
    }
    for(int i = 0; i < N; i++)
    {
        y[i] = 0;
        for(int j = 0; j < M - 1; j++)
        {
          y[i] += H_real[j]*x[i-j];
        }
    }
}
 
int main()
{
    const int N = 500;
    double x[N];
    double y[N];
    ofstream f;
    f.open("out.txt",ios::out);
    for(int i = 0; i < N; i++)
    {
        x[i] = 5*sin(0.75*M_PI*i);
    }
    filter(x,y,N);
 
    for(int i = 0;i < N;i++)
    {
        cout << y[i] << endl;
        f << y[i] << "," << endl;
    }
    f.close();
}
Часть цифр по - прежднему записывается неправильно.
0
olper
24 / 24 / 11
Регистрация: 02.12.2013
Сообщений: 75
15.07.2014, 02:52 #10
мне право не ловко
C++
1
2
cout <<i<<" " <<y[i] << endl;
f <<i<<" "<< y[i] << "," << endl;
в таком варианте можно выложить для сравнения несколько фрагментов.
у меня все собирается и вывод одинаковый.
Вы, скорей всего, серьезно прогневили богов Qt
0
gray_fox
What a waste!
1520 / 1223 / 70
Регистрация: 21.04.2012
Сообщений: 2,560
Завершенные тесты: 3
15.07.2014, 03:20 #11
Цитата Сообщение от orange_fox Посмотреть сообщение
M_PI в main не видно
acos(-1.)
0
de-pre
32 / 31 / 3
Регистрация: 04.07.2013
Сообщений: 232
Записей в блоге: 1
15.07.2014, 03:41  [ТС] #12
Хм,теперь,когда напротив каждого элемента стоит порядковый номер,видно,что в консоли показаны номера,начиная с 204 - ого, а в файле - начиная с нулевого. Ну а те,что начинаются с 204 - ого, вроде совпадают.
0
zss
Модератор
Эксперт С++
6382 / 5947 / 1927
Регистрация: 18.12.2011
Сообщений: 15,264
Завершенные тесты: 1
15.07.2014, 08:06 #13
Цитата Сообщение от de-pre Посмотреть сообщение
показаны номера,начиная с 204
Консоль не резиновая,
когда выводится много, то часть информации пропадает.
0
castaway
Эксперт С++
4884 / 3020 / 370
Регистрация: 10.11.2010
Сообщений: 11,078
Записей в блоге: 10
Завершенные тесты: 1
15.07.2014, 08:19 #14
В 27-й строке самого первого кода при i = 0 и j = 8 какой элемент массива x адресуется?
0
olper
24 / 24 / 11
Регистрация: 02.12.2013
Сообщений: 75
15.07.2014, 11:12 #15
Цитата Сообщение от de-pre Посмотреть сообщение
в консоли показаны номера,начиная с 204
В таких ситуациях лучше снять галочку "запускать в терминале". В консоль среды "больше влазит"
0
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
15.07.2014, 11:12
Привет! Вот еще темы с ответами:

Часть данных не записывается в бд - PHP
У меня скрипт не записывает часть данных в бд, а именно текстовое значение из 100 записей 10 не записалось, я сохранил в файлы что не...

Вывод числа со знаком (+ и -) в консоли - C#
Как в консоле вывести число со знаком перед ним? Заранее спасибо!!

Посчитать количество таких чисел в массиве, что они строго больше, чем все следующие за ними - C (СИ)
Посчитать количество таких чисел в массиве, что они строго больше, чем все, следующие за ними. ВХОДНЫЕ ДАННЫЕ В первой строке дано...

Почему в консоли выводятся не все строки? - Delphi
Посмотрите, пожалуйста, файл проэкта (прилагаю). Проблема в том, что в консоли видны не все строки, которые должны выводиться, оно как...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
Yandex
Объявления
15.07.2014, 11:12
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru