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

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

Вернуться   Форум программистов > C/C++ программирование > Общие вопросы C/C++
Регистрация

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 17.06.2008, 22:04   #1
Frog25
Пользователь
 
Регистрация: 16.06.2008
Сообщений: 16
По умолчанию Нужна помощь с умножением упакованых массивов

Задача такая были 2 двухмерных массива(одинаковой размерности) с большим количеством нулей. Их упаковали в три одномерных массива: в первом номера строк, во втором номера колонок, в третьем значения. Необходимо произвести умножение упакованых массивов как матриц(т.е. строка на колонку и сложение) Могу привести пример сложения этих же матриц
Цитата:
//slozenie
for(int r=0;r<nrow;r++)
for(int c=0;c<ncol;c++)
{{if(masur[g]==r && masuc[g]==c)
{m1=masuz[g];
g++;}
else
m1=0;}
{if(masur[j+t1]==r && masuc[j+t1]==c)
{m2=masuz[j+t1];
j++;}
else
m2=0;}
s=m1+m2;
if(s!=0)
{masur[k+t1+t2]=r;
masuc[k+t1+t2]=c;
masuz[k+t1+t2]=s;
k++;t3++;}
}
for(int i=t1+t2;i<t1+t2+t3;i++)
{cout<<masur[i]<<'\t'<<masuc[i]<<'\t'<<masuz[i]<<'\t'<<endl;}
что тут можно поменять для умножеия матриц? case2.txt

Последний раз редактировалось Frog25; 18.06.2008 в 00:05.
Frog25 вне форума Ответить с цитированием
Старый 17.06.2008, 23:23   #2
Игорь007
Пользователь Подтвердите свой е-майл
 
Аватар для Игорь007
 
Регистрация: 30.05.2008
Сообщений: 96
По умолчанию

Желательно весь код выложить. Очень трудно понять суть кода, когда не все переменные определены. Непонятно какой смысл имеют многие переменные. И желательно подробна рассказать, как упакованы 2-х мерные массивы (Непонятно как их упаковывали, чтобы можно было потом распазнать, какое значение относиться к какому массиву).
Игорь007 вне форума Ответить с цитированием
Старый 18.06.2008, 00:06   #3
Frog25
Пользователь
 
Регистрация: 16.06.2008
Сообщений: 16
По умолчанию

разработать приложение , позволяющее упаковывать и распаковывать значения матрицы и выполнять заданые действия с упакованой матрицей. В приложении необходимо обеспечить: 1.Формирование 2-х двухмерных массивов с задаными размерами, 2. Заполнение случ. числами, но с большим количеством нулевых значений; 3. Выполнение упаковки и распаковки этих массивов: не нулевые значения матриц и их координаты сохранять в 3-х одномерных массивах; 4. отображение значений упакованых массивов; 5. Выполнение сложения и умножение массивов в упакованом виде с последующей коррекцией упаковки; 6. Сохранение в файле значений исходных и упакованых массивов.

К предидущему посту причепил файл с полным кодом.
Frog25 вне форума Ответить с цитированием
Старый 18.06.2008, 11:17   #4
Игорь007
Пользователь Подтвердите свой е-майл
 
Аватар для Игорь007
 
Регистрация: 30.05.2008
Сообщений: 96
По умолчанию

Алгоритм конечно никудышный, но я старался твоим методом сделать.
Код:
		int c;
		l = 0;
		s = 0;
		for(int r=0;r<nrow;r++)
		{
			for(int i=0; i < ncol; i++)
			{
				g = l;
				for(c=0;c<ncol;c++)
				{
					if(masur[g]==r && masuc[g]==c)
					{
						m1=masuz[g];
						g++;
					}
					else
						m1=0;
					for(; masur[j+t1]<c ;j++);
					for(; masur[j+t1]<=c && masuc[j+t1]<i ;j++);
					if(masur[j+t1]==c && masuc[j+t1]==i)
					{
						m2=masuz[j+t1];
					}
					else
						m2=0;
					s += m1*m2;
				}
				if(s!=0)
				{
					masur[k+t1+t2]=r;
					masuc[k+t1+t2]=i;
					masuz[k+t1+t2]=s;
					k++;t3++;
					s = 0;
				}
				j = 0;
			}
			l = g;
		}
Игорь007 вне форума Ответить с цитированием
Старый 18.06.2008, 11:36   #5
Frog25
Пользователь
 
Регистрация: 16.06.2008
Сообщений: 16
По умолчанию

Спасибо сейчас попробую.
Frog25 вне форума Ответить с цитированием
Старый 18.06.2008, 12:14   #6
Frog25
Пользователь
 
Регистрация: 16.06.2008
Сообщений: 16
По умолчанию

Чегото всё равно нето.
В распакованом виде былобы примерно так:

for(i=0;i<nrow;i++)
for(j=0;j<ncol;j++)
{int sum=0;
for(k=0;k<nrow;k++)
sum+=m1[i][k]*m2[k][j]
m3[i]j[j]=sum;
}
а тут я даже незнаю как заставить в одном месте образовывать строку а в другом столбец((
Frog25 вне форума Ответить с цитированием
Старый 18.06.2008, 12:56   #7
Frog25
Пользователь
 
Регистрация: 16.06.2008
Сообщений: 16
По умолчанию

вот что получилось при небольшой модификации вашего кода umnoz.jpg
Frog25 вне форума Ответить с цитированием
Старый 18.06.2008, 13:07   #8
Игорь007
Пользователь Подтвердите свой е-майл
 
Аватар для Игорь007
 
Регистрация: 30.05.2008
Сообщений: 96
По умолчанию

Это у вас появляется всегда, когда не делается первоначально инициализация и упаковывания. Так что нужно делать эти пункту перед суммированием или умножением либо поставить проверку. Покажите как вы организовали вывод массива. Вобщем весь код еще раз.
Игорь007 вне форума Ответить с цитированием
Старый 18.06.2008, 13:26   #9
Frog25
Пользователь
 
Регистрация: 16.06.2008
Сообщений: 16
По умолчанию

Инициализация и упаковка сделаны. case2.txt (Вывод переменных t1-t4 сделал для проверки не выходит ли за предел инициализированого массива значений)
Frog25 вне форума Ответить с цитированием
Старый 18.06.2008, 13:26   #10
Игорь007
Пользователь Подтвердите свой е-майл
 
Аватар для Игорь007
 
Регистрация: 30.05.2008
Сообщений: 96
По умолчанию

Вот например результат если все сделать как я говорил (в не распакованном виде)
Изображения
Тип файла: jpg Result.jpg (17.4 Кб, 108 просмотров)
Игорь007 вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Нужна помощь KpeHDeJIb Помощь студентам 4 04.07.2008 11:52
Паскаль. Помогиет с умножением массивов set Помощь студентам 2 20.11.2007 14:49
Нужна помощь! Teodor_Bagwell Общие вопросы Delphi 6 11.02.2007 16:45
Нужна помощь londoner Общие вопросы Delphi 2 05.02.2007 14:23