Задание по методам поиска (игра в "угадай число" наоборот) - 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.

Объяснение кода листинга программы

  1. Объявляются переменные n, s, k, i типа integer и c типа string.
  2. Значения переменных n и s присваиваются значения 1 и 1024 соответственно.
  3. Выводится сообщение с предложением загадать число от 1 до 1024.
  4. Запускается цикл for, который выполняется 10 раз.
  5. Внутри цикла переменная k вычисляется как (s + n) / 2, что позволяет найти среднее значение между n и s.
  6. Используется оператор repeat для выполнения повторяющегося блока кода до тех пор, пока не будет получен корректный ответ от пользователя.
  7. В блоке repeat выводится вопрос пользователю о том, верно ли, что задуманное число больше k.
  8. Пользователю предлагается ввести ответ только в виде 'д' или 'н'.
  9. Проверяется корректность введенного ответа. Если длина ответа не равна 1 или ответ не является 'д' или 'н', выводится сообщение с просьбой ввести корректный ответ.
  10. Если пользователь ввел 'н', переменной s присваивается значение k, иначе n присваивается значение k.
  11. По завершении цикла выводится сообщение с загаданным числом.
  12. Вызывается функция readln для чтения ввода пользователя.

Оцени полезность:

11   голосов , оценка 4.273 из 5
Похожие ответы