Операции с матрицами на C++

C++Beginner
Практиковаться сейчас

Введение

В этом практическом занятии вы научитесь выполнять различные операции с матрицами, такие как сложение, вычитание и умножение, над заданным двумерным массивом с использованием языка программирования C++. Также вы научитесь эффективно манипулировать и использовать массивы.

Создание файла программы на C++

Создайте новый файл с именем matrix_operations.cpp в директории ~/project. Это можно сделать с использованием следующей команды в терминале.

touch ~/project/matrix_operations.cpp

Подключение необходимых библиотек и настройка главной функции

Первым шагом в нашей программе на C++ является подключение библиотек, необходимых для операций ввода/вывода и очистки консоли. Затем настройте главную функцию для вашей программы на C++. Вы можете использовать следующий код в качестве шаблона.

#include<iostream.h>
#include<conio.h>

int main()
{
    clrscr();
    // Ваш код здесь
    getch();
    return 0;
}

Сложение двух матриц

В этом шаге мы создадим случай для сложения двух матриц. Программа на C++ попросит пользователя ввести размерность или размеры двух матриц (должны быть m*n и o*p).

Если размерности матриц не совпадают, программа вернет сообщение об ошибке. Затем вводятся элементы матриц и они складываются. Финальный код должен выглядеть следующим образом.

//СЛОЖЕНИЕ
case 1:
    cout<<"\nВведите размерность матрицы a (должна быть m*n): "<<endl;
    cin>>m;
    cout<<"* \n";
    cin>>n;
    cout<<"Введите размерность матрицы b (должна быть o*p): "<<endl;
    cin>>o;
    cout<<"* \n";
    cin>>p;
    if (m==o&&n==p)
    {
        cout<<"Сложение возможно "<<endl;
    }
    else
    {
        cout<<"Сложение невозможно ";
        l=0;
    }

    if(l)
    {
        cout<<"\n\nВведите элементы матрицы 1: "<<endl;
        for (i=1;i<=m;i++)
        {
            for (j=1;j<=n;j++)
                cin>>a[i][j];
        }
        cout<<"Элементы матрицы 1: ";
        for (i=1;i<=m;i++)
        {
            cout<<endl;
            for (j=1;j<=n;j++)
                cout<<a[i][j]<<" ";
        }
        cout<<"\nВведите элементы матрицы 2: "<<endl;
        for (i=1;i<=o;i++)
        {
            for (j=1;j<=p;j++)
                cin>>b[i][j];
        }
        cout<<"Элементы матрицы 2: ";
        for (i=1;i<=o;i++)
        {
            cout<<endl;
            for (j=1;j<=p;j++)
                cout<<b[i][j]<<" ";
        }
        cout<<"\n\n\nСложение:\nc=a+b=";
        for (i=1;i<=m;i++)
        {
            for (j=1;j<=n;j++)
            {
                c[i][j]=a[i][j]+b[i][j];
            }
        }
        for (i=1;i<=m;i++)
        {
            cout<<endl;
            for (j=1;j<=n;j++)
                cout<<c[i][j]<<" ";
        }
    }
    break;

Вычитание двух матриц

В этом шаге мы создадим случай для вычитания двух матриц. Программа на C++ попросит пользователя ввести размерность или размеры двух матриц (должны быть m*n и o*p).

Если размерности матриц не совпадают, программа вернет сообщение об ошибке. Затем вводятся элементы матриц и они вычитаются. Финальный код должен выглядеть следующим образом.

//ВЫЧИТАНИЕ
case 2:
    cout<<"\nВведите размерность матрицы a (должна быть m*n): "<<endl;
    cin>>m;
    cout<<"* \n";
    cin>>n;
    cout<<"Введите размерность матрицы b (должна быть o*p): "<<endl;
    cin>>o;
    cout<<"* \n";
    cin>>p;
    if (m==o&&n==p)
    {
        cout<<"Вычитание возможно "<<endl;
    }
    else
    {
        cout<<"Вычитание невозможно ";
        l=0;
    }

    if(l)
    {
        cout<<"\n\nВведите элементы матрицы 1: "<<endl;
        for (i=1;i<=m;i++)
        {
            for (j=1;j<=n;j++)
                cin>>a[i][j];
        }
        cout<<"Элементы матрицы 1: ";
        for (i=1;i<=m;i++)
        {
            cout<<endl;
            for (j=1;j<=n;j++)
                cout<<a[i][j]<<" ";
        }
        cout<<"\nВведите элементы матрицы 2: "<<endl;
        for (i=1;i<=o;i++)
        {
            for (j=1;j<=p;j++)
                cin>>b[i][j];
        }
        cout<<"Элементы матрицы 2: ";
        for (i=1;i<=o;i++)
        {
            cout<<endl;
            for (j=1;j<=p;j++)
                cout<<b[i][j]<<" ";
        }
        cout<<"\n\n\nВычитание:\nc=a-b=";
        for (i=1;i<=m;i++)
        {
            for (j=1;j<=n;j++)
            {
                c[i][j]=a[i][j]-b[i][j];
            }
        }
        for (i=1;i<=m;i++)
        {
            cout<<endl;
            for (j=1;j<=n;j++)
                cout<<c[i][j]<<" ";
        }
    }
    break;

Умножение двух матриц

В этом шаге мы создадим случай для умножения двух матриц. Программа на C++ попросит пользователя ввести размерность или размеры двух матриц (должны быть m*n и o*p).

Если размерности матриц не совместимы, программа вернет сообщение об ошибке. Затем вводятся элементы матриц и они умножаются. Финальный код должен выглядеть следующим образом.

//УМНОЖЕНИЕ
case 3:
    cout<<"\nВведите размерность матрицы a (должна быть m*n): "<<endl;
    cin>>m;
    cout<<"* \n";
    cin>>n;
    cout<<"Введите размерность матрицы b (должна быть o*p): "<<endl;
    cin>>o;
    cout<<"* \n";
    cin>>p;
    if (n==o)
    {
        cout<<"Умножение возможно "<<endl;
    }
    else
    {
        cout<<"Умножение невозможно ";
        l=0;
    }

    if(l)
    {
        cout<<"\n\nВведите элементы матрицы 1: "<<endl;
        for (i=1;i<=m;i++)
        {
            for (j=1;j<=n;j++)
                cin>>a[i][j];
        }
        cout<<"Элементы матрицы 1: ";
        for (i=1;i<=m;i++)
        {
            cout<<endl;
            for (j=1;j<=n;j++)
                cout<<a[i][j]<<" ";
        }
        cout<<"\nВведите элементы матрицы 2: "<<endl;
        for (i=1;i<=o;i++)
        {
            for (j=1;j<=p;j++)
                cin>>b[i][j];
        }
        cout<<"Элементы матрицы 2: ";
        for (i=1;i<=o;i++)
        {
            cout<<endl;
            for (j=1;j<=p;j++)
                cout<<b[i][j]<<" ";
        }
        cout<<"\n\n\nУмножение:\nc=aXb=";
        for (i=1;i<=m;i++)
        {
            for (j=1;j<=p;j++)
            {
                c[i][j]=0;
                for (int k=1;k<=n;k++)
                {
                    c[i][j]=c[i][j]+(a[i][k]*b[k][j]);
                }
            }
        }
        for (i=1;i<=m;i++)
        {
            cout<<endl;
            for (j=1;j<=p;j++)
                cout<<c[i][j]<<" ";
        }
    }
    break;

Запуск программы на C++

Вы можете запустить файл matrix_operations.cpp, скомпилировав его с помощью следующей команды в терминале:

g++ ~/project/matrix_operations.cpp -o matrix && ./matrix

Возможно, вам придется заменить matrix_operations.cpp именем вашего файла с программой на C++.

Предполагая, что ваш код выдаёт ожидаемый результат, вы должны увидеть приглашение для ввода номера случая (1 для сложения, 2 для вычитания и 3 для умножения). После ввода вашего выбора программа попросит вас ввести матрицы в соответствии с выбранной операцией.

Полный код программы на C++

Вот полный код для нашего файла программы matrix_operations.cpp.

#include<iostream.h>
#include<conio.h>

int main()
{
    clrscr();
    int a[50][50],b[50][50],c[50][50],i,j,m,n,o,p,l=1,r;
    cout<<"Введите вариант:\n";
    cin>>r;
    switch(r)
    {
        //СЛОЖЕНИЕ
        case 1:
            cout<<"\nВведите размерность матрицы a (должна быть m*n): "<<endl;
            cin>>m;
            cout<<"*\n";
            cin>>n;
            cout<<"Введите размерность матрицы b (должна быть o*p): "<<endl;
            cin>>o;
            cout<<"*\n";
            cin>>p;
            if (m==o&&n==p)
            {
                cout<<"Сложение возможно "<<endl;
            }
            else
            {
                cout<<"Сложение невозможно ";
                l=0;
            }

            if(l)
            {
                cout<<"\n\nВведите элементы матрицы 1: "<<endl;
                for (i=1;i<=m;i++)
                {
                    for (j=1;j<=n;j++)
                        cin>>a[i][j];
                }
                cout<<"Элементы матрицы 1: ";
                for (i=1;i<=m;i++)
                {
                    cout<<endl;
                    for (j=1;j<=n;j++)
                        cout<<a[i][j]<<" ";
                }
                cout<<"\nВведите элементы матрицы 2: "<<endl;
                for (i=1;i<=o;i++)
                {
                    for (j=1;j<=p;j++)
                        cin>>b[i][j];
                }
                cout<<"Элементы матрицы 2: ";
                for (i=1;i<=o;i++)
                {
                    cout<<endl;
                    for (j=1;j<=p;j++)
                        cout<<b[i][j]<<" ";
                }
                cout<<"\n\n\nСложение:\nc=a+b=";
                for (i=1;i<=m;i++)
                {
                    for (j=1;j<=n;j++)
                    {
                        c[i][j]=a[i][j]+b[i][j];
                    }
                }
                for (i=1;i<=m;i++)
                {
                    cout<<endl;
                    for (j=1;j<=n;j++)
                        cout<<c[i][j]<<" ";
                }
            }
            break;

        //ВЫЧИТАНИЕ
        case 2:
            cout<<"\nВведите размерность матрицы a (должна быть m*n): "<<endl;
            cin>>m;
            cout<<"*\n";
            cin>>n;
            cout<<"Введите размерность матрицы b (должна быть o*p): "<<endl;
            cin>>o;
            cout<<"*\n";
            cin>>p;
            if (m==o&&n==p)
            {
                cout<<"Вычитание возможно "<<endl;
            }
            else
            {
                cout<<"Вычитание невозможно ";
                l=0;
            }

            if(l)
            {
                cout<<"\n\nВведите элементы матрицы 1: "<<endl;
                for (i=1;i<=m;i++)
                {
                    for (j=1;j<=n;j++)
                        cin>>a[i][j];
                }
                cout<<"Элементы матрицы 1: ";
                for (i=1;i<=m;i++)
                {
                    cout<<endl;
                    for (j=1;j<=n;j++)
                        cout<<a[i][j]<<" ";
                }
                cout<<"\nВведите элементы матрицы 2: "<<endl;
                for (i=1;i<=o;i++)
                {
                    for (j=1;j<=p;j++)
                        cin>>b[i][j];
                }
                cout<<"Элементы матрицы 2: ";
                for (i=1;i<=o;i++)
                {
                    cout<<endl;
                    for (j=1;j<=p;j++)
                        cout<<b[i][j]<<" ";
                }
                cout<<"\n\n\nВычитание:\nc=a-b=";
                for (i=1;i<=m;i++)
                {
                    for (j=1;j<=n;j++)
                    {
                        c[i][j]=a[i][j]-b[i][j];
                    }
                }
                for (i=1;i<=m;i++)
                {
                    cout<<endl;
                    for (j=1;j<=n;j++)
                        cout<<c[i][j]<<" ";
                }
            }
            break;

        //УМНОЖЕНИЕ
        case 3:
            cout<<"\nВведите размерность матрицы a (должна быть m*n): "<<endl;
            cin>>m;
            cout<<"*\n";
            cin>>n;
            cout<<"Введите размерность матрицы b (должна быть o*p): "<<endl;
            cin>>o;
            cout<<"*\n";
            cin>>p;
            if (n==o)
            {
                cout<<"Умножение возможно "<<endl;
            }
            else
            {
                cout<<"Умножение невозможно ";
                l=0;
            }

            if(l)
            {
                cout<<"\n\nВведите элементы матрицы 1: "<<endl;
                for (i=1;i<=m;i++)
                {
                    for (j=1;j<=n;j++)
                        cin>>a[i][j];
                }
                cout<<"Элементы матрицы 1: ";
                for (i=1;i<=m;i++)
                {
                    cout<<endl;
                    for (j=1;j<=n;j++)
                        cout<<a[i][j]<<" ";
                }
                cout<<"\nВведите элементы матрицы 2: "<<endl;
                for (i=1;i<=o;i++)
                {
                    for (j=1;j<=p;j++)
                        cin>>b[i][j];
                }
                cout<<"Элементы матрицы 2: ";
                for (i=1;i<=o;i++)
                {
                    cout<<endl;
                    for (j=1;j<=p;j++)
                        cout<<b[i][j]<<" ";
                }
                cout<<"\n\n\nУмножение:\nc=aXb=";
                for (i=1;i<=m;i++)
                {
                    for (j=1;j<=p;j++)
                    {
                        c[i][j]=0;
                        for (int k=1;k<=n;k++)
                        {
                            c[i][j]=c[i][j]+(a[i][k]*b[k][j]);
                        }
                    }
                }
                for (i=1;i<=m;i++)
                {
                    cout<<endl;
                    for (j=1;j<=p;j++)
                        cout<<c[i][j]<<" ";
                }
            }
            break;
        // стандартный случай
        default:
            cout<<"Неверный выбор";
    }
    getch();
    return 0;
}

Резюме

В этом практическом занятии вы узнали, как выполнять различные операции с матрицами на заданном двумерном массиве с использованием программирования на C++. Вы также узнали, как манипулировать и использовать массивы. Теперь вы должны хорошо понять, как работают матрицы в программировании на C++.