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

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
Simplik
0 / 0 / 0
Регистрация: 01.10.2011
Сообщений: 8
#1

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

17.10.2011, 19:32. Просмотров 740. Ответов 9
Метки нет (Все метки)

Вообщем написал программу. Всё работает как надо, кроме одного, никак не могу сделать чтобы размерность массива, которая вводится в "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;
}
Результат выполнения программы
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
17.10.2011, 19:32
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Передача размерности массива как параметр из одной функции в другую. (C++):

Передача элементов массива из одной функции в другую - C++
Подскажите пожалуйста, хочу написать тест проверки знаний, генерацию случайных элементов без повторений нашел в Internet переработал под...

Передача массива из одной функции в другую, и сложение его элементов. - C++
Здравствуйте, задание: Создать две функции для работы с массивом: • формирование массива трехзначных чисел с помощью датчика...

динамическое создание двумерного массива и передача его как параметр функции - C++
Здравствуйте, подскажите пожалуйста, как можно передать параметром динамически созданный массив в функцию. Желательно пример. Буду очень...

Передача переменной из одной функции в другую - C++
Доброго времени суток, мне нужно передать переменные *x и n из функции main в функции А10, A8, M5, подскажите как это сделать #include...

Передача массивов и параметров с одной функции в другую - C++
Здравствуйте. Я пишу программу, она состоит из множества функций. И у меня возникло море вопросов. Чур камнями не бросаться. 1)Как...

можно ли в с++ вызвать переменную из одной функции в другую т.е. мы переменну задали в одной функции а использовали в другой... и как это реализовать? - C++
можно ли в с++ вызвать переменную из одной функции в другую т.е. мы переменну задали в одной функции а использовали в другой... и как это...

9
Vourhey
Почетный модератор
6485 / 2259 / 123
Регистрация: 29.07.2006
Сообщений: 12,635
17.10.2011, 19:40 #2
Странный ты, вроде рядом прям передаешь по указателю, а такие вопросы задаешь. Указатели, ссылки, возвращающие значения...
0
anton_m
2 / 2 / 0
Регистрация: 22.09.2011
Сообщений: 7
17.10.2011, 19:41 #3
Передавай параметр number в функцию Vvod по ссылке. Либо пусть функция Vvod возвращает значение n, которые можешь передавать другим функциям.
0
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"
Либо мне менять прототип функций и сами функции, либо есть другой выход

Или инициализировать массив, который я подставляю в функцию в параметр не как массив, а как что-то другое, массив указателей?
0
Сыроежка
Заблокирован
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"
Либо мне менять прототип функций и сами функции, либо есть другой выход

Или инициализировать массив, который я подставляю в функцию в параметр не как массив, а как что-то другое, массив указателей?
Еще раз без всякого кода на словах скажите, что вы хотите возвратить из одной функции и передать в другую?!
0
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);                           //процедура нахождения максимума
1
Сыроежка
Заблокирован
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?
0
Simplik
0 / 0 / 0
Регистрация: 01.10.2011
Сообщений: 8
17.10.2011, 20:20  [ТС] #8
Цитата Сообщение от Сыроежка Посмотреть сообщение
Не понятно, а зачем вы объявили функцию VVod, как возвращающую значение short, если из нее возвращаете всегда 0?
Извиняюсь за short, забыл затереть...void она возращает.
0
anton_m
2 / 2 / 0
Регистрация: 22.09.2011
Сообщений: 7
17.10.2011, 20:20 #9
Цитата Сообщение от Сыроежка Посмотреть сообщение
Не понятно, а зачем вы объявили функцию VVod, как возвращающую значение short, если из нее возвращаете всегда 0?
собственно, это Simplik объявил Vvod как short, а я дописал return 0, чтобы код компилировался.
0
Simplik
0 / 0 / 0
Регистрация: 01.10.2011
Сообщений: 8
17.10.2011, 20:31  [ТС] #10
anton_m, Вы мой спаситель. Огромное спасибо за помощь. Всё работает как надо.
0
17.10.2011, 20:31
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
17.10.2011, 20:31
Привет! Вот еще темы с ответами:

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

Передача функции как параметр шаблона - C++
Хочу передавать в шаблон любую функцию без параметров и вызывать ее из него. Как это сделать? Не работает, но примерно так должно...

Как передать массив из одной функции в другую? - C++
Нужна помощь. #include &lt;iostream&gt; #include &lt;conio.h&gt; using namespace std; int vod(int a) { int a, i; for (i = 0; i &lt; 12;...

Как переменную из одной функции передать в другую? - C++
у меня надо переменную index из функции maxi передать в функцию summa #include &quot;stdafx.h&quot; #include &quot;math.h&quot; #include &quot;iostream&quot; ...


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

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

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