Разработать схему алгоритма работы объекта.
Входные данные с датчиков и сигналы представить
с помощью блока ручного ввода, выходные – блока дисплей.
Для автотранспорта размещен светофор с четырьмя состояниями: красный, желтый, зеленый, поворот.
Его принцип действия следующий:
30 секунд горит красный, затем 10 – желтый, 30 – зеленый, если есть автотранспорт, который собирается повернуть, поступает сигнал "4-й
состояние" и после 10 секунд работы зеленого включается поворот.
Отключение зеленого и поворота происходит одновременно.
язык С++
использовать ГОСТ 19.701-90
Ответы
Ответ:
Схема алгоритма работы объекта (светофора) может выглядеть следующим образом:Инициализируем переменную, хранящую текущее состояние светофора (например, state), равной 1 (красный).В цикле выполняем следующее:
a. Если state = 1 (красный), то включаем красный свет и ждем 30 секунд. Затем увеличиваем state на 1.
b. Если state = 2 (желтый), то включаем желтый свет и ждем 10 секунд. Затем увеличиваем state на 1.
c. Если state = 3 (зеленый), то включаем зеленый свет. Проверяем, поступил ли сигнал "4-й состояние" (т.е. нужно ли включать поворот). Если нет, то ждем 30 секунд. Иначе, ждем 10 секунд и включаем поворот. Затем увеличиваем state на 1.
d. Если state = 4 (поворот), то ждем 10 секунд и выключаем поворот. Затем устанавливаем state = 1 (красный).
#include <iostream>
#include <chrono>
#include <thread>
int main()
{
// Инициализируем переменную текущего состояния светофора
int state = 1;
while (true)
{
// Обрабатываем текущее состояние светофора
switch (state)
{
case 1:
// Включаем красный свет
std::cout << "Red light" << std::endl;
// Ждем 30 секунд
std::this_thread::sleep_for(std::chrono::seconds(30));
// Увеличиваем state на 1
state++;
break;
case 2:
// Включаем желтый свет
std::cout << "Yellow light" << std::endl;
// Ждем 10 секунд
std::this_thread::sleep_for(std::chrono::seconds(10));
// Увеличиваем state на 1
state++;
break;
case 3:
// Включаем зеленый свет
std::cout << "Green light" << std::endl;
// Проверяем, поступил ли сигнал "4-й состояние"
bool signal = false;
// В этом месте нужно будет реализовать проверку сигнала
// В данном примере мы просто устанавливаем signal = true,
// чтобы имитировать ситуацию, когда сигнал посту
if (signal)
{
// Ждем 10 секунд
std::this_thread::sleep_for(std::chrono::seconds(10));
// Включаем поворот
std::cout << "Turn" << std::endl;
// Увеличиваем state на 1
state++;
}
else
{
// Ждем 30 секунд
std::this_thread::sleep_for(std::chrono::seconds(30));
// Увеличиваем state на 1
state++;
}
break;
case 4:
// Ждем 10 секунд
std::this_thread::sleep_for(std::chrono::seconds(10));
// Выключаем поворот
std::cout << "Turn off" << std::endl;
// Устанавливаем state = 1 (красный)
state = 1;
break;
}
}
return 0;
}