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

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

Восстановить пароль Регистрация
 
Рейтинг: Рейтинг темы: голосов - 9, средняя оценка - 4.78
Kosotornov
1 / 1 / 0
Регистрация: 24.05.2013
Сообщений: 41
02.12.2013, 01:03     Как передать массив из одной функции в другую #1
Ребят помогите с массивами,алгоритм составил а с языком пока на "ВЫ".
как таскать массив из процедуры в процедуру.
перехожу с паскаля там все просто,перед нужной переменной ставим "var".
а как это делается в c++???
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
02.12.2013, 01:03     Как передать массив из одной функции в другую
Посмотрите здесь:

Передать данные из одной функции в другую и т.д. C++
C++ можно ли в с++ вызвать переменную из одной функции в другую т.е. мы переменну задали в одной функции а использовали в другой... и как это реализовать?
как переменную из одной функции передать в другую? C++
Как передать значение переменной из одной функции в другую функцию C++
C++ Как передать массив из одной функции в другую?
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
MrGluck
Ворчун
Эксперт С++
 Аватар для MrGluck
4919 / 2662 / 243
Регистрация: 29.11.2010
Сообщений: 7,397
02.12.2013, 01:06     Как передать массив из одной функции в другую #2
Цитата Сообщение от Kosotornov Посмотреть сообщение
Ребят помогите с массивами,алгоритм составил
и где задача, где алгоритм ваш?
Alex566
 Аватар для Alex566
240 / 152 / 18
Регистрация: 03.04.2013
Сообщений: 317
02.12.2013, 01:21     Как передать массив из одной функции в другую #3
Цитата Сообщение от Kosotornov Посмотреть сообщение
как таскать массив из процедуры в процедуру.
В С++ существуют статические и динамические массивы и работа с ними в функциях осуществляется немного по разному.
Статический массив объявляется таким образом:
C++
1
int mas[10];//Целочисленный массив из 10 элементов.
Динамический таким образом:
C++
1
2
int *mas;//Декларация массива
mas=(int*)malloc(sizeof(int)*10);//Выделение памяти
C++
1
free (mas);//Удаление памяти
Добавлено через 11 минут
При работе со статическим массивом значения массива из главной функции не изменяются. Можно сказать создается его двойник в функции для выполнения определенной операции над ним.
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
int max(int mas[],int n)//Декларация функции которая принимает 2 значения: массив и количество чисел в нем.
{
    int max=mas[0];
    for(int i=1;i<n;i++)
        if(mas[i]>max)
            max=mas[i];
    return max;//Функция возвращает значение переменной max;
}
int main ()
{
    int mas[10]={1,2,3,4,5,6,7,8,9,0};
    int m=max(mas,10);//Передача значений в функцию.
    cout<<m;
MrGluck
Ворчун
Эксперт С++
 Аватар для MrGluck
4919 / 2662 / 243
Регистрация: 29.11.2010
Сообщений: 7,397
02.12.2013, 01:30     Как передать массив из одной функции в другую #4
malloc и free - функции из С, пережиток прошлого и небезопасны. Вдобавок конструкторы не вызывают. В С++ необходимо использовать операторы new и delete (и их братьев для массивов соотв. new[] и delete[]).

Добавлено через 1 минуту
Цитата Сообщение от Alex566 Посмотреть сообщение
Можно сказать создается его двойник в функции для выполнения определенной операции над ним.
поэтому чтобы копий не было - необходимо передавать массив по указателю или по ссылке. Это экономит память и не плодит объекты.
Kosotornov
1 / 1 / 0
Регистрация: 24.05.2013
Сообщений: 41
02.12.2013, 02:00  [ТС]     Как передать массив из одной функции в другую #5
Цитата Сообщение от MrGluck Посмотреть сообщение
и где задача, где алгоритм ваш?
алгоритм
Кликните здесь для просмотра всего текста
Как передать массив из одной функции в другую

текст программы:
Кликните здесь для просмотра всего текста
Pascal
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
    max := mass[kk];{оператор присваивания}
    imax := kk;{оператор присваивания}
    for ii := kk + 1 to chet do{цикл}
      if max < mass[ii] then 
      begin{операторные скобки}
        max := mass[ii];{оператор присваивания}
        imax := ii;{оператор присваивания}
      end;{операторные скобки}
    mass[imax] := mass[kk];{оператор присваивания}
    mass[kk] := max;{оператор присваивания}
  end;{операторные скобки}
end;{операторные скобки}
 
procedure sort1(var mat: tmatr; pol, raz: tind);{процедура}
var{обзываем переменные}
  i, j, chet1, chet2: tind;{обзываем переменные}
  mas: tmas;{обзываем переменные}
begin{операторные скобки}
  for j := 1 to pol do  {цикл}
  begin{операторные скобки}
    chet1 := 0;{оператор присваивания}
    chet2 := 0;{оператор присваивания}
    for i := 1 to j do{цикл}
    begin{операторные скобки}
      chet1 := chet1 + 1;{оператор присваивания}
      mas[chet1] := mat[i, j];{оператор присваивания}
    end;{операторные скобки}
    for i := raz + 1 - j to raz do{цикл} 
    begin{операторные скобки}
      chet1 := chet1 + 1;{оператор присваивания}
      mas[chet1] := mat[i, j];{оператор присваивания}
    end;  {операторные скобки}    
    massiv(mas, chet1);
    for i := 1 to j do{цикл}
    begin{операторные скобки}
      chet2 := chet2 + 1;{оператор присваивания}
      mat[i, j] := mas[chet2];{оператор присваивания}
    end;{операторные скобки}
    for i := raz + 1 - j to raz do{цикл}
    begin{операторные скобки}
      chet2 := chet2 + 1;{оператор присваивания}
      mat[i, j] := mas[chet2];{оператор присваивания}
    end;{операторные скобки}
  end;{операторные скобки}
end;{операторные скобки}
 
procedure sort2(var mat: tmatr; pol, raz: tind);{процедура}
var{обзываем переменные}
  i, j, chet1, chet2: tind;{обзываем переменные}
  mas: tmas;{обзываем переменные}
begin{операторные скобки}
  for j := raz downto pol + 1 do{цикл} 
  begin{операторные скобки}
    chet1 := 0;{оператор присваивания}
    chet2 := 0;{оператор присваивания}
    for i := 1 to raz + 1 - j do {цикл}
    begin{операторные скобки}
      chet1 := chet1 + 1;{оператор присваивания}
      mas[chet1] := mat[i, j];{оператор присваивания}
    end;{операторные скобки}
    for i := j to raz do {цикл}
    begin{операторные скобки}
      chet1 := chet1 + 1;{оператор присваивания}
      mas[chet1] := mat[i, j];{оператор присваивания}
    end;{операторные скобки}
    massiv(mas, chet1);
    for i := 1 to raz + 1 - j do {цикл} 
    begin{операторные скобки}
      chet2 := chet2 + 1;{оператор присваивания}
      mat[i, j] := mas[chet2];{оператор присваивания}
    end;{операторные скобки}
    for i := j to raz do {цикл}
    begin{операторные скобки}
      chet2 := chet2 + 1;{оператор присваивания}
      mat[i, j] := mas[chet2];{оператор присваивания}
    end;{операторные скобки}
  end;{операторные скобки}
end;{операторные скобки}
 
 
 
 
procedure vivod(mat: tmatr; pol, raz: tind);{процедура}
var{обзываем переменные}
  i, j: tind;{обзываем переменные}
begin{операторные скобки}
  for i := 1 to raz do{цикл}
  begin{операторные скобки}
    writeln();{вывод на экран}
    for j := 1 to raz do{цикл}
    begin{операторные скобки}
      write(mat[i, j]:pol, ' ');{вывод на экран}
    end;{операторные скобки}
  end;{операторные скобки}
end;{операторные скобки}
 
var{обзываем переменные}
  matr: tmatr;{обзываем переменные}
  polovina, razm: tind;
 
begin{операторные скобки}
  writeln('Введите половину массива');{вывод на экран}
  writeln();{вывод на экран}
  vvod(matr, polovina, razm);{процедура}
  writeln('изначальный массив имеет вид');{вывод на экран}
  writeln();{вывод на экран}
  vivod(matr, polovina, razm);{процедура}
  writeln();{вывод на экран}
  nul(matr, polovina, razm);{процедура}
  sort1(matr, polovina, razm);{процедура}
  sort2(matr, polovina, razm);{процедура}
  writeln();{вывод на экран}
  writeln('отсортированный массив имеет вид');{вывод на экран}
  writeln();{вывод на экран}
  vivod(matr, polovina, razm);{процедура}
end.{операторные скобки}

Эту лабу сдавал давно,но суть та-же,
MrGluck
Ворчун
Эксперт С++
 Аватар для MrGluck
4919 / 2662 / 243
Регистрация: 29.11.2010
Сообщений: 7,397
02.12.2013, 02:14     Как передать массив из одной функции в другую #6
Kosotornov, а лупу подарите картинку разглядеть?
Текст задания нужен.
Kosotornov
1 / 1 / 0
Регистрация: 24.05.2013
Сообщений: 41
02.12.2013, 02:56  [ТС]     Как передать массив из одной функции в другую #7
Цитата Сообщение от MrGluck Посмотреть сообщение
Текст задания нужен.
задание
сортировка по методу поиска максимума
Название: 1385938377-clip-4kb.png
Просмотров: 129

Размер: 4.1 Кб
полная лаба,не все скопировал пардон
Кликните здесь для просмотра всего текста
Pascal
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
const{обзываем константы}
  razmer = 10;{константа}
 
type{определяем типы}
  Tind = 1..razmer;{тип индекса}
  TElim = integer;{тип элемента}
  Tmatr = array [tind, tind] of Telim;{тип массива}
  Tmas = array[tind] of Telim;{тип массива}
 
procedure vvod(var mat: tmatr; var pol, raz: tind);{процедура}
var{обзываем переменные}
  i, j: tind;{обзываем переменные}
begin{операторные скобки}
  Readln(pol);{размер массива}
  raz := 2 * pol;{оператор присваивания}
  for i := 1 to raz do{цикл }
    for j := 1 to raz do{цикл}
      mat[i, j] := (2 * raz + (i - 1) * 10 - (j - 1));{забиваем массива}
end;{операторные скобки}
 
procedure nul(var mat: tmatr; pol, raz: tind);{процедура}
var{обзываем переменные}
  chet, i, j: tind;{обзываем переменные}
begin{операторные скобки}
  chet := 0;{оператор присваивания}
  for j := 1 to pol - 1 do {цикл}
  begin{операторные скобки}
    chet := chet + 1;{оператор присваивания}
    for i := chet + 1 to raz - chet do{цикл}
      mat[i, j] := 0;{оператор присваивания}
  end; {операторные скобки}    
  chet := 0;{оператор присваивания}
  for j := raz downto pol + 2 do{цикл}
  begin{операторные скобки}
    chet := chet + 1;{оператор присваивания}
    for i := chet + 1 to raz - chet do 
      mat[i, j] := 0;{оператор присваивания}
  end; {операторные скобки}    
end;{операторные скобки}
 
procedure massiv(var mass: tmas; chet: tind);{процедура}
var{обзываем переменные}
  max: telim;{обзываем переменные}
  imax, ii, kk: tind;{обзываем переменные}
begin{операторные скобки}
  for kk := 1 to chet - 1 do{цикл}
  begin{операторные скобки}
    max := mass[kk];{оператор присваивания}
    imax := kk;{оператор присваивания}
    for ii := kk + 1 to chet do{цикл}
      if max < mass[ii] then 
      begin{операторные скобки}
        max := mass[ii];{оператор присваивания}
        imax := ii;{оператор присваивания}
      end;{операторные скобки}
    mass[imax] := mass[kk];{оператор присваивания}
    mass[kk] := max;{оператор присваивания}
  end;{операторные скобки}
end;{операторные скобки}
 
procedure sort1(var mat: tmatr; pol, raz: tind);{процедура}
var{обзываем переменные}
  i, j, chet1, chet2: tind;{обзываем переменные}
  mas: tmas;{обзываем переменные}
begin{операторные скобки}
  for j := 1 to pol do  {цикл}
  begin{операторные скобки}
    chet1 := 0;{оператор присваивания}
    chet2 := 0;{оператор присваивания}
    for i := 1 to j do{цикл}
    begin{операторные скобки}
      chet1 := chet1 + 1;{оператор присваивания}
      mas[chet1] := mat[i, j];{оператор присваивания}
    end;{операторные скобки}
    for i := raz + 1 - j to raz do{цикл} 
    begin{операторные скобки}
      chet1 := chet1 + 1;{оператор присваивания}
      mas[chet1] := mat[i, j];{оператор присваивания}
    end;  {операторные скобки}    
    massiv(mas, chet1);
    for i := 1 to j do{цикл}
    begin{операторные скобки}
      chet2 := chet2 + 1;{оператор присваивания}
      mat[i, j] := mas[chet2];{оператор присваивания}
    end;{операторные скобки}
    for i := raz + 1 - j to raz do{цикл}
    begin{операторные скобки}
      chet2 := chet2 + 1;{оператор присваивания}
      mat[i, j] := mas[chet2];{оператор присваивания}
    end;{операторные скобки}
  end;{операторные скобки}
end;{операторные скобки}
 
procedure sort2(var mat: tmatr; pol, raz: tind);{процедура}
var{обзываем переменные}
  i, j, chet1, chet2: tind;{обзываем переменные}
  mas: tmas;{обзываем переменные}
begin{операторные скобки}
  for j := raz downto pol + 1 do{цикл} 
  begin{операторные скобки}
    chet1 := 0;{оператор присваивания}
    chet2 := 0;{оператор присваивания}
    for i := 1 to raz + 1 - j do {цикл}
    begin{операторные скобки}
      chet1 := chet1 + 1;{оператор присваивания}
      mas[chet1] := mat[i, j];{оператор присваивания}
    end;{операторные скобки}
    for i := j to raz do {цикл}
    begin{операторные скобки}
      chet1 := chet1 + 1;{оператор присваивания}
      mas[chet1] := mat[i, j];{оператор присваивания}
    end;{операторные скобки}
    massiv(mas, chet1);
    for i := 1 to raz + 1 - j do {цикл} 
    begin{операторные скобки}
      chet2 := chet2 + 1;{оператор присваивания}
      mat[i, j] := mas[chet2];{оператор присваивания}
    end;{операторные скобки}
    for i := j to raz do {цикл}
    begin{операторные скобки}
      chet2 := chet2 + 1;{оператор присваивания}
      mat[i, j] := mas[chet2];{оператор присваивания}
    end;{операторные скобки}
  end;{операторные скобки}
end;{операторные скобки}
 
 
 
 
procedure vivod(mat: tmatr; pol, raz: tind);{процедура}
var{обзываем переменные}
  i, j: tind;{обзываем переменные}
begin{операторные скобки}
  for i := 1 to raz do{цикл}
  begin{операторные скобки}
    writeln();{вывод на экран}
    for j := 1 to raz do{цикл}
    begin{операторные скобки}
      write(mat[i, j]:pol, ' ');{вывод на экран}
    end;{операторные скобки}
  end;{операторные скобки}
end;{операторные скобки}
 
var{обзываем переменные}
  matr: tmatr;{обзываем переменные}
  polovina, razm: tind;
 
begin{операторные скобки}
  writeln('Введите половину массива');{вывод на экран}
  writeln();{вывод на экран}
  vvod(matr, polovina, razm);{процедура}
  writeln('изначальный массив имеет вид');{вывод на экран}
  writeln();{вывод на экран}
  vivod(matr, polovina, razm);{процедура}
  writeln();{вывод на экран}
  nul(matr, polovina, razm);{процедура}
  sort1(matr, polovina, razm);{процедура}
  sort2(matr, polovina, razm);{процедура}
  writeln();{вывод на экран}
  writeln('отсортированный массив имеет вид');{вывод на экран}
  writeln();{вывод на экран}
  vivod(matr, polovina, razm);{процедура}
end.{операторные скобки}
Kosotornov
1 / 1 / 0
Регистрация: 24.05.2013
Сообщений: 41
02.12.2013, 03:24  [ТС]     Как передать массив из одной функции в другую #8
меня интересует только:
в процедуре ввод мы задаем массив.
но в основной функции массив пустой,так же как и все переменные которые я задал в процедуре ввод.
в паскале
Pascal
1
procedure vvod(var mat: tmatr; var pol, raz: tind);
var отвечает за то,что матрица и n будут известны в основном теле программы.
как же это сделать тут.???
MrGluck
Ворчун
Эксперт С++
 Аватар для MrGluck
4919 / 2662 / 243
Регистрация: 29.11.2010
Сообщений: 7,397
02.12.2013, 03:52     Как передать массив из одной функции в другую #9
Цитата Сообщение от Kosotornov Посмотреть сообщение
как же это сделать тут.???
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
#include <iostream>
 
// увеличивает все элементы массива на 1. Массив передается по указателю и изменяется
void inc(int *arr, const int N)
{
    for (int i=0; i < N; i++)
        arr[i]++;
}
 
void print(const int *arr, const int N)
{
    for (int i=0; i < N; i++)
        std::cout << arr[i] << " ";
    std::cout << std::endl;
}
 
int main()
{
    const int size = 3;
    int A[size] = {1, 2, 3};
    print(A, size); // исходный массив
    inc(A, size);   // меняем значения элементов массива
    print(A, size); // измененные значения
}
Kosotornov
1 / 1 / 0
Регистрация: 24.05.2013
Сообщений: 41
06.12.2013, 02:40  [ТС]     Как передать массив из одной функции в другую #10
Почему он на меня нервничает???
incompatible types in assignment of `int' to `Telem[10]'
Кликните здесь для просмотра всего текста
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
#include <iostream>
#include <conio.h>
#include <windows.h>
#include <locale.h>
using namespace std;
const int Tind=10;
typedef int Telem;
typedef Telem (Tmatr[Tind][Tind]);
 
void vood(int n,Tmatr A);
 
int main(void)
{Tmatr  B;
int raz; 
system("cls");
setlocale(LC_ALL, "rus" );
 
vood(raz,B);
 
 _getch();
 return 0;
}
/*=========================================================================
========================Процедура ввода массива============================
=========================================================================*/
void vood(int n,Tmatr *A)
{
int i,j;
cout<<"\nВведите половину размерности массива>>";
cin>>n;
n=n*2;
cout<<"\nНачинайте задавать массив\n";
for(i=0;i<n;i++)
    for (j=0;j<n;j++){
        A[i][j]=(2 * n + (i - 1) * 10 - (j - 1));
        }
}
MrGluck
Ворчун
Эксперт С++
 Аватар для MrGluck
4919 / 2662 / 243
Регистрация: 29.11.2010
Сообщений: 7,397
06.12.2013, 17:50     Как передать массив из одной функции в другую #11
Цитата Сообщение от Kosotornov Посмотреть сообщение
vood(raz,B);
принимает в качестве аргумента Tmatr, когда параметр задан как Tmatr*
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
06.12.2013, 19:22     Как передать массив из одной функции в другую
Еще ссылки по теме:

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

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

Или воспользуйтесь поиском по форуму:
Kosotornov
1 / 1 / 0
Регистрация: 24.05.2013
Сообщений: 41
06.12.2013, 19:22  [ТС]     Как передать массив из одной функции в другую #12
Суть не меняется.
Ошибку выдает туже.=(
Yandex
Объявления
06.12.2013, 19:22     Как передать массив из одной функции в другую
Ответ Создать тему
Опции темы

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