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

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

Войти
Регистрация
Восстановить пароль
 
Рейтинг: Рейтинг темы: голосов - 22, средняя оценка - 4.64
Yentroistok
1 / 1 / 0
Регистрация: 25.02.2012
Сообщений: 59
#1

Переделать меню через switch / case - C++

30.03.2012, 17:44. Просмотров 3020. Ответов 2
Метки нет (Все метки)

Написал такой код.

Условие для задачи такое:
Необходимо написать программу со следующей функциональностью:

1. Функция преобразования 8-разрядного целого числа со знаком в его внутреннее двоичное представление (как оно представлено в ЭВМ). Функция должна возвращать результат в виде строки из 8 символов нулей и единиц.

2. Функции циклического сдвига влево и вправо на заданное число разрядов. Если число разрядов, на которые производится сдвиг, больше или равно 8, то берется остаток от деления на 8. В этих двух функциях циклический сдвиг должен быть реализован в виде ОДНОГО выражения C++ (без операторов циклов и прочих).

3. Реализовать консольный интерфейс пользователя для ввода числа и выбора действия: вывести в двоичном виде, сдвинуть циклически вправо, сдвинуть циклически влево. При циклических сдвигах пользователь вводит число разрядов, на которые производится сдвиг.

4. Обеспечить проверку корректности вводимых данных (при выборе пункта меню, ввода исходного числа, ввода величины сдвига).

Пример работы программы

Исходное число, вводимое пользователем: 35
Внутреннее представление: 00100011
Циклический сдвиг исходного числа на 3 разряда вправо: 01100100
Циклический сдвиг исходного числа на 4 разряда влево: 00110010

Написал меню через ифы. Но не работает выход из меню. *И как это возможно реализовать через switch / case
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
#include <conio.h>
#include <stdio.h>
#include <clocale>
 
//----------------------------------------------------------------------------------------------------------------------------------------------------
// ПРЕОБРАЗОВАНИЕ В 2-ию Систему Счисления.
void BINARIES(char dec, char *bin)
{
for (int i = 0; i<=7; i++)
bin[i] = (dec >> 7-i) & 1;
}
 
//----------------------------------------------------------------------------------------------------------------------------------------------------
// СДВИГ ВЛЕВО
char Lsdvig(unsigned char num, int chis)
{
return num << chis % 8 | num >> sizeof(num)*8 - chis % 8;
}
 
//----------------------------------------------------------------------------------------------------------------------------------------------------
// СДВИГ ВПРАВО
char Rsdvig(unsigned char num, int chis)
{
return num >> chis % 8 | num << sizeof(num)*8 - chis % 8;    // добавить sizeof
}
 
//----------------------------------------------------------------------------------------------------------------------------------------------------
// ВЫВОД НА ЭКРАН 2-ой Записи
void output(char *n)
{
int j = 0;
while (j<=7)
printf("%d", n[j++]);
printf("\n");
}
 
//----------------------------------------------------------------------------------------------------------------------------------------------------
// Проверка на то, что побитовый сдвиг не отрицателен
// То есть, введенное число, сдвигов больше 0.
int scanchk()
{
int a = 0, chk = 0;
while (!chk || a <= 0)
{
chk = scanf("%d", &a);
if (!chk || a < 0)
printf("Не верный ввод, либо вы ввели отрицательное значение\n");
fflush(stdin);
}
return a;
}
 
//----------------------------------------------------------------------------------------------------------------------------------------------------
// Основная часть программы.
void main()
{
setlocale(LC_CTYPE, "rus");
int number = 0, chk = 0;
char choose = 0, binary[9], res;
while (chk != 1 || number < -128 || number > 127)
{
printf("Введите число: ");
chk = scanf("%d", &number);
if (chk != 1 || number < -128 || number > 127) 
printf("Ошибка при вводе либо число не принадлежит диапазону (-128..127)\n");
fflush(stdin);
}
 
//----------------------------------------------------------------------------------------------------------------------------------------------------
// Преобразования
BINARIES(number, binary);
printf("Двоичное представление числа:\n");
output(binary);
while ((choose == '1') || (choose = '2') || (choose = '3'))
{
printf("Выберите желаемое действие\n");
printf(" Нажать Клавишу '1' - Произвести циклический сдвиг вправо\n");
printf(" Нажать Клавишу '2' - Произвести циклический сдвиг влево\n");
printf(" Нажать клавишу '3' - Выход                             \n");
do
{
choose = _getch();
// switch // case
if (choose == '1') 
{
printf("Введите число разрядов для сдвига вправо: ");
res = Rsdvig(number, scanchk());
BINARIES(res, binary);
}
else if (choose == '2') 
{
printf("Введите число разрядов для сдвига влево: ");
res = Lsdvig(number, scanchk());
BINARIES(res, binary);
}
else if (choose == '3') break;
else
    printf("Такого пункта меню не существует. Введите повторно\n");
}
 
//----------------------------------------------------------------------------------------------------------------------------------------------------
// Отрисовка Меню
while (choose != '1' && choose != '2');
printf("Результат в двоичном представлении: ");
output(binary);
}
/*printf("\nРезультат в десятеричном представлении: ");
printf("%d", res); */
_getch();
}
//----------------------------------------------------------------------------------------------------------------------------------------------------
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
30.03.2012, 17:44
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Переделать меню через switch / case (C++):

Меню в консоли (через switch-case) - C++
программа меню ресторана, работать должна так: открывается все меню а официант выбирает блюда из заказа, а в конце вывести весь заказ. ...

Составление меню Switch Case - C++
Саму оболочку сделал, а вот как сделать, чтобы после ввода 1 значения, можно было продолжить работу в программе (выбор 2 значения) - не...

switch, case, создание многоуровнего меню - C++
Добрый день. Хотел спросить у вас совет по реализации. Пишу многоуровневое меню в консоли. Вот часть кода ... switch(input_main) ...

Стек через case в switch - C++
Здравствуйте. Я хочу чтобы при нажатии на &quot;2&quot; у меня выводился на экран мой стек. Но, как обычно, ошибка, я не знаю в чем проблема,...

косяк вызова функции через switch case - C++
! кода по моим меркам много, если решитесь помочь, запаситесь терпением))) Итак. Имеется зародыш курсовой - игры пятнашки. делал в...

Оптимальная конструкция switch-case-while / while-switch-case - C++
Имеется конструкция типа: switch() { case 1: while() { ... }

2
antoha398
155 / 155 / 3
Регистрация: 29.03.2012
Сообщений: 418
30.03.2012, 17:55 #2
Цитата Сообщение от Yentroistok Посмотреть сообщение
Написал меню через ифы. Но не работает выход из меню. *И как это возможно реализовать через switch / case
C
1
2
3
4
5
6
7
8
9
10
switch (choose){
 case '1':
   //код пункта один
 case '2':
  //код пункта два
 case '3':
  exit(1); // выход из программы
 default:
  //такого пункта нет
}
1
Yentroistok
1 / 1 / 0
Регистрация: 25.02.2012
Сообщений: 59
30.03.2012, 18:20  [ТС] #3
antoha398, Спасбо.

Добавлено через 18 минут
Сделал, все работает.
0
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
30.03.2012, 18:20
Привет! Вот еще темы с ответами:

Переделать через switch - C++
Вот уравнение: y = na+(n-1)a+...+a или по другому : ((n+1)/2*n*a) Вот мой код: И надо бы его переделать через switch; А я вот...

Как переделать через switch? - C++
Задача 2. Вывести на экран сообщение в зависимости от введенного значения оценки (по десятибалльной системе), например: оценки 1, 2 -...

Вывести в одну строку два слова через оператор выбора switch-case - C++
Помогите исправить программу, чтобы выводилось в одну строку сразу 2 выбранных слова,например &quot;Король червы&quot; #include &lt;iostream&gt; ...

Оптимизируется ли компилятором конструкция switch-case? Работа со строками через ID объекта или hash - C++
Добрый вечер, 1) Определён ли порядок выбора switch (согласно стандарта кажись неопределён, но все компиляторы я уверен в этом...


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

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

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