Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Delphi программирование > Паскаль, Turbo Pascal, PascalABC.NET
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 01.06.2016, 11:17   #1
riguron
 
Регистрация: 01.06.2016
Сообщений: 3
По умолчанию Отгадать число от 1 до 100 - срочно, пожалуйста

Здравствуйте, ребят! Помогите, пожалуйста, срочно, сижу на экзамене, не знаю, как решать, мыслей 0.

Задумайте число от 1 до 100. После этого программа задает вопросы вида "ваше число больше X?" или "ваше число меньше Y?" Пользователь
отвечает 1, если ДА, и 0, если нет. Не более чем за 7 вопросов программа должна назвать число.

Заранее огромное спасибо!
riguron вне форума Ответить с цитированием
Старый 01.06.2016, 11:45   #2
Аватар
Старожил
 
Аватар для Аватар
 
Регистрация: 17.11.2010
Сообщений: 19,042
По умолчанию

Метод деления пополам, как раз 7 шагов
Если бы архитекторы строили здания так, как программисты пишут программы, то первый залетевший дятел разрушил бы цивилизацию
Аватар вне форума Ответить с цитированием
Старый 01.06.2016, 11:47   #3
riguron
 
Регистрация: 01.06.2016
Сообщений: 3
По умолчанию

Можете привести пример, если не сложно?
riguron вне форума Ответить с цитированием
Старый 01.06.2016, 11:59   #4
p51x
Старожил
 
Регистрация: 15.02.2010
Сообщений: 15,695
По умолчанию

https://ru.wikipedia.org/wiki/%D0%94...B8%D1%81%D0%BA
p51x вне форума Ответить с цитированием
Старый 01.06.2016, 12:07   #5
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,238
По умолчанию

идея такая:

Код:
Left := 1;
Right := 100;
цикл 
   Mid := (Rigth+1 - Left) div 2;
   Write('Ваше число больше или равно ',Mid,' ? (1="Да"/0="Нет": ');
   ReadLn(ans);
   if ans=1 then Left := Mid
   else Rigth := Mid;
   if Left = Rigth Then begin WriteLn('Ваше число: ', Left); Break end
конец цикла
Serge_Bliznykov вне форума Ответить с цитированием
Старый 01.06.2016, 12:12   #6
riguron
 
Регистрация: 01.06.2016
Сообщений: 3
По умолчанию

Спасибо!)
riguron вне форума Ответить с цитированием
Старый 01.06.2016, 12:18   #7
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,238
По умолчанию

там косяки присутствуют.
поэтому лови код:

Код:
var
  ans, Left, Right, Mid: integer;

begin
  Left := 1;
  Right := 100;
  while (Left <> Right) and ((Right - Left) > 1) do 
  begin
    Mid := Left + ((Right - Left) div 2);
    Write('Ваше число больше или равно ', Mid, ' ? (1="Да"/0="Нет": ');
    ReadLn(ans);
    if ans = 1 then Left := Mid
    else Right := Mid;
    if (Left = Right) or ((Right - Left) = 1) Then WriteLn('Ваше число: ', Left); 
    if (Left < 1) or (Right > 100) then begin WriteLn('Вы отвечали неправильно! До свидания! :( ');Break end;
  end
end.
вот. вроде работает.

А если нужно добавить число шагов, за сколько угадала программа - то счётчик можешь сам в код добавить.
Serge_Bliznykov вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Дано натуральное число n ( n<=100).Чему равна сумма его цифр? Petrovich83 Помощь студентам 1 11.04.2011 21:12
Можно ли отгадать пароль с исходным кодом? Arinka БД в Delphi 9 07.05.2010 13:35
Перевести текст edit'а в число и разделить на 100 Marsel737 Общие вопросы Delphi 5 08.02.2010 22:18