Матрица 3на3 перемножиная с матрицей 3на1

Тема в разделе "C/C++/C#", создана пользователем Orion4ik, 9 янв 2011.

Статус темы:
Закрыта.
  1. Orion4ik

    Orion4ik Гость

    Код (C++):
    //задана матрица 3х3. Перемножить её с матрицей 3х1 и вывести итог на экран
    #include <iostream>
    #include <conio.h>
    using namespace std;
    int main()
    {
    setlocale (LC_ALL, ".1251");
    int arr1[3][3]={1,2,3,
    2,3,1,
    3,1,2};
    int arr2[3][1]={1,2,3};
    int arr3[3][3];
    int i;
    for (i=0;i<1;i++)
    {
    arr3[1][1]=arr1[1][1]*arr2[1][1];
    arr3[1][2]=arr1[1][2]*arr2[2][1];
    arr3[1][3]=arr1[1][3]*arr2[3][1];
    arr3[2][1]=arr1[2][1]*arr2[1][1];
    arr3[2][2]=arr1[2][2]*arr2[2][1];
    arr3[2][3]=arr1[2][3]*arr2[3][1];
    arr3[3][1]=arr1[3][1]*arr2[1][1];
    arr3[3][2]=arr1[3][2]*arr2[2][1];
    arr3[3][3]=arr1[3][3]*arr2[3][1];
    }
    printf("Полученая матрица:", arr3[3][3]);
    }
    вот задача помогите пожалуйста найти суть ошибки и переписать её через for, так что бы индексы были в for-e (j,k) и в это же время были на месте индексов в arr1 и arr2. Заранее благодарен!
     
  2. RiCrO

    RiCrO Гость

    Уделай препада. Заставь его поверить в то, что ты сидел днями напролёт и решал задачу. В конечном итоге у тебя получилось это.

    Код (C++):
    // Matrix.cpp : Defines the entry point for the console application.
    //

    #include "stdafx.h"
    #include "iostream"

    using namespace std;


    //Выделить память для матрицы
    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 << "Введите матрицу A:\n";
    } while (!GetMatrix(A, &ARowCount, &AColCount));
    do
    {
    cout << "Введите матрицу 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 << "Результат:\n";
    MatrixOut(*C, CRowCount, CColCount);
    FreeMatrix(*C, CRowCount);
    }
    } else cout << "Невозможно перемножить матрицы\n";
    FreeMatrix(*A, ARowCount);
    FreeMatrix(*B, BRowCount);
    system("pause");
    return 0;
    }

    http://plagiata.net.ru/?p=206 - читай тут. Такие темы стоит искать в Google.
     
  3. RiCrO

    RiCrO Гость

    По твоему коду, укажу места где есть ошибки.

    Код (C++):
    #include <iostream>
    #include <conio.h>
    using namespace std;
    int main()
    {
    setlocale (LC_ALL, ".1251"); // .1251 - замени на Russian или rus.
    int arr1[3][3]={{1,2,3},{2,3,1},{3,1,2}};
    int arr2[3][1]={1,2,3};
    int arr3[3][3];
    int i;
    for (i=0;i<1;i++) // Абсолютно нет смысла
    {
    arr3[1][1]=arr1[1][1]*arr2[1][1];
    arr3[1][2]=arr1[1][2]*arr2[2][1];
    arr3[1][3]=arr1[1][3]*arr2[3][1];
    arr3[2][1]=arr1[2][1]*arr2[1][1];
    arr3[2][2]=arr1[2][2]*arr2[2][1];
    arr3[2][3]=arr1[2][3]*arr2[3][1];
    arr3[3][1]=arr1[3][1]*arr2[1][1];
    arr3[3][2]=arr1[3][2]*arr2[2][1];
    arr3[3][3]=arr1[3][3]*arr2[3][1];
    }
    printf("Полученая матрица:", arr3[3][3]); // Интересный момент. Выводишь элемент 3-й строки 3-го столбца. Тут лучше использовать cout << arr[i][j];

    // Забыл дописать строчку кода: тут необходим return 0;
    }
    Короче, вот тебе твоя работа, но матрица 3х3. Подумай сам что делать дальше. Работа простая.

    Код (C++):
    #include <iostream>
    #include <conio.h>
    using namespace std;

    int main()
    {
    setlocale (LC_ALL, "Russian");
    int arr1[3][3]={{1,2,3},{2,3,1},{3,1,2}};
    int arr2[3][3]={{1,2,3},{2,3,1},{3,1,2}};
    int arr3[3][3];
    int i;
    int j;

    for (i=0; i<3; i++)
    {
    for (j=0; j<3; j++)
    {
    arr3[i][j] = (arr1[i][j])*(arr2[i][j]);

    }

    }

    cout << " Матрица arr3: ";
    for (i=0; i<3; i++)
    {
    for (j=0; j<3; j++)
    {
    cout << arr3[i][j] << ' ';


    }

    }

    cout << endl;
    return 0;
    }
     
  4. Orion4ik

    Orion4ik Гость

    Спасибо, только не пойму в чём разница если локаль поменять?
     
Загрузка...
Похожие Темы - Матрица 3на3 перемножиная
  1. fatpunk
    Ответов:
    0
    Просмотров:
    1.137
  2. нини
    Ответов:
    3
    Просмотров:
    1.746
  3. phobiaxx
    Ответов:
    1
    Просмотров:
    1.278
  4. vladis222
    Ответов:
    1
    Просмотров:
    1.285
  5. LudmilaUt
    Ответов:
    0
    Просмотров:
    1.384
Статус темы:
Закрыта.

Поделиться этой страницей