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

Помогите почистить готовую прогу от мусора - C++

Восстановить пароль Регистрация
 
TDGfan
0 / 0 / 0
Регистрация: 02.10.2011
Сообщений: 7
16.10.2011, 14:07     Помогите почистить готовую прогу от мусора #1
Всем привет.

Задание - вычислить матрицу Уолша-Адамара.
(сомневаюсь что кто-то вообще знает, что это такое О.о)

Суть проблемы:
программу вроде как написал, но выдает на экран ересь какую-то.
В итоге должно (в идеале) вывести матрицу 4х4, элементами которой являются "1" или "-1".

Наверное я не правильно реализовал обращение к отдельным битам числа О_о
Например: у меня есть число "2". По алгоритму я должен использовать 0-й и 1-й биты этого числа.
Обращаюсь к битам я.........

*тут пока я печатал проблему - сам же нашел ошибку =) "

В итоге программа заработала, последнее, что выводит в консоли - правильная матрица (сходится с ручными вычислениями).
НО:
в консоль так же выкидывает огромную кучу какого-то мусора О_о
Я абсолютно не могу понять, откуда он берется.

Вот рабочий код:

C++
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
#include "stdafx.h"
#include <iostream>
#include <math.h>
using namespace std;
 
int main(void)
{
    const int N = 4;
    int U=2, V=3, x, y, n;
    int matr_elem;
    n = (int)(log10((double)N)/log10((double)2));
    int *b_y = new int [n];
    int *b_x = new int [n];
    int *p_u = new int [n];
    int *p_v = new int [n];
    int **matrix = new int* [N];
    for (int i = 0; i < N; ++i)
        matrix[i] = new int[N];
    
    p_u[0] = ((U & (1<<1))>>1);
    p_u[1] = ((U & (1<<1))>>1) + ((U & (1<<0))>>0);
    
    p_v[0] = ((V & (1<<1))>>1);
    p_v[1] = ((V & (1<<1))>>1) + ((V & (1<<0))>>0);
    
    for (int x = 0; x < N; ++x)
    {
        b_x[0] = ((x & (1<<0))>>0);
        b_x[1] = ((x & (1<<1))>>1);
        
        for (int y = 0; y < N; ++y)
        {
            b_y[0] = ((y & (1<<0))>>0);
            b_y[1] = ((y & (1<<1))>>1);
            matr_elem = pow(-1., ((b_x[0]*p_u[0] + b_y[0]*p_v[0]) + (b_x[1]*p_u[1] + b_y[1]*p_v[1])));
            matrix[x][y] = matr_elem;
        }
        
        for (int i = 0; i < N; ++i)
        {
            for (int j = 0; j < N; ++j)
            {
                cout<<matrix[i][j]<<"  ";
            }
            cout<<endl;
        }
    }
    cin.get();
    return 0;
}
Буду благодарен, если ткнете меня носом в то место, откуда появляется весь этот мусор (запустите у себя прогу, сами увидите эту муть)
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
16.10.2011, 14:07     Помогите почистить готовую прогу от мусора
Посмотрите здесь:

C++ Помогите переписать прогу
Помогите написать прогу. C++
Дополнить готовую прогу,апгрейд сделать:) C++
C++ Помогите исправить прогу
C++ Помогите написать прогу..
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Jupiter
Каратель
Эксперт C++
6542 / 3962 / 226
Регистрация: 26.03.2010
Сообщений: 9,273
Записей в блоге: 1
Завершенные тесты: 2
16.10.2011, 14:20     Помогите почистить готовую прогу от мусора #2
Цитата Сообщение от TDGfan Посмотреть сообщение
C++
1
matr_elem = pow(-1., ((b_x[0]*p_u[0] + b_y[0]*p_v[0]) + (b_x[1]*p_u[1] + b_y[1]*p_v[1])));
отрицательные числа нельзя возводить в степень через pow

Добавлено через 4 минуты
вернее можно но только при условии что 2-й аргумент - целое
TDGfan
0 / 0 / 0
Регистрация: 02.10.2011
Сообщений: 7
16.10.2011, 14:37  [ТС]     Помогите почистить готовую прогу от мусора #3
Окей, а можешь написать как надо?

ЗЫ: кстати я не уверен, что это единственная ошибка, т.к. там на экран выводит какие-то числа типа
"-8151369130"... вообще не шарю откуда они вылезают
aeshes
 Аватар для aeshes
437 / 200 / 13
Регистрация: 07.10.2011
Сообщений: 462
16.10.2011, 16:40     Помогите почистить готовую прогу от мусора #4
Цикл вывода матрицы
C++
1
2
3
4
5
6
7
8
               for (int i = 0; i < N; ++i)
                {
                        for (int j = 0; j < N; ++j)
                        {
                                cout<<matrix[i][j]<<"  ";
                        }
                        cout<<endl;
                }
должен находится за границами цикла по х, а не в нем, т.е.
C++
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>
using namespace std;
 
int main(void)
{
        const int N = 4;
        int U=2, V=3, x, y, n;
        int matr_elem;
        n = (int)(log10((double)N)/log10((double)2));
        int *b_y = new int [n];
        int *b_x = new int [n];
        int *p_u = new int [n];
        int *p_v = new int [n];
        int **matrix = new int* [N];
        for (int i = 0; i < N; ++i)
                matrix[i] = new int[N];
        
        p_u[0] = ((U & (1<<1))>>1);
        p_u[1] = ((U & (1<<1))>>1) + ((U & (1<<0))>>0);
        
        p_v[0] = ((V & (1<<1))>>1);
        p_v[1] = ((V & (1<<1))>>1) + ((V & (1<<0))>>0);
        
        for (int x = 0; x < N; ++x)
        {
                b_x[0] = ((x & (1<<0))>>0);
                b_x[1] = ((x & (1<<1))>>1);
                
                for (int y = 0; y < N; ++y)
                {
                        b_y[0] = ((y & (1<<0))>>0);
                        b_y[1] = ((y & (1<<1))>>1);
                        matr_elem = pow(-1., ((b_x[0]*p_u[0] + b_y[0]*p_v[0]) + (b_x[1]*p_u[1] + b_y[1]*p_v[1])));
                        matrix[x][y] = matr_elem;
                }
                
        }//конец цикла по х
       
        for (int i = 0; i < N; ++i)
                {
                        for (int j = 0; j < N; ++j)
                        {
                                cout<<matrix[i][j]<<"  ";
                        }
                        cout<<endl;
                }
 
        cin.get();
        return 0;
}
TDGfan
0 / 0 / 0
Регистрация: 02.10.2011
Сообщений: 7
16.10.2011, 22:01  [ТС]     Помогите почистить готовую прогу от мусора #5
Спасибо!
Помогло
Yandex
Объявления
16.10.2011, 22:01     Помогите почистить готовую прогу от мусора
Ответ Создать тему
Опции темы

Текущее время: 15:35. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru