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

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

30.03.2012, 17:44. Показов 5862. Ответов 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
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
30.03.2012, 17:44
Ответы с готовыми решениями:

Меню через switch и case
Нужна помощь довести программу до ума, в конце программы в main сделать меню меню через switch и case: 1. Ввод строки 2. Ввод искомой...

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

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

2
157 / 157 / 27
Регистрация: 29.03.2012
Сообщений: 418
30.03.2012, 17:55
Цитата Сообщение от 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
1 / 1 / 0
Регистрация: 25.02.2012
Сообщений: 59
30.03.2012, 18:20  [ТС]
antoha398, Спасбо.

Добавлено через 18 минут
Сделал, все работает.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
30.03.2012, 18:20
Помогаю со студенческими работами здесь

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

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

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

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

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


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

Или воспользуйтесь поиском по форуму:
3
Ответ Создать тему
Новые блоги и статьи
SDL3 для Web (WebAssembly): Синхронизация спрайтов SDL3 и тел Box2D
8Observer8 04.03.2026
Содержание блога Финальная демка в браузере. Итоговый код: finish-sync-physics-sprites-sdl3-c. zip На первой гифке отладочные линии отключены, а на второй включены:. . .
SDL3 для Web (WebAssembly): Идентификация объектов на Box2D v3 - использование userData и событий коллизий
8Observer8 02.03.2026
Содержание блога Финальная демка в браузере. Итоговый код: finish-collision-events-sdl3-c. zip https:/ / www. cyberforum. ru/ blog_attachment. php?attachmentid=11680&amp;d=1772460536 Одним из. . .
Реалии
Hrethgir 01.03.2026
Нет, я не закончил до сих пор симулятор. Эта задача сложнее. Не получилось уйти в плавсостав, но оно и к лучшему, возможно. Точнее получалось - но сварщиком в палубную команду, а это значит, в моём. . .
Ритм жизни
kumehtar 27.02.2026
Иногда приходится жить в ритме, где дел становится всё больше, а вовлечения в происходящее — всё меньше. Плотный график не даёт вниманию закрепиться ни на одном событии. Утро начинается с быстрых,. . .
SDL3 для Web (WebAssembly): Сборка библиотек: SDL3, Box2D, FreeType, SDL3_ttf, SDL3_mixer и SDL3_image из исходников с помощью CMake и Emscripten
8Observer8 27.02.2026
Недавно вышла версия 3. 4. 2 библиотеки SDL3. На странице официальной релиза доступны исходники, готовые DLL (для x86, x64, arm64), а также библиотеки для разработки под Android, MinGW и Visual Studio. . . .
SDL3 для Web (WebAssembly): Реализация движения на Box2D v3 - трение и коллизии с повёрнутыми стенами
8Observer8 20.02.2026
Содержание блога Box2D позволяет легко создать главного героя, который не проходит сквозь стены и перемещается с заданным трением о препятствия, которые можно располагать под углом, как верхнее. . .
Конвертировать закладки radiotray-ng в m3u-плейлист
damix 19.02.2026
Это можно сделать скриптом для PowerShell. Использование . \СonvertRadiotrayToM3U. ps1 <path_to_bookmarks. json> Рядом с файлом bookmarks. json появится файл bookmarks. m3u с результатом. # Check if. . .
Семь CDC на одном интерфейсе: 5 U[S]ARTов, 1 CAN и 1 SSI
Eddy_Em 18.02.2026
Постепенно допиливаю свою "многоинтерфейсную плату". Выглядит вот так: https:/ / www. cyberforum. ru/ blog_attachment. php?attachmentid=11617&stc=1&d=1771445347 Основана на STM32F303RBT6. На борту пять. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru