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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 24.02.2023, 18:42   #1
Женя32
Форумчанин
 
Регистрация: 12.09.2008
Сообщений: 621
Счастье Умножения матриц

Здравствуйте!
Не давно начал изучать C++ по видео урокам. И в одном уроки не могу понять, что я делаю не так?
Подскажите, пожалуйста, в чем я ошибся?
Раз 20 проверил, но все также написал.
Код:
//...
int main()
{
    setlocale(LC_ALL, "Russian");

    int a, b, c, d;//размерность матриц
    do
    {
        system("cls");
        cout << "Введите размерность 1 матрицы: ";
        cin >> a >> b;
        cout << "Введите размерность 2 матрицы: ";
        cin >> c >> d;
        if (b != c)
        {
            system("cls");
            cout << "Невозможно умножить!";
            _getch();
        }
    } while (b != c);


    int **M1 = new int*[a];
    for (int i(0); i < a; i++)
        M1[i] = new int[b];

    int **M2 = new int*[c];
    for (int i(0); i < c; i++)
        M2[i] = new int[d];

    int** M3 = new int* [a];
    for (int i(0); i < a; i++)
        M3[i] = new int[d];

    system("cls");
    cout << "Заполните 1 матрицу " << a << "x" << b << " :\n";

    for (int i(0); i < a; i++)
    {
        for (int j(0); j < b; j++)
        {
            cin >> M1[i][j];
        }
    }

    for (int i(0); i < a; i++)
    {
        for (int j(0); j < b; j++)
        {
            M1[i][j] = 0;//обнуляем матрицу
        }
    }

    system("cls");
    cout << "Заполните 2 матрицу " << c << "x" << d << " :\n";

    for (int i(0); i < c; i++)
    {
        for (int j(0); j < d; j++)
        {
            cin >> M2[i][j];
        }
    }

    system("cls");
    for (int i = 0; i < a; i++)
    {
        for (int j = 0; j < d; j++)
        {
            for (int m = 0; m < b; m++)
            {
                M3[i][j] += M1[i][m]*M2[m][j];
            }
        }
    }

    for (int i(0), l(0); i < a || l < c;)
    {
        cout << "| ";
        if (i < a)
        {
            for (int j(0); j < b; j++)
            {
                cout << M1[i][j] << " ";
            }
            i++;
        }
        cout << "\t|      | ";
        
        if (l < c)
        {
            for (int j(0); j < d; j++)
            {
                cout << M2[l][j] << " ";
            }
            l++;
        }
        cout << "|";
        cout << endl;
    }

    cout << endl;
    for (int i(0); i < a; i++)
    {
        for (int j(0); j < d; j++)
        {
            cout << M3[i][j] << ' ';
        }
        cout << endl;
    }



    for (int i(0); i < a; i++)
        delete[] M1[i];
    delete[] M1;

    for (int i(0); i < c; i++)
        delete[] M2[i];
    delete[] M2;
    
    for (int i(0); i < a; i++)
        delete[] M3[i];
    delete[] M3;

    _getch(); // ожидание нажатия клавиши. Модуль conio.h
    return 0; // условие завершение программы
}
Изображения
Тип файла: png matrix.png (49.8 Кб, 18 просмотров)
Женя32 вне форума Ответить с цитированием
Старый 24.02.2023, 18:48   #2
p51x
Старожил
 
Регистрация: 15.02.2010
Сообщений: 15,709
По умолчанию

Код:
for (int i(0); i < a; i++)
    {
        for (int j(0); j < b; j++)
        {
            M1[i][j] = 0;//обнуляем матрицу
        }
    }
Зачем вы обнуляете только что введенную матрицу?
p51x вне форума Ответить с цитированием
Старый 24.02.2023, 18:53   #3
Женя32
Форумчанин
 
Регистрация: 12.09.2008
Сообщений: 621
Счастье

Цитата:
Сообщение от p51x Посмотреть сообщение
Зачем вы обнуляете только что введенную матрицу?
Как здесь сказано, так я и хочу сделать.
https://youtu.be/RacPeEbtX08?list=PL...RghGTOOTy&t=54
Женя32 вне форума Ответить с цитированием
Старый 24.02.2023, 20:39   #4
BDA
МегаМодератор
СуперМодератор
 
Аватар для BDA
 
Регистрация: 09.11.2010
Сообщений: 7,291
По умолчанию

Только в уроке он обнуляет 3ю матрицу, а не 1ю.
Пишите язык программирования - это форум программистов, а не экстрасенсов. (<= это подпись )
BDA вне форума Ответить с цитированием
Старый 24.02.2023, 21:04   #5
Женя32
Форумчанин
 
Регистрация: 12.09.2008
Сообщений: 621
По умолчанию

Цитата:
Сообщение от BDA Посмотреть сообщение
Только в уроке он обнуляет 3ю матрицу, а не 1ю.
BDA, спасибо большое! Целый день убил из-за своей не внимательности.
Женя32 вне форума Ответить с цитированием
Старый 24.02.2023, 21:37   #6
Женя32
Форумчанин
 
Регистрация: 12.09.2008
Сообщений: 621
Счастье

Еще вопрос возник...
Почему вот этот код вызывает ошибку?
Код:
   for (int i(0); i < a; i++)
        delete[] M3[i];
Изображения
Тип файла: png matrix 3.png (14.0 Кб, 15 просмотров)
Женя32 вне форума Ответить с цитированием
Старый 24.02.2023, 21:51   #7
macomics
Участник клуба
 
Регистрация: 17.04.2022
Сообщений: 1,833
По умолчанию

---

Последний раз редактировалось macomics; 24.02.2023 в 22:01.
macomics вне форума Ответить с цитированием
Старый 25.02.2023, 00:09   #8
BDA
МегаМодератор
СуперМодератор
 
Аватар для BDA
 
Регистрация: 09.11.2010
Сообщений: 7,291
По умолчанию

Надеюсь, что в цикле обнуления вы поправили не только матрицу, но и размеры (вместо a и b сделали a и d)?
Пишите язык программирования - это форум программистов, а не экстрасенсов. (<= это подпись )

Последний раз редактировалось BDA; 25.02.2023 в 09:02.
BDA вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
параллельный алгоритм умножения матриц С++ Kurvochka Помощь студентам 0 09.12.2012 17:05
составить программу умножения двух квадратных матриц gnom 62 Помощь студентам 15 06.05.2012 14:52
векторизация умножения матриц alek3s Помощь студентам 1 07.11.2011 16:32
машина Тьюринга для умножения булевых матриц Люля. Помощь студентам 2 09.06.2010 18:11
Написать функцию умножения двух матриц X(N,M) и Y(M,K) Doublefaced Помощь студентам 1 02.07.2009 09:04