Задание по методам поиска (игра в "угадай число" наоборот) - Turbo Pascal
Формулировка задачи:
Нужно составить программу определения задуманного ЧЕЛОВЕКОМ числа от 1 до 1000 с помощью 10 вопросов. Каждый вопрос имеет вид "верно ли, что задуманное число больше k?". При этом указывается конкретное число k. Ответами человека могут быть Д и Н.
--
Видел много подобных заданий, но в них человек пытается угадать число. А здесь компьютер. Стало интересно как реализовать.
Решение задачи: «Задание по методам поиска (игра в "угадай число" наоборот)»
textual
Листинг программы
var n, s, k, i: integer; c: string; begin n := 1; s := 1024; writeln('Загадайте число от ', n, ' до ', s, '.'); for i := 1 to 10 do begin k := (s + n) div 2; repeat write(i:2, ': верно ли, что задуманное число больше ', k, ' (д/н)? '); readln(c); if (length(c) <> 1) or not (c[1] in ['д', 'н']) then writeln('Пожалуйста, отвечайте только д или н.') until (length(c) = 1) and (c[1] in ['д', 'н']); if c[1] = 'н' then s := k else n := k end; writeln('Вы загадали ', s); readln end.
Объяснение кода листинга программы
- Объявляются переменные n, s, k, i типа integer и c типа string.
- Значения переменных n и s присваиваются значения 1 и 1024 соответственно.
- Выводится сообщение с предложением загадать число от 1 до 1024.
- Запускается цикл for, который выполняется 10 раз.
- Внутри цикла переменная k вычисляется как (s + n) / 2, что позволяет найти среднее значение между n и s.
- Используется оператор repeat для выполнения повторяющегося блока кода до тех пор, пока не будет получен корректный ответ от пользователя.
- В блоке repeat выводится вопрос пользователю о том, верно ли, что задуманное число больше k.
- Пользователю предлагается ввести ответ только в виде 'д' или 'н'.
- Проверяется корректность введенного ответа. Если длина ответа не равна 1 или ответ не является 'д' или 'н', выводится сообщение с просьбой ввести корректный ответ.
- Если пользователь ввел 'н', переменной s присваивается значение k, иначе n присваивается значение k.
- По завершении цикла выводится сообщение с загаданным числом.
- Вызывается функция readln для чтения ввода пользователя.