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

Работа с классами (сделать, чтобы функция возвращала массив, получаемый суммированием двух входных) - C++

Восстановить пароль Регистрация
 
АлександрКом
11 / 11 / 1
Регистрация: 21.10.2012
Сообщений: 326
22.02.2014, 17:12     Работа с классами (сделать, чтобы функция возвращала массив, получаемый суммированием двух входных) #1
В программу передаю 2 массива из пяти чисел. После выполнения функции getAM хочу, чтобы она возвращала массив, получаемый суммированием двух входных. Сейчас, она выводит только первый элемент. Подскажите, что нужно исправить.
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
#include <iostream>
 
using namespace std;
 
class demodulator
{
public:
demodulator(int* ,int*);
~demodulator(void);
int AM(void);
int getAM(void);
 
private:
int I[5];
int Q[5];
int resultAM[5];
};
 
demodulator::demodulator(int* i,int* q)
{
    for(int j=0; j<5; j++){
    I[j]=i[j];
    Q[j]=q[j];
    }
}
 
demodulator::~demodulator(void)
{
cout<<"Work of destructor";
}
 
int demodulator::AM(void)
{
 
    for(int k=0; k<5; k++){
        resultAM[k]=I[k]+Q[k];
    };
    return(0);
}
 
int demodulator::getAM(void)
{
    return(resultAM[1]);
}
 
 
int main()
{
    int i[5];
    int q[5];
    int r;
 
for(int j=0;j<5;j++){
i[j]=j;
q[j]=j;
};
 
demodulator first(i,q);
 
first.AM();
r=first.getAM();
cout<<r;
}
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
22.02.2014, 17:12     Работа с классами (сделать, чтобы функция возвращала массив, получаемый суммированием двух входных)
Посмотрите здесь:

Что нужно изменить ,чтобы функция с методом Гаусса возвращала массив? C++
C++ Как сделать так, чтобы функция rand() возвращала разные значения
Нужно чтобы функция в зависимости от условий возвращала string или double C++
Сделать так, чтобы функция возвращала параметр C++
C++ как сделать чтобы функция возвращала массив?
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Hunter13ua
46 / 46 / 5
Регистрация: 25.10.2011
Сообщений: 183
22.02.2014, 17:18     Работа с классами (сделать, чтобы функция возвращала массив, получаемый суммированием двух входных) #2
C++
1
2
3
4
int demodulator::getAM(void)
{
    return(resultAM[1]);
}
Что написал - то и возвращает. Хочешь вернуть массив - возвращай его, а не элемент.
C++
1
2
3
4
int* demodulator::getAM(void)
{
    return(resultAM);
}
GuGo1991
267 / 261 / 93
Регистрация: 02.08.2012
Сообщений: 609
22.02.2014, 17:20     Работа с классами (сделать, чтобы функция возвращала массив, получаемый суммированием двух входных) #3
АлександрКом, вставьте функцию в цикл и отправляйте индекс как аргумент и
возвращайте элемент массива по принимаемому индексу.
Как-то так:
C++
1
2
3
4
5
for(int i = 0; i < 5; i++)
{
    r = first.getAM(i);
    cout << r;
}
Кудаив
328 / 405 / 24
Регистрация: 27.05.2012
Сообщений: 1,162
Завершенные тесты: 2
22.02.2014, 18:01     Работа с классами (сделать, чтобы функция возвращала массив, получаемый суммированием двух входных) #4
Цитата Сообщение от Hunter13ua Посмотреть сообщение
Что написал - то и возвращает. Хочешь вернуть массив - возвращай его, а не элемент.

C++
1
2
3
4
int* demodulator::getAM(void)
{
   return(resultAM);
}
инкапсуляция нарушается - не лучше ли пользоваться std::vector?
АлександрКом
11 / 11 / 1
Регистрация: 21.10.2012
Сообщений: 326
22.02.2014, 18:07  [ТС]     Работа с классами (сделать, чтобы функция возвращала массив, получаемый суммированием двух входных) #5
Возник ещё один вопрос, но другого плана: в 59 строчке ошибка - expected primary-expression before ' [' token. Не могу разобраться, к чему это..
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
#include <iostream>
#include <cmath>
 
using namespace std;
 
class demodulator
{
public:
demodulator(double* ,double*);
~demodulator(void);
 
double AM(void);
double* getAM(void);
 
double FM(void);
double* getFM(void);
 
private:
double I[];
double Q[];
double resultAM[];
double resultFM[];
};
 
demodulator::demodulator(double* i,double* q)
{
    for(int j=0; j<5; j++){
    I[j]=i[j];
    Q[j]=q[j];
    }
}
 
demodulator::~demodulator(void)
{
cout<<" Work of destructor ";
}
 
double demodulator::AM(void)
{
 
    for(int k=0; k<5; k++){
        resultAM[k]=I[k]+Q[k];
    };
    return(0);
}
 
double* demodulator::getAM(void)
{
    return(resultAM);
}
 
double demodulator::FM(void)
{
 
    for(int k=0; k<5; k++){
 
     if(I[k]>0 and Q[k]>0){
        if( abs(I[k]) > abs(Q[k]) ) resultFM[k]=I[k]*Q[k]/(I[k]*I[k]+0.28125*Q[k]*Q[k]);
            else resultFM[k]=M_PI/2-I[k]*Q[k]/([k]*Q[k]+0.28125*I[k]*I[k]);
     }
 
     if(I[k]<0 and Q[k]<0){
        if( abs(I[k]) > abs(Q[k]) ) resultFM[k]=M_PI+I[k]*Q[k]/(I[k]*I[k]+0.28125*Q[k]*Q[k]);
            else resultFM[k]=-M_PI/2-I[k]*Q[k]/(Q[k]*Q[k]+0.28125*I[k]*I[k]);
     }
 
      if(I[k]>0 and Q[k]<0){
        if( abs(I[k]) > abs(Q[k]) ) resultFM[k]=-M_PI/2-I[k]*Q[k]/(Q[k]*Q[k]+0.28125*I[k]*I[k]);
            else resultFM[k]=I[k]*Q[k]/(I[k]*I[k]+0.28125*Q[k]*Q[k]);
     }
 
     if(I[k]<0 and Q[k]>0){
        if( abs(I[k]) > abs(Q[k]) ) resultFM[k]=M_PI+I[k]*Q[k]/(I[k]*I[k]+0.28125*Q[k]*Q[k]);
            else resultFM[k]=M_PI/2-I[k]*Q[k]/(Q[k]*Q[k]+0.28125*I[k]*I[k]);
     }
    };
 
    return(0);
}
 
double* demodulator::getFM(void)
{
    return(resultFM);
}
 
 
int main()
{
  ...
}
Кудаив
328 / 405 / 24
Регистрация: 27.05.2012
Сообщений: 1,162
Завершенные тесты: 2
22.02.2014, 18:09     Работа с классами (сделать, чтобы функция возвращала массив, получаемый суммированием двух входных) #6
Цитата Сообщение от АлександрКом Посмотреть сообщение
([k]*Q[k]+0.28125*I[k]*I[k])
[k] - это шо такое?
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
22.02.2014, 18:30     Работа с классами (сделать, чтобы функция возвращала массив, получаемый суммированием двух входных)
Еще ссылки по теме:

Как сделать так что бы функция возвращала строку C++
Работа с классами(сложения двух векторов) C++
Сделать так, чтобы функция возвращала как целые, так и дробные значения C++

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

Или воспользуйтесь поиском по форуму:
АлександрКом
11 / 11 / 1
Регистрация: 21.10.2012
Сообщений: 326
22.02.2014, 18:30  [ТС]     Работа с классами (сделать, чтобы функция возвращала массив, получаемый суммированием двух входных) #7
Спасибо, исправил. Теперь запускается, но если пишу
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
int main()
{
    double i[5];
    double q[5];
    double* r;
 
for(int j=0;j<5;j++){
i[j]=j;
q[j]=j;
};
 
demodulator first(i,q);
 
first.AM();
r=first.getAM();
for(int v=0;v<5;v++){
cout<<r[v]<<" ";
};
}
то первые 2 числа ерунду какую-то пишет, а последние 3 правильно. А если пишу
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
int main()
{
    double i[5];
    double q[5];
    double* r;
 
for(int j=0;j<5;j++){
i[j]=j;
q[j]=j;
};
 
demodulator first(i,q);
 
first.FM();
r=first.getFM();
for(int v=0;v<5;v++){
cout<<r[v]<<" ";
};
}
то тут все числа получаются одни и те же при смене i[j] и q[j], причем три последних числа одинаковые.
Yandex
Объявления
22.02.2014, 18:30     Работа с классами (сделать, чтобы функция возвращала массив, получаемый суммированием двух входных)
Ответ Создать тему
Опции темы

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