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

Моделирование устройства с тремя кнопками и тремя лампочками: красной, желтой и зеленой

16.10.2014, 22:24. Показов 3781. Ответов 15
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Вообще не могу понять как решить подобную задачу... дайте мне хотя бы идею пожалуйста, если кто то поймет..
Имеется устройство с тремя кнопками и тремя лампочками: красной, желтой и зеленой. Каждая из кнопок управляет своим запоминающим элементом. Каждый из запоминающих элементов может быть либо во включенном, либо в выключенном состоянии. Нажатие на любую из кнопок изменяет состояние соответствующего запоминающего элемента.
Если все три запоминающих элемента выключены – не горит ни одна из лампочек.
Если включен только один любой из запоминающих элементов – горит зеленая лампочка.
Если включены только любые два запоминающих элемента – горит желтая лампочка.
Если включены все три запоминающих элемента – горит красная лампочка.

Разработать программу, обеспечивающую имитацию работы данного устройства.
При этом любые три выбранные Вами клавиши клавиатуры должны соответствовать трем кнопкам устройства результаты нажатия на которые сопровождаются отображением на экране:
- состояния запоминающих элементов;
- цвета горящей лампочки.
Нажатие на некоторую четвертую выбранную Вами клавишу должно вызывать завершение программы.
0
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
16.10.2014, 22:24
Ответы с готовыми решениями:

Неисправность принтера Epson XP-103 моргает всеми тремя сигнальными лампочками
Здравствуйте. Помогите, пожалуйста разобраться. Мое МФУ Epson XP-103 в один "прекрасный" момент при включении стал моргать всеми тремя...

Создайте программу с тремя кнопками
Создайте программу с тремя кнопками. На первой из кнопок отображается число (изначально 0). При нажатии на вторую кнопку число...

Создать окно с тремя кнопками, используя Swing
Добрый день! Помогите, пожалуйста, решить задачу. Создать окно с тремя кнопками. Каждая кнопка должна окрашивать поверхность...

15
4949 / 2289 / 287
Регистрация: 01.03.2013
Сообщений: 5,991
Записей в блоге: 32
16.10.2014, 22:31
3 глобальные переменные, в коллбэке окна приложения обрабатываете нажатие клавиш, инвертируете соответствующую переменную и рефрешите сигнализирующую "лампочку".
0
0 / 0 / 1
Регистрация: 14.09.2014
Сообщений: 97
16.10.2014, 22:41  [ТС]
_Ivana,
Цитата Сообщение от _Ivana Посмотреть сообщение
в коллбэке окна приложения обрабатываете нажатие клавиш
вот что то я этого не понял.. обьясните подробней пожалуйста как сделать условие, что если введены, например, 2 переменные то горит зеленая лампа, а если одна то желтая..

Добавлено через 51 секунду
_Ivana, у меня ведь обычная консольная программа.. просто надписи должны меняться.. там свитч надо по умному как то юзать..

Добавлено через 5 минут
_Ivana, да или просто
C++
1
2
3
4
5
    cin >> a;
        if(a == 1 , 2) // но вот тут проблема в том, что бы оно читало обе введенные цифры, а не ток первую
            cout << "green";
        else if(a == 2)
            cout << "yellow";
Добавлено через 13 секунд
_Ivana, да или просто
C++
1
2
3
4
5
    cin >> a;
        if(a == 1 , 2) // но вот тут проблема в том, что бы оно читало обе введенные цифры, а не ток первую
            cout << "green";
        else if(a == 2)
            cout << "yellow";
0
4949 / 2289 / 287
Регистрация: 01.03.2013
Сообщений: 5,991
Записей в блоге: 32
16.10.2014, 22:43
Цитата Сообщение от Michel Посмотреть сообщение
у меня ведь обычная консольная программа
с этого надо было начинать. Переменные не "введены", они инициализированы при старте программы и нажатие клавиш только инвертирует соответствующую ей переменную. Стартовое значение всех переменных можно взять выключенными - если булевские, то фалсе.

Добавлено через 1 минуту
Еще раз - условия на лампочки - по переменным, не надо там клавиши читать. А чтение клавиш меняет состояние переменных.
1
0 / 0 / 1
Регистрация: 14.09.2014
Сообщений: 97
16.10.2014, 23:14  [ТС]
_Ivana, хм.. неудобно конечно просить, но могли бы вы написать как это реализовать?.. ибо я что то очень плохо понимаю..

Добавлено через 13 минут
_Ivana,
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
#include <iostream>
#include <conio.h>
using namespace std;
 
 
 
 
void main()
{
    setlocale(LC_ALL, "Russian");
    char Operator;
    bool g = false;
    bool r = false;
    bool y = false;
            cout <<"Красная лампочка выключена "<<endl;
            cout <<"Желтая лампочка выклчена"<<endl;
            cout <<"Зеленая лампочка выключена"<<endl;
        
        do
        {
            
            cin >> Operator;
 
        switch(Operator)
        {
            case 'g': 
            
                cout << "Зеленая лампочка включена"<<endl;
                g = true;
                break;
                
            case 'r': 
            
                cout << "Красная лампочка включена"<<endl;
                r = true;
                break;
            case 'y': 
                
                cout << "Желтая лампочка включена"<<endl;
                y = true;
        
                break;
            
        }
        _getch();
    }while(Operator !='p');
    
    
    
 
    
    
 
 
    
 
 
 
    _getch();
}
сделал вот так покачто ... но тут все равно неправильно использую бул..

Добавлено через 9 минут
_Ivana,
C++
1
2
3
4
5
6
7
8
9
10
11
12
cin >> Operator;
    if(Operator == 'r')
        r = true;
    else if(Operator == 'y')
        y = true;
    else if(Operator == 'g')
        g = true;
 
    if(r == true && y == false && g == false)
        cout << "Горит красная лампочка"<<endl;
    else if(r == true && y == true && g ==false)
        cout << "горит зеленая лампа"<<endl;
по такому принципу тоже не выходит...
0
4949 / 2289 / 287
Регистрация: 01.03.2013
Сообщений: 5,991
Записей в блоге: 32
16.10.2014, 23:20
Вот по последнему принципу и должно выходить. Только надо инвертировать "запоминающие элементы", а не тупо трушить их.
0
0 / 0 / 1
Регистрация: 14.09.2014
Сообщений: 97
16.10.2014, 23:30  [ТС]
_Ivana, ну вот в том то и дело, что я не могу понять как это сделать...
0
4949 / 2289 / 287
Регистрация: 01.03.2013
Сообщений: 5,991
Записей в блоге: 32
16.10.2014, 23:33
Не можете понять, как инвертировать булевскую переменную?
0
0 / 0 / 1
Регистрация: 14.09.2014
Сообщений: 97
16.10.2014, 23:37  [ТС]
_Ivana, ну да.. вы же говорите не просто трушить их, а по другому использовать.. вот не могу понять как.. я просто туплю походу..
0
4949 / 2289 / 287
Регистрация: 01.03.2013
Сообщений: 5,991
Записей в блоге: 32
16.10.2014, 23:41
Думайте. Это задачка для первого класса средней школы. У вас в условии сказано
Цитата Сообщение от Michel Посмотреть сообщение
Каждый из запоминающих элементов может быть либо во включенном, либо в выключенном состоянии. Нажатие на любую из кнопок изменяет состояние соответствующего запоминающего элемента.
а не так, что кнопка включает (трушит) соответствующую переменную и потом только перетрушивает ее без изменения.
1
0 / 0 / 1
Регистрация: 14.09.2014
Сообщений: 97
16.10.2014, 23:48  [ТС]
_Ivana, тоесть стоит добавить что что что будет возвращать кнопку обратно в false? Я понимаю, что задачка легкая, но с реализацией у меня проблемы.. я с булианом не другу почему то..
0
Модератор
Эксперт по электронике
8981 / 6748 / 921
Регистрация: 14.02.2011
Сообщений: 23,867
16.10.2014, 23:52
так наброски кода
просто чтобы показать идею

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
int triger1=0;
int triger2=0;
int triger3=0;
 
void pressButton1()
{
triger1^=1;
}
void pressButton2()
{
triger2^=1;
}
void pressButton3()
{
triger3^=1
}
 
void Veryfy()
{
int sum=triger1+triger2+triger3
switch(sum)
{
 case 0;
cout<<"off";
 break;
 case 1;
cout<<"Green";
 break;
 case 2;
cout<<"Yellow";
 break;
 case 3;
cout<<"Red";
 break;
}
}
Добавлено через 4 минуты
Цитата Сообщение от Michel Посмотреть сообщение
с булианом не другу почему то..
здесь булеан лишний по моему слишком большое условие будет

можно поиграться с битовыми полями
но switch ,будет ужасный


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
int triger2=0;
 
 
void pressButton1()
{
triger^=1;
}
void pressButton2()
{
triger^=2;
}
void pressButton3()
{
triger^=4;
}
 
void Veryfy()
{
 
switch(triger)
{
 case 0:
cout<<"off";
 break;
 case 1:
  case 2:
  case 4:
cout<<"Green";
 break;
 case 3:
 case 5:
 case 6: 
cout<<"Yellow";
 break;
 case 7;
cout<<"Red";
 break;
}
}
1
4949 / 2289 / 287
Регистрация: 01.03.2013
Сообщений: 5,991
Записей в блоге: 32
16.10.2014, 23:53
Michel, у вас есть дома телевизор с пультом? А на пульте кнопка Павер? тыкаешь ее один раз - телек включается, тыкаешь еще раз - выключается. тыкаешь опять - снова включается... Вот сделайте так же. Если не хотите "с булеаном" - сделайте хоть с числами хоть со строками.
1
Модератор
Эксперт по электронике
8981 / 6748 / 921
Регистрация: 14.02.2011
Сообщений: 23,867
16.10.2014, 23:55
Цитата Сообщение от Michel Посмотреть сообщение
if(r == true && y == false && g == false)
тавтология
сложно для восприятия
так правильней
C++
1
if(r && !y && !g)
1
0 / 0 / 1
Регистрация: 14.09.2014
Сообщений: 97
17.10.2014, 00:13  [ТС]
ValeryS, спасибо большое) я и забыл, что так можно..

Добавлено через 2 минуты
ValeryS, с суммой очень хорошая идея..спасибо)

Добавлено через 36 секунд
_Ivana, впринципе понял все.. буду стараться) спасибо за помощь
0
Эксперт С++
 Аватар для Mr.X
3225 / 1752 / 436
Регистрация: 03.05.2010
Сообщений: 3,867
17.10.2014, 11:35
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
/////////////////////////////////////////////////////////////////////////////////////////
//Имеется устройство с тремя кнопками и тремя лампочками: красной, желтой и зеленой. 
//Каждая из кнопок управляет своим запоминающим элементом. Каждый из запоминающих элементов 
//может быть либо во включенном, либо в выключенном состоянии. Нажатие на любую из кнопок 
//изменяет состояние соответствующего запоминающего элемента.
//Если все три запоминающих элемента выключены – не горит ни одна из лампочек.
//Если включен только один любой из запоминающих элементов – горит зеленая лампочка.
//Если включены только любые два запоминающих элемента – горит желтая лампочка.
//Если включены все три запоминающих элемента – горит красная лампочка.
//
//Разработать программу, обеспечивающую имитацию работы данного устройства.
//При этом любые три выбранные Вами клавиши клавиатуры должны соответствовать трем кнопкам 
//устройства результаты нажатия на которые сопровождаются отображением на экране:
//- состояния запоминающих элементов;
//- цвета горящей лампочки.
//Нажатие на некоторую четвертую выбранную Вами клавишу должно вызывать завершение программы.
/////////////////////////////////////////////////////////////////////////////////////////
#include <bitset>
#include <conio.h>
#include <iostream>
#include <string>
/////////////////////////////////////////////////////////////////////////////////////////
const   char    ZERO_SYMB       =   '0';
const   char    EXIT_SIMB       =   ' ';
const   int     ELEMENTS_TOTAL  =   3;
/////////////////////////////////////////////////////////////////////////////////////////
typedef std::string                         T_str;
typedef std::bitset < ELEMENTS_TOTAL    >   T_elements;
/////////////////////////////////////////////////////////////////////////////////////////
const   T_str   COLORS[]    =   {
                                    "не горит",
                                    "зеленый",
                                    "желтый",
                                    "красный"
                                };
/////////////////////////////////////////////////////////////////////////////////////////
int     main()
{
    std::locale::global(std::locale(""));
 
    std::cout   <<  "Вводите 1.."
                <<  ELEMENTS_TOTAL
                <<  " для управления."
                <<  std::endl
                <<  "Для выхода нажмите пробел."
                <<  std::endl;
 
    T_elements  elements;
    int         cur_symb    =   0;
 
    while   (
                    (
                        cur_symb    =   getch()
                    )
                !=  EXIT_SIMB
            )
    {
        size_t  ind     =   ELEMENTS_TOTAL - cur_symb + ZERO_SYMB;
 
        if( ind     <   ELEMENTS_TOTAL )
        {
            elements.flip( ind );
 
            std::cout   <<  elements.to_string()
                        <<  '\t'
                        <<  COLORS[ elements.count() ]
                        <<  std::endl;
        }//if
    }//while
}
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
17.10.2014, 11:35
Помогаю со студенческими работами здесь

Скрытие Navigation Bar (нижнее мню с тремя кнопками)
Здравствуйте. Подскажите пожалуйста как можно спрятать этот несчастный Navigation Bar так чтоб сидел себе тихо и не показывался больше до...

Модуль АЦП ATMega32, работа с 3 каналами и тремя кнопками
Нужна помощь по AVR simulator IDE, работаю с АЦП, не могу сделать одну вещь, а именно при одновременном нажатие трех кнопок, что бы мигала...

Включение и выключение 3-х светодиодов тремя кнопками независимо друг от друга
включение и выключение 3-х светодиодов тремя кнопками независимо друг от друга в AtmelStudio 7 други помогите реализовать это чайнику!...

"Необходимо создать окно с тремя (3) кнопками и местом под картинку"
&quot;Необходимо создать окно с тремя (3) кнопками и местом под картинку Пример - 01.png 1-я кнопка - показать картинку, при следующем...

найти максимальный отрицательный элемент в «зеленой» области и минимальный положительный в «красной» и переставить их м
найти максимальный отрицательный элемент в «зеленой» области и минимальный положительный в «красной» и переставить их местами в...


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

Или воспользуйтесь поиском по форуму:
16
Ответ Создать тему
Новые блоги и статьи
Символьное дифференцирование
igorrr37 13.02.2026
/ * Логарифм записывается как: (x-2)log(x^2+2) - означает логарифм (x^2+2) по основанию (x-2). Унарный минус обозначается как ! */ #include <iostream> #include <stack> #include <cctype>. . .
Камера Toupcam IUA500KMA
Eddy_Em 12.02.2026
Т. к. у всяких "хикроботов" слишком уж мелкий пиксель, для подсмотра в ESPriF они вообще плохо годятся: уже 14 величину можно рассмотреть еле-еле лишь на экспозициях под 3 секунды (а то и больше),. . .
И ясному Солнцу
zbw 12.02.2026
И ясному Солнцу, и светлой Луне. В мире покоя нет и люди не могут жить в тишине. А жить им немного лет.
«Знание-Сила»
zbw 12.02.2026
«Знание-Сила» «Время-Деньги» «Деньги -Пуля»
SDL3 для Web (WebAssembly): Подключение Box2D v3, физика и отрисовка коллайдеров
8Observer8 12.02.2026
Содержание блога Box2D - это библиотека для 2D физики для анимаций и игр. С её помощью можно определять были ли коллизии между конкретными объектами и вызывать обработчики событий столкновения. . . .
SDL3 для Web (WebAssembly): Загрузка PNG с прозрачным фоном с помощью SDL_LoadPNG (без SDL3_image)
8Observer8 11.02.2026
Содержание блога Библиотека SDL3 содержит встроенные инструменты для базовой работы с изображениями - без использования библиотеки SDL3_image. Пошагово создадим проект для загрузки изображения. . .
SDL3 для Web (WebAssembly): Загрузка PNG с прозрачным фоном с помощью SDL3_image
8Observer8 10.02.2026
Содержание блога Библиотека SDL3_image содержит инструменты для расширенной работы с изображениями. Пошагово создадим проект для загрузки изображения формата PNG с альфа-каналом (с прозрачным. . .
Установка Qt-версии Lazarus IDE в Debian Trixie Xfce
volvo 10.02.2026
В общем, достали меня глюки IDE Лазаруса, собранной с использованием набора виджетов Gtk2 (конкретно: если набирать текст в редакторе и вызвать подсказку через Ctrl+Space, то после закрытия окошка. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru