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

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

Войти
Регистрация
Восстановить пароль
 
maniac0192
17 / 17 / 3
Регистрация: 27.11.2011
Сообщений: 141
#1

Товарищи помогите с вейвлетом Хаара - C++

27.11.2011, 20:11. Просмотров 797. Ответов 7
Метки нет (Все метки)

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
#include <iostream>
#include <time.h>
using namespace std;
int main ()
{
        int n; 
        std::cout << "Enter n:\n>";
        std::cin >> n;
        float* a = new float[n];
        std::cout<<"massiv a:\n";
        for (int i = 0; i <= n-1; i++)
        {
           std::cin >> a[i];
        }
        float* b = new float[n];
        std::cout<<"massiv b:\n";
        for (int j = 0; j <= n-1; j++)
        {
            std::cin >> b[j];
        }
        float* c = new float [n];
        std::cout<<"ishodnii: \n ";
        for(int k = 0; k < n; k++)
        {
                        if(k%2)
                        {
                               int j = 0;
                               j<n;
                               c[k] = a[j] + b[j]; 
                               j++;
                        }
                        else if(!(k%2))
                        { 
                             int i =0 ;
                             i<n;
                             c[k] = a[i] - b[i];
                             i++;
                        }
                       
        }
        for(int k=0; k<n; k++)
        {
                std:: cout<<c[k]<<" ";       
        }
        system("pause");
}



Вот мой код, по логике вещей k0=b0+a0
k1 = a0 - bo
k2 = a1+ b1
k3 = a1-b1
k4=a2+b2
k5=a2-b2
k6=a3+b3
и так далее, не получается реализовать, я ввел проверку на чётность и нечётность, но что то не так


Пусть входящий сигнал представляется в виде строки из 8 значений яркости пикселов (S): (220, 211, 212, 218, 217, 214, 210, 202). После применения преобразования Хаара получаются следующие две последовательности a1 и b1: (215.5, 215, 215.5, 206) и (4.5, -3, 1.5, 4). Стоить заметить, что значения b1 достаточно близки к 0. Повторяя операцию, применительно к последовательности a1, получаем: (215.25, 210.75) (0.25, 4.75). это беру как контрольный пример, в прямом направлении сделал программу, а в обратном направлении где дано два массива, какой то косяк, подскажите пожалуйста где я ошибся и как я могу его исправить.
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
alenka-46
16 / 16 / 2
Регистрация: 28.04.2011
Сообщений: 38
27.11.2011, 20:32     Товарищи помогите с вейвлетом Хаара #2
Может попробовать цикл for с шагом 2
maniac0192
17 / 17 / 3
Регистрация: 27.11.2011
Сообщений: 141
27.11.2011, 20:34  [ТС]     Товарищи помогите с вейвлетом Хаара #3
а можно пример измененного кода????
alenka-46
16 / 16 / 2
Регистрация: 28.04.2011
Сообщений: 38
27.11.2011, 20:45     Товарищи помогите с вейвлетом Хаара #4
C++
1
2
3
4
5
for(i=0; i<n; i++)
{
  k[2*i]    = a[i] + b[i];
  k[2*i+1] = a[i] - b[i];
}
Добавлено через 4 минуты
Здесь массив k[] одномерный и в два раза больше, чем a[] и b[] ( можно сделать двумерный )

Добавлено через 6 минут
Для i=0

k[2*0] = a[0] + b[0]; // k0=a0+b0
k[2*0+1] = a[0] - b[0]; // k1=a0-b0


Для i=1

k[2*1] = a[1] + b[1]; // k2=a1+b1
k[2*1+1] = a[1] - b[1]; // k3=a1-b1
maniac0192
17 / 17 / 3
Регистрация: 27.11.2011
Сообщений: 141
27.11.2011, 22:20  [ТС]     Товарищи помогите с вейвлетом Хаара #5
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
#include <iostream>
#include <time.h>
using namespace std;
int main ()
{
        int n; 
        std::cout << "Enter n:\n>";
        std::cin >> n;
        float* a = new float[n];
        std::cout<<"massiv a:\n";
        for (int i = 0; i <= n-1; i++)
        {
           std::cin >> a[i];
        }
        float* b = new float[n];
        std::cout<<"massiv b:\n";
        for (int j = 0; j <= n-1; j++)
        {
            std::cin >> b[j];
        }
        float* c = new float [n];
        std::cout<<"ishodnii: \n ";
        for(int k = 0; k < n; k++)
        {
                  
                  int i=0; i<n;
                  c[2*k] = a[i] + b[i];
                  c[2*k+1] = a[i] - b[i];
                  i++;
                  
        }
        for(int k=0; k<n; k++)
        {
                std:: cout<<c[k]<<" ";       
        }
        system("pause");
}
изменил, теперь не выдаёт значения(

Добавлено через 1 час 22 минуты
Я никак не пойму в чём моя ошибка, когда изменил код не считает вообще, первоначально считает первые три элемента, затем начинает их повторять
BRcr
4005 / 2294 / 155
Регистрация: 03.02.2011
Сообщений: 5,064
Записей в блоге: 10
28.11.2011, 02:06     Товарищи помогите с вейвлетом Хаара #6
C++
1
2
3
4
5
6
7
8
9
10
11
12
        float* c = new float [n*2];
 
        for(int k = 0, int i = 0; i < n; k+=2, i++)
        {
                  c[k] = a[i] + b[i];
                  c[k+1] = a[i] - b[i];
        }
 
        for(int k=0; k<n*2; k++)
        {
                std:: cout<<c[k]<<" ";       
        }
Deviaphan
Делаю внезапно и красиво
Эксперт C++
1286 / 1220 / 50
Регистрация: 22.03.2011
Сообщений: 3,744
28.11.2011, 08:42     Товарищи помогите с вейвлетом Хаара #7
Строки 28 и 35 в первом посте что подразумевают?

Добавлено через 47 секунд
И 30, 37 аналогично что?
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
28.11.2011, 11:53     Товарищи помогите с вейвлетом Хаара
Еще ссылки по теме:

Опытные товарищи, подскажите , как исправить ошибки C++
C++ Товарищи суда!
C++ Прямое и обратное преобразование Хаара
C++ помогите!

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

Или воспользуйтесь поиском по форуму:
maniac0192
17 / 17 / 3
Регистрация: 27.11.2011
Сообщений: 141
28.11.2011, 11:53  [ТС]     Товарищи помогите с вейвлетом Хаара #8
k0=b0+a0
k1 = a0 - bo
k2 = a1+ b1
k3 = a1-b1
k4=a2+b2
k5=a2-b2
k6=a3+b3
...
это попытка реализовать данные формулы,

Добавлено через 3 минуты
при вводе чисел массива 123-1ый 123-2ой он выдаёт 4 -2 4 -2 4 -2, а должен 2 0 4 0 6 0

Добавлено через 16 минут
всё!!!сделал,всем спассбо за помощь,работает, вот код, если у кого есть советы по коду и рекомендации, обязательно прислушаюсь
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
#include <iostream>
#include <time.h>
using namespace std;
int main ()
{
        int n; 
        std::cout << "Enter n:\n>";
        std::cin >> n;
        float* a = new float[n];
        std::cout<<"massiv a:\n";
        for (int i = 0; i <= n-1; i++)
        {
           std::cin >> a[i];
        }
        float* b = new float[n];
        std::cout<<"massiv b:\n";
        for (int j = 0; j <= n-1; j++)
        {
            std::cin >> b[j];
        }
         float* c = new float [n*2];
        std::cout<<"ishodnii: \n ";
        for(int k = 0, i = 0; i < n; k+=2, i++)
        {
                  c[k] = a[i] + b[i];
                  c[k+1] = a[i] - b[i];
        }
 
        for(int k=0; k<n*2; k++)
        {
                std:: cout<<c[k]<<" ";       
        }
        system("pause");
}
Yandex
Объявления
28.11.2011, 11:53     Товарищи помогите с вейвлетом Хаара
Ответ Создать тему
Опции темы

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