Запускать три функции одновременно? - PullRequest
0 голосов
/ 17 апреля 2019

C ++ Работая над проблемой для школы, участвуя в гонке 3 лошади, и тот, кто финиширует первым, становится победителем.3 лошади должны работать синхронно следующим образом

1|--------H------|
2|-------H-------|
3|---------H-----|

Однако мой код правильно запускает программу (генерирует случайное число от 1 до 100, и если это число меньше 50, переместите лошадь на 1 место вверх).но он запускает первую лошадь, затем 2-ю и 3-ю последнюю.

попытался найти это, но ни один из методов, похоже, не работает (используя кодовые блоки (последняя версия Windows 10) для C ++).

srand(time(NULL));
Horse1();
Horse2();
Horse3();

Файл Github: https://gist.github.com/EthanA2020/f16a699f1b8136a1da0350ab48acdda0

Ответы [ 2 ]

2 голосов
/ 17 апреля 2019

Я не думаю, что ваша проблема связана с типом функции, а со структурой вашей программы.Независимо от того, как вы программируете, одна операция должна предшествовать следующей.Разработчики работают с этим, выполняя каждую операцию объекта (в вашем случае движение лошади) рядом и проверяя позже, чтобы увидеть результат.

Например, давайте воспользуемся сценарием вашей лошади:

while "all horses" are less than "finish"
     horse 1 moves
     horse 2 moves
     horse 3 moves

Я уверен, что вы знакомы с циклами, поэтому мы будем использовать его здесь.Должно существовать определенное расстояние, чтобы определить, когда лошадь закончила.Таким образом, вы захотите продолжить этот цикл, пока все лошади имеют расстояние меньше этого значения.Во время каждой петли значение движения каждой лошади должно изменяться или не изменяться (определяется функцией случайного движения).

Теперь, когда этот цикл закончился, вы можете быть уверены, что хотя бы одна лошадь пересекла финишную черту.Все операции были завершены, и у вас есть набор данных о позициях лошадей.Это тот момент, когда вы проверяете, какие лошади закончили (я говорю лошадей во множественном числе, потому что есть вероятность, что более одной лошади или даже все 3 финишируют одновременно, поэтому обязательно учтите это в конце).

При этом структура вашей программы должна выглядеть примерно так:

while "all horses" are less than "finish"
     horse 1 moves
     horse 2 moves
     horse 3 moves
//movement of horses complete
check and print the horses with a movement value of "finish"
0 голосов
/ 17 апреля 2019

Я думаю, что вы должны сделать:

while (!horse(rand() % 100)) {
    usleep(100);
}

Где horse(int n) перемещает лошадь n 1 позицию, и если она достигла конца, она возвращает true (чтобы закончить гонку).Он ничего не делает, если ему передан неверный n (допустимо только от 1 до 3).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...