С Новым годом! Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.78/55: Рейтинг темы: голосов - 55, средняя оценка - 4.78
1 / 1 / 2
Регистрация: 25.02.2016
Сообщений: 141
1

Создание двумерного динамического массива через функции

02.04.2016, 21:05. Показов 11154. Ответов 2
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Помогите разобраться с программой. После вхождения в функцию Fill_mas, я выхожу из программы и вводить элементы отказывается. Даже если напрямую в функцию menu задать заполнение и вывод массива, тоже самое(
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
# include <iostream>
# include <stdlib.h>
# include <time.h>
# include <conio.h>
 
using namespace std;
 
int** Make( int row, int col);
void Fill_mas(int** mas, int &row, int &col);
void menu(int **mas, int &row, int &col);
 
void main()
{
    srand(time(NULL));
    setlocale(0, "");//русс.язык
    int **mas = NULL;
    int row = 0;
    int col = 0;
    menu(mas, row, col);
}
 
 
int** Make(int row, int col){
    int**mas = new int*[row];
    for (int i = 0; i < row; i++){
        mas[i] = new int[col];
    }
    cout << "Введите размер двумерного динамического массива\n";
    do{
        cout << "Колчество строк: ";
        cin >> row;
        cout << "Количесво столбцов: ";
        cin >> col;
        if (row < 1 || col < 1)
            cout << "\nОшибка!!! размерность массива должна быть больше 0. \n\nВведите другое значение: ";
    } while (row < 1 || col < 1);
    return mas;
}
void Fill_mas(int** mas, int &row, int &col){
    //int m = 0, int n = 0;
    int var;
 
    cout << "Числа ввести случайным образом из с клавиатуры?\n";
    do{
        cout << "1 - слуйным образом;\n2 - с клавиатуры\n";
        cin >> var;
        if (var < 1 || var > 2)
            cout << "Введи правильное значение\n";
    } while (var < 1 || var > 2);
    switch (var){
    case 1:
        /*mas = new int*[row];
        for (int i = 0; i < row; i++)
            mas[i] = new int[col];*/
        
        for (int i = 0; i < row; i++){
            for (int j = 0; j < col; j++){
                mas[i][j] = rand() % 90 + 10;
                //  cout << mas[i][j] << " ";
            }
        //  cout << "\n";
        }
        break;
    case 2:
    /*  mas = new int*[row];
        for (int i = 0; i < row; i++)
            mas[i] = new int[col];*/
        for (int i = 0; i < row; i++){
            for (int j = 0; j < col; j++){
                cout << "[ " << i << "," << j << " ] = ";
                cin >> mas[i][j];
                //  cout << mas[i][j] << " ";
            }
            //cout << "\n";
        }
        break;
    default:;
    }
 
    //for (int i = 0; i < row; i++)
    //  delete[]mas[i];
    //delete[]mas;
}
void menu(int **mas, int &row, int &col){
    cout << "\n\n\n\n\n\n\n\t\tРАБОТА С ДВУМЕРНЫМ ДИНАМИЧЕСКИМ МАССИВОМ\n\n\n\n\n\n\n";
    _getch();
    system("cls");
mas = Make(row, col);
    system("cls");
cout << "Как будете вводить числа одномерного массива?\n\n";
Fill_mas(mas, row, col);
for (int i = 0; i < row; i++){
        for (int j = 0; j < col; j++){
            cout << mas[i][j] << " ";
        }
        cout << "\n";
    }
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
02.04.2016, 21:05
Ответы с готовыми решениями:

Создание двумерного динамического массива в функции
Здравствуйте. Скажите где я допустил ошибку в создании динамического массива? #include&lt;stdio.h&gt;...

Создание функции инициализации двумерного массива строк через указатель
Здравствуйте,имеется двумерный массив: in_data_up=_T(&quot;00&quot;); in_data_up=_T(&quot;01&quot;); ...

Создание двумерного динамического массива
Какой код может быть использован для создания массива из 10 столбцов и n строк? Переменная n...

Создание двумерного динамического массива
У Хортона А. - Visual C++ 2005 написано как создавать динамические массивы таким способом: ...

2
Модератор
Эксперт С++
13712 / 10911 / 6476
Регистрация: 18.12.2011
Сообщений: 29,139
02.04.2016, 21:18 2
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
int** Make(int& row, int& col){
    cout << "Введите размер двумерного динамического массива\n";
    do{
        cout << "Колчество строк: ";
        cin >> row;
        cout << "Количесво столбцов: ";
        cin >> col;
        if (row < 1 || col < 1)
            cout << "\nОшибка!!! размерность массива должна быть больше 0. \n\nВведите другое значение: ";
    } while (row < 1 || col < 1);
    int**mas = new int*[row];
    for (int i = 0; i < row; i++){
        mas[i] = new int[col];
    }
    return mas;
}
1
1 / 1 / 2
Регистрация: 25.02.2016
Сообщений: 141
04.04.2016, 16:01  [ТС] 3
В таком варианте, как вы предложили, программа вообще падает

А еще, если объявление массива запихнуть в конце цикла, то row выделяется, как ошибка "идентификатор row не определен"

Добавлено через 8 минут
Спасибо, все заработала
То я скобку не доставила по невнимательности

Добавлено через 20 часов 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
80
81
82
83
84
85
86
87
88
89
90
void Add(int**mas, int &row, int&col){
    int **temp;
    int var;
    cout << "Что будете добавлять?\n";
    do{
        cout << "1 - строку;\n2 - колонку;\n";
        cin >> var;
        if (var < 1 || var > 2)
            cout << "Введи правильное значение\n";
    } while (var < 1 || var > 2);
 
    int new_row = -1;
    switch (var){
    case 1:
        do{
            cout << "Ваше значение: ";
            cin >> new_row;
            if (new_row < 0 || new_row > row)
                cout << "Вы вышли за пределы размера строки\n  Допустимый размер от '0' до '" << row << "'!\n";
        } while (new_row < 0 || new_row > row);
        temp = new int*[row + 1];
        for (int i = 0; i < row; i++){
            temp[i] = mas[i];
        }
        temp[row] = new int[col];
        for (int i = 0; i < col; i++){
            temp[row][i] = rand() % 90 + 10;
        }
 
        delete mas;
        mas = temp;
        row++;
        break;
    case 2:
        temp = new int*[row];
        for (int i = 0; i < row; i++)
            temp[i] = new int[col + 1];
 
        for (int i = 0; i < row; i++){
            for (int j = 0; j < col; j++){
                temp[i][j] = mas[i][j];
            }
            temp[i][col] = rand() % 90 + 10;
        }
 
        delete mas;
        mas = temp;
        col++;
        break;
    default:;
    }
 
}
     // ---------------------------------------------------------------------------------
// вывод данных в той же функции menu
 
    do{
                cout << "1 - добавление;\n2 - удаление\n";
                cin >> var1;
                if (var1 < 1 || var1 > 2)
                    cout << "Ошибка!!!Данного пункта в меню нет. Повтори попытку.\n\n";
            } while (var1 < 1 || var1 > 2);
        
            switch (var1){
            case 1:
                Add(mas, row, col);
                //system("cls");
                cout << "Полученный массив\n\n";
                for (int i = 0; i < row; i++){
                    cout << "[ ";
                    for (int j = 0; j < col; j++){
                        cout << mas[i][j] << " ";
                    }
                    cout << "]\n";
                }
                break;
            case 2:
                //Delete(mas, size);
                //system("cls");
                cout << "Полученный массив\n\n";
                for (int i = 0; i < row; i++){
                    cout << "[ ";
                    for (int j = 0; j < col; j++){
                        cout << mas[i][j] << " ";
                    }
                    cout << "]\n";
                }
                break;
            default: cout << "Ошибка!!!Данного пункта в меню нет. Повтори попытку.\n\n";
            }
0
04.04.2016, 16:01
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
04.04.2016, 16:01
Помогаю со студенческими работами здесь

Создание динамического двумерного массива
void CreateArray(double **DynamicArray, int n){ //??? double **DynamicArray = new double* ; ...

Массив: создание динамического двумерного массива
Создаю двумерный динамический массив. После ввода m n - конец программы. Помогите, пожалуйста. #...

Функции двумерного массива. Транспонировать матрицу через ввод вывод функции двумерного массива.
Транспонировать матрицу через ввод вывод функции двумерного массива.Сначала вывести ее,а потом...

Создание двумерного динамического массива (вылет из программы)
Здравствуйте. Создаю двумерный динамический массив: #include &quot;stdafx.h&quot; #include &lt;iostream&gt;...


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

Или воспользуйтесь поиском по форуму:
3
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru