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

Функция меню - ошибка в коде

07.04.2017, 23:29. Показов 1232. Ответов 8

Author24 — интернет-сервис помощи студентам
Здравствуйте, уважаемое сообщество. Пожалуйста, укажите, в чем моя ошибка.

Задание следующее. Нужно создать 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
#include <iostream>
#include <time.h>
 
using namespace std;
 
void createMas(int masI[], int length);
void masOut(int masI[], int length);
void masMin(int masI[], int length);
 
 
void main()
{
    setlocale(LC_ALL, "rus");
    srand(time(NULL));
 
    const int razmer = 15;
    int arr[razmer] = {};
    cout << "\n\n";
 
    createMas(arr, razmer);
    masOut(arr, razmer);
    masMin(arr, razmer);
}
 
void createMas(int mas[], int length)
{
    for (size_t i = 0; i < length; i++)
    {
        mas[i] = -50 + rand() % 101;
    }
}
 
void masOut(int mas[], int length)
{
    for (size_t i = 0; i < length; i++)
    {
        cout << "\t[" << i << "] " << mas[i] << "\n";
    }
    cout << "\n";
}
 
void masMin(int mas[], int length)
{
    int min = mas[0];
    for (size_t i = 0; i < length; i++)
    {
        if (mas[i] < min)
        {
            min = mas[i];
        }
    }
    cout << "min = " << min << endl;
}
Добавляю меню - и просто пустая консоль. Дальше привожу код. В чем моя ошибка?

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
#include <iostream>
#include <time.h>
 
using namespace std;
 
void menu(int masI[], int length);
 
void createMas(int mas[], int length);
void masOut(int mas[], int length);
void masMin(int mas[], int length);
 
 
void main()
{
    setlocale(LC_ALL, "rus");
    srand(time(NULL));
 
    const int razmer = 15;
    int arr[razmer] = {};
 
    void menu(int arr, int length);
 
    cout << "\n";
}
 
void createMas(int mas[], int length)
{
    for (size_t i = 0; i < length; i++)
    {
        mas[i] = -20 + rand() % 45;
    }
}
 
void masOut(int mas[], int length)
{
    for (size_t i = 0; i < length; i++)
    {
        cout << "\t[" << i << "] " << mas[i] << "\n";
    }
    cout << "\n";
}
 
void masMin(int mas[], int length)
{
    int min = mas[0];
    for (size_t i = 0; i < length; i++)
    {
        if (mas[i] < min)
        {
            min = mas[i];
        }
    }
    cout << "min = " << min << endl;
}
 
void menu(int mas[], int length)
{
    int choice;
    
    cout << "\t1 - Создать целочисленный массив.\n";
    cout << "\t2 - Вывести целочисленный массив на экран.\n";
    cout << "\t3 - Найти минимальный элемент целочисленного массива.\n";
    cout << "\t0 - Выход из программы.\n\n";
 
    int f = 0;
    do
    {
        do
        {
            cout << "Сделайте выбор:\n";
            cin >> choice;
        } while (choice < 0 || choice > 3);
 
        switch (choice)
        {
        case 1:
            f = 1;
            createMas(mas, length);//создание
            break;
 
        case 2:
            if (f == 1)
            {
                masOut(mas, length);//вывод на экран
                cout << "\n\n";
            }
            else
            {
                cout << "Массив не заполнен!\n";
            }
            break;
 
        case 3:
            if (f == 1)
            {
                masMin(mas, length);//поиск минимума
            }
            else
            {
                cout << "Массив не заполнен!\n";
            }
            break;
        }
    } while (choice != 0);
}
0
Лучшие ответы (1)
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
07.04.2017, 23:29
Ответы с готовыми решениями:

Синтаксическая ошибка в коде меню
Менял меню и в один &quot;прекрасный&quot; момент на сайте стало выдавать ошибку syntax error, unexpected...

Ошибка в коде. Функция plot3d2
Здравствуйте! Задача по SciLab (Скрин) Вот код, который пишу: u = linspace(0,2*%pi,40); v...

Функция поиска (ошибка в коде)
void poisk_po_imeni() { if(!sch) { cout&lt;&lt;&quot;Сначала что-нибудь введите!&quot;&lt;&lt;endl; } ...

Синтаксическая ошибка в коде для вывода меню
echo off echo Begin create files for /L %%i in (1,1,5) do ( echo test &gt; %1\%%i.txt echo...

8
nd2
3437 / 2816 / 1249
Регистрация: 29.01.2016
Сообщений: 9,426
07.04.2017, 23:45 2
Лучший ответ Сообщение было отмечено peva как решение

Решение

Цитата Сообщение от peva Посмотреть сообщение
C++
1
void menu(int arr, int length);
Это не вызов функции.
1
0 / 0 / 1
Регистрация: 12.02.2017
Сообщений: 55
07.04.2017, 23:54  [ТС] 3
nd2, спасибо Вам огромное!
0
243 / 268 / 219
Регистрация: 14.11.2016
Сообщений: 1,043
08.04.2017, 00:25 4
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
int main(void)
{
    setlocale(LC_ALL, "rus");
    srand(time(NULL));
 
    const int razmer = 15;
    int arr[razmer] = {};
 
    menu( arr, length);
 
    cout << "\n";
    return 0;
}
Если массив нигде не изменяется, то лучше передавать его везде по ссылке.
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
#include <iostream>
#include <time.h>
 
using namespace std;
 
void menu(int *(&mas), int length);
 
void createMas(int *(&mas), int length);
void masOut(int *(&mas), int length);
void masMin(int *(&mas), int length);
 
 
int main(void)
{
    setlocale(LC_ALL, "rus");
    srand(time(NULL));
 
    const int razmer = 15;
    int *arr = new int[razmer];
 
    menu( arr, razmer);
 
    cout << "\n";
    return 0;
}
 
void createMas(int *(&mas), int length)
{
    for (size_t i = 0; i < length; i++)
    {
        mas[i] = -20 + rand() % 45;
    }
}
 
void masOut(int *(&mas), int length)
{
    for (size_t i = 0; i < length; i++)
    {
        cout << "\t[" << i << "] " << mas[i] << "\n";
    }
    cout << "\n";
}
 
void masMin(int *(&mas), int length)
{
    int min = mas[0];
    for (size_t i = 0; i < length; i++)
    {
        if (mas[i] < min)
        {
            min = mas[i];
        }
    }
    cout << "min = " << min << endl;
}
 
void menu(int *(&mas), int length)
{
    int choice;
 
    cout << "\t1 - Создать целочисленный массив.\n";
    cout << "\t2 - Вывести целочисленный массив на экран.\n";
    cout << "\t3 - Найти минимальный элемент целочисленного массива.\n";
    cout << "\t0 - Выход из программы.\n\n";
 
    int f = 0;
    do
    {
        do
        {
            cout << "Сделайте выбор:\n";
            cin >> choice;
        } while (choice < 0 || choice > 3);
 
        switch (choice)
        {
        case 1:
            f = 1;
            createMas(mas, length);//создание
            break;
 
        case 2:
            if (f == 1)
            {
                masOut(mas, length);//вывод на экран
                cout << "\n\n";
            }
            else
            {
                cout << "Массив не заполнен!\n";
            }
            break;
 
        case 3:
            if (f == 1)
            {
                masMin(mas, length);//поиск минимума
            }
            else
            {
                cout << "Массив не заполнен!\n";
            }
            break;
        }
    } while (choice != 0);
}
1
nd2
3437 / 2816 / 1249
Регистрация: 29.01.2016
Сообщений: 9,426
08.04.2017, 00:48 5
Цитата Сообщение от anapshy Посмотреть сообщение
Если массив нигде не изменяется, то лучше передавать его везде по ссылке.
Тут указатель на начало массива передаётся. И передавать по ссылке его нужно, как раз, тогда, когда указатель в функциях изменяется.
1
243 / 268 / 219
Регистрация: 14.11.2016
Сообщений: 1,043
08.04.2017, 00:53 6
nd2, а разве не создается каждый раз как-бы копия этого массива (если без ссылки)?! Или я заблуждаюсь?
А ну хотя после завершения функции всё исчезнет. Все верно?
1
nd2
3437 / 2816 / 1249
Регистрация: 29.01.2016
Сообщений: 9,426
08.04.2017, 01:10 7
Цитата Сообщение от anapshy Посмотреть сообщение
а разве не создается каждый раз как-бы копия этого массива (если без ссылки)?! Или я заблуждаюсь?
Нет, массивы при передаче в функции не копируются. Передаётся или указатель на начало массива, или ссылка на массив, но это тогда так (размер массива должен быть указан, и только массив указанного размера может передаваться):
C++
1
void menu(int (&masI)[15]);
, или указатель на массив (размер массива должен быть указан, и только массив указанного размера может передаваться):
C++
1
void menu(int (*masI)[15]);
1
243 / 268 / 219
Регистрация: 14.11.2016
Сообщений: 1,043
08.04.2017, 01:21 8
nd2, а если:
C++
1
void menu(int masI[]);
1
nd2
3437 / 2816 / 1249
Регистрация: 29.01.2016
Сообщений: 9,426
08.04.2017, 01:29 9
Цитата Сообщение от anapshy Посмотреть сообщение
а если:
Это равнозначно (просто по-другому написано):
C++
1
void menu(int* masI);
Передаётся указатель на начало массива.
2
08.04.2017, 01:29
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
08.04.2017, 01:29
Помогаю со студенческими работами здесь

Функция clock() не отрабатывает. Ошибка в коде ?
clock_t t = clock(), t1; int c = Convert::ToInt32(textBox1-&gt;Text); while ((t1 =...

Функция удаления элемента из дерева, ошибка в коде
Добрый вечер, уважаемые программисты! :) Помогите, пожалуйста, понять где здесь ошибка. ...

Ошибка в коде взаимодействия клиента и сервера на основе протокола TCP/IP (ошибка в коде)
Задание: Осуществить взаимодействие клиента и сервера на основе протокола TCP/IP. Реализовать...

Есть функция которая выводит меню. Как сделать, чтобы она выводила определенное меню на определенной странице?
function dopMenuG($parent, $lvl) { global $a; global $link; $lvl++; $CssClass=1;...


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

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

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