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

Светофор на перекрестке - C++

Восстановить пароль Регистрация
 
AlexHolmes
1 / 1 / 0
Регистрация: 14.11.2013
Сообщений: 77
22.11.2014, 19:05     Светофор на перекрестке #1
Написать программу, имитирующую работу светофоров (автомобильных и для пешеходов) на перекрестке. Должны быть настройки горения каждого цвета светофора для автомобилей. Программа на вход получает время, на выходе показывает состояние каждого светофора через заданное время.

Собственно, вопросы: 1) какое время тут имеется в виду? Мне нужно задавать таймер для горения каждого цвета?
Я не совсем понимаю 2) как должен выглядеть результат работы программы?
3) как должно отображаться это самое "горение цвета светофора"? Например так: для пути АВ - зеленый, для пути СD - красный?
4) нужно ли учитывать повороты вправо/влево? И еще светофоры для пешеходов, потому что про них вроде и есть в задании что-то, но не сказано, нужно ли описывать их состояние(хотя это уже не принципиально)?

Пожалуйста, ответьте, а то я в тупике( Не могу составить даже алгоритм действий((
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
22.11.2014, 19:05     Светофор на перекрестке
Посмотрите здесь:

Pascal ABC СВЕТОФОР
Светофор на LD
Светофор Delphi
C++ Программа светофор на Windows Forms
C# Алгоритмом действий (Светофоры на перекрестке)
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
egor2116
 Аватар для egor2116
337 / 368 / 42
Регистрация: 20.01.2013
Сообщений: 1,100
22.11.2014, 19:11     Светофор на перекрестке #2
Программа должна быть консольной или оконной ?
AlexHolmes
1 / 1 / 0
Регистрация: 14.11.2013
Сообщений: 77
22.11.2014, 19:21  [ТС]     Светофор на перекрестке #3
Цитата Сообщение от egor2116 Посмотреть сообщение
Программа должна быть консольной или оконной ?
В задании не указанно, так что я без понятия, но с оконной пока не работали так что - скорее всего консольная.
egor2116
 Аватар для egor2116
337 / 368 / 42
Регистрация: 20.01.2013
Сообщений: 1,100
22.11.2014, 19:29     Светофор на перекрестке #4
Ну тогда
1) какое время тут имеется в виду? Мне нужно задавать таймер для горения каждого цвета?
Очевидно да, только таймер 1 и переключатель который будет переключать цвета и сбрасывать таймер
2) как должен выглядеть результат работы программы?
на выходе показывает состояние каждого светофора через заданное время.
3) как должно отображаться это самое "горение цвета светофора"? Например так: для пути АВ - зеленый, для пути СD - красный?
я думаю в виде статистики
4) нужно ли учитывать повороты вправо/влево? И еще светофоры для пешеходов, потому что про них вроде и есть в задании что-то, но не сказано, нужно ли описывать их состояние(хотя это уже не принципиально)?
Думаю нет.
AlexHolmes
1 / 1 / 0
Регистрация: 14.11.2013
Сообщений: 77
22.11.2014, 19:33  [ТС]     Светофор на перекрестке #5
Спасибо за ответы, значит мне нужно просто написать что-то вроде:

А-зеленый, В-красный,
***
через 30 секунд
(допустим)
***
А-красный, В-зеленый?

Или я не правильно поняла?

Цитата Сообщение от egor2116 Посмотреть сообщение
Очевидно да, только таймер 1 и переключатель который будет переключать цвета и сбрасывать таймер
А подскажите, пожалуйста, как этот самый таймер реализовать?
egor2116
 Аватар для egor2116
337 / 368 / 42
Регистрация: 20.01.2013
Сообщений: 1,100
22.11.2014, 19:56     Светофор на перекрестке #6
А подскажите, пожалуйста, как этот самый таймер реализовать?
Ну как нибудь так
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
#include <iostream>
#include <ctime>
 
void timer(int ms) 
{
    clock_t end_time = clock() + ms * CLOCKS_PER_SEC / 1000;  // время завершения 
    while (clock() < end_time) {}  // цикл ожидания времени 
    std::cout << "felt 5 seconds";  // сообщение о конце работы функции
}
 
int main (){
    timer(5000);  // 5 секунд
    return 0;
}
AlexHolmes
1 / 1 / 0
Регистрация: 14.11.2013
Сообщений: 77
22.11.2014, 19:58  [ТС]     Светофор на перекрестке #7
Цитата Сообщение от egor2116 Посмотреть сообщение
Ну как нибудь так
Спасибо большое, буду работать дальше)
Toshkarik
 Аватар для Toshkarik
1139 / 856 / 50
Регистрация: 03.08.2011
Сообщений: 2,381
Завершенные тесты: 1
22.11.2014, 20:05     Светофор на перекрестке #8
Для учебных целей, думаю, хватит ctime. Сделайте класс "светофор".

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
//traffic light state
enum TLState {
   RED,
   GREEN,
   ORANGE //не знаю, нужен ли оранжевый
};
 
class TrafficLight {
public:
   TrafficLight();
   
   TLState getState() const;
   
   void setState( TLState newState );
 
   void toggle();
   
private:
   TLState state;
};
Далее можно создать вектор светофоров и по таймеру вызывать функцию toggle(), которая меняет состояние на противоположное.
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
23.11.2014, 16:41     Светофор на перекрестке
Еще ссылки по теме:

Светофор: прямоугольник и три окружности. При нажатии нужной клавиши светофор должен загораться нужным светом PascalABC.NET
Согласовать между собой несколько светофоров на одном перекрестке AnyLogic
Реализовать работающий светофор (Паскаль -> С++) C++

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

Или воспользуйтесь поиском по форуму:
AlexHolmes
1 / 1 / 0
Регистрация: 14.11.2013
Сообщений: 77
23.11.2014, 16:41  [ТС]     Светофор на перекрестке #9
Цитата Сообщение от Toshkarik Посмотреть сообщение
//не знаю, нужен ли оранжевый
для автомобилей, думаю, нужен))
Спасибо за совет)

Добавлено через 20 часов 30 минут
Перечитывала задание и темы форума и пришла идея. А что если тут нужно вручную вводить время после запуска программы, например, была тут схожая задача про то что зеленый свет горит 3 минуты, желтый-1, красный тоже 3. И есть час(можно задать время от 1 мин до 60). И соответственно получить ответ в виде цвета светофора на разных дорогах перекрестка.

Вот так:
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
#include "stdafx.h"
#include <iostream>
#include <conio.h>
 
using namespace std;
 
class Light
{
    private:
        static const int green = 3;
        static const int yellow = 1;
        static const int red = 3;
        int time;
    public:
        Light(int t):time(t){};
        void print_light_by_input() const;
};
 
void Light::print_light_by_input() const
{
    int t = 6;
    int x = time % t;
    if(x <= green)
    {
        cout<<"Зеленый для дороги АВ"<<endl;
        cout<<"Красный для дороги СD"<<endl;
    }
    if(x > green && x <= green + yellow)
    {
        cout<<"Желтый  для дороги АВ"<<endl;
        cout<<"Желтый  для дороги СD"<<endl;
 
    }
    if(x > green + yellow && x < t)
    {
        cout<<"Красный для дороги АВ"<<endl;
        cout<<"Зеленый  для дороги СD"<<endl;
    }
}
 
int main()
{
    setlocale(LC_ALL, "Russian");
    int time;
    cout<<"Введите время:"<<endl;
    cin>>time;
    Light *light = new Light(time);
    light->print_light_by_input();
    delete light;
    system ("pause");
    return 0;
}
Или это решение сюда не подходит?
Yandex
Объявления
23.11.2014, 16:41     Светофор на перекрестке
Ответ Создать тему
Опции темы

Текущее время: 12:01. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru