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

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

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

Восстановить пароль

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

Ответ
 
Опции темы Поиск в этой теме
Старый 10.07.2013, 13:33   #1
Bottane4ka
Пользователь
 
Регистрация: 21.12.2011
Сообщений: 10
По умолчанию БПУА. С++

Здравствуйте!
Недавно мне дали задание разобраться с Быстрым преобразованием Уолша-Адамара.Начальное задание такое: "Написать программу преобразования, которая должна работать для любой степени двойки"
Как я поняла для начала нужно сгенерировать матрицу Адамара. Но преподаватель просит составить ее с помощью кронекеровского произведения.
Единственное, что я нашла в интернете
Код:
#include <stdio.h>
#include <math.h>
#include <conio.h>
 
 
void main() 
{
int H_SIZE=8;  /*length of each code word: you can change. */
int r1, c1, i, j;
int hadamard_matrix[2][2]={{1,1},{1,-1}}; /* Initialise 1x1 matrix */
for ( r1 = 0; r1 < H_SIZE; r1 *= 2 )
{
    for( c1 = 0; c1 < H_SIZE; c1 *= 2 )
	{
        while (r1 < H_SIZE)
		{
            for ( i = 0; i < r1; i++ )
			{ /* loop#1: Copying the code matrix itself below for new code matrix */
                for ( j = 0; j < c1; j++ )
				{
					hadamard_matrix[i+r1][j]=hadamard_matrix[i][j];
				}
            }
            for ( j = 0; j < c1; j++ )
			{/* Loop#2: Copying the code matrix on right to itself for new matrix */
                for ( i = 0; i < r1; i++ )
				{
					hadamard_matrix[i][j+c1]=hadamard_matrix[i][j];
                }
            }
            for ( i = 0; i < r1; i++ )
			{/* Loop#3: Copying cojugate of code matrix for complentary diagonal part */
                for ( j = 0; j < c1; j++)
				{
					hadamard_matrix[i+r1][j+c1]=hadamard_matrix[i][j];
				}
			}
		}       
	}
}
    printf(" ", hadamard_matrix);
}
Но программа не работает. Вылетает ошибка. Так же интересует меня как запрограммировать умножение матриц.
Буду благодарна за любую помощь
Bottane4ka вне форума Ответить с цитированием
Старый 13.07.2013, 00:10   #2
Gudwi
Новичок
Джуниор
 
Регистрация: 12.07.2013
Сообщений: 1
Радость

Добрый день. Постараюсь помочь, хоть и сам новичок в программировании


Цитата:
for ( r1 = 0; r1 < H_SIZE; r1 *= 2 )
Цитата:
for( c1 = 0; c1 < H_SIZE; c1 *= 2 )
В данных двух строчка происходит следующее:
r1=0 ->r1=r1*2->r1=0*2=0
c1=0 ->c1=c1*2->c1=0*2=0
То есть по сути бесконечный цикл!
Цикл while() - написан без счетчика но с условием выхода, то есть при каждой итерации цикла значение r1 не увеличивается следовательно еще 1 бесконечный цикл.

Дальше
Цитата:
hadamard_matrix[2][2]
У вас объявлен 2-х мерный массив, но при этом
Цитата:
hadamard_matrix[i+r1][j]=hadamard_matrix[i][j];
Цитата:
hadamard_matrix[i][j+c1]=hadamard_matrix[i][j];
Цитата:
hadamard_matrix[i+r1][j+c1]=hadamard_matrix[i][j];
Левая строка при увеличении r1>1 или i>1 или с1>1 или j>1 будет выходить вне пределов массива, т.к. в С++ не предусмотрена проверка компилятора на выход за рамки массива(если это можно так сказать) то сама по себе программа работать будет но что и куда она записывает, вот это вопрос.

Так же если вы создали массив а потом хотите вывести его содержимое на экран необходимо опять воспользоваться вложенными циклами.

P.S Не суди строго рассказал как сам понимаю.
Gudwi вне форума Ответить с цитированием
Старый 14.07.2013, 11:37   #3
Bottane4ka
Пользователь
 
Регистрация: 21.12.2011
Сообщений: 10
По умолчанию

Спасибо большое, я правда уже с этим почти разобралась, но некоторые моменты не поняла, так что Ваше объяснение мне помогло =)
Bottane4ka вне форума Ответить с цитированием
Ответ


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