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

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

26.10.2017, 18:46. Показов 2714. Ответов 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
1357 / 856 / 365
Регистрация: 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
Ответ Создать тему
Новые блоги и статьи
Советы по крайней бережливости. Внимание, это ОЧЕНЬ длинный пост.
Programma_Boinc 28.12.2025
Советы по крайней бережливости. Внимание, это ОЧЕНЬ длинный пост. Налог на собак: https:/ / **********/ gallery/ V06K53e Финансовый отчет в Excel: https:/ / **********/ gallery/ bKBkQFf Пост отсюда. . .
Кто-нибудь знает, где можно бесплатно получить настольный компьютер или ноутбук? США.
Programma_Boinc 26.12.2025
Нашел на реддите интересную статью под названием Anyone know where to get a free Desktop or Laptop? Ниже её машинный перевод. После долгих разбирательств я наконец-то вернула себе. . .
Thinkpad X220 Tablet — это лучший бюджетный ноутбук для учёбы, точка.
Programma_Boinc 23.12.2025
Рецензия / Мнение/ Перевод Нашел на реддите интересную статью под названием The Thinkpad X220 Tablet is the best budget school laptop period . Ниже её машинный перевод. Thinkpad X220 Tablet —. . .
PhpStorm 2025.3: WSL Terminal всегда стартует в ~
and_y87 14.12.2025
PhpStorm 2025. 3: WSL Terminal всегда стартует в ~ (home), игнорируя директорию проекта Симптом: После обновления до PhpStorm 2025. 3 встроенный терминал WSL открывается в домашней директории. . .
Как объединить две одинаковые БД Access с разными данными
VikBal 11.12.2025
Помогите пожалуйста !! Как объединить 2 одинаковые БД Access с разными данными.
Новый ноутбук
volvo 07.12.2025
Всем привет. По скидке в "черную пятницу" взял себе новый ноутбук Lenovo ThinkBook 16 G7 на Амазоне: Ryzen 5 7533HS 64 Gb DDR5 1Tb NVMe 16" Full HD Display Win11 Pro
Музыка, написанная Искусственным Интеллектом
volvo 04.12.2025
Всем привет. Некоторое время назад меня заинтересовало, что уже умеет ИИ в плане написания музыки для песен, и, собственно, исполнения этих самых песен. Стихов у нас много, уже вышли 4 книги, еще 3. . .
От async/await к виртуальным потокам в Python
IndentationError 23.11.2025
Армин Ронахер поставил под сомнение async/ await. Создатель Flask заявляет: цветные функции - провал, виртуальные потоки - решение. Не threading-динозавры, а новое поколение лёгких потоков. Откат?. . .
Поиск "дружественных имён" СОМ портов
Argus19 22.11.2025
Поиск "дружественных имён" СОМ портов На странице: https:/ / norseev. ru/ 2018/ 01/ 04/ comportlist_windows/ нашёл схожую тему. Там приведён код на С++, который показывает только имена СОМ портов, типа,. . .
Сколько Государство потратило денег на меня, обеспечивая инсулином.
Programma_Boinc 20.11.2025
Сколько Государство потратило денег на меня, обеспечивая инсулином. Вот решила сделать интересный приблизительный подсчет, сколько государство потратило на меня денег на покупку инсулинов. . . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2025, CyberForum.ru