Said

Решение заданий B7

Recommended Posts

  • операции целочисленного деления (div) и взятия остатка (mod)
  • как работают операторы присваивания, циклы и условные операторы в языке программирования

Ниже записана программа. Получив на вход число х , эта программа печатает два числа, L и M. Укажите наибольшее из таких чисел , при вводе которых алгоритм печатает сначала 3, а потом 7.

var x, L, M: integer;

begin

readln(x);

L:=0; M:=0;

while x
>
0 do begin

L:=L+1;

if M < (x mod 10) then begin

M:=x mod 10;

end;

x:= x div 10;

end;

writeln(L); write(M);

end.

Решение
:
  1. для решения задачи необходимо понять, что делает эта программа

  2. если это не видно сразу, можно выполнить ручную прокрутку для какого-то простого числа.

  1. можно догадаться, что в результате работы программы в переменной L окажется число цифр числа, а в переменной M – наибольшая цифра, но это предположение нужно постараться доказать

  2. нужно вспомнить (и запомнить), что для целого числа остаток от деления на 10 (x mod 10) – это последняя цифра в десятичной записи числа, а целочисленное деление (x div 10) отсекает последнюю цифру, то есть из 123 получается 12

  3. рассмотрим цикл, число шагов которого зависит от изменения переменной x:

while
x
> 0
do
begin

...

x
:=
x
div
10; { отсечение последней цифры }

end
;

здесь оставлены только те операторы, которые влияют на значение
x
  1. из приведенного цикла видно, что на каждом шаге от десятичной записи x отсекается последняя цифра до тех пор, пока все цифры не будут отсечены, то есть x не станет равно 0; поэтому цикл выполняется столько раз, сколько цифр в десятичной записи введенного числа

  2. на каждом шаге цикла переменная L увеличивается на 1:

225]
L:=L+1;

25]других операторов, меняющих значение
L
, в программе нет; поэтому после завершения цикла
в переменной
L действительно находится количество цифр
  1. теперь разберемся с переменной M, которая сначала равна 0; оператор, в котором она меняется, выглядит так:

if M < (x mod 10) then begin

M:=x mod 10;

end;

учитывая, что
x
mod
10
– это последняя цифра десятичной записи числа, получается что если эта цифра больше, чем значение M, она записывается в переменную M;
  1. этот оператор выполняется в цикле, причем выражение x mod 10 по очереди принимает значения всех цифр исходного числа; поэтому после завершения циклам в переменной M окажется наибольшая из всех цифр, то есть наша догадка подтверждается

  2. итак, по условию задачи фактически требуется найти наибольшее трехзначное число со старшей цифрой 7; очевидно, что это 777.

  3. ответ: 777.
  4. учтите в этих задачах часто просят вывести минимальное или максимальное возможное число, поэтому не удивляйтесь, если у вас получится несколько ответов.

1. Ниже записана программа, которая получив на вход x, печатает два числа L и M. Укажите наибольшее из таких чисел x, при вводе которых программа печатает сначала 3, а потом 8.

DIM x, L, M as INTEGER

INPUT x

L=0

M=0

WHILE x>0

L=L+1

IF x MOD 2 =0 THEN

M = M + x MOD 10

x=x10

END IF

LOOP

PRINT L, M

800

№2. Ниже записана программа, которая получив на вход x, печатает два числа L и M. Укажите наибольшее из таких чисел x, при вводе которых программа печатает сначала 3, а затем 10.

DIM x, L, M as INTEGER

INPUT x

L=0

M=0

WHILE x>0

L=L+1

IF (M<x) AND (x MOD 2 =1) THEN

M = (x MOD 10) *2

x=x10

END IF

LOOP

PRINT L, M

959

Share this post


Link to post
Share on other sites
Guest ivany4   
Guest ivany4

цикл выполняется [b]только раз[/b], сколько цифр в десятичной записи введенного числа


поправьте : должно быть столько раз

Share this post


Link to post
Share on other sites

Создайте учётную запись или войдите для комментирования

Вы должны быть пользователем, чтобы оставить комментарий

Создать учётную запись

Зарегистрируйтесь для создания учётной записи. Это просто!

Зарегистрировать учётную запись

Войти

Уже зарегистрированы? Войдите здесь.

Войти сейчас


  • Сейчас на странице   0 пользователей

    Нет пользователей, просматривающих эту страницу