Имя пользователя:
Пароль:  
Помощь | Регистрация | Забыли пароль?  

Название темы: Помогите решить
Показать сообщение отдельно

Аватара для Drongo

Будем жить, Маэстро...


Сообщения: 6694
Благодарности: 1393

Профиль | Сайт | Отправить PM | Цитировать


Решил часть 3-й задачи... Пожалуйста, раскритикуйте мой код... Приму любые дельные замечания..
Кроме того хочу узнать, посоветуйте, как решается данная задачка, если можно попунктно, например: шаг 1... шаг 2... шаг 3... и т.д... от чего отталкиваться, приму любые ссылки. Но больше всего хочу узнать, как определить класс "Вектор" и умножить Вектор на Матрицу... Очень бы хотелось увидеть код, выполняющий это умножение, а не сухое определение Вектора... Поскольку считаю для себя проблему в том, что я не могу определить класс "Вектор"... Передаю файл, который у меня получился... Так что критикуйте, как пожелает сердце, ведь в споре рождается истина, всем благодарен, за советы и помощь, кто откликнется!
Код: Выделить весь код
//---------------------------------------------------------------------------
#include <iostream.h>
using std::cout;
using std::cin;
using std::endl;

#include <iomanip>
using std::setw;

class Matrix{ // Класс Matrix
   // Дружеская функция умножения Матрицы на Матрицу
   friend void MultiplicationMatrix(Matrix &mMatrix);
   // Дружеская функция умножения Матрицы на Число
   friend void NumberMultiplicationMatrix(Matrix &mMatrix, int);
public:
   Matrix(int height = 1, int width = 1); // Конструктор с аргументами по умолчанию
   void setMatrix(int height, int width); // Установка размера матрицы
   void UserFromKeyboards(); // Ввод данных с клавиатуры
   void PrintTwoMatrix(); // Печать Значений Матриц
   ~Matrix(); // Деструктор
private:
   int *Matrix_1; // Указатель на целое (Первая Матрица)
   int *Matrix_2; // Указатель на целое (Вторая Матрица)
   int SizeMatrix; // Размер Матрицы
   int row; // Сколько строк в Матрице
   int column;  // Сколько столбцов в Матрице
};
// Конструктор--------------------------------------------------------------
Matrix::Matrix(int height, int width)
{
   setMatrix(height, width);
}
// Установка размера Матрицы------------------------------------------------
void Matrix::setMatrix(int h, int w)
{
   SizeMatrix = h * w;
}
// Ввод данных с клавиатуры-------------------------------------------------
void Matrix::UserFromKeyboards()
{
   int counter_1 = 1,
   counter_2 = 1;

   cout<<" Enter size Column: ";
   cin>>column;                 // Столбцы
   cout<<" Enter size Row: ";
   cin>>row;                    // Строки

   setMatrix(row, column); // Определение размера Матрицы ( row * column )
   Matrix_1 = new int[SizeMatrix]; // Матрица 1 в виде одномерного массива
   Matrix_2 = new int[SizeMatrix]; // Матрица 2 в виде одномерного массива

   // Циклический ввод в 1-ю Матрицу 
   for(int i = 0; i < SizeMatrix; i++){
      cout<<" Enter value in 'Matrix_1', position "<<counter_1++<<" Value: ";
      cin>>Matrix_1[i];
    }

   cout<<endl; // Пустая строка (для читабельности)

   // Циклический ввод в 2-ю Матрицу
   for(int j = 0; j < SizeMatrix; j++){
      cout<<" Enter value in 'Matrix_2', position "<<counter_2++<<" Value: ";
      cin>>Matrix_2[j];
    }
}
// Вывод элементов обоих Матриц на экран------------------------------------
void Matrix::PrintTwoMatrix()
{
   int control_1 = 0, // Для вывода знака '|' в начале 1-й Матрицы
       control_2 = 0, // Для вывода знака '|' в начале 2-й Матрицы
       counColumn_1 = column, // Для вывода знака '|' в конце 1-й Матрицы
       counColumn_2 = column; // Для вывода знака '|' в конце 2-й Матрицы
       
   // Вывод на экран 1-й Матрицы
   for(int j = 0; j < SizeMatrix; j++){
      if(control_1 == 0){
        cout<<'|';
        control_1++;
      }
      cout<<setw(7)<<Matrix_1[j];
      if(j == counColumn_1-1){
        counColumn_1 += column;
        cout<<'|';
        control_1 = 0;
        cout<<endl;
      }
    }

   cout<<"\n\n";  // Пару пустых строк (для читабельности)

   // Вывод на экран 2-й Матрицы
   for(int jj = 0; jj < SizeMatrix; jj++){
      if(control_2 == 0){
        cout<<'|';
        control_2++;
      }
      cout<<setw(7)<<Matrix_2[jj];
      if(jj == counColumn_2-1){
        counColumn_2 += column;
        cout<<'|';
        control_2 = 0;
        cout<<endl;
      }
    }
}
// Деструктор---------------------------------------------------------------
Matrix::~Matrix()
{
  cout<<"Destructor"<<endl;
}
// Дружеская функция умножения Матрицы на Матрицу. В качестве---------------
// хранения результатов используется 2-я Матрица----------------------------
void MultiplicationMatrix(Matrix &mMatrix)
{
   int control = 0,
       counColumn = mMatrix.column;

   // Умножение Матрицы на Матрицу.
   // Циклическое умножение элемента 1-й Матрицы на элемент 2-й Матрицы
   for(int i = 0; i < mMatrix.SizeMatrix; i++)
      mMatrix.Matrix_2[i] *= mMatrix.Matrix_1[i];// * mMatrix.Matrix_2[i];

   cout<<"\n\n Result Multiplication...\n\n";

   // Вывод результата умножения Матрицы на Матрицу
   for(int j = 0; j < mMatrix.SizeMatrix; j++){
      if(control == 0){
        cout<<'|';
        control++;
      }
      cout<<setw(7)<<mMatrix.Matrix_2[j];
      if(j == counColumn-1){
        counColumn += mMatrix.column;
        cout<<'|';
        control = 0;
        cout<<endl;
      }
    }
}
// Дружеская функция умножения Матрицы на Число. В качестве------------------
// хранения результатов используется 2-я Матрица-----------------------------
void NumberMultiplicationMatrix(Matrix &mMatrix, int number)
{
   int control = 0,
       counColumn = mMatrix.column;

   // Умножение Матрицы на Число.
   // Циклическое умножение элемента 1-й Матрицы на элемент 2-й Матрицы
   for(int i = 0; i < mMatrix.SizeMatrix; i++)
      mMatrix.Matrix_2[i] = number * mMatrix.Matrix_1[i];

   cout<<"\n\n Result Multiplication Number "<<number<<" 'Matrix_1'\n\n";

   // Вывод результата умножения Матрицы на Число
   for(int j = 0; j < mMatrix.SizeMatrix; j++){
      if(control == 0){
        cout<<'|';
        control++;
      }
      cout<<setw(7)<<mMatrix.Matrix_2[j];
      if(j == counColumn-1){
        counColumn += mMatrix.column;
        cout<<'|';
        control = 0;
        cout<<endl;
      }
    }
}
// Выполнение программы------------------------------------------------------
int main()
{
  int z, num;
  Matrix matrx_1;

  matrx_1.UserFromKeyboards(); // Ввод
  matrx_1.PrintTwoMatrix();    // Печать

  MultiplicationMatrix(matrx_1); // Функция умножения Матрицы на Матрицу
  
  // Предложение ввести Число на которое будет умножена 1-я Матрица
  cout<<"\n\n Enter Number Multiplication Matrix: ";
  cin>>num;
  cout<<endl;
  NumberMultiplicationMatrix(matrx_1, num); // Функция умножения Матрицы на Число

  cin>>z;
        return 0;
}
//---------------------------------------------------------------------------

-------
Правильная постановка вопроса свидетельствует о некотором знакомстве с делом.
3нание бывает двух видов. Мы сами знаем предмет — или же знаем, где найти о нём сведения.
[Quick Killer 3.0 Final [OSZone.net]] | [Quick Killer 3.0 Final [SafeZone.cc]] | [Парсер логов Gmer] | [Парсер логов AVZ]

http://tools.oszone.net/Drongo/Userbar/SafeZone_cc.gif


Последний раз редактировалось Drongo, 31-01-2008 в 20:05.

Это сообщение посчитали полезным следующие участники:

Отправлено: 17:57, 06-11-2007 | #6

Название темы: Помогите решить