«По следам ЕГЭ-2011»: сложные задачи О.Б. Богомолова, Д.Ю. Усенков РИСУЮЩАЯ «ЧЕРЕПАШКА» Исполнитель «Черепашка ЛОГО» «Виртуальный лист бумаги» Y Команды: (0,0) перемещение поднять / опустить перо X РИСУЮЩАЯ «ЧЕРЕПАШКА» Составлена программа для исполнителя: алг чертеж нач вещ U, R, D цел I, N U = 0 R = 1 N = 50 D = 2 * PI / N поднять перо перейти в точку (____________) опустить перо нц для I от 1 до N U = U + D перейти в точку (____________) кц кон ? ? Что должно быть записано на месте пропусков, чтобы нарисовать линию, похожую на окружность? 1) R, R 2) R * R, U * U 3) R * cos(U), R * sin (U) 4) R * sin(D), R * cos(D) РИСУЮЩАЯ «ЧЕРЕПАШКА» Решение Начальное значение переменной U алг чертеж нач вещ U, R, D цел I, N Переменная I нигде больше Вычисление угла, не U = 0 используется. N-й доле соответствующего R = 1 Значит, этотокружности цикл используется только N = 50 для отсчета шагов D = 2 * PI / N отрисовки окружности поднять перо На каждом шаге цикла перейти в точку (____________) значение угла U опустить перо увеличивается на шаг D нц для I от 1 до N U = U + D перейти в точку (____________) кц кон РИСУЮЩАЯ «ЧЕРЕПАШКА» Решение алг чертеж Тогда эти команды – нач выход Черепашки из точки (0, 0) вещ U, R, D в точку начала рисования цел I, N окружности (угол U = 0) U = 0 R = 1 N = 50 D = 2 * PI / N поднять перо В цикле отрисовывается отрезок, перейти в точку (____________) примерно соответствующий опустить перо очередной дуге окружности нц для I от 1 до N U = U + D перейти в точку (____________) кц кон РИСУЮЩАЯ «ЧЕРЕПАШКА» Решение Вспоминаем геометрию… Y R cos(U) ? R U (0,0) R sin(U) ? X Координата X: R * cos(U) Координата Y: R * sin(U) РИСУЮЩАЯ «ЧЕРЕПАШКА» Решение Вспоминаем геометрию… Y R cos(U) R sin(U) R U (0,0) X Ответ: 3) R * cos(U), R * sin (U) МАСКИРОВАНИЕ IP-АДРЕСА По заданному IP-адресу и маске определить адрес сети. IP-адрес: 17.240.120.15 Маска: 255.255.128.0 Решение 1) IP-адрес и маску надо представить как двоичные числа. 2) Подписав их друг под другом, провести поразрядную конъюнкцию (операция «И»). Биты IP-адреса, для которых в маске записан нуль, обнуляются; остальные биты IP-адреса переписываются без изменения. МАСКИРОВАНИЕ IP-АДРЕСА Решение IP-адрес: 17.240.120.15 Маска: 255.255.128.0 & 00010001.11110000.01111000.00001111 11111111.11111111.10000000.00000000 00010001 11110000 0000000 0 00000000 Ответ: 17.240.0.0 ПРИБАВЛЕНИЕ НУЛЕЙ Имеется некоторое число, записанное в семиричной системе счисления. К нему справа дописали три нуля. Во сколько раз увеличилось исходное число в результате этой операции? Решение Дописывание нулей в десятичной системе счисления: Дописывание нулей в двоичной системе счисления: Было Стало Было Стало 12345 123450 111 (= 7) 1110 (=14) 5432 543200 1010 (= 10) 101000 (= 40) 135 135000 1011 (= 11) 1011000 (= 88) Правило : дописывание к числу справа каждого очередного нуля при дописывании к числу, записанному в семиричной системе Ответ: соответствует этого это числа значение основания счисления, умножению трех нулей справа числонаувеличится системы в 73 счисления. = 343 раза. РАСПЛЕТАЕМ ЦЕПОЧКИ Из цифр формируются цепочки (строки) по следующему правилу: • первая строка состоит из одной цифры 1; • вторая строка состоит из двух цифр – 23; • далее любая цепочка с номером n составляется из двух цепочек – сначала переписывается цепочка с номером (n – 2), а потом к ней дописывается цепочка с номером (n – 1). Вот первые несколько таких строк: (1) 1 (2) 23 (3) 123 (4) 23123 … Сколько нечетных и сколько четных цифр будет в строке с номером 7? РАСПЛЕТАЕМ ЦЕПОЧКИ Решение Числа Фибоначчи Распишем цепочки: № цепочки (n) Цепочка Кол-во четных цифр Кол-во нечетных цифр 1 1 0 1 2 23 1 1 3 123 1 2 4 23123 2 3 5 12323123 3 5 6 2312312323123 5 8 7 123231232312312323123 8 13 Ответ: четных чисел – 8, нечетных – 13. АНАЛИЗ СИСТЕМЫ ЛОГИЧЕСКИХ УРАВНЕНИЙ Определить, сколько различных решений имеет система уравнений: ( x1 x 2 ) ( x 2 x3 ) (x 2 x3 ) 1; ( x x ) ( x x ) (x x ) 1; 1 3 3 4 3 4 ( x1 x 4 ) ( x 4 x5 ) (x 4 x5 ) 1; x1 x5 1. Нужно указать именно количество решений системы уравнения, а не записывать сами эти решения. АНАЛИЗ СИСТЕМЫ ЛОГИЧЕСКИХ УРАВНЕНИЙ Решение Логическая операция «тождество» (эквивалентность, логическое равенство) Обозначения: ,~, Таблица истинности: A B AB 0 0 1 0 1 0 1 0 0 1 1 1 Правило: результат операции «тождество» (эквивалентность) равен 1 тогда и только тогда, когда оба операнда равны друг другу. АНАЛИЗ СИСТЕМЫ ЛОГИЧЕСКИХ УРАВНЕНИЙ Решение Анализируем отдельные уравнения, входящие в систему. ( x1 x2 ) ( x2 x3 ) (x2 x3 ) 1; ( x x ) ( x x ) (x x ) 1; 1 3 3 4 3 4 ( x1 x4 ) ( x4 x5 ) (x4 x5 ) 1; x1 x5 1. x1 x5 1 Операция «тождество»: обе переменные – x1 и x5 – должны быть равны друг другу АНАЛИЗ СИСТЕМЫ ЛОГИЧЕСКИХ УРАВНЕНИЙ Решение Анализируем остальные уравнения. ( x1 x2 ) ( x2 x3 ) (x2 x3 ) 1; ( x x ) ( x x ) (x x ) 1; 1 3 3 4 3 4 ( x1 x4 ) ( x4 x5 ) (x4 x5 ) 1; x1 x5 1. ( x1 x2 ) ( x2 x3 ) (x2 x3 ) 1 Операция «ИЛИ»: достаточно, чтобы был равен 1 хотя бы один операнд. ( x1 x2 ) 1 x1 = 0, x2 = 0 или x1 = 1, x2 = 1 ( x2 x3 ) 1 x2 = 1, x3 = 1 (x2 x3 ) 1 x2 = 0, x3 = 0 АНАЛИЗ СИСТЕМЫ ЛОГИЧЕСКИХ УРАВНЕНИЙ Решение Возможные комбинации значений переменных (x1, x2, x3): ( x1 x2 ) ( x2 x3 ) (x2 x3 ) 1 (0 0 0), (0 1 1), (0 0 0), (0 0 1), (1 1 1) (1 0 0) (1 1 0), Если истинна вторая часть уравнения, значения остальных не важны Если истинна третья часть уравнения, значения остальных не важны (1 1 1) Если истинна первая часть уравнения, значения остальных не важны Итого – 6 различных вариантов (x1, x2, x3): (0 0 0), (0 0 1), (0 1 1), (1 1 0), (1 0 0), (1 1 1). АНАЛИЗ СИСТЕМЫ ЛОГИЧЕСКИХ УРАВНЕНИЙ Решение Анализируем второе уравнение. ( x1 x2 ) ( x2 x3 ) (x2 x3 ) 1; ( x x ) ( x x ) (x x ) 1; 1 3 3 4 3 4 ( x1 x4 ) ( x4 x5 ) (x4 x5 ) 1; x1 x5 1. ( x1 x3 ) ( x3 x4 ) (x3 x4 ) 1 Операция «ИЛИ»: достаточно, чтобы был равен 1 хотя бы один операнд. ( x1 x3 ) 1 x1 = 0, x3 = 0 или x1 = 1, x3 = 1 ( x3 x4 ) 1 x3 = 1, x4 = 1 (x3 x4 ) 1 x3 = 0, x4 = 0 АНАЛИЗ СИСТЕМЫ ЛОГИЧЕСКИХ УРАВНЕНИЙ Решение Возможные комбинации значений переменных (x1, x3, x4): ( x1 x3 ) ( x3 x4 ) (x3 x4 ) 1 (0 0 0), (0 1 1), (0 0 0), (0 0 1), (1 1 1) (1 0 0) (1 1 0), Если истинна вторая часть уравнения, значения остальных не важны Если истинна третья часть уравнения, значения остальных не важны (1 1 1) Если истинна первая часть уравнения, значения остальных не важны Итого – тоже 6 различных вариантов (x1, x3, x4): (0 0 0), (0 0 1), (0 1 1), (1 1 0), (1 0 0), (1 1 1). АНАЛИЗ СИСТЕМЫ ЛОГИЧЕСКИХ УРАВНЕНИЙ Решение Анализируем третье уравнение. ( x1 x2 ) ( x2 x3 ) (x2 x3 ) 1; ( x x ) ( x x ) (x x ) 1; 1 3 3 4 3 4 ( x1 x4 ) ( x4 x5 ) (x4 x5 ) 1; x1 x5 1. ( x1 x4 ) ( x4 x5 ) (x4 x5 ) 1 Операция «ИЛИ»: достаточно, чтобы был равен 1 хотя бы один операнд. ( x1 x4 ) 1 x1 = 0, x4 = 0 или x1 = 1, x4 = 1 ( x4 x5 ) 1 x4 = 1, x5 = 1 (x4 x5 ) 1 x4 = 0, x5 = 0 АНАЛИЗ СИСТЕМЫ ЛОГИЧЕСКИХ УРАВНЕНИЙ Решение Возможные комбинации значений переменных (x1, x4, x5): ( x1 x4 ) ( x4 x5 ) (x4 x5 ) 1 (0 Все 0 0), (0 0 0), три первых – типовые. (0 1уравнения 1), (1 0 0) (0 0 1), (1 1 1) Поэтому тройки значений соответствующих Если истинна третья (1 1 0), истинна втораявсегда переменных вЕсли них будут одни и те же, часть уравнения, часть уравнения, (1 1 1) значения остальных не значения не сколько бы ни остальных было таких уравнений! важны Если истинна первая часть уравнения, значения остальных не важны важны Итого – еще 6 различных вариантов (x1, x4, x5): (0 0 0), (0 0 1), (0 1 1), (1 1 0), (1 0 0), (1 1 1). АНАЛИЗ СИСТЕМЫ ЛОГИЧЕСКИХ УРАВНЕНИЙ Решение Сводим воедино результаты, полученные для каждого уравнения в отдельности. ( x1 x2 ) ( x2 x3 ) (x2 x3 ) 1; ( x x ) ( x x ) (x x ) 1; 1 3 3 4 3 4 ( x1 x4 ) ( x4 x5 ) (x4 x5 ) 1; x1 x5 1. Объединение уравнений в систему означает, что все они должны быть истинными одновременно. = И (&) АНАЛИЗ СИСТЕМЫ ЛОГИЧЕСКИХ УРАВНЕНИЙ Решение ( x1 x2 ) ( x2 x3 ) (x2 x3 ) 1; ( x x ) ( x x ) (x x ) 1; 1 3 3 4 3 4 ( x1 x4 ) ( x4 x5 ) (x4 x5 ) 1; x1 x5 1. Тогда в Впредпоследнем этих вариантахуравнении x1 = x34, нужно тогда уравнениивxнужно нужно оставить оставить которых x 1 = x 5, тогда во в только первом уравнении оставить Ввтором этих варианты, вариантах 1 = x 2. т.е. (x1варианты, , x4, x5) =в(0 0 0) и (1 только которых x1 1=1). x34, Тогда в результате получается, т.е. (x1, x23, x34) = (0 0 0) и (1 1 1). что все переменные во всех уравнениях должны быть равными: x1 = x2 = x3 = x4 = x5 Ответ: (x1, x2, x3, x4, x5) = (0 0 0 0 0) или (1 1 1 1 1), т.е. возможно два решения данной системы уравнений. ОБРАБОТКА МАССИВА Дан массив из 30 целых чисел от -10 до 10. Требуется найти максимум среди элементов массива, которые являются простыми числами. (Один такой элемент в массиве точно есть.) program simply_min; Решение const n=10; var mas : array[1..n] of integer; i, минимум min : integer; Как ищется простой в массиве: begin for i:=1 to минимума n do 1) в качестве предполагаемого запоминаем в отдельной read(mas[i]); переменной (min ) значение самого первого элемента; min:=mas[1]; 2) запускаем цикл просмотра элементов массива со второго for i:=2 to n do до последнего; if mas[i]<min then min:=mas[i]; 3) на каждом шаге цикла при помощи =условного оператора проверяем: writeln('Минимум ', min); если текущий элемент окажется меньше предполагаемого минимума, end. то перезапоминаем этот текущий элемент в переменной min ; 4) по завершении цикла в переменной min окажется искомый минимум. ОБРАБОТКА МАССИВА Решение program simply_max; Как ищется простой constмаксимум n=10; в массиве: var mas : array[1..n] of integer; 1) в качестве предполагаемого i, max : максимума integer;запоминаем в отдельной переменной (max ) значение самого первого элемента; begin for i:=1 элементов to n do массива со второго 2) запускаем цикл просмотра read(mas[i]); до последнего; 3) на каждом шаге max:=mas[1]; цикла при помощи условного оператора проверяем: for to nбольше do если текущий элементi:=2 окажется предполагаемого максимума, if mas[i]>max then то перезапоминаем этот текущий элемент вmax:=mas[i]; переменной max ; writeln('Максимум = ', max); 4) по завершении цикла в переменной max окажется искомый максимум. end. ОБРАБОТКА МАССИВА Решение Как изменить программу, чтобы искать минимальный элемент, program min_nechet; обладающий определенным признаком (например, нечетный)? const n=10; var mas : array[1..n] of integer; 1) в условном операторе надо дописать (через логическую {элементы = от -10функцию до 10 } and) условие проверки соответствия текущего элемента i, min : integer; заданному beginпризнаку; for i:=1 to n do 2) так как самый первый элемент может не соответствовать заданному read(mas[i]); признаку, лучше (если известен возможный диапазон значений min:=11; элементов предполагаемого минимума forмассива) i:=1 toв качестве n do задать константу, заведомо элемента массива; if (mas[i] mod большую 2 <> 0) любого and (mas[i]<min) цикл просмотра элементов нужно вести с первого до последнего. then min:=mas[i]; writeln('Минимум среди нечетных = ', min); end. ОБРАБОТКА МАССИВА Решение Аналогично ищется максимальный элемент, обладающий program признаком. max_nechet; определенным const n=10; var mas : array[1..n] of integer; 1) в условном операторе надо дописать (через логическую функцию {элементы = от -10 до 10 } and) условие проверки соответствия текущего элемента i, max : integer; заданному признаку; begin for i:=1 to n do 2) так как самый первый элемент может не соответствовать заданному read(mas[i]); признаку, лучше (если известен возможный диапазон значений max:=-11; элементов массива) в качестве предполагаемого максимума for i:=1 to n do задать константу, заведомо меньшую любого элемента массива; if (mas[i] mod 2 <> 0) and (mas[i]>max) цикл просмотра элементов нужно вести с первого до последнего. then max:=mas[i]; writeln('Максимум среди нечетных = ', max); end. ОБРАБОТКА МАССИВА Решение Как найти минимальный элемент, являющийся простым числом? program min_prost; const n=30; var mas : array[1..n] of integer; {элементы = число, от -10 до 10 } Простое число – натуральное min ровно : integer; которое i, имеет два различных натуральных делителя: begin единицу и самого себя. for i:=1 to n do read(mas[i]); min:=11; i:=1 to n do чисел немного: 2, 3, 5 и 7. В заданномfor диапазоне простых if ((mas[i]=2) or (mas[i]=3) or (mas[i]=5) (mas[i]=7)) and путем (mas[i]<min) Поэтому достаточноor реализовать проверку сравнения элемента then min:=mas[i]; массива с каждым из этих значений (логическая операция ИЛИ). writeln('Минимум среди простых = ', min); end.