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

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
Xamil
0 / 0 / 0
Регистрация: 24.10.2010
Сообщений: 22
#1

Умножение матрицы неизвестного размера - C++

04.10.2011, 23:00. Просмотров 1056. Ответов 2
Метки нет (Все метки)

задание такоэ нужно ввести размерность 2 матриц с клавиатуры а потом их перемножить... но проблема в том что не знаю как записать динамичный массив...
подскжите пожалуста...я толька знаю что нужно через указатели..
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
04.10.2011, 23:00     Умножение матрицы неизвестного размера
Посмотрите здесь:

Массив неизвестного размера - C++
Хочу написать функцию для нахождения предела последовательности. А и eps вводятся с клавиатуры. Цикл do while - обязательное условие. n...

Массив заранее неизвестного размера - C++
Возможно сейчас произвучит тупой вопрос,не судите строго,но можно каким-нибудь образом сделать чтобы размер массива задавался пользователем?

Чтение файла неизвестного размера - C++
Необходимо прочитать файл неизвестного размера, динамически растягивая массив, загнать файл в массив и узнать его размер. Приведите...

Как обьявить массив неизвестного размера? - C++
Помогите разобраться, есть класс, в котором обьявлен двумерный массив структур. Размер массива неизвестен, но должен быть определен во...

Ввод и вывод строки неизвестного размера - C++
Как ввести и вывести строку неизвестного размера в c++? Нигде просто нормального объяснения не нашел.

Можно ли создать вектор заранее неизвестного размера? - C++
Скажите пожалуйста, можно ли создать вектор заранее неизвестного размера так, чтобы пользователю перед его заполнением не нужно было...

Из текстового файла неизвестного размера вывести на экран все предложения, не содержащие запятых - C++
Привет, Программисты! :) Нужна ваша помощь... Есть задача по поводу работы со строками: "Из текстового файла неизвестного размера вывести...

Задано 4 матрицы. Провести сложение, умножение, умножение на число - C++
Задано 4 матрицы A,B,C,D размером 4х4.Вычеслить такие матрицы: F,G,T. G=3/4 A+B F=B*(2D) T=c/5

Класс Квадратная матрица. Методы: умножение на матрицу, умножение на константу, вывод элементов матрицы на дисплей - C++
Задание: Класс «Квадратная матрица». Методы: умножение на матрицу, умножение на константу, вывод элементов матрицы на дисплей. Нужно...

Реализовать умножение матрицы на матрицу и матрицы на вектор - C++
Доброй ночи форумчане,не знаю куда податься уже, я полный ноль в программировании, но дали задание написать на С++ прогу, Задание такое,...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
alkagolik
Заблокирован
05.10.2011, 01:33     Умножение матрицы неизвестного размера #2
кто знает литературу почитать алгоритм Копперсмита - Винограда?
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
95
96
97
98
99
100
101
102
103
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
 
 
void my_error(int n){
    printf("error");
    exit(n);
}
 
int **create_matrix(int N, int M){
    int i, j;
    int **matr;
 
    matr = (int **) malloc (N * sizeof(int*));
    if ( !matr) my_error(2);
 
    for(i = 0; i < N; ++i){
        matr[i] = (int *) malloc(M * sizeof(int));
        if ( !matr[i] ) my_error(3);
    }
 
    for (i = 0; i < N; ++i)
        for (j = 0; j < M; ++j)
            matr[i][j] = rand() % 3;
    return matr;
}
 
void print_matr(int **matr, int N, int M){
    int i, j;
 
    for (i = 0; i < N; ++i){
        for (j = 0; j < M; ++j){
            if (matr[i][j] > 9)
                printf("%d ", matr[i][j]);
            else
                printf("%d  ", matr[i][j]);
        }
        printf("\n");
    }
    printf("\n");
}
 
void delete_matr(int **matr, int N, int M){
    int i, j;
 
    for (i = 0; i < N; ++i)
        free(matr[i]);
    free(matr);
}
 
int main(){
    int **array_a, **array_b, **array_c, N_a, M_a, N_b, M_b;
    int i, j, k, tmp = 1, tmp_Mb, sum = 0, iter_s, iter_c;
 
    printf("\nвведите количество строк и столбцов матрицы X\n");
    scanf("%d%d", &N_a, &M_a);
    printf("\nвведите количество строк и столбцов матрицы Y\n");
    scanf("%d%d", &N_b, &M_b);
    printf("\n\n");
 
    if ( M_a != N_b )
        my_error(1);
    else{
        array_a = create_matrix(N_a, M_a);
        array_b = create_matrix(N_b, M_b);
        printf("\nматрица X:\n\n");
        print_matr(array_a, N_a, M_a);
        printf("\nматрица Y:\n\n");
        print_matr(array_b, N_b, M_b);
 
        array_c = create_matrix(N_a, M_b);
 
        for (i = 0; i < N_a; ++i){
 
            tmp_Mb = M_b;
            iter_c = 0;
 
            while (tmp_Mb){
 
                tmp = 1;
                sum = 0;
                iter_s = 0;
 
                for (j = 0; j < N_b; ++j){
 
                    tmp *= (array_a[i][j] * array_b[iter_s++][iter_c]);
                    sum += tmp;
                    tmp = 1;
                }
 
                array_c[i][iter_c++] = sum;
                --tmp_Mb;
            }
        }
        print_matr(array_c, N_a, M_b);
 
        delete_matr(array_a, N_a, M_a);
        delete_matr(array_b, N_b, M_b);
        delete_matr(array_c, N_a, M_b);
    }
    return 0;
}
консоль

введите количество строк и столбцов матрицы X
20
25

введите количество строк и столбцов матрицы Y
25
15



матрица X:

1 1 0 1 2 1 1 0 0 1 2 1 2 1 2 1 0 0 1 1 2 2 0 0 2
2 2 1 1 1 2 0 0 0 2 0 1 1 1 1 0 0 0 2 2 1 2 2 2 0
2 1 1 2 2 0 2 2 1 1 0 0 2 0 2 2 1 0 1 2 0 0 0 0 2
0 2 2 0 2 1 0 0 2 2 0 0 2 2 1 0 0 2 0 1 1 1 0 0 2
0 1 2 1 2 0 2 2 0 0 1 2 1 2 2 1 0 2 1 2 1 0 0 1 0
2 0 2 0 1 0 1 2 0 0 2 1 2 2 2 1 0 2 2 0 2 0 0 1 2
1 0 0 2 2 1 2 0 1 2 2 1 2 2 1 2 1 1 2 1 0 1 2 2 0
0 2 1 0 1 1 2 2 1 2 2 0 1 2 1 2 1 0 1 2 2 0 0 0 0
2 1 1 1 2 2 2 1 1 1 0 0 0 0 2 0 2 0 0 2 2 2 1 2 1
0 2 2 2 1 0 2 0 2 1 0 0 1 2 2 2 0 2 0 1 2 1 1 2 1
0 1 1 0 1 2 0 2 1 0 0 2 2 1 0 2 2 0 0 2 0 0 2 2 0
1 2 2 0 2 0 1 1 2 1 0 1 2 2 1 0 0 1 0 2 1 2 2 2 0
1 2 0 0 0 1 0 0 1 0 2 2 1 1 0 0 2 2 0 2 0 0 1 0 1
1 2 1 0 2 1 1 2 2 2 0 2 2 0 1 0 1 1 2 2 1 0 2 1 0
2 2 1 0 2 1 1 2 2 2 2 2 0 2 2 0 0 1 0 1 2 1 2 2 0
2 0 1 1 1 2 1 1 1 2 1 2 1 1 2 0 0 1 1 1 2 2 1 0 0
0 1 1 0 0 0 0 0 1 2 0 1 1 2 0 0 1 0 2 0 2 0 0 2 2
1 1 1 0 2 2 1 0 0 2 1 1 2 0 0 1 0 2 0 0 2 2 1 2 2
1 2 2 0 1 1 2 2 0 0 2 2 2 0 1 2 2 2 1 2 0 0 0 2 1
0 2 1 2 1 0 1 1 2 2 0 2 1 0 2 2 0 0 1 0 2 0 0 2 2


матрица Y:

2 0 0 0 0 2 0 0 0 0 2 0 2 0 0
1 1 2 2 2 0 2 2 1 1 0 0 0 1 2
0 1 0 1 2 1 0 0 2 1 1 1 2 1 0
1 2 2 0 0 2 1 0 2 2 2 2 0 0 1
1 1 1 1 2 0 0 1 1 2 0 1 2 0 2
0 1 2 2 2 0 1 1 0 0 1 0 0 0 1
2 1 2 0 0 2 1 1 0 0 1 1 1 1 2
1 1 1 1 1 0 1 0 2 2 1 2 0 2 2
1 2 1 1 0 1 2 2 0 2 2 2 1 1 1
1 0 0 2 1 2 1 0 0 0 0 1 0 0 1
2 0 0 0 2 1 0 1 0 0 2 1 2 1 0
2 0 0 2 0 2 2 1 0 2 0 1 1 0 2
0 1 2 1 2 2 0 2 1 1 0 0 2 0 2
0 2 2 0 2 2 0 2 2 0 2 2 2 1 0
1 2 1 2 0 1 2 0 1 0 2 2 1 2 0
0 2 0 0 0 1 0 0 1 2 1 0 2 0 2
0 2 1 2 1 2 1 0 0 0 1 0 2 2 0
0 0 0 2 1 1 0 2 2 1 2 0 1 0 2
1 1 2 2 0 0 1 2 1 0 0 2 0 0 0
1 1 0 2 0 2 1 1 2 0 0 2 1 1 2
1 0 0 0 0 2 0 0 1 2 0 1 2 1 1
2 2 0 0 2 1 0 0 0 0 1 0 0 0 2
0 2 0 2 2 0 1 1 1 0 0 1 2 0 2
1 0 2 0 1 2 1 1 2 2 2 1 0 0 1
2 1 0 0 0 0 2 2 1 0 2 2 2 2 0

29 25 20 20 23 29 18 22 19 17 23 25 31 16 27
24 25 24 31 28 30 21 22 24 16 19 24 22 9 30
26 31 24 24 16 30 23 20 26 22 26 30 31 21 30
17 24 19 26 28 24 18 28 24 18 22 23 28 16 26
23 25 24 27 23 32 19 24 33 26 25 31 30 19 33
26 22 21 21 23 31 16 26 30 22 32 30 38 21 23
27 34 31 29 30 40 21 29 27 23 31 31 35 12 36
22 27 24 26 25 31 19 22 24 20 21 28 30 22 30
29 30 24 27 24 34 24 17 23 20 28 27 29 21 31
23 34 27 24 25 37 23 27 34 29 33 31 33 19 35
13 27 22 29 26 26 20 21 24 24 17 20 27 14 33
24 30 24 29 33 34 21 28 30 25 24 28 32 16 38
17 17 13 26 20 23 18 24 15 11 19 15 25 14 22
25 27 26 41 27 31 28 29 26 26 18 30 29 17 39
33 28 24 33 33 37 27 27 28 28 32 34 35 21 37
28 25 19 29 24 34 20 19 20 19 25 27 28 14 30
16 15 18 17 15 24 17 21 18 15 16 22 20 13 13
25 19 18 23 30 29 16 24 21 22 23 17 30 10 34
27 26 26 33 28 35 24 28 30 26 29 25 35 22 37
27 26 24 24 15 31 29 22 25 32 25 31 25 18 30
Thinker
Эксперт C++
4221 / 2195 / 150
Регистрация: 26.08.2011
Сообщений: 3,802
Записей в блоге: 5
06.10.2011, 16:41     Умножение матрицы неизвестного размера #3
Читал, надо повспоминать, вот здесь посмотрите, например

http://mathinfinity.net.ru/article/31/
Yandex
Объявления
06.10.2011, 16:41     Умножение матрицы неизвестного размера
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru