МОДЕЛИРОВАНИЕ в среде программирования QBasic Учитель: Гуляева Т.В. г.Павлово, 2008 год
Этапы моделирования I этап. Постановка задачи Описание задачи Цель моделирования Анализ объекта II этап. Разработка модели Знаковая модель Информационная модель Компьютерная модель Ш этап. Компьютерный эксперимент План моделирования Технология моделирования IV этап. Анализ результатов моделирования Результаты не соответствуют цели Результаты соответствуют цели
Игра в кости
Постановка задачи Два игрока бросают по две игровые кости. Сумма очков, выпавших на двух костях накап- ливается. Игра прекращается, когда один из игроков достигает суммы 101. В случае, когда оба игрока достигают суммы в 101 очко, выигрывает тот, у которого очков больше.
Цель моделирования Создание игровой модели, основанной на случайных событиях.
Формализация задачи (анализ) -Что моделируется? -Каков характер процесса? -Чем определяется выигрыш? -Какие объекты участвуют? -Чем характеризуется игрок? -Чем характеризуются кости?
Разработка модели -Математическая модель -Информационная модель -Компьютерная модель
Математическая модель На игровой кости имеется 6 граней с количеством точек от 1 до 6. Выпадение той или иной грани случайное. Введем в рассмотрение следующие величины: К11 – число выпавших очков первой кости первого игрока К12 – число выпавших очков второй кости первого игрока К21 – число выпавших очков первой кости второго игрока К22 – число выпавших очков второй кости второго игрока S1 – текущая сумма очков первого игрока S2 – текущая сумма очков второго игрока
Математическая модель Модель, имитирующая бросание двух костей одним игроком, имеет вид: Модель, имитирующая накопление суммы очков, имеет вид: Кi1=INT(RND(1)*6)+1 Кi2=INT(RND(1)*6)+1 i = 1,2 Si = Si +Ki1 + Ki2 i = 1,2 Условие продолжения игры имеет вид: S1 < 101 и S2 < 101
Информационная модель ДА НЕТ НАЧАЛО S1 = 0 S2 = 0 K11 = INT(RND(1)*6)+1 K12 = INT(RND(1)*6)+1 K21 = INT(RND(1)*6)+1 K22 = INT(RND(1)*6)+1 S1 = S1 + K11 +K12 S2 = S2 + K21 +K22 K11, K12, S1, K21,K22,S2 S1
CLS RANDOMIZE TIMER S1 = 0: S2 = 0 1 : K11 = INT(RND(1) * 6) + 1 K12 = INT(RND(1) * 6) + 1 S1 = S1 + K11 + K12 K21 = INT(RND(1) * 6) + 1 K22 = INT(RND(1) * 6) + 1 S2 = S2 + K21 + K22 PRINT K11; K12, S1, K21; K22, S2 IF (S1 < 101) AND (S2 < 101) THEN GOTO 1 IF S1 > S2 THEN PRINT "Выиграл первый игрок" : END IF S1 < S2 THEN PRINT "Выиграл второй игрок ELSE PRINT "Ничья" END Компьютерная модель
CLS RANDOMIZE TIMER S1 = 0: S2 = 0 1 : K11 = INT(RND(1) * 6) + 1 K12 = INT(RND(1) * 6) + 1 S1 = S1 + K11 + K12 K21 = INT(RND(1) * 6) + 1 K22 = INT(RND(1) * 6) + 1 S2 = S2 + K21 + K22 PRINT K11; K12, S1, K21; K22, S2 IF (S1 < 101) AND (S2 < 101) THEN GOTO 1 IF S1 > S2 THEN PRINT "Выиграл первый игрок : END IF S1 < S2 THEN PRINT "Выиграл второй игрок ELSE PRINT "Ничья" END PRINT PRINT K11"; K12", S1", K21"; K22", S2" Компьютерная модель
Компьютерный эксперимент Самостоятельно набрать текст прог- раммы в среде программирования Qbasic и протестировать ее несколько раз.
Анализ результатов Проанализировать полученные результаты, ответив на вопросы: - Получается ли выпад костей случайным? - Можно ли заранее спрогнозировать результат в данной игре?
Изменение моделей
НАЧАЛО S1 = 0 S2 = 0 K11 = INT(RND(1)*6)+1 K12 = INT(RND(1)*6)+1 K21 = INT(RND(1)*6)+1 K22 = INT(RND(1)*6)+1 S1 = S1 + K11 +K12 S2 = S2 + K21 + K22 K11,K12,S1, K21,K22,S2 S1 < 101 и S2 < 101 S1 > S2 S1 < S2 «Выигра л 1 игрок» «Ничья » «Выигра л 2 игрок» КОНЕЦ ДА НЕТ Подзадача по отношению к основной задаче
- это алгоритм решения некоторой подзадачи по отношению к исходной (основной) задаче K1 = INT(RND(1)*6)+1 K2 = INT(RND(1)*6)+1 S = S+ K21 + K22 K1, K2, S КОНЕЦ НАЧАЛО Вспомогательный алгоритм - блок обращения к вспомогательному алгоритму в блок-схеме основной программы
Подзадача по отношению к основной задаче НАЧАЛО S1 = 0 S2 = 0 K11 = INT(RND(1)*6)+1 K12 = INT(RND(1)*6)+1 K21 = INT(RND(1)*6)+1 K22 = INT(RND(1)*6)+1 S1 = S1 + K11 +K12 S2 = S2 + K21 + K22 K11,K12,S1, K21,K22,S2 S1 < 101 и S2 < 101 S1 > S2 S1 < S2 «Выигра л первый игрок» «Ничья » «Выигра л второй игрок» КОНЕЦ ДА НЕТ K1 = INT(RND(1)*6)+1 K2 = INT(RND(1)*6)+1 S = S+ K21 + K22 K1, K2, S КОНЕЦ 2 НАЧАЛО 2 НАЧАЛО S1 = 0 S2 = 0 S1 < 101 и S2 < 101 ДАНЕТ S1 > S2 S1 < S2 «Выигра л 1 игрок» «Ничья » «Выигра л 2 игрок» КОНЕЦ ДА НЕТ S = S1 2 S1 = S S = S2 2 S2 = S
Компьютерная модель
Подпрограмма Подпрограмма – это запись вспомогательного алгоритма на языке программирования В QBasic для обращения к подпрограмме используется оператор GOSUB GOSUB
Правила оформления подпрограмм 1.Подпрограмма записывается после команд основной программы 2.Подпрограмма должна начинаться с метки, на которую указал оператор GOSUB RETURN, 3.Логический конец подпрограммы отмечается оператором RETURN, который передает управление в основную программу на оператор, следующий за обращением к подпрограмме
CLS RANDOMIZE TIMER S1 = 0: S2 = 0: N = 0 PRINT PRINT K11"; K12", S1; SPC(20); K21"; K22", S2" 1 : K11 = INT(RND(1) * 6) + 1 K12 = INT(RND(1) * 6) + 1 S1 = S1 + K11 + K12 K21 = INT(RND(1) * 6) + 1 K22 = INT(RND(1) * 6) + 1 S2 = S2 + K21 + K22 PRINT K11; K12, S1; SPC(20); K21; K22, S2 IF (S1 < 101) AND (S2 < 101) THEN GOTO 1 IF S1 > S2 THEN PRINT "Выиграл первый игрок : END IF S1 < S2 THEN PRINT "Выиграл второй игрок ELSE PRINT "Ничья" END GOSUB 2
CLS RANDOMIZE TIMER S1 = 0: S2 = 0 PRINT PRINT K11"; K12", S1; SPC(20); K21"; K22", S2" 1 : PRINT S=S1: GOSUB 2 : S1 = S S=S2: GOSUB 2 : S2 = S IF (S1 < 101) AND (S2 < 101) THEN GOTO 1 IF S1 > S2 THEN PRINT "Выиграл первый игрок : END IF S1 < S2 THEN PRINT "Выиграл второй игрок ELSE PRINT "Ничья" END 2: K1 = INT(RND(1) * 6) + 1 K2 = INT(RND(1) * 6) + 1 S = S + K1 + K2 PRINT K1; K2, S; SPC(20); RETURN Основная программа Подпрограмма
Домашнее задание Продумать решение данной задачи для трех игроков