Решение задания В 8 ( ЕГЭ -2014) ( анализ численного алгоритма ) Вишневская М. П., МАОУ « Гимназия 3» 24 марта 2014 г., г. Саратов
Что нужно знать : операции целочисленного деления (div) и взятия остатка (mod); стандартные вычислительные алгоритмы, которые используют эти операции; как работают операторы присваивания, циклы и условные операторы в языке программирования.
Алгоритм разложения натурального числа на цифры readln (n); while n>0 do begin b:=n mod 10; write (b, ); n:=n div 10; end. N>0 Удаление младшей цифры Младшая цифра Вывод цифры Конец
Алгоритм перевода целых чисел из 10- ой системы счисления в другие a b a mod b a div b
Алгоритм поиска делителей натурального числа ( поиск простых чисел ) readln (n); for i:=2 to n div 2 do if n mod i = 0 then write (i, ); end readln (n); k:=2; for i:=2 to n div 2 do if n mod i = 0 then k:=k+1; If k=2 then write (n - простое ) else writeln (n - сложное); end.
Алгоритм поиска НОД ( НОК ) двух натуральных чисел readln (a); readln (b); while (a>0) and (b>0) do if a>b then a:=a mod b else b:=b mod a; writeln (a+b); end readln (a); readln (b); nok:=a*b; while (a>0) and (b>0) do if a>b then a:=a mod b else b:=b mod a; nod:= a+b; nok:=nok/nod; writeln (nod,,nok); end.
Пример 1 var x, L, M: integer; begin readln(x); L:=0; M:=0; while x > 0 do begin L:= L + 1; M:= M + x mod 10; x:= x div 10; end; writeln(L); write(M); end. Приводится текст программы. Получив на вход число Х, программа печатает два числа L и M. Укажите наибольшее из таких чисел Х, при вводе которых программа сначала выведет 3, а затем 7.
Пример 1 var x, L, M: integer; begin readln(x); L:=0; M:=0; while x > 0 do begin L:= L + 1; количество цифр в числе - 3 M:= M + x mod 10; сумма цифр числа - 7 x:= x div 10; end; writeln (L); write (M); end
Пример 2 ( аналог Примера 1, с критерием отбора ) 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. Укажите наибольшее из таких чисел Х, при вводе которых программа сначала выведет 3, а затем 7.
Пример 2 ( аналог Примера 1, с критерием отбора ) var x, L, M: integer; begin readln(x); L:=0; M:=0; while x > 0 do begin L:=L+1; ; количество цифр в числе - 3 if M < (x mod 10) then begin M:=x mod 10; максимальная цифра числа - 7 end; x:= x div 10; end; writeln(L); write(M); end
Пример 3 ( перевод чисел из 10 с. с. в другую ) var x, L, M: integer; begin readln(x); L:=0; M:=1; while x > 0 do begin L:=L+1; M:= M*(x mod 8); x:= x div 8; end; writeln(L); write(M); end. Приводится текст программы. Получив на вход число Х, программа печатает два числа L и M. Укажите наибольшее из таких чисел Х, при вводе которых программа сначала выведет 3, а затем 120.
Пример 3 ( перевод чисел из 10 с. с. в другую ) var x, L, M: integer; begin readln(x); L:=0; M:=1; while x > 0 do begin L:=L+1; M:= M*(x mod 8); x:= x div 8; end; writeln(L); write(M); end. переменная x на каждом шаге цикла делится на 8 и остаток отбрасывается, L = количеству цифр введенного числа, записанного в восьмеричной системе счисления, т.е. восьмеричная запись числа содержит 3 цифры; выражение x mod 8 – это последняя цифра восьмеричной записи числа; на каждом шаге цикла переменная M умножается на эту величину, т.е. в M будет записано произведение всех цифр восьмеричной записи введенного числа
Пример 3 ( перевод чисел из 10 с. с. в другую ), где a, b и с – числа от 0 до 7 Получили = Т.к. ищем наибольшее, то берем максимальную цифру в старшем разряде
Пример 4 ( поиск делителей числа ) var N, q, i: integer; begin read(N); for i:=1 to N-1 do begin if N mod i = 0 then q:= i end; write(q) end. Укажите наименьшее из таких чисел N, при вводе которых алгоритм напечатает 17. N кратно 17 Цикл до N-1, т.е N 17 N=34 34
Пример 5 ( поиск НОД ) var x, y, z: integer; r, a, b: integer; begin readln(x, у); if у > x then begin z:= x; x:= у; у:= z; x-max, y<x end; a:= x; b:= y; b<a while b > 0 do begin r:= a mod b; a:= b; b:= r; end; writeln(a); writeln(x); write(у); end. После выполнения алгоритма было напечатано 3 числа. Первые два напечатанных числа – это числа 7 и 42. Какое наибольшее число может быть напечатано третьим? 7 = НОД(42,y) y < 42 !!!! 35
Источники информации : 1. [Электронный ресурс] 2. [Электронный ресурс] 3. Огнева М.В, Кудрина Е.В. Turbo Pascal: первые шаги. Примеры и упражнения: Учеб. пособие. – Саратов: Изд-во «Научная книга», 2008, с