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

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

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

Восстановить пароль
Повторная активизация e-mail

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

Ответ
 
Опции темы Поиск в этой теме
Старый 15.10.2010, 22:00   #1
Romario92
Пользователь
 
Регистрация: 15.10.2010
Сообщений: 49
По умолчанию

Помогите пожалуста=)
Вычислить

У меня есть код, програма работает, но мне сказали переделать на немного легкий вариант, например тут непонятно void ( int **arr) и тому подобное, без всяких там выделений памяти по столбцы и строки...Кто может переделать на самий простой, приметивный способ?
Код:
#include <iostream>
#include <ctime>
 
using std::cout;
using std::cin;
using std::endl;
 
 void output (int **arr, int size)
 {
         for(int i=0; i<size; i++)
         {
                   for(int j=0; j<size; j++)
                    {
                           cout<<arr[i][j]<<" ";
                    }
 
                    cout<<endl;
         }
 
 }
 int** mult(int **arr1, int **arr2, int **res, int size) 
 {  
        for ( int i=0; i<size; i++)
      {
        for (int j=0; j<size; j++)
          {
             for (int k=0; k<size; k++)
               {
                  res[i][j] += arr1[i][k] * arr2[k][j];
                                  
               }
                         //cout<<res[i][j]<<"  ";
          }
                //cout<<endl;
       } 
        return res;
 }
 int** trans(int **matr, int **matr_tr, int size) 
 {
       for(int i=0; i<size; i++)
              {
            for(int j=0; j<size; j++)
                           {
                  matr_tr[i][j]=matr[j][i];
               }
          }
         return matr_tr;
 }
 int** rizn(int **matr1, int **res, int size) 
 {
         for(int i=0; i<size; i++)
         {
                 for(int j=0; j<size; j++)
                 {
                         res[i][j]=res[i][j]-matr1[i][j];
                 }
         }
         return res;
 }
 int** mult_ch(int **matr, int **res, int size) 
 {
         for(int i=0; i<size; i++)
         {
                 for(int j=0; j<size; j++)
                 {
                         res[i][j]=3*(matr[i][j]);
                 }
         }
         return res;
 }
int main ()
{
     srand((unsigned int)time(NULL));
          setlocale( LC_ALL,"Russian" );
         int size,i,j;
         int **A, **B, **C, **At, **temp; 
         cout<<"Введите розмер: ";
         cin>>size;
         A = new int*[size]; 
         B = new int*[size]; 
         C = new int*[size]; 
         At = new int*[size]; 
         temp = new int*[size];
         for(i=0; i<size; i++)
         {
                   A[i]= new int[size]; 
                   B[i]= new int[size]; 
                   C[i]= new int[size]; 
                   At[i] = new int[size];  
                   temp[i] = new int[size];
                 for(j=0; j<size; j++)
                   {
                           A[i][j]=rand()%5; 
                           B[i][j]=rand()%5;
                           C[i][j]=0;
                           At[i][j]=0;
                           temp[i][j]=0;
 
                   }
         }
         cout<<"Матрица А:"<<endl;
         output(A,size); 
         cout<<endl;
         cout<<"Матрица B:"<<endl;
         output(B,size); 
         cout<<endl;
     cout<<"Матрица C:"<<endl;
     mult((trans(A,At,size)),B,C,size); //А^t*B 
         mult_ch((mult(B,B,At,size)),A,size);//3*B^2
         mult((rizn(A,C,size)),B,temp,size);//(A^t-3*B^2)*B
         output(temp,size);  
for(i=0; i<size; i++)
        {
          delete A[i], B[i], C[i], At[i];
        }
         delete [] A;
         delete [] B;
         delete [] C;
         delete [] At;
         delete [] temp;         
     system("PAUSE");
     return 0;
}
Сказали что должно быть наприме (int A[n][n],B[n][n]) что то типа тово!!!

Вот програмные файлы
Изображения
Тип файла: jpg c.jpg (15.1 Кб, 131 просмотров)
Вложения
Тип файла: rar Матриця.rar (69.3 Кб, 6 просмотров)

Последний раз редактировалось Stilet; 16.10.2010 в 11:48.
Romario92 вне форума Ответить с цитированием
Старый 16.10.2010, 00:12   #2
sever-42
Пользователь
 
Регистрация: 22.04.2010
Сообщений: 96
По умолчанию

Ранг у всех матриц одинаковый?
include <Qt>
sever-42 вне форума Ответить с цитированием
Старый 16.10.2010, 00:35   #3
Romario92
Пользователь
 
Регистрация: 15.10.2010
Сообщений: 49
По умолчанию

Ну да ОДНОГО

тьху, я не понимаю, как ето одинаковый?

Последний раз редактировалось Stilet; 16.10.2010 в 11:50.
Romario92 вне форума Ответить с цитированием
Старый 16.10.2010, 00:54   #4
sever-42
Пользователь
 
Регистрация: 22.04.2010
Сообщений: 96
По умолчанию

количество строк столбцов одинаковое)
*ошибся, ранг то у них может разный
include <Qt>

Последний раз редактировалось sever-42; 16.10.2010 в 01:00.
sever-42 вне форума Ответить с цитированием
Старый 16.10.2010, 00:58   #5
Romario92
Пользователь
 
Регистрация: 15.10.2010
Сообщений: 49
По умолчанию

НУ ДА ОДИНАКОВОЕ, ТЬХУ, НЕ ДОПИСАЛ ЗАДАНИЕ. С клавиатуры задание матрици A(nxn)B(nxn). Вычеслить матрицу С.
Romario92 вне форума Ответить с цитированием
Старый 16.10.2010, 01:09   #6
sever-42
Пользователь
 
Регистрация: 22.04.2010
Сообщений: 96
По умолчанию

У вас алгоритм впринцепи написан только, за место операторов new будет просто A[n][n], и параметры у функции поправить на int (*arr)[n]
include <Qt>
sever-42 вне форума Ответить с цитированием
Старый 16.10.2010, 01:16   #7
Romario92
Пользователь
 
Регистрация: 15.10.2010
Сообщений: 49
По умолчанию

Можете переделать, я просто не очень ото понимаю, только начили=)
И без етих выделений памяти под столбци и строки..

а что значат ети звездочки? Типу **arr1

Последний раз редактировалось Stilet; 16.10.2010 в 11:52.
Romario92 вне форума Ответить с цитированием
Старый 16.10.2010, 06:37   #8
atenon
Форумчанин
 
Регистрация: 05.12.2009
Сообщений: 253
По умолчанию

Цитата:
Сказали что должно быть наприме (int A[n][n],B[n][n]) что то типа тово!!!
Обманули, так как размер матрицы вводится с клавиатуры пользователем, следовательно без динамического выделения памяти, то есть без этих вот штучек "**" никак не обойтись.
Другой вопрос если в коде будет задаваться размер матрицы тогда можно переделать.
Приходится бежать со всех ног, чтобы только остаться на том же месте! Если хочешь попасть в другое место, тогда нужно бежать по меньшей мере вдвое быстрее! Льюис Кэрол

Последний раз редактировалось atenon; 16.10.2010 в 07:53.
atenon вне форума Ответить с цитированием
Старый 16.10.2010, 08:20   #9
sever-42
Пользователь
 
Регистрация: 22.04.2010
Сообщений: 96
По умолчанию

Код:
#include "stdafx.h"
#include <iostream>
#include <ctime>

using std::cout;
using std::cin;
using std::endl;

const size_t size = 3;
void output (int (*arr)[size], int size)
{
	for(int i=0; i<size; i++)
	{
		for(int j=0; j<size; j++)
		{
			cout<<arr[i][j]<<" ";
		}
		cout<<endl;
	}

}
void mult(int (*arr1)[size], int (*arr2)[size], int (*res)[size], int size)
{
	for ( int i=0; i<size; i++)
	{
		for (int j=0; j<size; j++)
		{
			for (int k=0; k<size; k++)
			{
				res[i][j] += arr1[i][k] * arr2[k][j];

			}
			//cout<<res[i][j]<<" ";
		}
		//cout<<endl;
	}
}
void trans(int (*matr)[size], int (*matr_tr)[size], int size)
{
	for(int i=0; i<size; i++)
	{
		for(int j=0; j<size; j++)
		{
			matr_tr[i][j]=matr[j][i];
		}
	}
}
void rizn(int (*matr1)[size], int (*res)[size], int size)
{
	for(int i=0; i<size; i++)
	{
		for(int j=0; j<size; j++)
		{
			res[i][j]=res[i][j]-matr1[i][j];
		}
	}
}
void mult_ch(int (*matr)[size], int (*res)[size], int size)
{
	for(int i=0; i<size; i++)
	{
		for(int j=0; j<size; j++)
		{
			res[i][j]=3*(matr[i][j]);
		}
	}
}
int main ()
{
	srand((unsigned int)time(NULL));
	setlocale( LC_ALL,"Russian" );
	int i,j;
	int A[size][size], 
		B[size][size], 
		C[size][size], 
		At[size][size],
		temp[size][size];

	for (i = 0; i < size; ++i) {
		for(j=0; j<size; j++) {
			A[i][j]=rand()%5;
			B[i][j]=rand()%5;
			C[i][j]=0;
			At[i][j]=0;
			temp[i][j] = 0;
		}
	}
	cout<<"Матрица А:"<<endl;
	output(A,size);
	cout<<endl;
	cout<<"Матрица B:"<<endl;
	output(B,size);
	cout<<endl;
	cout<<"Матрица C:"<<endl;
	//(A^t*B-3*B^2)*B
	trans(A, At, size); // A^T = At
	mult(At, B, C, size); //Аt * B = C
	
	mult_ch(B, A, size) ; //3*B^2 = A
	rizn(A, C, size); // A - C = A
	
	mult(A, B, C, size); //А * B = C
	output(C, size);
	
	return 0;
}
проверяйте правильность на листочке, может напутал где то(скорее всего).
include <Qt>

Последний раз редактировалось sever-42; 16.10.2010 в 08:24.
sever-42 вне форума Ответить с цитированием
Старый 16.10.2010, 10:08   #10
Romario92
Пользователь
 
Регистрация: 15.10.2010
Сообщений: 49
По умолчанию

А ето можна вопше убрать:
srand((unsigned int)time(NULL));
setlocale( LC_ALL,"Russian" );
int i,j;
int A[size][size],
B[size][size],
C[size][size],
At[size][size],
temp[size][size];

for (i = 0; i < size; ++i) {
for(j=0; j<size; j++) {
A[i][j]=rand()%5;
B[i][j]=rand()%5;
C[i][j]=0;
At[i][j]=0;
temp[i][j] = 0;
}
}
Romario92 вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
TurboPascal: графы, матрицы смежности и матрицы инцидентности. ulala Помощь студентам 1 03.03.2011 19:28
Каксоздать из матрицы минор этойже матрицы drNabla Microsoft Office Excel 8 23.05.2010 20:51
Матрицы:функция изменения порядка столбцов матрицы Fajyz Помощь студентам 0 13.01.2010 09:40
На главную диагональ матрицы поместить наибольшие элементы этой матрицы mivel Помощь студентам 2 23.12.2009 21:19