Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.54/13: Рейтинг темы: голосов - 13, средняя оценка - 4.54
0 / 0 / 0
Регистрация: 17.10.2017
Сообщений: 18

Как правильно передавать в функцию трехмерный массив?

26.10.2017, 18:46. Показов 2734. Ответов 14
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Нужно создать телефонный справочник, с функциями просмотра, добавления и удаления. Не могу понять как правильно передавать в функцию(( Подскажите пожалуйста. Кстати данный код отображает реальные "знания", поэтому не пишите какие-то сложные конструкции. Спасибо.

То что сделал я:
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
void AnnounMatrix(char ***&AllStr, int &matrix);
void DeleteMemory(char ***&AllStr, int &matrix);
void FillArray(char ***&AllStr, int &matrix, char &strNAME, char &strSURNAME, char &strNUMBER);
void ShowArray(char ***&AllStr, int &matrix, char &strNAME, char &strSURNAME, char &strNUMBER);
 
void main()
{
    srand(time(0));
    cout << "\t============PHONE BOOK============" << endl;
    int size, menu, count = 1, matrix = 3;
    char ***AllStr;
    char strNAME[] = "";
    char strSURNAME[] = "";
    char strNUMBER[] = "";
    bool flag = true;
    while (flag)
    {
        flag = true;
        cout << "Press [1] to add contact" << endl;
        cout << "Press [2] to view all contacts" << endl;
        cout << "Press [3] to delete contact" << endl;
        cout << "Press [4] to EXIT." << endl;
        cin >> menu;
        switch (menu)
        {
        case 1:
        {
            cout << "How many contacts do you want to add?" << endl;
            cin >> size;
            for (int i = 0; i < size; i++)
            {   
                cout << "(" << count++ << ")" << endl;
                cout << "Enter name: ";
                cin >> strNAME;
                cout << "Enter surname: ";
                cin >> strSURNAME;
                cout << "Enter number: ";
                cin >> strNUMBER;
            }
            cout << endl;
            break;
        }
        case 2:
        {
            cout << "View all contacts." << endl;
            AnnounMatrix(AllStr, matrix);
            FillArray(AllStr, matrix, strNAME, strSURNAME, strNUMBER);
            ShowArray(AllStr, matrix, strNAME, strSURNAME, strNUMBER);
            DeleteMemory(AllStr, matrix);
            break;
        }
        case 3:
        {
            cout << "Delete contact." << endl;
            break;
        }
        case 4:
        {
            flag = false;
            break;
        }
        default:
        {
            cout << "Wrong operation." << endl;
        }
        }
    }
}
 
void AnnounMatrix(char ***&AllStr, int &matrix)
{
    AllStr = new char **[matrix];
    for (int i = 0; i < matrix; i++)
    {
        AllStr[i] = new char *[1];
    }
 
    for (int i = 0; i < matrix; i++)
    {
        for (int j = 0; j < 1; j++)
        {
            AllStr[i][j] = new char[1];
        }
    }
}
 
void DeleteMemory(char ***&AllStr, int &matrix)
{
    for (int i = 0; i < matrix; i++)
    {
        for (int j = 0; j < 1; j++)
        {
            delete[] AllStr[i][j];
        }
    }
    for (int i = 0; i < matrix; i++)
    {
        delete[] AllStr[i];
    }
    delete[] AllStr;
}
 
void FillArray(char ***&AllStr, int &matrix, char &strNAME, char &strSURNAME, char &strNUMBER)
{
    for (int k = 0; k < matrix; k++)
    {
        for (int i = 0; i < 1; i++)
        {
            for (int j = 0; j < 1; j++)
            {
                AllStr[0][i][j] = strNAME;
                AllStr[1][i][j] = strSURNAME;
                AllStr[2][i][j] = strNUMBER;
            }
        }
    }
}
 
void ShowArray(char ***&AllStr, int &matrix, char &strNAME, char &strSURNAME, char &strNUMBER)
{
    for (int k = 0; k < matrix; k++)
    {
        for (int i = 0; i < 1; i++)
        {
            for (int j = 0; j < 1; j++)
            {
                cout << AllStr[k][i][j];
            }
            cout << endl;
        }
        cout << endl;
    }
}
0
Лучшие ответы (1)
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
26.10.2017, 18:46
Ответы с готовыми решениями:

Как передавать правильно массив в функцию класса
Привет. Помогите разобраться в данной теме. Как передавать правильно массив в функцию класса, который объявлен в main? И почему ругается...

Как правильно передавать двумерный массив в функцию
Компилятор Borland Builder C++ 6 Получил ошибку в основной программе, создал идентичную тестовую, привожу код. #include &lt;stdio.h&gt;...

Как правильно передавать char* в функцию?
Добрый всем! Есть две функции. Они должны выполнять одну и ту же вещь, только в одной хотел сделал через char* в стиле Си, в другой - c...

14
7804 / 6568 / 2988
Регистрация: 14.04.2014
Сообщений: 28,705
26.10.2017, 19:53
И для чего тебе такой массив? Как хранить-то будешь? Обычно массив структур используют.
Ссылка на указатель нужна только для AnnounMatrix().
1
0 / 0 / 0
Регистрация: 17.10.2017
Сообщений: 18
26.10.2017, 20:05  [ТС]
По-поводу массива- преподаватель дал задание, вот и делаю). И еще когда вызываю функции, то все аргументы подчеркивает ((
0
 Аватар для Nishen
1358 / 856 / 366
Регистрация: 26.02.2015
Сообщений: 3,814
26.10.2017, 20:11
Попробуйте доказать преподавателю, что использование трехмерных массивов - не очень хорошая идея.
2
7804 / 6568 / 2988
Регистрация: 14.04.2014
Сообщений: 28,705
26.10.2017, 20:11
Ссылки у matrix убери, strNAME и прочие параметры должны быть char *.
В 12-14 укажи размеры массивов.
1
0 / 0 / 0
Регистрация: 17.10.2017
Сообщений: 18
26.10.2017, 20:17  [ТС]
Сделано. Еще подчеркивает красным знак равно в строчках 111-113.
0
7804 / 6568 / 2988
Регистрация: 14.04.2014
Сообщений: 28,705
26.10.2017, 20:20
Для копирования древних строк - strcpy(). За что отвечают измерения, не ясно.
1
0 / 0 / 0
Регистрация: 17.10.2017
Сообщений: 18
26.10.2017, 20:27  [ТС]
Nishen, поскольку я наверное один из немногих в группе кто не может выполнить это задание - что либо доказывать будет крайне и крайне сложно)

Добавлено через 1 минуту
nmcf, не совсем понял о чем речь((
0
7804 / 6568 / 2988
Регистрация: 14.04.2014
Сообщений: 28,705
26.10.2017, 20:32
"Равно" не применимо к строкам.
1
0 / 0 / 0
Регистрация: 17.10.2017
Сообщений: 18
26.10.2017, 20:35  [ТС]
nmcf, Ааа ясно. Это хорошее замечание, спасибо. Функцию strcpy() знаю, но вот как ее применить в данной ситуации - для меня вопрос.
0
15 / 16 / 6
Регистрация: 24.10.2017
Сообщений: 48
26.10.2017, 20:42
C++
1
2
3
4
5
6
struct array3D{
тут твой трёхмерный массив
};
 
void f( array3D& arr ){
}
1
1373 / 596 / 199
Регистрация: 02.08.2011
Сообщений: 2,886
26.10.2017, 21:00
Цитата Сообщение от Narsi Посмотреть сообщение
По-поводу массива- преподаватель дал задание, вот и делаю)
Он дал задание использовать массив или прямо сказал: "Делай на трёхмерном массиве!"?

Массив структур, чем не массив?
0
0 / 0 / 0
Регистрация: 17.10.2017
Сообщений: 18
26.10.2017, 21:18  [ТС]
Преподаватель сказал использовать трехмерный массив.

Добавлено через 1 минуту
Остается вопрос, как же заполнить массив строками?
0
1373 / 596 / 199
Регистрация: 02.08.2011
Сообщений: 2,886
26.10.2017, 23:45
Лучший ответ Сообщение было отмечено Narsi как решение

Решение

Вам разумнее будет вводить массив с клавиатуры, иначе вы себе осложняете и без того бестолково-усложнённое для себя задание.

Осуществить ввод с помощью клавиатуры можно так, как показано. Но Вы этим путём по указательной дорожке для решения неуказательных задач только делаете себе много проблем:

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
#include <iostream>
#include <cstring>
 
using namespace std;
 
/*ВЫДЕЛЕНИЕ И ОЧИСТКА ПАМЯТИ*/
void init(char*** &PhoneBook, const int N, const int MAX_LEN) {
    PhoneBook = new char**[N+1];
    for (int i = 0; i<N+1; i++) {
        PhoneBook[i] = new char*[MAX_LEN];
        for (int j = 0; j<N+1; j++) {
            PhoneBook[i][j] = new char[MAX_LEN];
        }
    }
}
 
void free(char*** &PhoneBook, const int N, const int MAX_LEN) {
    for (int i = 0; i < N + 1; i++) {
        for (int j = 0; j < N + 1; j++) {
            delete[]PhoneBook[i][j];
        }   delete[]PhoneBook[i];
    }   delete[]PhoneBook;
}
 
 
/*ЗАПОЛНЕНИЕ МАССИВА*/
void fill_array(char*** &PhoneBook, const int N, const int MAX_LEN) {
    for (int i = 1; i<N+1; i++) {
        cout << "FIO: ";
        cin.getline(PhoneBook[i][0], MAX_LEN);
        cout << "phone: ";
        cin.getline(PhoneBook[0][i], MAX_LEN);
    }
}
 
/*ВЫВОД МАССИВА НА ЭКРАН*/
void print_array(char*** &PhoneBook, const int N) {
    cout << "\n\nPhone info:\n";
    for (int i = 1; i<N+1; i++) {
        cout << PhoneBook[i][0] << '\t';
        cout << PhoneBook[0][i] << '\n';
 
    }
    cout << "\n\n";
}
 
int main()
{
    int count_cell = 3;
    int len_str = 256;
 
    char ***PhoneBook;
 
    init(PhoneBook, count_cell, len_str);
    fill_array(PhoneBook, count_cell, len_str);
    print_array(PhoneBook, count_cell);
    free(PhoneBook, count_cell, len_str);
}
1
0 / 0 / 0
Регистрация: 17.10.2017
Сообщений: 18
27.10.2017, 00:57  [ТС]
daslex, большое Вам спасибо)) И спасибо всем кто остался не равнодушным) Сейчас буду стараться разобраться и, так сказать, принять это на себя)
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
27.10.2017, 00:57
Помогаю со студенческими работами здесь

Как правильно передавать указатель на функцию?
Класс для очереди typedef unsigned size_t; template&lt;typename T&gt; struct List { T data; struct List&lt;T&gt;* next; ...

Как правильно передавать значения в функцию в цикле?
есть хэш $array, по которому запущен цикл: foreach($array as $key=&gt;$val){ // внутри надо вызывать фунцию и работать с $key,$val ...

Шаблоны, древовидная сортировка: как правильно передавать тип в шаблонную функцию?
Реализую собственную версию древовидной сортировки на основе шаблонов. Нужно сравнение производить по объект функции. Тип шаблона -...

Как правильно передавать функцию как параметр?
Всем првет! Я кодю на OpenGL и сделал клас Game у меня в етом класе есть функция DrawGLScene(); как мне передать ее в ...

Как правильно передавать динамический двухмерный массив
#include &quot;stdafx.h&quot; #include &lt;stdio.h&gt; #include &lt;conio.h&gt; #include &lt;stdlib.h&gt; #include &lt;locale.h&gt; #include &lt;time.h&gt; #include...


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

Или воспользуйтесь поиском по форуму:
15
Ответ Создать тему
Новые блоги и статьи
SDL3 для Web (WebAssembly): Реализация движения на Box2D v3 - трение и коллизии с повёрнутыми стенами
8Observer8 20.02.2026
Содержание блога Box2D позволяет легко создать главного героя, который не проходит сквозь стены и перемещается с заданным трением о препятствия, которые можно располагать под углом, как верхнее. . .
Конвертировать закладки radiotray-ng в m3u-плейлист
damix 19.02.2026
Это можно сделать скриптом для PowerShell. Использование . \СonvertRadiotrayToM3U. ps1 <path_to_bookmarks. json> Рядом с файлом bookmarks. json появится файл bookmarks. m3u с результатом. # Check if. . .
Семь CDC на одном интерфейсе: 5 U[S]ARTов, 1 CAN и 1 SSI
Eddy_Em 18.02.2026
Постепенно допиливаю свою "многоинтерфейсную плату". Выглядит вот так: https:/ / www. cyberforum. ru/ blog_attachment. php?attachmentid=11617&stc=1&d=1771445347 Основана на STM32F303RBT6. На борту пять. . .
Камера Toupcam IUA500KMA
Eddy_Em 12.02.2026
Т. к. у всяких "хикроботов" слишком уж мелкий пиксель, для подсмотра в ESPriF они вообще плохо годятся: уже 14 величину можно рассмотреть еле-еле лишь на экспозициях под 3 секунды (а то и больше),. . .
И ясному Солнцу
zbw 12.02.2026
И ясному Солнцу, и светлой Луне. В мире покоя нет и люди не могут жить в тишине. А жить им немного лет.
«Знание-Сила»
zbw 12.02.2026
«Знание-Сила» «Время-Деньги» «Деньги -Пуля»
SDL3 для Web (WebAssembly): Подключение Box2D v3, физика и отрисовка коллайдеров
8Observer8 12.02.2026
Содержание блога Box2D - это библиотека для 2D физики для анимаций и игр. С её помощью можно определять были ли коллизии между конкретными объектами и вызывать обработчики событий столкновения. . . .
SDL3 для Web (WebAssembly): Загрузка PNG с прозрачным фоном с помощью SDL_LoadPNG (без SDL3_image)
8Observer8 11.02.2026
Содержание блога Библиотека SDL3 содержит встроенные инструменты для базовой работы с изображениями - без использования библиотеки SDL3_image. Пошагово создадим проект для загрузки изображения. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru