Форум программистов, компьютерный форум CyberForum.ru
Наши страницы

Умножение матриц - C++

Войти
Регистрация
Восстановить пароль
Другие темы раздела
C++ Без ссылки - работает, а с - нет. http://www.cyberforum.ru/cpp-beginners/thread142803.html
Вот код: #include "stdafx.h" #include <iostream> #include <conio.h> using namespace std; class String { private: char a;
C++ обработка символьной информации Здраствуйте,прошу помощи со следующей задачей: В заданном тексте найти самое длинное слово в котором все буквы разные примерные мои наброски на самое длинное слово #include <conio.h>... http://www.cyberforum.ru/cpp-beginners/thread142799.html
Visual C++ Массивы C++
Помогите пожалуйста решить несколько задач на Visual С++, буду очень благодарен. 1) А) В одномерном массиве, состоящем из n целых элементов вычислить: 1. номер максимального элемента массива;...
C++ символьный и строковый тип данных
помогите пожалуйста используя процедуры и функции для работы со стоками, выполнить следующее задание.В тексте длины не более 255 знаков последнее слово переставить на первое место очень срочно...
C++ Статические библиотеки http://www.cyberforum.ru/cpp-beginners/thread142781.html
Как создать статическую библиотеку? Использую в турбо с. Я чего-то не то делаю? Создала файл LIB.H с кодом #ifndef MY_COOL_LIBRARY #define MY_COOL_LIBRARY class A { public: int i;
C++ Написать программу, которая считывает текст из файла и выводит на экран только цитаты, то есть предложения, заключенные в кавычки Написать программу, которая считывает текст из файла и выводит на экран только цитаты, то есть предложения, заключенные в кавычки. помогите пожалуйста:gcray: подробнее

Показать сообщение отдельно
Gleban_38
7 / 6 / 1
Регистрация: 03.06.2010
Сообщений: 13
09.06.2010, 01:52
Доброй ночи! Вот, посмотрите примерный план умножения динамических матриц:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
#include "stdafx.h"
#include "math.h"
#include "conio.h"
#include <iostream>
#include <iomanip>
using namespace std;
void main()
{   
    int N=0;
    setlocale(LC_ALL,"Russian");
    cout<<"Введите размер массива:\nN=";
    cin>>N;
    while(N<0 || N>10)
    {
        cout<<"Вы ввели слишком большой/малый размер матрицы. Попробуйте еще разик!\nN=";
        cin>>N;
    }
    // Делаем динамический массив под первую матрицу.
    int **MatricaA= new int*[N];
    for(int i=0;i<N;i++)
        MatricaA[i]= new int [N];
    // Делаем динамический массив под вторую матрицу.
    int **MatricaB= new int*[N];
    for(int i=0;i<N;i++)
        MatricaB[i]= new int [N];
    // Делаем динамический массив под результат матрицу.
    int **MatricaC= new int*[N];
    for(int i=0;i<N;i++)
        MatricaC[i]= new int [N];
    // Набираем значения.
    for(int i=0; i<N; i++) 
        for(int j=0; j<N; j++)
        {
            MatricaA[i][j]=rand()%100;
            MatricaB[i][j]=rand()%100;
        }
    // Распечатка Ваших матриц.
    cout<<"\nПервая матрица выглядит:\n";
    for(int i=0; i<N; i++) 
    {
        for(int j=0; j<N; j++) 
        {
            cout<<setw(4)<<MatricaA[i][j];
        }
        cout<<endl;
    }
    cout<<"\nВторая матрица выглядит:\n";
    for(int i=0; i<N; i++) 
    {
        for(int j=0; j<N; j++) 
        {
            cout<<setw(4)<<MatricaB[i][j];
        }
        cout<<endl;
    }
    for(int i=0; i<N; i++) 
        for(int j=0; j<N; j++) 
            MatricaC[i][j]=0;
    for(int k=0; k<N; k++) 
        for(int i=0; i<N; i++)
        {
            for(int j=0; j<N; j++) 
                MatricaC[k][i]+=MatricaA[k][j]*MatricaB[j][i];
        }
    cout<<"\n\"Результат\" матрица выглядит:\n";
    for(int i=0; i<N; i++) 
    {
        for(int j=0; j<N; j++) 
            cout<<setw(6)<<MatricaC[i][j];
        cout<<endl<<endl;
    }
    cout<<"Выход из программы успешно завершен.";
    getch();
}
Остается кинуть в файлик. Т.е. Ваша ошибка состояла в "статичности" массивов. Скорее всего компилятор ругался на нехватку памяти и давал очень большие и странные ответы. Остается придумать штуку с количеством матриц. Т.е. при задании N мы должны иметь не три матрицы, а N, которые необходимо перемножить в соответствии с динамикой. Ничего, подумаем!

Добавлено через 53 минуты
Вот что я придумал:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
#include "stdafx.h"
#include "math.h"
#include "conio.h"
#include <iostream>
#include <iomanip>
#include <stdlib.h>
#include <stdio.h>
using namespace std;
void main()
{   
    int N=0;
    setlocale(LC_ALL,"Russian");
    cout<<"Введите размер массива:\nN=";
    cin>>N;
    while(N<0 || N>10)
    {
        cout<<"Вы ввели слишком большой/малый размер матрицы. Попробуйте еще разик!\nN=";
        cin>>N;
    }
    // Делаем динамический массив под первую матрицу.
    int **MatricaA= new int*[N];
    for(int i=0;i<N;i++)
        MatricaA[i]= new int [N];
    // Делаем динамический массив под вторую матрицу.
    int **MatricaB= new int*[N];
    for(int i=0;i<N;i++)
        MatricaB[i]= new int [N];
    // Делаем динамический массив под результат матрицу.
    int **MatricaC= new int*[N];
    for(int i=0;i<N;i++)
        MatricaC[i]= new int [N];
    // Делаем динамический массив под результат матрицу.
    int **MatricaD= new int*[N];
    for(int i=0;i<N;i++)
        MatricaD[i]= new int [N];
    for(int QT=0;QT<N;QT++)
    {
        // Набираем значения.
        for(int i=0; i<N; i++) 
            for(int j=0; j<N; j++)
            {
                MatricaA[i][j]=rand()%100;
                MatricaB[i][j]=rand()%100;
            }
        // Распечатка Ваших матриц.
        cout<<"\nПервая матрица выглядит:\n";
        for(int i=0; i<N; i++) 
        {
            for(int j=0; j<N; j++) 
            {
                cout<<setw(4)<<MatricaA[i][j];
            }
            cout<<endl;
        }
        cout<<"\nВторая матрица выглядит:\n";
        for(int i=0; i<N; i++) 
        {
            for(int j=0; j<N; j++) 
            {
                cout<<setw(4)<<MatricaB[i][j];
            }
            cout<<endl;
        }
        for(int i=0; i<N; i++) 
            for(int j=0; j<N; j++) 
                MatricaC[i][j]=0;
        for(int k=0; k<N; k++) 
            for(int i=0; i<N; i++)
                for(int j=0; j<N; j++) 
                    MatricaC[k][i]+=MatricaA[k][j]*MatricaB[j][i];
    cout<<"\n\"Результат\" матрица выглядит:\n";
    for(int i=0; i<N; i++) 
    {
        for(int j=0; j<N; j++) 
            cout<<setw(6)<<MatricaC[i][j];
        cout<<endl<<endl;
    }
    for(int i=0; i<N; i++) 
            for(int j=0; j<N; j++) 
                MatricaD[i][j]=0;
    for(int k=0; k<N; k++)
        for(int i=0; i<N; i++)
            for(int j=0; j<N; j++) 
                MatricaD[k][i]+=MatricaC[k][j]*MatricaC[j][i];
    }
    cout<<"\n Конечный \"результат\" матрицы выглядит:\n";
    for(int i=0; i<N; i++) 
    {
        for(int j=0; j<N; j++) 
            cout<<setw(20)<<MatricaD[i][j];
        cout<<endl<<endl;
    }
    getch();
}
Т.е. компилятор прогоняет значения N раз, каждый раз возвращая предыдущую матрицу с предыдущим умножением на раннее ее образовавшие. Если внимательно рассмотреть уравнение задания, то мы увидим, что каждый раз возвращаем квадрат матрица образованной матрицами А и В. Остается скинуть в другую динамику и распечатать! Вот как-то так...
0
 
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru