Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.86/7: Рейтинг темы: голосов - 7, средняя оценка - 4.86
3 / 3 / 1
Регистрация: 20.09.2012
Сообщений: 57
1

Сделать так, чтобы функция возвращала параметр

10.03.2013, 21:47. Показов 1323. Ответов 16
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
В общем, есть 3 матрицы, выведение их на экран и перемножение, сделанное через класс. Функции mult1 и mult2 умножают и выводят сразу на экран. Как сделать, чтобы оно возвращало параметр, а показывалось в main. Не знаю, нормально ли я объяснил. В общем, вот код всей программы(писал в билдере) :
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
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
#include <iostream.h>
#include <stdlib.h>
#include <stdio.h>
#include <vcl.h>
#include <conio.h>
#define N 4
class mat{
int max,p,m,l[N][N],a[N],fl;
public: 
        void outm();
        mat mult1(mat,mat,mat);
        mat mult2(mat,mat,mat);
        mat();
        mat(int);
        mat(int,int);};
mat::mat()
{
for(int i=0;i<N;i++)
   {
        for(int j=0;j<N;j++)
        {
                l[i][j]=rand()%2;
        }
   }
}
 
mat::mat(int f)
{
for(int i=0;i<N;i++)
  {
        for(int j=0;j<N;j++)
        {
        if(j>i)l[i][j]=0;
        else
          {
                if(rand()%2==0)
                l[i][j]=1;
                else
                l[i][j]=f;
          }
        }
  }
}
 
 
mat::mat(int p, int m)
{
for(int i=0;i<N;i++)
  {
        for(int j=0;j<N;j++)
        {
           if(j<i)l[i][j]=0;
           else
           {
             if(rand()%2==1)
              l[i][j]=p;
              else
              l[i][j]=m;
            }
        }
  }
}
 
mat mat :: mult1(mat x1,mat x2,mat x3)
{
int mm[N][N];
int mm2[N][N];
for(int i=0;i<N;i++)
{
        for(int j=0;j<N;j++)
        {
        mm[i][j]=0;
 
            for(int k=0; k<N; k++)
            {
            mm[i][j]+=x1.l[i][k]*x2.l[k][j];
            }
        }
}
 
for(int i=0;i<N;i++)
{
        for(int j=0;j<N;j++)
{
         mm2[i][j]=0;
         for(int k=0; k<N;k++)
         {
            mm2[i][j]+=mm[i][k]*x3.l[k][j];}}}
 
for(int i=0;i<N;i++)
  {
        for(int j=0;j<N;j++)
        {
           cout<<mm2[i][j]<<"\t ";
        }
           cout<<"\n";
  }
}
mat mat :: mult2(mat x1,mat x2,mat x3){
int mm[N][N];
int mm2[N][N];
for(int i=0;i<N;i++)
{
        for(int j=0;j<N;j++)
        {
          mm[i][j]=0;
            for(int k=0; k<N; k++)
            {
              mm[i][j]+=x3.l[i][k]*x2.l[k][j];
            }
          }
}
 
for(int i=0;i<N;i++)
{
        for(int j=0;j<N;j++)
        {
           mm2[i][j]=0;
           for(int k=0; k<N;k++)
           {
                mm2[i][j]+=mm[i][k]*x1.l[k][j];
           }
        }
}
 
for(int i=0;i<N;i++)
  {
        for(int j=0;j<N;j++)
        {
           cout<<mm2[i][j]<<"\t ";
        }
           cout<<"\n";
  }
}
 
 
void mat :: outm()
{
for(int i=0;i<N;i++)
  {
        for(int j=0;j<N;j++)
        {
            cout<<l[i][j]<<" ";
        }
            cout<<"\n";
   }
};
 
void main()
{
int a,b,c;
cout<<"Vvedite M : ";
cin>>a;
cout<<"Vvedite M1 : ";
cin>>b;
cout<<"Vvedite M2 : ";
cin>>c;
cout<<"matrix 'A' which consist of '0' and '1'  \n";
mat k;
k.outm();
cout<<"\n\n\matrix 'B' which consist of '1' and 'M'\n";
mat p(a);
p.outm();
cout<<"\n\nmatrix 'C' which consist of 'M1' and 'M2'\n";
mat m(c,b);
m.outm();
cout<<"\n";
mat var;
var.mult1(k,p,m);
cout<<"\n\n";
mat var2;
var2.mult2(k,p,m);
cout<<"\n";
getch();
}
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
10.03.2013, 21:47
Ответы с готовыми решениями:

Сделать так, чтобы функция возвращала как целые, так и дробные значения
Задача: нужно найти среднее арифметическое чисел в одномерном массиве разных типов. В main() у...

Как сделать так, чтобы функция rand() возвращала разные значения
Добрый вечер, как можно в visual studio в цикле каждый раз задавать новые рандомные значения...

Как сделать так что бы функция возвращала строку
Как сделать так что бы функция возвращала строку

Как сделать, чтобы функция возвращала массив?
Доброго времени суток! Есть функция которая находит значения 4х элементов массива. как сделать...

16
Helter Skelter
64 / 64 / 19
Регистрация: 19.09.2012
Сообщений: 133
10.03.2013, 21:56 2
Цитата Сообщение от PEVELASKA Посмотреть сообщение
чтобы оно возвращало
Что - оно?
0
3 / 3 / 1
Регистрация: 20.09.2012
Сообщений: 57
10.03.2013, 21:58  [ТС] 3
hofmn, функции mult1 mult2 должны возвращать значения перемноженной матрицы, чтобы в main показывать на экран, а не в самой mult1 mult2
0
3176 / 1935 / 312
Регистрация: 27.08.2010
Сообщений: 5,131
Записей в блоге: 1
10.03.2013, 22:10 4
Верните указатель на матрицу. Сама матрица должна размешаться в блоке вызывающей программы или хипе (но не в локальной памяти вызываемой программы).
0
Helter Skelter
64 / 64 / 19
Регистрация: 19.09.2012
Сообщений: 133
10.03.2013, 22:11 5
Используйте std :: vector
0
4064 / 3318 / 924
Регистрация: 25.03.2012
Сообщений: 12,493
Записей в блоге: 1
10.03.2013, 22:14 6
Цитата Сообщение от hofmn Посмотреть сообщение
Используйте std :: vector
если даже динамические массивы и указатели не проходили? Лучше не надо. Пусть сначала указатели изучит. С ними проще.
0
3 / 3 / 1
Регистрация: 20.09.2012
Сообщений: 57
10.03.2013, 22:18  [ТС] 7
gazlan, звучит дельно, но не совсем понятно.
0
3176 / 1935 / 312
Регистрация: 27.08.2010
Сообщений: 5,131
Записей в блоге: 1
10.03.2013, 22:54 8
не совсем понятно
Коротко, аллокируйте вашу результирующую матрицу там же, где у вас находится вызов программы умножения, а не внутри этой программы.

Судя по вашему коду, так и сделано, но установить это оказалось непросто :-)
1
0 / 0 / 1
Регистрация: 10.03.2013
Сообщений: 16
10.03.2013, 22:55 9
Result пробовал?
0
3 / 3 / 1
Регистрация: 20.09.2012
Сообщений: 57
10.03.2013, 22:59  [ТС] 10
gazlan, спасибо, конечно, что пытаетесь мне, дураку, это всё дело объяснить, но вот от слов аллокируйте я совсем себя неловко чувствую. То есть, я должен из мульт убрать вывод, затем иницализировать в мейне и там же сделать вывод ? Но мне же надо, чтобы функции мульт1 и мульт2 что-то возвращали, а если я перменной mm2 приписываю мат, то нечего не выходит, иными словами, я так и не понял, как сделать так, чтобы функции принимала значение mm2
0
3176 / 1935 / 312
Регистрация: 27.08.2010
Сообщений: 5,131
Записей в блоге: 1
10.03.2013, 23:11 11
чтобы функции мульт1 и мульт2 что-то возвращали
А зачем? Пусть ничего не возвращают. Перепишите как

C++
1
2
void mult1(const mat&,const mat&,mat&);
void mult2(const mat&,const mat&,mat&);
Первые два параметра у вам не изменяются (только для чтения), третий - будет меняться в программе.

Опишите все матрицы в вызывающей программе (вероятно либо там же, либо отдельной функцией следует выполнить их инициализацию). Две первых инициализируете так же, как сейчас, третью - нулями (поможет в отладке).

После работы mult() две первых матрицы не изменятся, третья должна содержать результат работы функции.
1
3 / 3 / 1
Регистрация: 20.09.2012
Сообщений: 57
11.03.2013, 00:00  [ТС] 12
gazlan, это задание такое, т.е. я принес, а мне сказали, что - нет, надо чтобы возвращало.
0
3176 / 1935 / 312
Регистрация: 27.08.2010
Сообщений: 5,131
Записей в блоге: 1
11.03.2013, 00:22 13
Цитата Сообщение от PEVELASKA Посмотреть сообщение
gazlan, это задание такое, т.е. я принес, а мне сказали, что - нет, надо чтобы возвращало.
Признаться, плохо представляю, что можно вернуть в вашем случае - любой вариант (кроме кода ошибки), влечет усложнение программы (динамическое созлание матрицы произведения, например).

Мне кажется, стоит сначала сделать только через передачу параметров, отладить и добиться работоспособности. А потом думать, как все это испортить - в соответствии с заданием. При этом у вас по крайней мере, будет вариант, с которым можно свериться.
0
3 / 3 / 1
Регистрация: 20.09.2012
Сообщений: 57
11.03.2013, 00:57  [ТС] 14
gazlan, мне уже просто по-большому счету всё равно на отладку и тд. Учитель сказал, чтобы я просто сделал так, чтобы оно возвращало что-то. А программу он уже смотрел.
0
3176 / 1935 / 312
Регистрация: 27.08.2010
Сообщений: 5,131
Записей в блоге: 1
11.03.2013, 01:10 15
Ну, если его это устроит, верните что-нибудь попроще - код ошибки, размер матрицы. Константную ссылку на результат (const mat&), в конце концов :-)
0
3 / 3 / 1
Регистрация: 20.09.2012
Сообщений: 57
11.03.2013, 01:14  [ТС] 16
gazlan, не-не, вы не так меня поняли. Вернуть надо эту самую матрицу ( перемноженную) чтобы в мейне её вывести.
0
3176 / 1935 / 312
Регистрация: 27.08.2010
Сообщений: 5,131
Записей в блоге: 1
11.03.2013, 02:20 17
Эту матрицу вы уже возвращаете - как третий параметр. Нельзя вернуть ее еще раз (только как копию для чтения). Если так хочется вернуть не через параметр, то не надо ее и передавать - придется выделять под нее память в блоке умножения, а освобождать - в основной программе. Выглядит нелепо.

Больше что-то ничего в голову не приходит.
0
11.03.2013, 02:20
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
11.03.2013, 02:20
Помогаю со студенческими работами здесь

Подобрать значения массива так, чтобы функция equal(pbegin(), pend(), qbegin(), super) возвращала истину
2. Дан отрывок кода. bool super(int a, int b) { return a + b == 0; } vector&lt;int&gt; p =...

Работа с классами (сделать, чтобы функция возвращала массив, получаемый суммированием двух входных)
В программу передаю 2 массива из пяти чисел. После выполнения функции getAM хочу, чтобы она...

Как сделать, чтобы определенная переменная возвращала как и цифры, так и слова
То есть мне нужно, чтобы переменная принимала значения NaN, бесконечность, и иногда простой...

Нужно чтобы функция в зависимости от условий возвращала string или double
Привет, как можно реализовать? Нужно чтобы функция в зависимости от условий возвращала string или...


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

Или воспользуйтесь поиском по форуму:
17
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru