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

Объяснить разницу между объявлениями массивов - C++

Восстановить пароль Регистрация
Другие темы раздела
C++ Использование namespace http://www.cyberforum.ru/cpp-beginners/thread1833272.html
Добрый день, есть ли разница в подходах ниже: //Foo.cpp using namespace A; Foo::Foo()
C++ Исправить ошибку "C2562: 'main': 'void' function returning a value" Привет программистам. Не могу разобраться с ошибкой "C2562: 'main': 'void' function returning a value". Помогите чем можете. #include <conio.h> #include <iostream> #include <stdio.h> #include <stdlib.h> #include <iomanip> #include <fstream> #include <string> #include <ctype.h> http://www.cyberforum.ru/cpp-beginners/thread1833236.html
Распределить участников обсуждений за круглым столом с максимальной активностью C++
Имя входного файла: table.in Имя выходного файла: table.out Ограничение времени: 1 с Ограничение реального времени: 5 с Ограничение памяти: 256M Оставшиеся посылки: 10 Условие задачи
C++ Зачем при передаче матрицы в функцию, передавать вторым аргументом её размер, если в первом он уже указан?
Добрый день господа.Объясните пожалуйста почему при вызове функции f() В левый индекс ничего не засовывается и для чего нужен правый аргумент const int Size #include <iostream> #include <ctime> #include <cstdlib> using namespace std;
C++ Контрольная работа по программированию http://www.cyberforum.ru/cpp-beginners/thread1833088.html
Написать тексты программ на языке Паскаль 1. Вычисление суммы четных натуральных чисел в интервале от 1 до n. (3 варианта программ - с использованием цикла WHILE, цикла REPEAT и цикла FOR). n ввести со стандартного ввода. Значение cуммы вывести на экран. 2. Сгененировать случайным образом массив целых чисел из n элементов. n ввести со стандартного ввода. Вывести на экран среднее...
C++ Средства рисования C++ Доброго времени суток форумчане. Я столкнулся с проблемой рисования на C++, просто не понимаю чем и как. На данный момент у меня идет курс ООП, и четвертая лабораторная как раз на тему рисования. Привожу задание: Тема: Классы плоской машинной графики. Задание: Определить класс, объектами которого являются многоугольники указанного типа. Написать тест на принадлежность точки многоугольнику... подробнее

Показать сообщение отдельно
jameses
0 / 0 / 2
Регистрация: 21.10.2014
Сообщений: 205
24.10.2016, 14:40  [ТС]     Объяснить разницу между объявлениями массивов
У меня задача:
Работа с параллельными процессами. Нужно передавая из процесса в процесс вычислить умножение матриц.
Я передаю матрицу А построчно, а матрицу Б нужно передавать постолбцам.
Код скидываю:
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
104
105
106
107
108
109
110
111
#include "stdafx.h"
#include <iostream>
#include <conio.h>
#include <stdio.h>
#include <locale.h>
#include <stdlib.h>
#include <time.h>
#include "mpi.h"
 
using namespace std;
 
void printMatrix(double **a, int n, int m)
{
    for (auto i = 0; i < n; i++) {
        for (auto j = 0; j < m; j++) {
            cout << " " << a[i][j];
        }
        cout << endl;
    }
}
 
double ** initMatrix(double **matrix, int n, int m)
{
    // Выделяем память
    matrix = new double *[n];
    for (auto i = 0; i < n; i++)
        matrix[i] = new double[m];
    return matrix;
}
 
double ** generateMatrix(double **matrix, int n, int m)
{
    for (auto i = 0; i < n; i++)
        for (auto j = 0; j < m; j++) {
            matrix[i][j] = rand() % 5;
        }
    return matrix;
}
 
int main(int argc, char* argv[])
{
    srand(time(nullptr));
    int i, j;
    const auto n = 4,
        m = 4,
        k = 4;
 
    int rank;
    MPI_Status status;
    MPI_Init(&argc, &argv);
    MPI_Comm_rank(MPI_COMM_WORLD, &rank);
    if (rank == 0)
    {
        double **MatrixA = { nullptr };
        double **MatrixB = { nullptr };
        double **MatrixC = { nullptr };
        double *colomnB[n];
 
        MatrixA = initMatrix(MatrixA, n, m);
        MatrixA = generateMatrix(MatrixA, n, m);
        MatrixB = initMatrix(MatrixB, n, m);
        MatrixB = generateMatrix(MatrixB, n, m);
        MatrixC = initMatrix(MatrixC, n, k);
 
        cout << endl << "Matrix A: " << endl;
        printMatrix(MatrixA, n, m);
        cout << endl << "Matrix B: " << endl;
        printMatrix(MatrixB, n, m);
 
        
 
        for (i = 0; i < n; i++)
        {
            MPI_Ssend(MatrixA[i], m + 1, MPI_DOUBLE, i + 1, 99, MPI_COMM_WORLD);
        }
        /*
        for (i = 0; i < n; i++)
        {
            MPI_Ssend(MatrixB[i], m + 1, MPI_DOUBLE, i + 1, 99, MPI_COMM_WORLD);
        } Здесь отправка матрицы
        */ 
        for (i = 0; i < n; i++)
        {
            MPI_Recv(MatrixC[i], k, MPI_DOUBLE, i + 1, 99, MPI_COMM_WORLD, &status);
        }
 
        cout << endl << "[Result] Matrix C: " << endl;
        printMatrix(MatrixC, n, k);
    }
    else
    {
        double rowA[m];
        double rowC[k];
        double MatrixB[n][m];
 
        MPI_Recv(rowA, m + 1, MPI_DOUBLE, 0, 99, MPI_COMM_WORLD, &status);
        //MPI_Recv(MatrixB[i], m + 1, MPI_DOUBLE, 0, 99, MPI_COMM_WORLD, &status); - здесь получение матрицы Б, нужно сделать принятие по столбцам
 
        for (i = 0; i < k; i++) {
            rowC[i] = 0;
            for (j = 0; j < m; j++) {
                rowC[i] += rowA[j] * MatrixB[j][i];
            }
        }
 
        MPI_Ssend(rowC, m, MPI_DOUBLE, 0, 99, MPI_COMM_WORLD);
    }
    MPI_Finalize();
    cin.get();
    return 0;
}
 
Текущее время: 15:17. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru