Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > C/C++: Для новичков > Моделирование: черепаха и заяц


Автор: Niakita 17.4.2012, 16:51
(Моделирование: черепаха и заяц).
В этой задаче мы воссоздадим один из истинно великих моментов истории, а именно, 
классическую гонку черепахи и зайца. Вы будете использовать генерацию 
случайных чисел для разработки модели этого памятного события. 
Наши соперники начинают гонку в первой клетке из 70. Каждая 
клетка представляет собой возможную позицию вдоль трассы гонки.
Первый из соперников, достигший или миновавший клетку 70, 
вознаграждается ведром моркови и салата. Трасса вьется по склону 
скользкой горы, так что соперникам случается падать на землю. 
Имеются часы, которые отбивают такт раз в секунду. С каждым 
тактом ваша программа должна устанавливать позицию животных. 

Начните движение печатью 
ГОНГ !!!
И ОНИ ПОШЛИ !!!
Затем на каждом такте (т.е. при каждом повторении цикла) 
печатайте 70-позиционную строку, показывающую букву Ч в позиции 
черепахи и букву 3 в позиции зайца. Может случиться, что оба 
животных окажутся на одной и той же клетке. В этом случае 
черепаха кусает зайца и ваша программа должна печатать ОХ!, начиная с этой позиции. 
Все печатаемые позиции, отличающиеся от Ч, 3 или ОХ!, должны быть пробелами. 
После печати каждой строки проверяйте, достигло или миновало 
животное клетку 70. Если да, то печатайте, кто победитель, и 
заканчивайте моделирование. Если победила черепаха, печатайте 
ПОБЕДИЛА ЧЕРЕПАХА!!! УРА!!! Если победил заяц, печатайте: 
Победил заяц. Эх. Если оба животных победили одновременно, вы 
можете отдать предпочтение черепахе или напечатать: Равный счет. 
Если ни одно животное не победило, повторяйте цикл 
моделирования для следующего отрезка времени.


------------------------------------------------------------
Какую функцию времени использовать для отсчёта?
Как примерно это будет выглядеть?

Автор: baldina 17.4.2012, 17:01
надо после каждого хода делать задержку в 1сек
в windows это функция Sleep(milliseconds);

т.е. основной цикл программы будет примерно такой

Код

do {
  stepIt (); // тут делается ход, черепахой и зайцем
  Sleep (1000); // ждем 1 сек
} while (! reached the end()); // тут проверяем, не достиг ли кто-нить позиции 70

Автор: Niakita 20.4.2012, 16:12
Цитата

Имеются часы, которые отбивают такт раз в секунду. С каждым 
тактом ваша программа должна устанавливать позицию животных согласно  следующим правилам:

http://s1.ipicture.ru/

Используйте переменные для отслеживания позиций животного (позиции с номерами 1-70). Каждое животное стартует с позиции 1 («стартовые ворота»). Если животное скользит налево и должно оказаться перед клеткой 1, движение начинается заново с клетки 1.
Используйте проценты в приведенной таблице, вырабатывая случайные целые числа i в диапазоне от 1 до 10 включительно. Для черепахи при i от 0 до 5 — быстрое ползанье, при i от б до 7 — скольжение, при i от 8 до 10 — медленное ползанье. Аналогичный прием используйте для движения зайца.



Не могу понять то что выделено жирным шрифтом.
(ход мыслей)
процент времени равен 50% -> черепаха перемещается на три клетки вправо
процент времени равен 20% -> черепаха перемещается на 6 клеток влево
процент времени равен 30% -> черепаха перемещается на одну клетку вправо

Дальше всё.

Если следовать моим мыслям то возникает вопрос - процент времени от чего? (то есть что брать за 100% времени?)

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

Используйте проценты в приведенной таблице, вырабатывая случайные целые числа i в диапазоне от 1 до 10 включительно. Для черепахи при i от 0 до 5 — быстрое ползанье, при i от б до 7 — скольжение, при i от 8 до 10 — медленное ползанье.


если следовать моей логике то: 
когда черепаха проползла половину отведённого на гонку времени (процент времени равен 50% -> черепаха перемещается на три клетки вправо)  должно наступить событие (то есть нужно начать вырабатывать случайные числа)

Смущает факт того, что при таких рассуждениях при наступлении одно события черепаха у меня может - быстро ползать, Скользить или Медленно ползать, хотя должна делать что то одно, в данном случае - Быстро ползать ((процент времени равен 50% -> черепаха перемещается на три клетки вправо) ).

Думаю где то не там свернул.
Помогите разобраться.


Автор: qwerty233 20.4.2012, 21:12
Там же всё написано! Генерируете случайное число от 1 до 10. Если число <= 5 сдвигаете черепаху на 3 позиции в массиве вправо. Если было получено 6 или 7 сдвигаете на 6 позиций влево и т.д. Для зайца тоже самое.

Автор: asmdzen 20.4.2012, 21:14
Цитата(Niakita @  20.4.2012,  16:12 Найти цитируемый пост)
процент времени от чего?

процент от общего времени гонки, т.е. просто вероятность того что они будут идти с этой скоростью.
При заходе в stepIt() генерируешь случайное число от 1 до 10 как говорится в инструкции, если выпало значение от 1 до 5 для черепахи проходишь 3 клетки вправо ... , для зайца от 1 до 2 ничего не делаешь, от 2 до 4 -> 9 клеток вправо и.т.д.

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)