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

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

Восстановить пароль Регистрация
 
p1ka4y777
 Аватар для p1ka4y777
2 / 2 / 0
Регистрация: 04.10.2013
Сообщений: 155
19.10.2013, 06:11     Как передать массив в функцию? #1
передайте, пожалуйста, массив у функцию
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
#include "stdafx.h"
#include <iostream>
#include <stdlib.h>
#include <time.h>
 
using namespace std;
 
int main()
{
    const int n = 5; //порядок матрицы
    double myarr[n][n], sum = 0; //sum - сумма элементов строки
    // mini - столбец с минимальным элементом
    // minj - строка с минимальным элементом
    int i, j, mini = 0, minj = 0;
    srand(time(NULL));
 
    //заполнение матрицы псевдослучайными вещественными числами
    for (i = 0; i < n; i++)
        for (j = 0; j < n; j++)
            myarr[i][j] = static_cast<double>(rand()) / rand();
 
    //вывод матрицы на экран и поиск минимального элемента
    for (i = 0; i < n; i++)
    {
        for (j = 0; j < n; j++)
        {
            cout << myarr[i][j] << "  ";
            if (myarr[i][j] < myarr[mini][minj])
            {
                mini = i;
                minj = j;
            }
        }
 
        cout << endl; //тут обрываем строку
    }
 
    cout << "\nIndeksi minimalnogo elementa: " << mini << "  " << minj << endl;
 
    //находим сумму элементов строки с наименьшим элементом.
    for (j = 0; j < n; j++)
        sum += myarr[mini][j];
 
 
    //выводим на экран сумму элементов строки с наименьшим элементом
    cout << "\nSumma elementov stroki s minimalnim elementom " << sum << endl;
    system ("pause");
    return 0;
}
Лучшие ответы (1)
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
FiLF
52 / 52 / 15
Регистрация: 05.09.2013
Сообщений: 1,088
19.10.2013, 07:46     Как передать массив в функцию? #2
В какую функцию?
Пример:
C++
1
2
3
4
5
6
7
8
int func( int *array ) // Функция, принимающая массив
{//
//
//}
 
// Передача массива в функцию
int *A;
func(A);
alsav22
5282 / 4801 / 442
Регистрация: 04.06.2011
Сообщений: 13,587
19.10.2013, 10:17     Как передать массив в функцию? #3
Сообщение было отмечено автором темы, экспертом или модератором как ответ
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
#include "stdafx.h"
#include <iostream>
#include <stdlib.h>
#include <time.h>
#include <iomanip>
 
using namespace std;
 
void f(double myarr[][5], int n)
{
    for (int i = 0; i < n; i++)
        for (int j = 0; j < n; j++)
            myarr[i][j] = static_cast<double>(rand()) / rand();
}
 
void fshow(double myarr[][5], int n)
{
    for (int i = 0; i < n; i++)
    {
        for (int j = 0; j < n; j++)
            cout << setw(10) << left << myarr[i][j] << "  ";
        cout << endl;
    }
    cout << endl << endl;
            
}
 
void fminindex(double myarr[][5], int n, int &mini, int &minj)
{
    for (int i = 0; i < n; i++)
    {
        for (int j = 0; j < n; j++)
        {
            if (myarr[i][j] < myarr[mini][minj])
            {
                mini = i;
                minj = j;
            }
        }
    }
}
 
double fsum(double myarr[][5], int n, int mini)
{
    double sum = 0;
    for (int j = 0; j < n; j++)
        sum += myarr[mini][j];
 
    return sum;
}
 
int main()
{
    const int n = 5; //порядок матрицы
    double myarr[n][n], sum = 0; //sum - сумма элементов строки
    // mini - столбец с минимальным элементом
    // minj - строка с минимальным элементом
    int mini = 0, minj = 0;
    srand(time(NULL));
 
    //заполнение матрицы псевдослучайными вещественными числами
    f(myarr, n);
 
    //вывод матрицы на экран 
    fshow(myarr, n);
    
    //поиск минимального элемента
    fminindex(myarr, n, mini, minj);
 
    cout << "\nIndeksi minimalnogo elementa: " << mini << "  " << minj << endl;
 
    //находим сумму элементов строки с наименьшим элементом.
    sum = fsum(myarr, n, mini);
    
   //выводим на экран сумму элементов строки с наименьшим элементом
    cout << "\nSumma elementov stroki s minimalnim elementom " << sum << endl;
    
    system ("pause");
    return 0;
}
Croessmah
19.10.2013, 10:37
  #4

Не по теме:

Цитата Сообщение от FiLF Посмотреть сообщение
// Функция, принимающая массив
указатель

FiLF
52 / 52 / 15
Регистрация: 05.09.2013
Сообщений: 1,088
19.10.2013, 10:43     Как передать массив в функцию? #5
Цитата Сообщение от Croessmah Посмотреть сообщение

Не по теме:


указатель

Не по теме:

Указатель на область памяти, где размещён массив (на его нулевой элемент). Так лучше? Дело в том, что человек то в трёх соснах разобраться не может, а вы хотите завести его в сибирскую тайгу.

alsav22
19.10.2013, 11:58
  #6

Не по теме:

Цитата Сообщение от FiLF Посмотреть сообщение
Дело в том, что человек то в трёх соснах разобраться не может, а вы хотите завести его в сибирскую тайгу.
А это не сибирская тайга?
Цитата Сообщение от FiLF Посмотреть сообщение
// Передача массива в функцию
int *A;
func(A);

p1ka4y777
 Аватар для p1ka4y777
2 / 2 / 0
Регистрация: 04.10.2013
Сообщений: 155
19.10.2013, 12:53  [ТС]     Как передать массив в функцию? #7
Спасибо за отзывы. Поправьте пожалуйста программу, а то она выдает одни и те же значения
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
#include "stdafx.h"
#include "stdafx.h"
#include <iostream>
 using namespace std;
int main()
{
    int** A, N, M;
    cin >> N >> M;
    A = new int* [N];
    for ( int i = 0; i < N; i++ )
        A[i] = new int [M];
    for (int i=0; i < N; i++)
    {
        for (int j = 0; j < M; j++)
        cout << " " << A[i][j];
        cout << endl;
    }
    for (int i = 0; i < N; i++)
    {
        if (M == 1)
            {
                cout << i+1 << " ";
                continue;
            }
        int x = A[i][0];                 
        for (int j = 1; j < M; j++)
        {
            if (A[i][j] != x)
                break;
            if (j == M-1)               
            cout << i+1 << " \n"; 
        }
    }
    system ("pause");
    return 0;
}
думаю, может я что-то с переменными N i M напутал, не знаю, жду ваших советов...
rpsv
15 / 46 / 3
Регистрация: 14.10.2013
Сообщений: 161
19.10.2013, 13:18     Как передать массив в функцию? #8
p1ka4y777, ну так а что вы хотели, вы нигде им значения не даете вот вам и по-умолчанию он выдает непонятно что!

Ниже код, там несколько примеров работы с массивом и функцией:

1) Init_mas - возвращаем двумерный массив (указатель на таковой)

2) Insert_rand - принимает ССЫЛКУ (за это отвечает символ '&') на двумерный массив. Все что мы сделаем в данной функции, отразится на экземпляре, то есть если в функции мы этот массив отчистим, то он отчистится также в int main()

3) Print_mas - принимаем указатель на двумерный массив, отличие от ссылки, в том, что мы можем что угодно делать с этим массивом, и это никак не отразится на экземпляре объекта(который передавали в функцию)

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
#include <iostream>
 
using namespace std;
 
int** Init_mas(int N, int M)
{
    int** mas = new int* [N];
    for ( int i = 0; i < N; i++ )
    {
        mas[i] = new int [M];
    }
    return mas;
}
 
void Insert_rand(int** &mas, int N, int M)
{
    for (int n = 0; n < N; n++)
    {
        for (int m = 0; m < M; m++)
        {
            mas[n][m] = rand() % 100;
        }
    }
}
 
void Clear_memory(int** &mas, int N)
{
    for(int i = 0; i < N; i++)
    {
        delete[] mas[i];
    }
    //
    delete[] mas;
}
 
void Print_mas(int** mas, int N, int M)
{
    for(int n = 0; n < N; n++)
    {
        cout<<endl;
        for (int m = 0; m < M; m++)
        {
            cout<<"A["<<n<<"]["<<m<<"] = "<<mas[n][m]<<"\n";
        }
    }
}
 
int main()
{
    int N, M;
    cin >> N >> M;
    //
    // Инициализируем массив
    //
    int** A = Init_mas(N, M);
    //
    // Заполняем массив
    //
    Insert_rand(A, N, M);
    //
    // Выводим массив
    //
    Print_mas(A, N, M);
    //
    // Чистим память и выходим
    //
    Clear_memory(A, N);
    system ("pause");
    return 0;
}
FiLF
52 / 52 / 15
Регистрация: 05.09.2013
Сообщений: 1,088
19.10.2013, 13:37     Как передать массив в функцию? #9
Цитата Сообщение от alsav22 Посмотреть сообщение

Не по теме:


А это не сибирская тайга?

Не по теме:

На мой взгяд человеку, который "из C++ знает только название", всё же проще понять это.

alsav22
19.10.2013, 13:44
  #10

Не по теме:

Цитата Сообщение от FiLF Посмотреть сообщение
На мой взгяд человеку, который "из C++ знает только название", всё же проще понять это.
Что - это? Где в вашем коде, вообще, массив, который передаётся в функцию? Ничего кроме неинициализированного указателя, который передаётся в функцию, я там не вижу. Или вы думаете ТС сам догадается? Но если он такой догадливый, как тогда "три сосны"?

FiLF
52 / 52 / 15
Регистрация: 05.09.2013
Сообщений: 1,088
19.10.2013, 13:48     Как передать массив в функцию? #11
Цитата Сообщение от alsav22 Посмотреть сообщение

Не по теме:


Что это? Где в вашем коде, вообще, массив, который передаётся в функцию? Ничего кроме неинициализированного указателя, который передаётся в функцию, я там не вижу. Или вы думаете ТС сам догадается? Но если он такой догадливый, как тогда три сосны?

Не по теме:

Да, возможно, ответ был коротковат. Но я же не могу весь учебник переписывать. Вы правы, я не так далеко увёл его от трёх сосен, но хотя бы указал направление.
P.S. Не совсем понятна причина продолжения оффтопа.

alsav22
19.10.2013, 13:50
  #12

Не по теме:

Цитата Сообщение от FiLF Посмотреть сообщение
Вы правы, я не так далеко увёл его от трёх сосен, но хотя бы указал направление.
Направление в сибирскую тайгу...
Цитата Сообщение от FiLF Посмотреть сообщение
P.S. Не совсем понятна причина продолжения оффтопа.
Так не продолжайте...

p1ka4y777
 Аватар для p1ka4y777
2 / 2 / 0
Регистрация: 04.10.2013
Сообщений: 155
21.10.2013, 18:59  [ТС]     Как передать массив в функцию? #13
вот само задание: Дано двумерный массив размерности nxm. Найти номера строк, элементы в каждом из которых одинаковы между собой.

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
#include "stdafx.h"
#include "stdafx.h"
#include <iostream>
 using namespace std;
int main()
{
    int** A, N, M;
    cin >> N >> M;
    A = new int* [N];
    for ( int i = 0; i < N; i++ )
        A[i] = new int [M];
    for (int i=0; i < N; i++)
    {
        for (int j = 0; j < M; j++)
        cout << " " << A[i][j];
        cout << endl;
    }
    for (int i = 0; i < N; i++)
    {
        if (M == 1)
            {
                cout << i+1 << " ";
                continue;
            }
        int x = A[i][0];                 
        for (int j = 1; j < M; j++)
        {
            if (A[i][j] != x)
                break;
            if (j == M-1)               
            cout << i+1 << " \n"; 
        }
    }
    system ("pause");
    return 0;
}
помогите найти ошибку...
FiLF
52 / 52 / 15
Регистрация: 05.09.2013
Сообщений: 1,088
22.10.2013, 07:53     Как передать массив в функцию? #14
Вы "забыли" ввести матрицу.
p1ka4y777
 Аватар для p1ka4y777
2 / 2 / 0
Регистрация: 04.10.2013
Сообщений: 155
22.10.2013, 22:08  [ТС]     Как передать массив в функцию? #15
так я же ввожу с клавиатуры размер матрици N*M, но просто результат меня удивлияет(
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
22.10.2013, 22:27     Как передать массив в функцию?
Еще ссылки по теме:

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

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

Или воспользуйтесь поиском по форуму:
alsav22
5282 / 4801 / 442
Регистрация: 04.06.2011
Сообщений: 13,587
22.10.2013, 22:27     Как передать массив в функцию? #16
Цитата Сообщение от p1ka4y777 Посмотреть сообщение
так я же ввожу с клавиатуры размер матрици N*M, но просто результат меня удивлияет(
Размер вы вводите, а значения?
Yandex
Объявления
22.10.2013, 22:27     Как передать массив в функцию?
Ответ Создать тему
Опции темы

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