Форум программистов, компьютерный форум, киберфорум
Наши страницы
С++ для начинающих
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.72/18: Рейтинг темы: голосов - 18, средняя оценка - 4.72
Yentroistok
1 / 1 / 0
Регистрация: 25.02.2012
Сообщений: 59
#1

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

30.03.2012, 17:44. Просмотров 3319. Ответов 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
Нужна помощь довести программу до ума, в конце программы в main сделать меню...

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

Составление меню Switch Case
Саму оболочку сделал, а вот как сделать, чтобы после ввода 1 значения, можно...

switch, case, создание многоуровнего меню
Добрый день. Хотел спросить у вас совет по реализации. Пишу многоуровневое меню...

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

2
antoha398
156 / 156 / 27
Регистрация: 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 case
! кода по моим меркам много, если решитесь помочь, запаситесь терпением))) ...

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

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


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

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

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