
25 БАЛЛОВ!! Вася написал такую функцию:var s: integer;begin s := 1; while n <> 0 do begin s
:= s * (n mod 10); n := n div 10; end; f := s;end;А затем вычислил значение f(512), оно оказалось равным 10. Затем пришла Маша и заменила в его коде в двух строках число 10 на число 2. Чему теперь будет равно значение f(512)? В ответе запишите одно целое число.

Ответы на вопрос

Ответ:
0
Объяснение:
Данная программа находит произведение цифр числа:
- пока n не равняется 0 делаем:
- умножаем s на остаток от деления n на 10,
- присваиваем n новое значение: целая часть от деления n на 10.
f(512) = 10. Проверяем: 5*1*2=10, всё верно.
Но затем, Маша поменяла 10 на 2, получается:
- пока n не равняется 0 делаем:
- умножаем s на остаток от деления n на 2,
- присваиваем n новое значение: целая часть от деления n на 2.
512 это 2^9, то есть 2*2*2*2*2*2*2*2*2, остаток от деления всегда будет 0, и даже если бы и был другой, достаточно одного, чтобы превратить s в вечный 0. Так что результатом будет 0.
Вот, на всякий случай:




Давайте разберемся с кодом и проанализируем, что происходит.
Исходный код функции Васи:
pascalvar s: integer; begin s := 1; while n <> 0 do begin s := s * (n mod 10); n := n div 10; end; f := s; end;
Известно, что при вычислении f(512) получается значение 10.
Теперь Маша заменила число 10 на число 2 в двух строках:
pascalvar s: integer; begin s := 1; while n <> 0 do begin s := s * (n mod 2); // здесь замена n := n div 2; // и здесь замена end; f := s; end;
Давайте теперь выясним, как будет работать измененная функция для значения n = 512.
Первая итерация:
- s = 1 * (512 mod 2) = 1 * 0 = 0
- n = 512 div 2 = 256
Вторая итерация:
- s = 0 * (256 mod 2) = 0 * 0 = 0
- n = 256 div 2 = 128
Третья итерация:
- s = 0 * (128 mod 2) = 0 * 0 = 0
- n = 128 div 2 = 64
Четвертая итерация:
- s = 0 * (64 mod 2) = 0 * 0 = 0
- n = 64 div 2 = 32
Пятая итерация:
- s = 0 * (32 mod 2) = 0 * 0 = 0
- n = 32 div 2 = 16
Шестая итерация:
- s = 0 * (16 mod 2) = 0 * 0 = 0
- n = 16 div 2 = 8
Седьмая итерация:
- s = 0 * (8 mod 2) = 0 * 0 = 0
- n = 8 div 2 = 4
Восьмая итерация:
- s = 0 * (4 mod 2) = 0 * 0 = 0
- n = 4 div 2 = 2
Девятая итерация:
- s = 0 * (2 mod 2) = 0 * 0 = 0
- n = 2 div 2 = 1
Десятая итерация:
- s = 0 * (1 mod 2) = 0 * 1 = 0
- n = 1 div 2 = 0
После завершения цикла, s остается равным 0, так как он никогда не был изменен. Таким образом, значение f(512) при замене числа 10 на число 2 будет равно 0.


Похожие вопросы
Топ вопросов за вчера в категории Информатика







Последние заданные вопросы в категории Информатика
-
Математика
-
Литература
-
Алгебра
-
Русский язык
-
Геометрия
-
Английский язык
-
Химия
-
Физика
-
Биология
-
Другие предметы
-
История
-
Обществознание
-
Окружающий мир
-
География
-
Українська мова
-
Информатика
-
Українська література
-
Қазақ тiлi
-
Экономика
-
Музыка
-
Право
-
Беларуская мова
-
Французский язык
-
Немецкий язык
-
МХК
-
ОБЖ
-
Психология
-
Физкультура и спорт
-
Астрономия
-
Кыргыз тили
-
Оʻzbek tili