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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 06.12.2010, 07:12   #1
Nomid
 
Регистрация: 02.10.2010
Сообщений: 2
По умолчанию Реализовать в виде модуля набор подпрогамм для выполнения следующих операций квадратными матрицами

Реализовать в виде модуля набор подпрогамм для выполнения следующих операций квадратными матрицами:
1)сложение 2х матриц
2)умножение одной матрицы на другою
3)нахождение транспонированной матрицы
4)вычисление определителя матрицы

Данные считываются из файла и записываются в файл
Nomid вне форума Ответить с цитированием
Старый 06.12.2010, 08:54   #2
p51x
Старожил
 
Регистрация: 15.02.2010
Сообщений: 15,707
По умолчанию

наработки или деньги?
p51x вне форума Ответить с цитированием
Старый 06.12.2010, 09:04   #3
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Цитата:
Nomid
А ты сможешь показать код всех этих действ? Например напиши цикл сложения.
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 11.12.2010, 15:48   #4
Nomid
 
Регистрация: 02.10.2010
Сообщений: 2
По умолчанию

Цитата:
Сообщение от Stilet Посмотреть сообщение
А ты сможешь показать код всех этих действ? Например напиши цикл сложения.
Вообщем вот:

Код:
#include <iostream.h> 
#include <windows.h>
#include <string.h>


char FileName[256];
char Stroka[100];
char RusText[100];
char *slovo;

double **Matrix;
int i,j,N=0;

main()
{
    char RusMatrVvd[20],RusMatrStr[15],RusMatrStlb[15];
	CharToOem("Введите элемент ",RusMatrVvd);
	CharToOem("-ой стоки ",RusMatrStr);
	CharToOem("-ого столбца: ",RusMatrStlb);
	CharToOem("Введите размерность квадратной матрицы : ",RusText);			
	cout<<RusText;
	cin>>N;
    Matrix=new double*[N];		
	for(i=0;i<N;i++)		
	{	
		Matrix[i]=new double[N];
		for(j=0;j<N;j++)
		{
			cout<<RusMatrVvd<<i+1<<RusMatrStr<<j+1<<RusMatrStlb;
			cin>>Matrix[i][j];
		}
	
	CharToOem("Исходная матрица:",RusText);
	cout<<endl<<RusText<<endl;
    for(i=0;i<N;i++)
	{
		for(j=0;j<N;j++)
		{
		    cout<<Matrix[i][j]<<"\t";
		}
        cout<<endl;
	}
	
	CharToOem("Что делать? ",RusText);			
	cout<<endl<<RusText<<endl;
    CharToOem("1 - Вычисление определителя матрицы",RusText);
    cout<<endl<<RusText<<endl;
	CharToOem("2 - Сложение двух матриц ",RusText);
    cout<<endl<<RusText<<endl;
	CharToOem("3 - Умножение одной матрицы на другую ",RusText);
    cout<<endl<<RusText<<endl;
    CharToOem("4 - Нахождение транспонированной матрицы ",RusText);
    cout<<endl<<RusText<<endl;
	char vop1;
    cin>>vop1;
    switch(vop1)
	{
	       case 1:
		              //здесь считается определитель
           case 2:
                      // здесь вводится вторая матрица, а потом считается сумма
           case 3: 
                     // здесь вводится вторая матрица, а потом считается произведение 
           case 4:
                     //здесь находится транспонированная матрица
     }
getch();
return 0;
}
Вот я сами операции над матрицами не могу сделать, помогите пожалуйста, нужно еще чтобы после switch'a выводилось, сообщение спрашивающие "сделай что-нибудь еще?", и чтобы операции вызывались через функции

Вот сложение
Код:
for(int i=0;i<300;i++)
  for(int j=0;j<300;j++)
    C[i][j] = A[i][j] + B[i][j];
 
//Есть две матрицы A и B которые складываем, C - матрица-результ
Вот умножение
Код:
bool MultiplyMatrix(double **Matrix1, int Rows1, int Columns1,
     double **Matrix2, int Rows2, int Columns2,
     double ***ResultMatrix, int *ResultRows, int *ResultColumns)
{
 *ResultRows = Rows1;
 *ResultColumns = Columns2;
 double **Ret;
 Ret = AllocMatrix(*ResultRows, *ResultColumns);
        *ResultMatrix = Ret;
        if (Ret != NULL)
 {
  for (int i = 0; i < *ResultRows; i++)
   for (int j = 0; j < *ResultColumns; j++)
   {
    double Sum = 0;
    for (int n = 0; n < Rows2; n++)
    {
     Sum += Matrix1[i][n]*Matrix2[n][j];
    }
    (*ResultMatrix)[i][j] = Sum;
   }
  return true;
 }else return false;
}
Вот нахождение определителя
Код:
double Determinant()
{
	int maxl,k;
	double del, det=1,d;

//приведение матрицы к треугольному виду
	for(k=0;k<N-1;k++)
	{		
		maxl=k;
		for(i=k+1;i<N;i++)
		{
 			if(abs(Matrix[i][k])>abs(Matrix[k][k]))
			{
				maxl=i;
			}
		}
		if(maxl!=k)//если максимальный элемент не на диагонали, тогда переставляем строки с учетом изменения определителя
		{
			det=det*(-1);
			for(j=0;j<N;j++)
			{
				d=Matrix[k][j];
				Matrix[k][j]=Matrix[maxl][j];
				Matrix[maxl][j]=d;
			}
		}
		if(Matrix[k][k]!=0)
		{
			for(i=k+1;i<N;i++)
			{
				del=Matrix[i][k]/Matrix[k][k];
 				for(j=0;j<N;j++)
				{
					Matrix[i][j]=Matrix[i][j]-del*Matrix[k][j];//вычитание верхней строки от нижних
				}
	
			}
		}
		else
		{
			return 0;
		}
	}
//вычисление определителя путем премножения диагональных элементов
	for(i=0;i<N;i++)
		det*=Matrix[i][i];	
	return det;
}
Вот транспонирование
Код:
int m1[512*512];
int m2[512*512];

// копирование из m1 в m2 (1й способ)
for(int i = 0; i < 512; i++)
{
    for(int j = 0; j < 512; j++)
        {
        m2[i*512 + j] = m1[i*512 + j];
        }
}

// копирование из m1 в m2 с транспонированием (2й способ)
// 
for(int i = 0; i < 512; i++)
{
    for(int j = 0; j < 512; j++)
        {
        m2[i*512 + j] = m1[j*512 + i];
        }
}
Помогите теперь это для моей задачи в мой код запихнуть

Последний раз редактировалось Stilet; 11.12.2010 в 16:17.
Nomid вне форума Ответить с цитированием
Ответ


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

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Время выполнения операций Alex Cones Общие вопросы Delphi 2 05.07.2010 21:51
StringGrid выполнения операций при нажатии на рядок designer999 Общие вопросы Delphi 1 29.04.2010 12:12
Как реализовать набор вкладок Intersap Компоненты Delphi 2 25.03.2010 21:32
Класс матриц, перегрузка операций с матрицами andros Помощь студентам 1 26.12.2008 19:49