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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 16.12.2009, 22:33   #1
Alkanphel
Новичок
Джуниор
 
Регистрация: 16.12.2009
Сообщений: 1
По умолчанию Тестирование потоками данных

Задание: Написать программу, производящую вычисление произведения двух прямоугольных матриц друг на друга. Предусмотреть проверку возможности произвести перемножение матриц. Произвести тестирование программы способом тестирования потоков данных

Вот прога, правда с обычными матрицами. Еще не знаю че лучше сделать, либо выдавать ошибку и запрос на ввод количества строк и столбцов, или же просто запрашивать сразу количество строк. Но это не столь важно. Важно то, что не знаю как произвести тестирование потоками данных. Подскажите, кто что знает

Код программы.

Код:
#include <iostream>
#include <conio.h>
#include <stdio.h>


double ** AllocMatrix(int Rows, int Colomns)
{
double ** Matrix;
try
{
  Matrix = new double * [Rows];
  if( Matrix == NULL ) throw 0;
  for (int i = 0; i < Rows; i++)
  {
   Matrix[i] = new double [Colomns];
   if( Matrix[i] == NULL ) throw i;
  }
}
    catch( int index )
    {
        cout << "Ошибка выделения памяти" << endl;
  for (int i = 0; i < index; i++)
  {
   delete [] Matrix[i];
   Matrix[i] = NULL;
  }
  return NULL;
    }
return Matrix;
}

//Ввод матрицы
bool GetMatrix(double ***Matrix, int *Rows, int *Colomns)
{
cout << "Rows: "; cin >> (*Rows);
cout << "Colomns: "; cin >> (*Colomns);
//Выделить память под массив
double **Ret;
Ret = AllocMatrix(*Rows, *Colomns);
*Matrix = Ret;
        if (Ret != NULL)
{
  for (int i = 0; i < *Rows; i++)
   for (int j = 0; j < *Colomns; j++)
   {
    printf("Matrix[%d][%d] = ", i, j);
    cin >> Ret[i][j];
   }
  return true;
}else return false;
}




//Проверка размерностей
bool CheckMatrixes(int Rows1, int Colomns1, int Rows2, int Colomns2)
{
return (Rows2 == Colomns1);
}

//Умножение матриц
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;
}



//Вывод матрицы
void MatrixOut(double **Matrix, int Rows, int Columns)
{
for (int i = 0; i < Rows; i++)
{
  for (int j = 0; j < Columns; j++)
   cout << Matrix[i][j] << "\t";
  cout << endl;
}
}



//Освободить память матрицы
void FreeMatrix(double **Matrix, int Rows)
{
for (int i = 0; i < Rows; i++)
{

  delete [] Matrix[i];
  Matrix[i] = NULL;
}
delete [] Matrix;
Matrix = NULL;
}
int main()
{
/*locale::global(locale("rus")); */
  double ***A = new double **, ***B = new double **, ***C = new double **;
int ARowCount, AColCount, BRowCount, BColCount, CRowCount, CColCount;
do
{
  cout << "Input matrix A:\n";
} while (!GetMatrix(A, &ARowCount, &AColCount));
do
{
  cout << "input matrix B:\n";
} while (!GetMatrix(B, &BRowCount, &BColCount));
if (CheckMatrixes(ARowCount, AColCount, BRowCount, BColCount))
{
  if (MultiplyMatrix(*A, ARowCount, AColCount,
            *B, BRowCount, BColCount, C, &CRowCount, &CColCount))
  {
   cout << "Result:\n";
   MatrixOut(*C, CRowCount, CColCount);
   FreeMatrix(*C, CRowCount);
  }
} else cout << "Unable to multiplication\n";
FreeMatrix(*A, ARowCount);
FreeMatrix(*B, BRowCount);
/*system("pause"); */

   int status;

   printf("Enter Any button For Exit\n");
   status = getch();

  return 0;

}

Последний раз редактировалось Sazary; 17.12.2009 в 02:32.
Alkanphel вне форума Ответить с цитированием
Ответ


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

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

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


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Работа с потоками den49 Помощь студентам 0 06.10.2009 14:52
Работа с потоками Neymexa Общие вопросы .NET 16 23.04.2009 17:42
Проблемы с потоками... Deathwatcher Общие вопросы Delphi 5 20.04.2009 12:45
Проблема с потоками DeeNamid Общие вопросы Delphi 2 04.08.2008 17:36
C++, работа с потоками mat90x Помощь студентам 20 15.05.2008 22:20