Форум программистов, компьютерный форум, киберфорум
Наши страницы
С++ для начинающих
Войти
Регистрация
Восстановить пароль
 
Olgahater
0 / 0 / 1
Регистрация: 04.12.2015
Сообщений: 85
1

Возврат матрицы из функции

13.10.2017, 11:34. Просмотров 294. Ответов 5
Метки нет (Все метки)

В программе возникает ошибка. Вероятно из-за того,что матрицы не запоминаются в первой функции. Не получается исправить.

Главный.cpp
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
// 3.cpp: определяет точку входа для консольного приложения.
//
#include "stdafx.h"
#include <iostream> 
#include <conio.h> 
#include <iomanip> 
#include <cmath> 
#include<cstdlib> 
#include<ctime> 
#include "max.h" 
using namespace std; 
int main()
{
    int n, m, k,t;
    setlocale (0,""); 
    cout<<"Введите размерность матриц: "; 
    cin>>n>>m; 
    cout<<"Введите константу и номер матрицы: "; 
    cin>>k>>t; 
    mass (n,m,k,t); 
    SumM (n,m,k,t); 
    RazM (n,m,k,t);
    MultM (n,m,k,t); 
    system ("pause");
}
cpp с методами

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
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
#include "stdafx.h"
#include "max.h"
#include <iostream> 
#include <conio.h> 
#include <iomanip> 
#include <cmath> 
#include<cstdlib> 
#include<ctime> 
using namespace std; 
 
int mass (int n,int m,int k,int t)
 
{
    
    cout <<"Исходный массив: \n"; 
    int **A=new int*[n]; 
    int **B=new int*[n]; 
    int **C=new int *[n]; 
    for (int i=0;i<n;i++) 
        A[i] =new int [m]; 
    srand(time(0)); 
    for (int i=0;i<n;i++) 
    { 
        for (int j=0;j<m;j++) 
        { 
            A[i][j]=rand()%11-5; 
            cout.width(4); cout.precision(2); 
            cout<< A[i][j] <<" "; 
        } 
        cout<<endl; 
    } 
    cout<<endl; 
    cout<<endl; 
 
    for (int i=0;i<n;i++) 
        B[i] =new int [m]; 
    srand(time(0)); 
    for (int i=0;i<n;i++) 
    { 
        for (int j=0;j<m;j++) 
        { 
            B[i][j]=rand() % 41 - 20; 
            cout.width(4); cout.precision(2); 
            cout<< B[i][j] <<" "; 
        } 
        cout<<endl; 
    } 
    return **A;
}; 
void SumM (int n,int m,int k,int t) 
{ 
 
    cout<<"Сумма матриц: \n"; 
    int **A=new int*[n]; 
    int **B=new int*[n]; 
    int **C=new int *[n]; 
    for (int i=0;i<n;i++) 
        C[i] =new int [m]; 
    for (int i=0;i<n;i++) 
    { 
        for (int j=0;j<m;j++) 
        { 
            C[i][j]=A[i][j]+B[i][j]; 
            cout.width(4); cout.precision(2); 
            cout<< C[i][j] <<" "; 
        } 
        cout<<endl; 
    } 
    
}; 
void RazM(int n,int m,int k,int t) 
{
    int **A=new int*[n]; 
    int **B=new int*[n]; 
    int **C=new int *[n]; 
    cout<<"Разница матриц: \n"; 
    for (int i=0;i<n;i++) 
        C[i] =new int [m]; 
    for (int i=0;i<n;i++) 
    { 
        for (int j=0;j<m;j++) 
        { 
            C[i][j]=A[i][j]-B[i][j]; 
            cout.width(4); cout.precision(2); 
            cout<< C[i][j] <<" "; 
        } 
        cout<<endl; 
    } 
    
}; 
void MultM (int n,int m,int k,int t) 
{ 
    int **A=new int*[n]; 
    int **B=new int*[n]; 
    int **C=new int *[n]; 
    cout<<"Умножение матрицы на константу: \n"; 
    switch (t) 
    { 
    case 1: 
        for (int i=0;i<n;i++) 
            C[i] =new int [m]; 
        for (int i=0;i<n;i++) 
        { 
            for (int j=0;j<m;j++) 
            { 
                C[i][j]=A[i][j] * k; 
                cout.width(4); cout.precision(2); 
                cout<< C[i][j] <<" "; 
            } 
            cout<<endl; 
        } 
        break; 
    case 2: 
        for (int i=0;i<n;i++) 
            C[i] =new int [m]; 
        for (int i=0;i<n;i++) 
        { 
            for (int j=0;j<m;j++) 
            { 
                C[i][j]=A[i][j] * k; 
                cout.width(4); cout.precision(2); 
                cout<< C[i][j] <<" "; 
            } 
            cout<<endl; 
        } 
        break; 
    default: 
        cout<<"Такой матрицы нет!"; 
        break; 
    } 
    
};
Заголовочный файл .h

C++
1
2
3
4
5
6
7
8
9
#pragma once 
 #ifndef H_MAX
 #define H_MAX
 
int mass (int,int,int,int); 
void SumM (int,int,int,int);
void RazM (int,int,int,int);
void MultM (int,int,int,int);
#endif
0
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
13.10.2017, 11:34
Ответы с готовыми решениями:

Передача в функцию и возврат из функции динамической матрицы
#include &quot;stdafx.h&quot; #include &quot;iostream&quot; using namespace std; const int...

Возврат 2 значений из функции с одним вызовом этой же функции
Вообщем где то в какой то игре была хукнута одна функция int function(int...

Возврат значения функции
Что такое возврат значения функции? я уже всю голову изломал, что и куда...

Возврат массива из функции
В объекте есть массив int state;, который мне нужно из него вытащить. Вижуал...

Возврат массива из функции
Есть задача: используя функции, вычислить количество элементов заранее...

5
Байт
Эксперт C
19226 / 12351 / 2607
Регистрация: 24.12.2010
Сообщений: 25,424
13.10.2017, 11:40 2
Olgahater, Твои A, B, C видны только отдельно в каждой из функций. Те, что объявлены и созданы в функции mass не имеют никакого отношения к тем, которые в других функциях. А return **A возвращает одно число.
0
Olgahater
0 / 0 / 1
Регистрация: 04.12.2015
Сообщений: 85
13.10.2017, 11:46  [ТС] 3
Как это возможно исправить? Буду благодарна за помощь.
0
Байт
Эксперт C
19226 / 12351 / 2607
Регистрация: 24.12.2010
Сообщений: 25,424
13.10.2017, 11:54 4
Цитата Сообщение от Olgahater Посмотреть сообщение
Как это возможно исправить?
Уффф! Всю программу надо переделывать... Подождите немного, с текучкой разгребусь, и если никто не поможет...

Добавлено через 1 минуту
Но вы пока посмотрели бы примеры внизу страницы. Может, найдете чего похожее...
0
Olgahater
0 / 0 / 1
Регистрация: 04.12.2015
Сообщений: 85
13.10.2017, 11:59  [ТС] 5
Уже просмотрела все примеры..вот от отчаяния написала уже сюда. Буду ждать вашей помощи. Спасибо.
0
COKPOWEHEU
1110 / 782 / 183
Регистрация: 09.09.2017
Сообщений: 3,393
13.10.2017, 12:03 6
эта запись тоже так себе
int **A=new int*[n];
for (int i=0;i<n;i++)
A[i] =new int [m];
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
#include <stdio.h>
#include <stdlib.h>
 
void MatCreate(int**mat, int w, int h){
  *mat = (int*)malloc(sizeof(int)*w*h);
}
 
void MatRand(int *mat, int w, int h){
#define MAT(x,y) mat[x+y*w] /*макрос для доступа к конкретной матрице чтобы не писать это умножение каждый раз*/
  int i,j;
  for(i=0;i<w;i++)
    for(j=0;j<h;j++)MAT(i,j)=rand()%100;
#undef MAT /*удаляем макрос - вдруг в другом месте понадобится другой с тем же именем*/
}
 
void MatPrint(int *mat, int w, int h){
#define MAT(x,y) mat[x+y*w]
  int i,j;
  for(j=0;j<h;j++){
    for(i=0;i<w;i++)printf("%i\t",MAT(i,j));
    printf("\n");
  }
#undef MAT
}
 
int main(){
  int *mat;
  MatCreate(&mat, 6, 4); //сюда передается ссылка на матрицу, в другие функции - без ссылки
  
  MatRand(mat, 6, 4);
  MatPrint(mat, 6, 4);
  
  free(mat);
}
Примерно так это делается на Си. В случае С++ было бы логичнее оформить матрицу как объект с собственными методами, хранением размера и прочими свистелками. Но у ТСа примерно такой стиль (хочет совместимости с Си?).
1
13.10.2017, 12:03
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
13.10.2017, 12:03

Возврат объекта из функции
Здравствуйте. Написал в Code.Blocks на C++ вот такой код (привожу только часть...

Возврат структуры из функции
Добрый день! Я только начинаю, и сразу стал путаться с массивами и...

Возврат массива из функции
Здравствуйте! Нужно решить задачу, но для её решения я не могу понять как...


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

Или воспользуйтесь поиском по форуму:
6
Ответ Создать тему
Опции темы

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