Said 34 Жалоба Опубликовано: May 5, 2012 операции целочисленного деления (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. Решение:для решения задачи необходимо понять, что делает эта программаесли это не видно сразу, можно выполнить ручную прокрутку для какого-то простого числа. можно догадаться, что в результате работы программы в переменной L окажется число цифр числа, а в переменной M – наибольшая цифра, но это предположение нужно постараться доказатьнужно вспомнить (и запомнить), что для целого числа остаток от деления на 10 (x mod 10) – это последняя цифра в десятичной записи числа, а целочисленное деление (x div 10) отсекает последнюю цифру, то есть из 123 получается 12рассмотрим цикл, число шагов которого зависит от изменения переменной x: while x > 0 do begin ... x:= x div 10; { отсечение последней цифры } end; здесь оставлены только те операторы, которые влияют на значение xиз приведенного цикла видно, что на каждом шаге от десятичной записи x отсекается последняя цифра до тех пор, пока все цифры не будут отсечены, то есть x не станет равно 0; поэтому цикл выполняется столько раз, сколько цифр в десятичной записи введенного числана каждом шаге цикла переменная L увеличивается на 1: 225] L:=L+1; 25]других операторов, меняющих значение L, в программе нет; поэтому после завершения цикла в переменной L действительно находится количество цифртеперь разберемся с переменной M, которая сначала равна 0; оператор, в котором она меняется, выглядит так: if M < (x mod 10) then begin M:=x mod 10; end; учитывая, что x mod 10 – это последняя цифра десятичной записи числа, получается что если эта цифра больше, чем значение M, она записывается в переменную M;этот оператор выполняется в цикле, причем выражение x mod 10 по очереди принимает значения всех цифр исходного числа; поэтому после завершения циклам в переменной M окажется наибольшая из всех цифр, то есть наша догадка подтверждаетсяитак, по условию задачи фактически требуется найти наибольшее трехзначное число со старшей цифрой 7; очевидно, что это 777.ответ: 777.учтите в этих задачах часто просят вывести минимальное или максимальное возможное число, поэтому не удивляйтесь, если у вас получится несколько ответов. 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 Жалоба Опубликовано: May 10, 2012 цикл выполняется [b]только раз[/b], сколько цифр в десятичной записи введенного числа поправьте : должно быть столько раз 1 admin reacted to this Цитата Share this post Link to post Share on other sites