Сознательно подойти к решению задания В8 может ученик, который знаком с хотя бы одним из предложенных языком программирования на уровне умения использования циклов и знания встроенных функций для целочисленных чисел: DIV и MOD – целая часть и остаток. Главной сложностью при выполнении задания является то, что надо понять смысл алгоритма, оформленном на языке программирования, а далее по известным результатам определить исходное число. Рассмотрим примеры для языка программирования Паскаль.
Для объяснения целесообразно привести представленный ниже алгоритм, выполнив на доске трассировку преобразования переменных в программе для произвольного натурального многоразрядного числа, например, 782. Данный алгоритм позволяет подсчитать количество цифр числа:
VAR X,A,B:INTEGER;
BEGIN
READLN(X);
A:=0;
WHILE X>0 DO BEGIN
A:=A+1;
X:= X DIV 10
END;
WRITELN(A);
END.
ПРИМЕР: а=782 Ответ: 3
Далее рекомендуется рассмотреть алгоритм вычисления произведение цифр натурального многоразрядного числа, выполнив трассировку для двухразрядного и трехразрядного целых чисел. Формулировка задания: «Получив на вход число Х, эта программа печатает два числа – А и В. Найти исходное Х». Текст программы:
VAR X, A, B : INTEGER;
BEGIN
READLN(X);
A := 0; B := 1;
WHILE X > 0 DO BEGIN
A := A + 1;
B := B * (X MOD 10);
X := X DIV 10;
END;
WRITELN(A); WRITE(B);
END.
Для закрепления можно предложить определить Х, опираясь на следующие вопросы:
а) Укажите наибольшее из таких чисел x, при вводе которых алгоритм печатает сначала 2, а потом 72. Ответ: 98.
б) Укажите наименьшее из таких чисел x, при вводе которых алгоритм печатает сначала 2, а потом 72. Ответ: 89.
в) Укажите наибольшее из таких чисел x, при вводе которых алгоритм печатает сначала 3, а потом 72. Ответ: 981.
г) Укажите наименьшее из таких чисел x, при вводе которых алгоритм печатает сначала 3, а потом 72. Ответ: 189.
д) Укажите наибольшее из таких чисел x, при вводе которых алгоритм печатает сначала 3, а потом 7. Ответ: 711
е) Укажите наименьшее из таких чисел x, при вводе которых алгоритм печатает сначала 3, а потом 7. Ответ: 117.
ж) Укажите наибольшее из таких чисел x, при вводе которых алгоритм печатает сначала 3, а потом 0. Ответ: 990.
з) Укажите наименьшее из таких чисел x, при вводе которых алгоритм печатает сначала 3, а потом 0. Ответ: 100.
Затем можно рассмотреть алгоритм подсчета суммы цифр натурального числа, выполнив трассировку для двухразрядного и трехразрядного целых чисел. Формулировка задания: «Получив на вход число Х, эта программа печатает два числа – А и В. Найти исходное Х». Здесь А – количество цифр в записи числа, В – минимальная цифра. Текст программы
VAR X, A, B : INTEGER;
BEGIN
READLN(X);
A := 0; B := 1;
WHILE X > 0 DO BEGIN
A := A + 1;
B := B + (X MOD 10);
X := X DIV 10;
END;
WRITELN(A); WRITE(B);
END.
Для закрепления можно предложить определить Х, опираясь на следующие вопросы:
а) Укажите наибольшее из таких чисел x, при вводе которых алгоритм печатает сначала 2, а потом 6. Ответ: 60
б) Укажите наименьшее из таких чисел x, при вводе которых алгоритм печатает сначала 2, а потом 6. Ответ: 15.
в) Укажите наибольшее из таких чисел x, при вводе которых алгоритм печатает сначала 3, а потом 6. Ответ: 600.
г) Укажите наименьшее из таких чисел x, при вводе которых алгоритм печатает сначала 3, а потом 6. Ответ: 105.
д) Укажите наибольшее из таких чисел x, при вводе которых алгоритм печатает сначала 2, а потом 10. Ответ: 91.
е) Укажите наименьшее из таких чисел x, при вводе которых алгоритм печатает сначала 2, а потом 10. Ответ: 19.
ж) Укажите наибольшее из таких чисел x, при вводе которых алгоритм печатает сначала 3, а потом 11. Ответ: 920.
з) Укажите наименьшее из таких чисел x, при вводе которых алгоритм печатает сначала 3, а потом 11. Ответ: 119.
Следующий алгоритм находит максимальную цифру в записи числа. Формулировка задания: «Получив на вход число Х, эта программа печатает два числа А и В. Найти исходное Х». Здесь А – количество цифр в записи числа, В – максимальная цифра.
VAR X, A, M: INTEGER;
BEGIN
READLN(X);
A:=0; B:=0;
WHILE X > 0 DO BEGIN
A:=A+1;
IF B < (X MOD 10) THEN BEGIN
B:=X MOD 10;
END;
X:= X DIV 10;
END;
WRITELN(A); WRITE(B);END.
а) Укажите наибольшее из таких чисел Х, при вводе которых алгоритм печатает сначала 2, а потом 7. Ответ: 77.
б) Укажите наименьшее из таких чисел Х, при вводе которых алгоритм печатает сначала 2, а потом 7. Ответ: 17
в) Укажите наибольшее из таких чисел Х, при вводе которых алгоритм печатает сначала 3, а потом 7. Ответ: 777
г) Укажите наименьшее из таких чисел Х, при вводе которых алгоритм печатает сначала 3, а потом 7. Ответ: 107
Приведенный ниже алгоритм находит минимальную цифру в записи числа. Формулировка задания: «Получив на вход число Х, эта программа печатает два числа А и В. Найти исходное Х». Здесь А – количество цифр в записи числа, В – минимальная цифра.
VAR X, A, M: INTEGER;
BEGIN
READLN(X);
A:=0; B:=10;
WHILE X > 0 DO BEGIN
A:=A+1;
IF B > (X MOD 10) THEN B:=X MOD 10;
X:= X DIV 10;
END;
WRITELN(A); WRITE(B);
END.
а) Укажите наибольшее из таких чисел Х, при вводе которых алгоритм печатает сначала 2, а потом 7. Ответ: 97
б) Укажите наименьшее из таких чисел Х, при вводе которых алгоритм печатает сначала 2, а потом 7. Ответ: 77.
в) Укажите наибольшее из таких чисел Х, при вводе которых алгоритм печатает сначала 3, а потом 7. Ответ: 997.
г) Укажите наименьшее из таких чисел Х, при вводе которых алгоритм печатает сначала 3, а потом 7. Ответ: 777.
д) Укажите наибольшее из таких чисел Х, при вводе которых алгоритм печатает сначала 2, а потом 0. Ответ: 90.
е) Укажите наименьшее из таких чисел Х, при вводе которых алгоритм печатает сначала 3, а потом 0. Ответ: 100.
И, наконец, можно предложить поработать с алгоритмами, которые подсчитывают количества чисел по условиям. Паскаль воспринимает ноль как четное число. Потому в данной программе подсчитывается количество четных цифр, учитывая 0:
VAR X, A, B : INTEGER;
BEGIN
READLN(X);
A := 0; B := 0;
WHILE X > 0 DO BEGIN
А:=А+1;
IF X MOD 2=0 THEN B:=B+1;
X := X DIV 10;
END;
WRITE(A); WRITELN(B);
END.
Рекомендуемые вопросы:
а) Укажите наибольшее из таких чисел Х, при вводе которых алгоритм печатает сначала 2, потом 2. Ответ: 88
б) Укажите наименьшее из таких чисел Х, при вводе которых алгоритм печатает сначала 2, потом 2. Ответ: 20
в) Укажите наибольшее из таких чисел Х, при вводе которых алгоритм печатает сначала 5, потом 2. Ответ: 99988
г) Укажите наименьшее из таких чисел Х, при вводе которых алгоритм печатает сначала 5, потом 2. Ответ: 11100
д) Укажите наибольшее из таких чисел Х, при вводе которых алгоритм печатает сначала 2, потом 0. Ответ: 99
е) Укажите наименьшее из таких чисел Х, при вводе которых алгоритм печатает сначала 2, потом 0. Ответ: 11
И в последней программе подсчитывается количество нечетных цифр в записи натурального числа. Ноль не считается нечетным числом в Паскале.
VAR X, A, B : INTEGER;
BEGIN
READLN(X);
A := 0; B := 0;
WHILE X > 0 DO BEGIN
A:=A+1;
IF X MOD 2<>0 THEN B:=B+1;
X := X DIV 10;
END;
WRITE(A); WRITELN(B);
END.
Рекомендуемые вопросы:
а) Укажите наибольшее из таких чисел Х, при вводе которых алгоритм печатает сначала 2, потом 2. Ответ: 99
б) Укажите наименьшее из таких чисел Х, при вводе которых алгоритм печатает сначала 2, потом 2. Ответ: 11
в) Укажите наибольшее из таких чисел Х, при вводе которых алгоритм печатает сначала 4, потом 2. Ответ: 9988
г) Укажите наименьшее из таких чисел Х, при вводе которых алгоритм печатает сначала 4, потом 2. Ответ: 1100
д) Укажите наибольшее из таких чисел Х, при вводе которых алгоритм печатает сначала 2, потом 0. Ответ: 88
е) Укажите наименьшее из таких чисел Х, при вводе которых алгоритм печатает сначала 2, потом 0. Ответ: 20