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

Вывод двумерного массива на экран, переданного через указатель - C++

Восстановить пароль Регистрация
 
stassold
0 / 0 / 0
Регистрация: 10.10.2013
Сообщений: 7
10.10.2013, 21:16     Вывод двумерного массива на экран, переданного через указатель #1
Выводит совсем не то, что нужно исправить в функции вывода ?
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
// labrab2.12.cpp: определяет точку входа для консольного приложения.
//
 
#include "stdafx.h"
#include <iostream>
#include <cstdlib>
#include <ctime>
 
using namespace std;
 
const int M = 3, N = 4, MN = M * N;
 
void RandArray(int* a) 
{
    for(int k = 0; k < MN; k++)
        a[k] = (rand() % 10); // 0 .. 10
}
 
void OutputArray (int* a,int line, int column)
{
    for (int i = 0; i < line; i++)
    {
        cout << endl;
        for (int j = 0; j < column; j++)
        {
            cout << a [j]  << "  "; 
        }
        
    }
    
} 
 
void mult_classic(int a[M][N], int b[N][M], int c[M][M])
{
    for(int i = 0; i < M; i++) // i = ряд матрицы a
    {
        for(int j = 0; j < M; j++) // j = столбец матрицы b
        {
            int skalaar = 0;
            for(int k = 0; k < N; k++)
                skalaar += a[i][k] * b[k][j];
 
            c[i][j] = skalaar;
        }
    }
}
 
/* Двумерный массив из целых чисел заполнится случайными числами от 0 до 10.Перемножение матриц*/ 
 
int main()
{
    int x[M][N], y[N][M], z[M][M];
 
    srand(time(NULL)); // Randomize
    RandArray(&x[0][0]);
    RandArray(&y[0][0]);
 
    clock_t algus = clock();
    mult_classic(x, y, z);
 
    cout << " matrix x " << endl;
    OutputArray(&x[0][0],M,N);
    cout << endl << endl;
    cout  << " matrix y " << endl;
    OutputArray(&y[0][0],M,N);
    cout << endl << endl; 
    cout  << " matrix z (multiplacation matrix) " << endl;
    OutputArray(&z[0][0],M,M);
}
//Произведением матрицы A(m*n) на матрицу B(n*k) называется матрица C(m*k) такая, что элемент матрицы C, стоящий в i-ой строке и j-ом 
//столбце, т.е. элемент c(i,j), равен сумме произведений элементов i-ой строки матрицы A на соответствующие элементы j-ого столбца матрицы B;
//Массивы – структура данных, объединяющая конечное количество однотипных элементов, хранящихся последовательно в определенной области данных;
//Один массив не может быть “разбросан” по оперативной памяти, он хранится целиком в одном месте;
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
10.10.2013, 21:16     Вывод двумерного массива на экран, переданного через указатель
Посмотрите здесь:

Функция возвращает указатель на нужную ячейку переданного массива, но адрес другой C++
вывод двумерного массива через указатель C++
C++ Создание функции инициализации двумерного массива строк через указатель
Функции двумерного массива. Транспонировать матрицу через ввод вывод функции двумерного массива. C++
Вывод на экран содержиоме vector в виде двумерного массива C++
C++ Вывод массива через указатель
Вывод двумерного массива на экран C++
Приведение любого двумерного массива к типу указатель на указатель C++

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

Или воспользуйтесь поиском по форуму:
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
newb_programmer
 Аватар для newb_programmer
237 / 237 / 19
Регистрация: 03.09.2011
Сообщений: 553
11.10.2013, 00:02     Вывод двумерного массива на экран, переданного через указатель #2
stassold, я так понимаю за вывод у вас ф-ция OutputArray отвечает, так вот в ней есть такая строка
C++
1
cout << a [j]  << "  ";
вы 2 цикла пускаете, а выводите почемуто a[j]. подозреваю, что должно быть так
C++
1
cout << a [i] [j]  << "  ";
Добавлено через 11 минут
вот такой вывод правильный?
matrix x

5 2 1 3
3 2 8 8
8 0 1 1

matrix y

0 6 1 7
7 0 3 8
8 5 9 1

matrix z (multiplacation matrix)

25 41 29
120 52 98
44 36 55 Для продолжения нажмите любую клавишу . . .

Добавлено через 50 минут
у вас косяк в функции перемножения матрицы 3*3 умножает нормально, а потом мусор захватывает. как исправить думайте сами, ато пока я с вашими M и N разобрался уже сил не осталось))))
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
#include <iostream>
#include <cstdlib>
#include <ctime>
 
using namespace std;
 
const int M = 3, N = 4, MN = M * N;
 
void RandArray(int* a,int line, int column) 
{
    for (int i = 0; i < line; i++)
    {
        for (int j = 0; j < column; j++)
            {
                *(a+i*line+j) = rand()%10; // 0 .. 10
            }
     }
}
 
void OutputArray (int* a,int line, int column)
{
    for (int i = 0; i < line; i++)
    {
        cout << endl;
        for (int j = 0; j < column; j++)
        {
            cout << *(a+i*line+j) << "  "; 
        }
        
    }
    
} 
 
void mult_classic(int* a, int* b, int* c)
{
    int skalaar;
    for(int i = 0; i < M; i++) // i = ряд матрицы a
    {
        for(int j = 0; j < M; j++) // j = столбец матрицы b
        {
            skalaar = 0;
            for(int k = 0; k < N; k++)
                skalaar += *(a+i*M+k) * *(b+k*N+j);
             *(c+i*N+j) = skalaar;
        }
    }
}
 
/* Двумерный массив из целых чисел заполнится случайными числами от 0 до 10.Перемножение матриц*/ 
 
int main()
{
    int x[M][N], y[N][M], z[N][N];
 
    srand(time(NULL)); // Randomize
    RandArray(&x[0][0],M,N);
    RandArray(&y[0][0],N,M);
 
    clock_t algus = clock();
    mult_classic(&x[0][0], &y[0][0], &z[0][0]);
 
    cout << " matrix x " << endl;
    OutputArray(&x[0][0],M,N);
    cout << endl << endl;
    cout  << " matrix y " << endl;
    OutputArray(&y[0][0],N,M);
    cout << endl << endl; 
    cout  << " matrix z (multiplacation matrix) " << endl;
    OutputArray(&z[0][0],N,N);
    cout<<endl;
    system("pause");
    return 0;
}
Yandex
Объявления
11.10.2013, 00:02     Вывод двумерного массива на экран, переданного через указатель
Ответ Создать тему
Опции темы

Текущее время: 03:18. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru