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

Передача размерности массива как параметр из одной функции в другую. - C++

Восстановить пароль Регистрация
 
Simplik
0 / 0 / 0
Регистрация: 01.10.2011
Сообщений: 8
17.10.2011, 19:32     Передача размерности массива как параметр из одной функции в другую. #1
Вообщем написал программу. Всё работает как надо, кроме одного, никак не могу сделать чтобы размерность массива, которая вводится в "main" 27-28 строчке (в данном случае переменная "number"), вводилась внутри функции "Vvod" в 49-50 строке(переменная 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
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
 #include <windows.h>
 #include <iostream>
 using namespace std;
 char* DosStr(char* src);
 
 short Vvod(int, float*, float*, float*, float*, float*);
 void vhodnie(int, float*, float*, float*, float*, float*, float *data);
 void vihodnie(int n, float *Uin2, float *data, float *out);
 void vivod(int, float *data, float *out);
 float maxx3 (int, float *out);
 
 int main()
 
 {
     cout.precision( 3 );
     cout.setf( ios::fixed );
     cout.width( 10 );
 
     int number;
     float tn,t1,tk,Um,Uin2;
     int nn;
     float dataa[50];
     float outa[50];
     cout << DosStr("Введите количество отсчётов сигнала-> ") ;  
     cin >> number;
  
Vvod(number, &tn, &t1, &tk, &Um, &Uin2);               //процедура ввода 
vhodnie(number,&tn,&t1,&tk,&Um,&Uin2, &dataa[number]); //процедура расчёта входных сигналов
vihodnie(number,&Uin2,&dataa[number], &outa[number]);  //процедура расчёта выходных сигналов
vivod(number,&dataa[number], &outa[number]);           //процедура вывода входных и выходных сигналов
maxx3(number,&outa[number]);                           //процедура нахождения максимума
     
     cout << DosStr("\n\nПрограмма закончила работу") ;
     cout << DosStr("\nНажмите любую клавишу для выхода... ") ;
     cin.get();
     cin.get();
 
 }
 
 short Vvod(int n, float *tn, float *t1, float *tk, float *Um, float *Uin2)
 
 {
    int hh; 
    n=8;*tn=10;*t1=23;*tk=35;*Um=6;*Uin2=2;      
     
     cout << DosStr("Введите нужное количество отсчётов сигнала-> ");    
     cin>>n;
     /*
     cout << endl <<DosStr("Введите ваши исходные данные");
             
     
     cout << endl <<DosStr("Начальный момент наблюдения входного сигнала -> ") ;
     cin>>*tn;
     
     cout << endl <<DosStr("Момент времени, разделяющий две ветви алгоритма")<< endl;  
     cout << DosStr("расчёта входного сигнала -> ") ;
     
     cin>>*t1;
     
     cout << endl <<DosStr("Конечный момент времени наблюдения входного сигнала -> ") ;
     cin>>*tk;
     
     cout << endl <<DosStr("Значение входного напряжения ") ;
     cout << endl<< DosStr("соответствующее моменту времени т1 -> ") ;
     cin>>*Um;
     
     cout << endl <<DosStr("Заданный параметр передаточной характеристики -> ") ;
     cin>>*Uin2;
     
     cout << DosStr("Ввод данных окончен ! ") <<endl;
     cin.get();  
*/
 
 }
 
 void vhodnie(int n, float *tn, float *t1, float *tk, float *Um, float *Uin2, float *data)
 
 {
     float t,a,b,del,u;
     a=12; b=12;
     int i;
     t=*tn;
     u=0;
     int q=0;       
     del = (*tk-*tn)/(n-1);           // арифметические операции
     cout << "a="<<a<<"\t" << "del="<<del<<"\t" << "b="<<b<<endl;
     i=0;
      for(i=0;i<n;i++)
                   {q=i+1; if (t<*t1) {  cout <<  "\n t"<<q<<"= " << t;
                  
                        u = a*(t-*tn);
                        data[i] = u;
              //         cout << " vnodnie = " << u;
                              }
                     else if (t>*t1){
                             cout << "\n t"<<q<<"= " << t;
                        u = a*(*t1-*tn)-b*(t-*t1);
                        data[i] = u;
              //          cout << " vnodnie= " << u;
                          }
                             t = t + del;
                   }
 }
 
 /*****-*****-*****-*****-*****-*****-*****-*****-*****-*****-*****-*****-*****-*****-*****-*****/
 void vihodnie(int n, float *Uin2, float *data, float *out)
 
 {
    int i;
          i=0;
      for(i=0;i<n;i++)
                   { if ((data[i])>*Uin2) { out[i]=(data[i]*data[i]);
                                          }
                     else if ((data[i])<*Uin2){
                       out[i]=2;
                          }
                  }
 
 }
 
/*****-*****-*****-*****-*****-*****-*****-*****-*****-*****-*****-*****-*****-*****-*****-*****/
 
 
 void vivod(int n, float *data, float *out)
 
 {
 int i;
 int j;
 cout << "\n"<<char(218);
 int kk;
     for (kk=0;kk<60;kk++)
     {cout<<char(196);}
     cout <<char(191);    
 
     cout << endl <<char(179)<< DosStr("Отсчёты входного сигнала ")<<char(179);
     cout << DosStr("Отсчёты выходного сигнала\t     ")<<char(179)<< endl;
     cout<<char(195);  
     for (kk=0;kk<60;kk++)
     {cout<<char(196);}  
     cout<<char(180);     
     cout <<endl;
     
         
      for(i=0;i<n;i++)
                   { 
                     cout << char(179)<<"      ";
                     cout <<data[i]<<"\t\t\t   ";
                     cout<< out[i]<<"\t\t     "<<char(179)<<endl;
                                        }
     cout<<char(192);  
     for (kk=0;kk<60;kk++)
     {cout<<char(196);}
     cout<<char(217);   
 }
 
/*****-*****-*****-*****-*****-*****-*****-*****-*****-*****-*****-*****-*****-*****-*****-*****/
 
float maxx3 (int n, float *out)
{     int i;
    float max = 0;
    for (i = 0; i < n; ++i)
        if (out[i] > max)
            max = out[i];
    cout << endl<<DosStr("Макс значение выходного сигнала -> ")<<max;   
    return max;
} 
 char* DosStr(char* src)
{
    static char buf[1024];
    CharToOem(src, buf);
    return buf;
}
Результат выполнения программы
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
17.10.2011, 19:32     Передача размерности массива как параметр из одной функции в другую.
Посмотрите здесь:

C++ Передача элементов массива из одной функции в другую
C++ можно ли в с++ вызвать переменную из одной функции в другую т.е. мы переменну задали в одной функции а использовали в другой... и как это реализовать?
Передача массива из одной функции в другую, и сложение его элементов. C++
Передача массивов и параметров с одной функции в другую C++
как переменную из одной функции передать в другую? C++
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Vourhey
Почетный модератор
6469 / 2244 / 123
Регистрация: 29.07.2006
Сообщений: 12,635
17.10.2011, 19:40     Передача размерности массива как параметр из одной функции в другую. #2
Странный ты, вроде рядом прям передаешь по указателю, а такие вопросы задаешь. Указатели, ссылки, возвращающие значения...
anton_m
2 / 2 / 0
Регистрация: 22.09.2011
Сообщений: 7
17.10.2011, 19:41     Передача размерности массива как параметр из одной функции в другую. #3
Передавай параметр number в функцию Vvod по ссылке. Либо пусть функция Vvod возвращает значение n, которые можешь передавать другим функциям.
Simplik
0 / 0 / 0
Регистрация: 01.10.2011
Сообщений: 8
17.10.2011, 19:46  [ТС]     Передача размерности массива как параметр из одной функции в другую. #4
Цитата Сообщение от Vourhey Посмотреть сообщение
Странный ты, вроде рядом прям передаешь по указателю, а такие вопросы задаешь. Указатели, ссылки, возвращающие значения...
Почему странный? Просто уже голова идёт кругом, ну да, передавать передаю, но только нельзя же мне вот так передавать
C++
1
vhodnie(number,&tn,&t1,&tk,&Um,&Uin2, &dataa[&number]); //процедура расчёта входных сигналов
он ругается invalid types `float[50][float*]' for array subscript. Так как не могу я сюда поставить значение "&number"
Либо мне менять прототип функций и сами функции, либо есть другой выход

Или инициализировать массив, который я подставляю в функцию в параметр не как массив, а как что-то другое, массив указателей?
Сыроежка
Заблокирован
17.10.2011, 20:12     Передача размерности массива как параметр из одной функции в другую. #5
Цитата Сообщение от Simplik Посмотреть сообщение
Почему странный? Просто уже голова идёт кругом, ну да, передавать передаю, но только нельзя же мне вот так передавать
C++
1
vhodnie(number,&tn,&t1,&tk,&Um,&Uin2, &dataa[&number]); //процедура расчёта входных сигналов
он ругается invalid types `float[50][float*]' for array subscript. Так как не могу я сюда поставить значение "&number"
Либо мне менять прототип функций и сами функции, либо есть другой выход

Или инициализировать массив, который я подставляю в функцию в параметр не как массив, а как что-то другое, массив указателей?
Еще раз без всякого кода на словах скажите, что вы хотите возвратить из одной функции и передать в другую?!
anton_m
2 / 2 / 0
Регистрация: 22.09.2011
Сообщений: 7
17.10.2011, 20:13     Передача размерности массива как параметр из одной функции в другую. #6
можно сделать так:
меняем функцию Vvod
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
short Vvod(int*, float*, float*, float*, float*, float*);//описание
Vvod(&number, &tn, &t1, &tk, &Um, &Uin2); //вызов
short Vvod(int *n, float *tn, float *t1, float *tk, float *Um, float *Uin2)
 {
    int hh; 
    *n=8;*tn=10;*t1=23;*tk=35;*Um=6;*Uin2=2;      
     
     cout << DosStr("Введите нужное количество отсчётов сигнала-> ");    
     cin>>*n;
     /*
     */
 return 0;
 }
объявляем указатели на массивы
C++
1
2
     float *dataa = NULL;
     float *outa = NULL;
после вызова функции Vvod, когда number уже имеет нужное нам значение, выделяем память под массивы
C++
1
2
dataa = new float [number];
outa = new float [number];
передаем массивы так:
C++
1
2
3
4
5
6
7
Vvod(&number, &tn, &t1, &tk, &Um, &Uin2);               //процедура ввода 
dataa = new float [number];
outa = new float [number];
vhodnie(number,&tn,&t1,&tk,&Um,&Uin2, dataa); //процедура расчёта входных сигналов
vihodnie(number,&Uin2,dataa, outa);  //процедура расчёта выходных сигналов
vivod(number,dataa, outa);           //процедура вывода входных и выходных сигналов
maxx3(number,outa);                           //процедура нахождения максимума
Сыроежка
Заблокирован
17.10.2011, 20:16     Передача размерности массива как параметр из одной функции в другую. #7
Цитата Сообщение от anton_m Посмотреть сообщение
можно сделать так:
меняем функцию Vvod
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
short Vvod(int*, float*, float*, float*, float*, float*);//описание
Vvod(&number, &tn, &t1, &tk, &Um, &Uin2); //вызов
short Vvod(int *n, float *tn, float *t1, float *tk, float *Um, float *Uin2)
 {
    int hh; 
    *n=8;*tn=10;*t1=23;*tk=35;*Um=6;*Uin2=2;      
     
     cout << DosStr("Введите нужное количество отсчётов сигнала-> ");    
     cin>>*n;
     /*
     */
 return 0;
 }
Не понятно, а зачем вы объявили функцию VVod, как возвращающую значение short, если из нее возвращаете всегда 0?
Simplik
0 / 0 / 0
Регистрация: 01.10.2011
Сообщений: 8
17.10.2011, 20:20  [ТС]     Передача размерности массива как параметр из одной функции в другую. #8
Цитата Сообщение от Сыроежка Посмотреть сообщение
Не понятно, а зачем вы объявили функцию VVod, как возвращающую значение short, если из нее возвращаете всегда 0?
Извиняюсь за short, забыл затереть...void она возращает.
anton_m
2 / 2 / 0
Регистрация: 22.09.2011
Сообщений: 7
17.10.2011, 20:20     Передача размерности массива как параметр из одной функции в другую. #9
Цитата Сообщение от Сыроежка Посмотреть сообщение
Не понятно, а зачем вы объявили функцию VVod, как возвращающую значение short, если из нее возвращаете всегда 0?
собственно, это Simplik объявил Vvod как short, а я дописал return 0, чтобы код компилировался.
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
17.10.2011, 20:31     Передача размерности массива как параметр из одной функции в другую.
Еще ссылки по теме:

C++ Как передать массив из одной функции в другую?
C++ Как передать значение из одной функции в другую?
Перенос динамического массива из одной функции в другую C++

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

Или воспользуйтесь поиском по форуму:
Simplik
0 / 0 / 0
Регистрация: 01.10.2011
Сообщений: 8
17.10.2011, 20:31  [ТС]     Передача размерности массива как параметр из одной функции в другую. #10
anton_m, Вы мой спаситель. Огромное спасибо за помощь. Всё работает как надо.
Yandex
Объявления
17.10.2011, 20:31     Передача размерности массива как параметр из одной функции в другую.
Ответ Создать тему
Опции темы

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