Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 5.00/3: Рейтинг темы: голосов - 3, средняя оценка - 5.00
2 / 2 / 2
Регистрация: 01.06.2014
Сообщений: 92
1

Функция проверки состояния в классе, класс автомобилей, избежать ДТП

02.01.2016, 18:19. Показов 605. Ответов 6
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Здравствуйте, хочу вас всех поздравить с Новым Годом)

А теперь по теме:

У меня есть класс "автомобиль" который имеет: координаты авто (х,у), место появления на оси координат ( слева,сверху,справа,снизу), и конечное направление(налево,прямо,направо)
Функция движения проста, она наращивает координату в зависимости от места появления до определенного х,у.

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
class car {
    private:
        int x, y;
        int type; // место появления
        int n_itog; // направление
    public:car(int t, int n) {
        type = t;
        n_itog = n;
    }
    public:void typeloc() {   //координаты в зависимости от места появления
        switch (type) {
        case 0:
            x = -90;
            y = 0;
            break;
        case 1:
            x = 0;
            y = 90;
            break;
        case 2:
            x = 90;
            y = 0;
            break;
        case 3:
            x = 0;
            y = -90;
            break;
        }
    }
    public: void move() {
        if (type == 0 && n_itog == 0) { //если появился слева и направление налево то,
                                        //наращиваем х до центра а затем наращиваем у.
            while (x < 0) {
                x++;
            }if (x == 0) y++;
        }
        if (type == 0 && n_itog == 1) { //прямо
            while (x < 90) {
                x++;
            }
        }
        if (type == 0 && n_itog == 2) { //направо
            while (x < 0) {
                x++;
            }if (x == 0) y--;
        }
    }
Необходимо написать в классе функцию проверки, которая не даст автомобилям столкнуться:
У меня идея "цеплять" значения координат из другого объекта класса car,
наращивать значение- х, car A так, чтобы x car A был на 30 значений меньше х car B
а как это правильно сделать?

А чтобы при повороте на перекрестке не сталкивались car A и car B
написать функцию которая будет получать значения направлений объектов car A и car B. и при достижении центра(начала перекрестка) вызывать ее, " если A поворачивает направо, а B поворачивает налево, то ждем пока A завершит маневр"


На словах и на листочке понятно, а как реализовать это на c++ в ООП не могу сообразить

Добавлено через 1 час 15 минут
не пугайтесь пожалуйста!) Мне совет нужен только!!!
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
02.01.2016, 18:19
Ответы с готовыми решениями:

У меня класс B в классе A, а в классе B рекурсивная функция переопределения оператора "()", как её вызвать, не создавая явно объект класса B?
#include &lt;windows.h&gt; #include &lt;iostream&gt; using namespace std; //Вот главный класс class A{...

Функция в первом классе выдает результат 0 при любых входных значениях, а второй класс не работает после ввода вообще
В лабораторной работе задание: написать два класса нахождения минимума функции двумя методами:...

Скрипт проверки состояния ремонта!
Нужен скрипт или модуль под DLE 9,5 для проверки по уникальному коду состояния ремонта в сервисном...

наследование в классе нескольких функций из другого или как добавить функцию находящуюся в классе в другой класс
есть класс. есть второй класс. как добавить функцию находящуюся в классе в другой класс(второй) при...

6
495 / 377 / 136
Регистрация: 27.01.2015
Сообщений: 1,588
02.01.2016, 20:37 2
Цитата Сообщение от Olya_z Посмотреть сообщение
не пугайтесь пожалуйста!) Мне совет нужен только!!!
Тогда нужно правильно сформулировать вопрос, картинку показать, я ничего не понял... Это же вам надо, по-этому не думаю что кто то будет напрягаться что бы понять вопрос...

Добавлено через 5 минут
Цитата Сообщение от Olya_z Посмотреть сообщение
public:void typeloc()
Цитата Сообщение от Olya_z Посмотреть сообщение
public: void move() {
зачем перед каждым методом ставить ставить уровень доступа? Одного достаточно, и действует он до конца класса или пока его не перекроет другой.


Цитата Сообщение от Olya_z Посмотреть сообщение
int type; // место появления
не экономично, это одноразовые данные, так зачем их хранить?


Цитата Сообщение от Olya_z Посмотреть сообщение
while (x < 0) {
* * * * * * * * x++;
* * * * * * }
что?

советую начать пользоваться клавишей "Enter" - жить станет легче!


Цитата Сообщение от Olya_z Посмотреть сообщение
if (type == 0 && n_itog == 1) { //прямо
* * * * * * while (x < 90) {
* * * * * * * * x++;
* * * * * * }
* * * * }
я что то не понимаю, наверно, но почему нельзя сразу:
C++
1
 x = 90
???

Добавлено через 13 минут
Цитата Сообщение от Olya_z Посмотреть сообщение
А чтобы при повороте на перекрестке не сталкивались car A и car B
Что бы авто не столкнулись, необходимо посмотреть глубже. Пусть авто двигаются по своей полосе(встречное)
Так встречные уже не столкнутся. Учитывая то что в классе нет поля скорости, то и авто с одним направлением на одной полосе тоже не столкнутся. Единственное место это перекресток. Тогда самое простое решение - это сверить дистанцию между всеми машинами, и если расстояние между машинами меньше допустимого, то та у которой приоритет(задается вашими правилами, помеха с права допустим) больше продолжит движение, а другая останавливается и пропускает.

То есть необходимо прописать правила и разобраться с тем как реализована дорога. Но учитывая ваш код... вам это будет полезно.
1
2 / 2 / 2
Регистрация: 01.06.2014
Сообщений: 92
02.01.2016, 21:00  [ТС] 3
спасибо за отклик
Цитата Сообщение от _Valera_ Посмотреть сообщение
не экономично, это одноразовые данные, так зачем их хранить?
хорошо, type можно "рандомить" в функции
Цитата Сообщение от _Valera_ Посмотреть сообщение
что?
советую начать пользоваться клавишей "Enter" - жить станет легче!
код писался прям на форуме торопясь, прошу прощения за кривой код.
Цитата Сообщение от _Valera_ Посмотреть сообщение
я что то не понимаю, наверно, но почему нельзя сразу:
для симуляции движения.


На изображении перекресток, с тремя объектами, необходимо сделать так, чтобы они не столкнулись.

Я не могу сообразить как сделать так, чтобы автомобиль продолжал движение до определенного расстояния перед другим автомобилем,т.е. "держал дистанцию". Нужно каким то образом получить координату объекта который находится впереди.



Автомобилей в конечном счете будет n-ое количество, передвигаться они будут по таймеру.
Миниатюры
Функция проверки состояния в классе, класс автомобилей, избежать ДТП  
0
495 / 377 / 136
Регистрация: 27.01.2015
Сообщений: 1,588
02.01.2016, 21:10 4
Цитата Сообщение от Olya_z Посмотреть сообщение
для симуляции движения.
симуляция? нет..
Симуляция, в крайнем случае, выглядит примерно так:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
while(MainCycleRun)
{
...
update();
...
 
}
 
...
void update()
{
    ++x;
}
а это равносильно:
C++
1
2
3
while(x < 90){++x}
равносильно
x = 90;

Цитата Сообщение от Olya_z Посмотреть сообщение
. "держал дистанцию". Нужно каким то образом получить координату объекта который находится впереди.
авто можно хранить в списке, а выше я описал что примерно делать.
1
2 / 2 / 2
Регистрация: 01.06.2014
Сообщений: 92
02.01.2016, 21:19  [ТС] 5
Цитата Сообщение от _Valera_ Посмотреть сообщение
Тогда самое простое решение - это сверить дистанцию между всеми машинами
Можно пожалуйста поподробнее каким образом вы имеете ввиду?

Сейчас появилась идея объявить "массив" объектов класса Car и написать функцию которая будет в зависимости от type (места локации) выдавать координаты, проходя циклом по массиву. Как думаете,жизнеспособная идея?

Добавлено через 3 минуты
Цитата Сообщение от _Valera_ Посмотреть сообщение
авто можно хранить в списке, а выше я описал что примерно делать.
ок, спасибо, пока писала ответ, ваш еще не отображался.
0
495 / 377 / 136
Регистрация: 27.01.2015
Сообщений: 1,588
02.01.2016, 21:26 6
Цитата Сообщение от Olya_z Посмотреть сообщение
объявить "массив" объектов класса Car и написать функцию
Цитата Сообщение от Olya_z Посмотреть сообщение
Можно пожалуйста поподробнее каким образом вы имеете ввиду?
вот хорошие алгоритмы, которые ответят на все вопросы.
http://habrahabr.ru/post/135948/http://
http://habrahabr.ru/post/165825/
1
338 / 67 / 37
Регистрация: 22.12.2010
Сообщений: 138
02.01.2016, 22:10 7
рекомендую использовать клеточный автомат для симуляции транспортных потоков
в таком случае, использовав динамический габарит (среднее для каждого АТС) вы избавите себя от проблем "безопасного" расстояния
1
02.01.2016, 22:10
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
02.01.2016, 22:10
Помогаю со студенческими работами здесь

Как избежать не нужной пустой реализации виртуальных методов в базовом классе?
Для наглядности: class BASE { public: BASE(); ~BASE(); virtual void Do();

Какую программу использовать для проверки, мониторинга состояния пинга разных ip ?
у нас в работе около 300 ПК. И где то 20-50 коммутаторов, роутеров. Желательно бесплатный.

Ошибка в выводе данных, класс выводит правильно, а класс в классе - нет
Неизвестная для меня проблема. Класс выводит данные правильно из Consigment, а вот третий экземпляр...

Абстрактный класс, наследование, класс хранится в другом классе
Нужна помощь. Написать программу: 1 класс. Имеется абстрактный класс который описывает какую-то...


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

Или воспользуйтесь поиском по форуму:
7
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru