Форум программистов, компьютерный форум CyberForum.ru

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
 
Рейтинг: Рейтинг темы: голосов - 15, средняя оценка - 4.87
Noclip
43 / 27 / 2
Регистрация: 27.09.2011
Сообщений: 280
#1

Работа с меню в консоли - C++

09.11.2011, 22:19. Просмотров 2019. Ответов 25
Метки нет (Все метки)

я написал программу
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
#include<iostream.h>
#include<conio.h>
#include<stdlib.h>
#include<iomanip.h>
#include<system.hpp>
int comp(const void *a,const void *b)
{return +(*(int*)a-*(int*)b);}
int rus(char str_c[])
{char *str=new char[255];
AnsiToOem(str_c,str);
cout<<'\n'<<str;
return(0);
}
int main()
{int i,n,max,i_max,sum=0,post_poz;
cout<<"N=";
cin>>n;
int *a=new int [n];      
rus("Введите элементы");
cout<<'\n';
for (int i=0;i<n;i++) cin>>a[i];
rus("Вывод элементов массива:       ");
for (i=0;i<n;i++)
cout<<setw(4)<<a[i];
max=a[0];
i_max=0;
for (int i=0;i<n;i++) if (a[i]>max) {max=a[i]; i_max=i;}
rus("Максимальный элемент массива:");
cout<<max;
rus("Номер максимального элемента массива:");
cout<<i_max+1;
for (int i=n-1;i!=0;i--) if (a[i]>0) {post_poz=i; break;}
for (int i=0;i<post_poz;i++) sum+=a[i];
rus("Сумма всех элементов массива до последнего положительного элемента:");
cout<<sum;
qsort(a,n,sizeof(int),comp);
 rus("Вывод массива после сортировки:");
for (i=0;i<n;i++)
cout<<setw(4)<<a[i];
delete(a);
getch();
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
int menu(); //обьявление функции
int main()
{int c;
clrscr;
for( ; ; )
{c=menu(); //обращение к функции
switch(c)
{
case(1):cout<<"Vibran punkt vvoda\n";break;
case(2):cout<<"Vibran punkt vivoda\n";break;
case(3):cout<<"Vibran punkt max i ego poziciya \n";break;
case(4):cout<<"Vibran punkt summi \n";break;
case(5):cout<<"Vibran punkt sortirovki\n";break;
case(6):cout<<"Vibran punkt konca raboti programmi\n";break;
default:cout<<"Vi oshiblis, vvedite punkt menu snova \n";break;
}
getch();
if (c==6) break;
}         //конец тела бесконечного цикла
getch();
return(0);
}        //конец главной функции
int menu()     //определение функции для вывода меню
{ int c;
clrscr();
cout<<"\n   ......MNEU......  \n\n";
cout<<"\n(1)Pervonachalniy vvod dannix \n";
cout<<"(2)Vivod dannix \n";
cout<<"(3)Max element massiva i ego poziciya\n";
cout<<"(4)summa elementov do poslednego polozhitelnogo \n";
cout<<"(5)Sortirovka dannix po vozrastaniyu \n";
cout<<"(6)Konec raboti programmi \n";
cin>>c;
return(c);
}
Я пока еще учусь с с++ !!!
От меня ОГРОМНОЕ СПАСИБО! =)
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
09.11.2011, 22:19     Работа с меню в консоли
Посмотрите здесь:
C++ Меню на консоли
C++ Меню в консоли
C++ Меню в консоли
Меню в консоли C++
Организация меню в консоли C++
C++ Оригинальное меню в консоли
Создание меню в консоли (не контекстное) C++
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Jupiter
Каратель
Эксперт С++
6553 / 3973 / 226
Регистрация: 26.03.2010
Сообщений: 9,273
Записей в блоге: 1
Завершенные тесты: 2
10.11.2011, 02:17     Работа с меню в консоли #16
Цитата Сообщение от Gepar Посмотреть сообщение
C++
1
if(array!=NULL) delete array;
Gepar, если применить delete к NULL указателю то ничего не произойдет, потому эту проверку можно не делать
Noclip
43 / 27 / 2
Регистрация: 27.09.2011
Сообщений: 280
10.11.2011, 02:19  [ТС]     Работа с меню в консоли #17
Цитата Сообщение от Noclip Посмотреть сообщение
Ну к примеру я сейчас скопировал все !
вставил! и запустил и увы не переводит на русский язык...
и добавил руссификатор и все получилось

Добавлено через 3 минуты
Непойму:
1.int *array=NULL;

2.if(array!=NULL) delete array;

3.if(array)
скажете как это понять(вышеописанное)
Gepar
1175 / 531 / 20
Регистрация: 01.07.2009
Сообщений: 3,517
10.11.2011, 02:39     Работа с меню в консоли #18
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
#include<iostream>
#include<iomanip>
#include<windows.h>
using namespace std;
 
int *array=NULL;
signed dimension;
int oldDimension;
int Max;//максимальный элемент массива
int i_max;//номер максимального элемента массива
int sum,post_poz;
bool flagSort;//флаг сортирован ли массив
 
int comp(const void *a,const void *b)
{return +(*(int*)a-*(int*)b);}
 
 
void CreateArray()
{
    oldDimension=dimension;//сохраним старую размерность массива
    cout<<"N=";
    cin>>dimension;
 
    if(dimension!=oldDimension)//если размеры не совпадают - перевыделим память
    {
        delete array;
        array=new int [dimension];
    }
    cout<<"Введите элементы";
    cout<<'\n';
    for (int i=0;i<dimension;i++) cin>>array[i];
 
    flagSort=false;//мы ввели новый массив и его нужно будет отсортировать
}
 
void PrintArray()
{
    if(array)
    {
        cout<<"\nВывод элементов массива:\n";
        for (int i=0;i<dimension;i++)
         cout<<setw(4)<<array[i];
        cout<<"\n";
    }
    else
     cout<<"Массив не задан!\n";
}
 
void FindMax()
{
    if(array)
    {
        Max=array[0];i_max=0;
        for (int i=0;i<dimension;i++)
         if (array[i]>Max) {Max=array[i]; i_max=i;}
        cout<<"\nМаксимальный элемент: "<<Max<<"\t Его номер: "<<i_max<<endl;
    }
    else
     cout<<"Массив не задан!\n";
}
 
void Sum()
{
    if(array)
    {
        for (int i=dimension-1;i!=0;i--) if (array[i]>0) {post_poz=i; break;}
        for (int i=0;i<post_poz;i++) sum+=array[i];
        cout<<"Сумма всех элементов массива до последнего положительного элемента:"<<sum<<endl;
    }
}
 
void Sort()
{
    if(array && !flagSort)
     qsort(array,dimension,sizeof(int),comp),flagSort=true;
}
 
 
int main()
{
    SetConsoleCP(1251);
    SetConsoleOutputCP(1251);
    int chose=-1;
    while(chose)
    {
        cout<<endl;
        cout<<"1 - ввести массив\n"
              "2 - напечатать массив\n"
              "3 - найти и напечатать максимальный элемент и его номер\n"
              "4 - найти сумму всех элементов массива до последнего положительного элемента\n"
              "5 - отсортировать массив\n"
              "9 - очистить экран\n"
              "0 - выход\n";
        cout<<"Enter your chose: ";
        cin>>chose;
        switch(chose)
        {
            case 1:
            CreateArray();//вызвать функцию для ввода матрицы
            break;
 
            case 2:
            PrintArray();
            break;
 
            case 3:
            FindMax();
            break;
 
            case 4:
            Sum();
            break;
 
            case 5:
            Sort();
            break;
 
            case 9:
            default:
            system("cls");
            break;
        }
    }
}
Сделано не аккуратно + глобальные переменные, но мне уже спать охота, если захотите - поправите (особенно форматирование и переводы строк).

Добавлено через 2 минуты
Цитата Сообщение от Noclip Посмотреть сообщение
вставил! и запустил и увы не переводит на русский язык...
Нужно шрифт в консоли сменить на Lucida.

Цитата Сообщение от Noclip Посмотреть сообщение
и добавил руссификатор и все получилось
Ну добавляйте на здоровье, как вам удобно так и делайте.
Цитата Сообщение от Noclip Посмотреть сообщение
if(array)
Проверка на ноль, если массив пуст и вы попытаетесь его напечатать - программа аварийно завершиться.
Noclip
43 / 27 / 2
Регистрация: 27.09.2011
Сообщений: 280
10.11.2011, 02:56  [ТС]     Работа с меню в консоли #19
А что если зделать через то меню которое у меня набросано (поверхностно)

просто мне будет так проще понять......


Очень прошу через неё
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
int menu(); //обьявление функции
int main()
{int c;
clrscr;
for( ; ; )
{c=menu(); //обращение к функции
switch(c)
{
case(1):cout<<"Vibran punkt vvoda\n";break;
case(2):cout<<"Vibran punkt vivoda\n";break;
case(3):cout<<"Vibran punkt max i ego poziciya \n";break;
case(4):cout<<"Vibran punkt summi \n";break;
case(5):cout<<"Vibran punkt sortirovki\n";break;
case(6):cout<<"Vibran punkt konca raboti programmi\n";break;
default:cout<<"Vi oshiblis, vvedite punkt menu snova \n";break;
}
getch();
if (c==6) break;
}         //конец тела бесконечного цикла
getch();
return(0);
}        //конец главной функции
int menu()     //определение функции для вывода меню
{ int c;
clrscr();
cout<<"\n   ......MNEU......  \n\n";
cout<<"\n(1)Pervonachalniy vvod dannix \n";
cout<<"(2)Vivod dannix \n";
cout<<"(3)Max element massiva i ego poziciya\n";
cout<<"(4)summa elementov do poslednego polozhitelnogo \n";
cout<<"(5)Sortirovka dannix po vozrastaniyu \n";
cout<<"(6)Konec raboti programmi \n";
cin>>c;
return(c);
}




И програмка есть. Мне нужно зделать , что бы это через меню запускалось.
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
#include<iostream.h>
#include<conio.h>
#include<stdlib.h>
#include<iomanip.h>
#include<system.hpp>
int comp(const void *a,const void *b)
{return +(*(int*)a-*(int*)b);}
int rus(char str_c[])
{char *str=new char[255];
AnsiToOem(str_c,str);
cout<<'\n'<<str;
return(0);
}
int main()
{int i,n,max,i_max,sum=0,post_poz;
cout<<"N=";
cin>>n;
int *a=new int [n];      
rus("Введите элементы");
cout<<'\n';
for (int i=0;i<n;i++) cin>>a[i];
rus("Вывод элементов массива:       ");
for (i=0;i<n;i++)
cout<<setw(4)<<a[i];
max=a[0];
i_max=0;
for (int i=0;i<n;i++) if (a[i]>max) {max=a[i]; i_max=i;}
rus("Максимальный элемент массива:");
cout<<max;
rus("Номер максимального элемента массива:");
cout<<i_max+1;
for (int i=n-1;i!=0;i--) if (a[i]>0) {post_poz=i; break;}
for (int i=0;i<post_poz;i++) sum+=a[i];
rus("Сумма всех элементов массива до последнего положительного элемента:");
cout<<sum;
qsort(a,n,sizeof(int),comp);
 rus("Вывод массива после сортировки:");
for (i=0;i<n;i++)
cout<<setw(4)<<a[i];
delete(a);
getch();
return(0);
}
Добавлено через 5 минут
значит void этот как Procedure в паскале , когда мы пишем меню =) да?
Gepar
1175 / 531 / 20
Регистрация: 01.07.2009
Сообщений: 3,517
10.11.2011, 10:54     Работа с меню в консоли #20
О ХоспАди, ну а создать сами вы ещё одну фунцию не можете чтоли?
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
#include<iostream>
#include<iomanip>
#include<windows.h>
using namespace std;
 
int *array=NULL;
signed dimension;
int oldDimension;
int Max;//максимальный элемент массива
int i_max;//номер максимального элемента массива
int sum,post_poz;
bool flagSort;//флаг сортирован ли массив
 
int comp(const void *a,const void *b)
{return +(*(int*)a-*(int*)b);}
 
 
void CreateArray()
{
    oldDimension=dimension;//сохраним старую размерность массива
    cout<<"N=";
    cin>>dimension;
 
    if(dimension!=oldDimension)//если размеры не совпадают - перевыделим память
    {
        delete array;
        array=new int [dimension];
    }
    cout<<"Введите элементы";
    cout<<'\n';
    for (int i=0;i<dimension;i++) cin>>array[i];
 
    flagSort=false;//мы ввели новый массив и его нужно будет отсортировать
}
 
void PrintArray()
{
    if(array)
    {
        cout<<"\nВывод элементов массива:\n";
        for (int i=0;i<dimension;i++)
         cout<<setw(4)<<array[i];
        cout<<"\n";
    }
    else
     cout<<"Массив не задан!\n";
}
 
void FindMax()
{
    if(array)
    {
        Max=array[0];i_max=0;
        for (int i=0;i<dimension;i++)
         if (array[i]>Max) {Max=array[i]; i_max=i;}
        cout<<"\nМаксимальный элемент: "<<Max<<"\t Его номер: "<<i_max<<endl;
    }
    else
     cout<<"Массив не задан!\n";
}
 
void Sum()
{
    if(array)
    {
        for (int i=dimension-1;i!=0;i--) if (array[i]>0) {post_poz=i; break;}
        for (int i=0;i<post_poz;i++) sum+=array[i];
        cout<<"Сумма всех элементов массива до последнего положительного элемента:"<<sum<<endl;
    }
}
 
void Sort()
{
    if(array && !flagSort)
     qsort(array,dimension,sizeof(int),comp),flagSort=true;
}
 
 
int menu()
{
    static int chose;
    {
        cout<<endl;
        cout<<"1 - ввести массив\n"
              "2 - напечатать массив\n"
              "3 - найти и напечатать максимальный элемент и его номер\n"
              "4 - найти сумму всех элементов массива до последнего положительного элемента\n"
              "5 - отсортировать массив\n"
              "9 - очистить экран\n"
              "0 - выход\n";
        cout<<"Enter your chose: ";
        cin>>chose;
        switch(chose)
        {
            case 1:
            CreateArray();//вызвать функцию для ввода матрицы
            break;
 
            case 2:
            PrintArray();
            break;
 
            case 3:
            FindMax();
            break;
 
            case 4:
            Sum();
            break;
 
            case 5:
            Sort();
            break;
 
            case 9:
            default:
            system("cls");
            break;
        }
    }
    return chose;
}
 
int main()
{
    SetConsoleCP(1251);
    SetConsoleOutputCP(1251);
    while(menu());
}
Spirited
7 / 7 / 0
Регистрация: 18.01.2009
Сообщений: 55
10.11.2011, 11:52     Работа с меню в консоли #21
Цитата Сообщение от Gepar Посмотреть сообщение
C++
1
int comp(const void *a,const void *b) {return +(*(int*)a-*(int*)b);}
Что это за функция???
ExcellencE
20 / 20 / 2
Регистрация: 22.08.2011
Сообщений: 79
10.11.2011, 16:20     Работа с меню в консоли #22
Похожая тема с меню, там навигация стрелками: Меню в консольном режиме
Nameless One
Эксперт С++
5769 / 3418 / 255
Регистрация: 08.02.2010
Сообщений: 7,446
10.11.2011, 17:01     Работа с меню в консоли #23
Цитата Сообщение от Spirited Посмотреть сообщение
Что это за функция???
функция сравнения для qsort
Noclip
43 / 27 / 2
Регистрация: 27.09.2011
Сообщений: 280
11.11.2011, 15:02  [ТС]     Работа с меню в консоли #24
C++
1
int comp(const void *a,const void *b) {return +(*(int*)a-*(int*)b);}
Производится сортировка массива по возрастанию
То есть берутся два элента и сравниваются
в зависимости какой знак вернется после сравнения ( то есть 3-2=1 значит они поменяются местами, если знак будет отрицательный то есть 2-3=-1 значит все останется как есть) и потом проверяются следующие два элемнта этого же массива.

Добавлено через 17 часов 41 минуту
Gepar, Я не пойму где фукцию или процедура или что-то что позволяет выйти из меню....
я немогу найти.
talis
791 / 543 / 37
Регистрация: 11.05.2010
Сообщений: 1,298
Записей в блоге: 1
11.11.2011, 15:05     Работа с меню в консоли #25
Цитата Сообщение от Gepar Посмотреть сообщение
while(chose)
читайте: while( chose != 0 )
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
11.11.2011, 15:50     Работа с меню в консоли
Еще ссылки по теме:
C++ Создать меню настроек в консоли
C++ Реализация разветвляющегося меню в консоли
Меню в консоли - Ввод данных C++
C++ Помогите создать меню в консоли
Меню в консоли, управление стрелками C++

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

Или воспользуйтесь поиском по форуму:
Noclip
43 / 27 / 2
Регистрация: 27.09.2011
Сообщений: 280
11.11.2011, 15:50  [ТС]     Работа с меню в консоли #26
Пока никто не отвечал я внимательно еще раз просмотрел и нашел где выход
Yandex
Объявления
11.11.2011, 15:50     Работа с меню в консоли
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru