0 / 0 / 0
Регистрация: 14.12.2018
Сообщений: 83
1

Создание массива

25.10.2020, 10:26. Показов 1618. Ответов 15
Метки нет (Все метки)

Мне нужно написать в функцию, в которой создается двумерный массив, подскажите пожалуйста, как передать в функцию размеры массива? Требует, что бы числа были константами
__________________
Помощь в написании контрольных, курсовых и дипломных работ, диссертаций здесь
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
25.10.2020, 10:26
Ответы с готовыми решениями:

Создание массива и поиск равных среднему арифметическому элементов массива
Создать массив (пусть это будет целочисленный массив), состоящий из 100 элементов. Считать...

Создание нового массива из определенных элементов другого массива
Здравствуйте. Мне нужно создать одномерный массив из элементов двумерного массива. Как можно это...

Создание массива
Помогите пожалуйста с программой очень нужна помощь . Не до конца работает. Ругается на скобки в 92...

создание массива
Для решения задачи нужно создавать по ходу цикла новый массив или обнулять старый и перезаписывать...

15
7416 / 5011 / 2890
Регистрация: 18.12.2017
Сообщений: 15,694
25.10.2020, 10:48 2
объявите размеры как константы
C++
1
сonst int n, m;
и передавайте в функцию как константы. в чём вопрос-то ? функция должна создавать массив ? напишите условие задачи
0
Нарушитель
289 / 239 / 76
Регистрация: 31.10.2016
Сообщений: 2,222
25.10.2020, 10:49 3
C++ (Qt)
1
2
3
4
5
6
7
8
9
10
11
int* myFun(int* n1, int* n2)
{
int* M = new int * [*n1];
for (int i=0; i<*n1; i++)
        M[i] = new int [*n2];
return M
}
 
const int a=10, b=15;
 
massiv=myFun(&a,&b);
0
half-horse half-gateway
109 / 77 / 41
Регистрация: 10.05.2016
Сообщений: 511
25.10.2020, 11:01 4
na67, пожалуйста. При желании, можно переделать под ручной ввод - думаю, это проблем не доставит.
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
#include <iostream>
#include <time.h>
using namespace std;
 
int** createArray(size_t rows, size_t columns)
{
    srand(time(0));
    int** arr = nullptr;
 
    if (rows && columns)
    {
        arr = new int*[rows];
 
        for (size_t i = 0; i < rows; i++)
        {
            arr[i] = new int[columns];
 
            for (size_t j = 0; j < columns; j++)
                arr[i][j] = rand() % 150 - 50;
        }
    }
 
    return arr;
}
 
int main()
{
    setlocale(LC_ALL, "");
 
    size_t rows, columns;
    cout << "Количество строк: ";
    cin >> rows;
    cout << "Количество столбцов: ";
    cin >> columns;
 
    int** arr = createArray(rows, columns);
 
    if (arr != nullptr)
    {
        cout << "Массив:" << endl;
 
        for (size_t i = 0; i < rows; i++)
        {
            for (size_t j = 0; j < columns; j++)
                cout << arr[i][j] << "\t";
 
            cout << endl;
            delete[] arr[i];
        }
        
        delete[] arr;
    }
    else
        cout << "Массив пустой." << endl;
 
    return 0;
}
0
0 / 0 / 0
Регистрация: 14.12.2018
Сообщений: 83
26.10.2020, 18:28  [ТС] 5
Еще подскажите пожалуйста, что если мне вывод массива надо сделать в отдельной функции, а не в мэйне? т.е я туда должна отправить массив, но я заранее не знаю какие у него размеры
0
Модератор
Эксперт С++
12095 / 9769 / 5907
Регистрация: 18.12.2011
Сообщений: 26,226
26.10.2020, 19:30 6
na67, почему у Вас возникают эти вопросы после того, как Вы внимательно почитали обязательную к прочтению тему
Образцы (шаблоны) программ для типовых задач
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
//
// Создание матрицы
//
int ** Create( size_t n, size_t m ) {
    int ** M = new int * [n];
    for ( size_t i = 0; i < n; ++i ) {
        M[i] = new int [m];
    }
    return M;
}
//
// Удаление матрицы
//
void Free( int ** M, size_t n ) {
    for ( size_t i = 0; i < n; ++i ) {
        delete [] M[i];
    }
    delete [] M;
}
//
//---- ввод матрицы--------------------------------------
//
void Input( int ** M, size_t n, size_t m ) {
    for ( size_t i = 0; i < n; ++i ) {
        for ( size_t j = 0; j < m; ++j ) {
            std::cout << "M[" << i << "][" << j << "] = ";
            std::cin >> M[i][j];
        }
    }
}
//
// заполнение матрицы случайными числами из диапазона [0, 99] -----------
//
void FillRandomNumbers(int **matrix, const size_t rows, const size_t columns)
{
    srand((unsigned int)time(0)); // инициализируем ПГСЧ
 
    for (size_t row=0; row < rows; row++)
        for (size_t column=0; column < columns; column++)
            matrix[row][column] = rand() % 100; // присваиваем СЧ
}
//
//-------- Печать матрицы ------------------------------------------------
//
void Print( int ** M, size_t n, size_t m ) {
    for ( size_t i = 0; i < n; ++i ) {
        for ( size_t j = 0; j < m; ++j ) {
            std::cout<<M[i][j]<<' ';
        }
        std::cout<<std::endl;
    }
}
//
// пример обработки матрицы - подсчет сумм в каждой строке
//
void Process( int ** M,int *Sum, size_t n, size_t m ) {
    for ( size_t i = 0; i < n; ++i ) {
        Sum[i] = 0;
        for ( size_t j = 0; j < m; ++j ) {
            Sum[i] += M[i][j];
        }
    }
}
0
half-horse half-gateway
109 / 77 / 41
Регистрация: 10.05.2016
Сообщений: 511
27.10.2020, 08:43 7
na67, как это не знаете? При создании массива запишите его размерность в переменные (в моем примере - это переменные rows и columns). И потом передаете его размерность в качестве параметров функции (выше Вам пример уже показали).
0
0 / 0 / 0
Регистрация: 14.12.2018
Сообщений: 83
27.10.2020, 09:00  [ТС] 8
Вот мой код:
C++
1
2
3
4
5
6
7
8
9
10
11
int main()
{
    size_t rows, columns;
    rows = 5;columns = 2;
    int** x = input(rows, columns);
    Print(x, rows, columns);
    rows = 3;columns = 4;
    int** y = input(rows, columns);
    Print(y, rows, columns);
    std::cout << "z=" << (MAX2(x, 5, 2) - MIN2(y, 3, 4)) / (MIN2(x, 5, 2) - MAX2(y, 3, 4));
}
Есть функция:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
int MAX2(int** arr, size_t rows, size_t columns)
{
    int max = arr[0][0];//ругается на эту строчку, пишет, что нарушение прав доступа при чтении. В интернете написано, что я вылезаю за пределы массива. Значит он у меня не создался? 
 
    for (int i = 0; i < rows; i++)
    {
        for (int j = 0; j < columns; j++)
        {
            if (arr[i][j] > max)
            {
                max = arr[i][j];
            }
        }
    }
    return max;
}
0
half-horse half-gateway
109 / 77 / 41
Регистрация: 10.05.2016
Сообщений: 511
27.10.2020, 09:18 9
na67, хотелось бы увидеть функцию input. Надо каждый элемент массива проинициализировать (хотя бы заполнить нулем).
0
0 / 0 / 0
Регистрация: 14.12.2018
Сообщений: 83
27.10.2020, 10:27  [ТС] 10
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
int** input(size_t rows, size_t columns)
{
    int** arr = new int* [rows];
 
    for (size_t i = 0; i < rows; i++)
    {
        arr[i] = new int[columns];
 
        for (size_t j = 0; j < columns; j++)
            arr[i][j] = rand() % 150 - 50;
    
    }
 
    return arr;
}
0
half-horse half-gateway
109 / 77 / 41
Регистрация: 10.05.2016
Сообщений: 511
27.10.2020, 11:34 11
na67, функцию MIN2 тоже хотелось бы увидеть. В MAX2 у меня всё срабатывает.

Добавлено через 10 минут
Цитата Сообщение от na67 Посмотреть сообщение
size_t rows, columns;
rows = 5;columns = 2;
int** x = input(rows, columns);

rows = 3;columns = 4;
int** y = input(rows, columns);
Вы уж тогда запоминайте лучше размерность каждого созданного массива:
C++
1
2
3
4
5
6
7
8
9
size_t xrows = 5, xcolumns = 2;
int** x = input(xrows, xcolumns);
Print(x, xrows, xcolumns);
 
size_t yrows = 3, ycolumns = 4;
int** y = input(yrows, ycolumns);
Print(y, yrows, ycolumns);
 
cout << "z = " << (MAX2(x, xrows, xcolumns) - MIN2(y, yrows, ycolumns)) / (MIN2(x, xrows, xcolumns) - MAX2(y, yrows, ycolumns));
И да, функции MAX2 и MIN2 лучше сделать так, чтобы возвращали вещественное число для более точных вычислений иначе получается целочисленное деление.
0
7416 / 5011 / 2890
Регистрация: 18.12.2017
Сообщений: 15,694
27.10.2020, 13:02 12
Цитата Сообщение от BlackStoneBlack Посмотреть сообщение
функции MAX2 и MIN2 лучше сделать так, чтобы возвращали вещественное
нет, не лучше. просто перед вычислениями добавляется (double)

na67, напишите условие задачи и что именно Вам непонятно
0
0 / 0 / 0
Регистрация: 14.12.2018
Сообщений: 83
28.10.2020, 15:44  [ТС] 13
Мне нужно:Вычислить z=(xmin-ymax)/(xmax-ymin)с использованием функции, где xmax ,xmin ,ymax ,ymin –
максимальные и минимальные элементы соответственно массива x(5,2) и массива
y(3,4). При этом еще нужно ввод и вывод массивов выполнить в отдельных функциях.

вот мой код полностью:
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
int MIN2(int** arr, size_t rows, size_t columns)
{
    int min = arr[0][0];
    
    for (int i = 0; i < rows; i++)
    {
        for (int j = 0; j < columns; j++)
        {
            if (arr[i][j] < min)
            {
                min = arr[i][j];
            }
        }
    }
    return min;
}
 
int MAX2(int** arr, size_t rows, size_t columns)
{
    int max = arr[0][0];
 
    for (int i = 0; i < rows; i++)
    {
        for (int j = 0; j < columns; j++)
        {
            if (arr[i][j] > max)
            {
                max = arr[i][j];
            }
        }
    }
    return max;
}
int** input(size_t rows, size_t columns)
{
    int** arr = new int* [rows];
 
    for (size_t i = 0; i < rows; i++)
    {
        arr[i] = new int[columns];
 
        for (size_t j = 0; j < columns; j++)
            arr[i][j] = rand() % 150 - 50;
    
    }
 
    return arr;
}
void Print(int** arr, size_t rows, size_t columns)
{
    if (arr != nullptr)
    {
        std::cout << "Массив: " << std::endl; 
 
        for (size_t i = 0; i < rows; i++)
        {
            for (size_t j = 0; j < columns; j++)
                std::cout << arr[i][j] << "\t";
 
            std::cout << std::endl;
            delete[] arr[i];
        }
 
        delete[] arr;
    }
}
 
int main()
{
   size_t rows, columns;
    rows = 5;columns = 2;
    int** x = input(rows, columns);
    Print(x, rows, columns);
    rows = 3;columns = 4;
    int** y = input(rows, columns);
    Print(y, rows, columns);
    std::cout << "z=" << (MAX2(x, 5, 2) - MIN2(y, 3, 4)) / (MIN2(x, 5, 2) - MAX2(y, 3, 4));
 
}
0
0 / 0 / 0
Регистрация: 14.12.2018
Сообщений: 83
28.10.2020, 15:50  [ТС] 14
вот мой код:
Цитата Сообщение от BlackStoneBlack Посмотреть сообщение
функцию MIN2 тоже хотелось бы увидеть. В MAX2 у меня всё срабатывает.
У меня не срабатывает, выдает ошибку и в min и в max
Миниатюры
Создание массива  
0
half-horse half-gateway
109 / 77 / 41
Регистрация: 10.05.2016
Сообщений: 511
28.10.2020, 17:32 15
na67, потому что в методе Print нужно убрать следующие строчки:
C++
1
2
delete[] arr[i];
delete[] arr;
Вы удаляете массив, а потом пытаетесь к нему обратиться. Понятное дело, раз память, выделенная под массив, помечена, как освобожденная, то ни программа, ни система не могут (да и не должны) гарантировать того, что данные по этому адресу не переписаны. Очищение массива следует выполнять в конце, после всех операций, когда они становятся не нужны. Товарищ zss выше уже давал Вам пример такой функции, я снова Вам её приведу:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
void clearArray(int** arr, size_t rows) 
{
    for (size_t i = 0; i < rows; i++)
        delete[] arr[i];
 
    delete[] arr;
}
 
int main()
{
    size_t rows = 2, columns = 5;
    int** arr = input(arr, rows, columns);
 
    /* Проделываем ВСЕ необходимые операции с массивом */
 
   clearArray(arr, rows);
   return 0;
}
И да, т.к. мы передаем размерность массива в метод, занимающийся его очищением, я Вам уже советовал выше запоминать размерность каждого массива, чтобы не было проблем.
0
7416 / 5011 / 2890
Регистрация: 18.12.2017
Сообщений: 15,694
28.10.2020, 23:03 16
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
#include <iostream>
#include <iomanip>
#include <cstdlib>
#include <ctime>
using namespace std;
 
int** Create(int n, int m)
{
      int** a = new int* [n]; 
    for (int i = 0; i < n; i++)    
        a[i] = new int[m];        
    return a;
}        
        
void Random(int** a, int n, int m)
{     
    for (int i = 0; i < n; i++)    
        for (int j = 0; j < m; j++)
            a[i][j] = rand() % 151 - 50;    
}
 
void Print(int** a, int n, int m)
{
    for (int i = 0; i < n; i++)
    {
        for (int j = 0; j < m; j++)
            cout << setw(5) << a[i][j] << " "; 
    cout << "\n";
    }
}
 
int Min(int** a, int n, int m)
{
    int min = a[0][0];    
    for (int i = 0; i < n; i++)    
        for (int j = 0; j < m; j++)        
            if (a[i][j] < min) min = a[i][j];   
    return min;
}
 
int Max(int** a, int n, int m)
{
    int max = a[0][0];    
    for (int i = 0; i < n; i++)    
        for (int j = 0; j < m; j++)        
            if (a[i][j] > max) max = a[i][j];   
    return max;
}
 
void FreeMemory(int** a, int n)
{
    for (int i = 0; i < n; i++)
    delete[] a[i]; 
    delete[] a;    
}
 
int main()
{   
    srand((int)time(0));
    int nx=5, mx=2, xmax, xmin;
    
    int** x = Create(nx, mx);
    Random(x, nx, mx);
    cout << "Array x:\n";
    Print(x, nx, mx);
    xmax=Max(x, nx, mx);
    xmin=Min(x, nx, mx);
    cout << "xmax=" << xmax << "\nxmin=" << xmin << "\n";
    
    int ny=3, my=4, ymax, ymin;
    
    int** y = Create(ny, my);
    Random(y, ny, my);
    cout << "Array y:\n";
    Print(y, ny, my);        
    ymax=Max(y, ny, my);
    ymin=Min(y, ny, my);
    cout << "ymax=" << ymax << "\nymin=" << ymin << "\n";
    
    if (xmin!=ymax)
    {
        double z=(double)(xmax - ymin) / (xmin - ymax);
        cout << "z=" << z << "\n";
    }
    else cout << "z not determined\n";
    
    FreeMemory(x, nx);
    FreeMemory(y, ny);
system("pause");
return 0;
}
0
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
28.10.2020, 23:03
Помогаю со студенческими работами здесь

Создание динамического массива
Объявите указатель на массив типа double и предложите пользователю выбрать его размер. Далее...

Создание динамического массива
Здравствуйте,ребят кто может подсказать как пределать код? что б массивы создавались динамически,...

Создание числового массива
Задание такое: нужно создать числовой массив A. Значение n вводится с клавиатуры. Нужно переставить...

Создание динамического массива
Первое задание помогите пожалуйста.

Создание динамического массива
Хотел написать программу, чтобы пользователь мог задать количество элементов в одномерном массиве,...

Создание двумерного массива
помогите решить зачетную работу. Заполнить квадратную матрицу(например 10 на 10) случайными...


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

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

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2022, CyberForum.ru