Методика решения и оценивания задач «С1», «С2» Единого Государственного Экзамена
Пример задания С1 Требовалось написать программу, которая вводит с клавиатуры координаты точки на плоскости (x, y – действительные числа) и определяет принадлежность точки заштрихованной области, включая ее границы. Программист торопился и написал программу неправильно. Вот она: INPUT x, y if y = 0 then if y >= sin(x) then print принадлежит else print не принадлежит end Последовательно выполните следующее: 1) Приведите пример таких чисел x, y, при которых программа неверно решает поставленную задачу. 2) Укажите, как нужно доработать программу, чтобы не было случаев ее неправильной работы. (Это можно сделать несколькими способами, поэтому можно указать любой способ доработки исходной программы).
Методика решения задач типа С1 1.Определим по графику набор условий, которые должны быть выполнить справа от оси y, что равносильно условию x>=0 слева от первого максимума функции; из математики мы знаем, что эта функция достигает максимума при x = pi/2, поэтому получаем второе условие x
Методика решения задач типа С1 2.Из программы видно, что не хватает одного условия x =sin(x) и x > pi/2
Методика решения задач типа С1 3.Выясним, когда программа выдает сообщение «Не принадлежит». Для этого составим блок-схему по схеме видим, что если первое условие ложно, или второе условие ложно, то программа вообще не выдает никакого сообщения, то есть, работает неправильно if y = 0 then if y >= sin(x) then print принадлежит else print не принадлежит
Методика решения задач типа С1 4.Исправим программу, чтобы она работала корректно данное решение является правильным, но не совсем элегантным, поскольку для такой простой программы выводит 4 раза надпись «Не принадлежит». if x = sin(x) then print принадлежит else print не принадлежит
Методика решения задач типа С1 5.Более красивое решение для этой задачи состоит в использовании одного сложного условия, построенного с помощью логической операции and. Input x,y If x >= 0 and x
Замечания по оцениванию С1 В качестве примера входных данных можно приводить не только число (или числа), но и множество, интервал, неравенство. Если в первой части задания приводится несколько чисел, причем среди них есть как правильные, так и НЕ правильные, то результат не засчитывается.
Задание С2 Тема: Обработка массива Цель задания: Умение написать короткую (10-15 строк) простую программу обработки массива на языке программирования или записать алгоритм на естественном языке. Время на решение: 30 минут.
Пример задания С2 Опишите на русском языке или одном из языков программирования алгоритм подсчета максимального количества подряд идущих совпадающих элементов в целочисленном массиве длины 30.
Методика решения задач типа С2 1.Разобраться в сути задачи, понять ее и нарисовать пример массива
Методика решения задач типа С2 2.Сформулировать для себя (может быть пока не полный и не точный) алгоритм, например такой: «Пройти весь массив, подсчитывая для каждого элемента длину цепочки подряд идущих одинаковых чисел, если эта длина больше текущей, то запомнить ее» Для этого понадобятся как минимум две переменные: k – текущая длина цепочки повторений kMax – максимальная длина цепочки K kMax
Методика решения задач типа С2 3.Сформулируем окончательный алгоритм на русском языке: «Выделим две вспомогательные переменные, k и kMax, и запишем в каждую из них по единице. В цикле рассматриваем все элементы массива со второго до последнего, если очередной элемент равен предыдущему, увеличиваем k; если k > kMax, записываем в kMax значение k. В конце цикла в kMax окажется требуемое значение».
Методика решения задач типа С2 4.Сформулируем окончательный алгоритм на Бейсике: DIM A(30) K= 1 kMax = 1 For i=2 to 30 If A(i) = A(i-1) then k = k + 1 Else k = 1 End if If k > kMax then kMax = k End if Next i Print kMax=kMax END
Возможные проблемы в задачах С2 проверьте, что будет записано в переменные до начала цикла (определены ли их начальные значения) проверяйте, не выйдет ли индекс за границу массива в начале или в конце цикла будьте внимательны с «крайними» случаями, например, нужно обязательно убедиться, что программа работает, когда интересующая нас цепочка стоит в самом начале или в самом конце массива
Критерии оценивания С2 Задание С2 относится к высокому уровню сложности. За решение этого задания можно получить два балла. По содержанию проверяет умение формально описывать алгоритм на естественном языке или на языке программирования.
Задача С2_1 Опишите на русском языке или одном из языков программирования алгоритм подсчета суммы произведений последовательных пар элементов в целочисленном массиве из 30 элементов. Это значит, что нужно рассчитать сумму произведений первого и второго, третьего и четвертого, пятого и шестого и т.д.).
Методика решения Сформулировать для себя (может быть пока не полный и не точный) алгоритм, например такой: «Пройти весь массив, подсчитывая произведение элементов очередной пары и суммируя их» Для этого понадобится переменная: SumProd – сумма произведений последовательных пар элементов SumProd SumProd=89
Алгоритм Введем переменную SumProd, в которую будем заносить сумму произведений последовательных пар элементов в просмотренной части массива, и присвоим ей начальное значение 0. В цикле до конца массива: считаем произведение элементов очередной пары и прибавляем его к SumProd. По окончании цикла переменная SumProd содержит сумму произведений последовательных пар элементов массива.
Сформулируем окончательный алгоритм на Бейсике: N=30 DIM A(N) For i=1 to N Input A(i) Next i SumProd =0 For i=1 to N/2 SumProd= SumProd+A(2*i-1)*A(2*i) Next i Print SumProd=; SumProd END
Задача С2_2 Опишите на русском языке или одном из языков программирования алгоритм поиска номера первого из двух последовательных элементов в целочисленном массиве из 30 элементов, произведение которых максимально (если таких пар несколько, то можно выбрать любую из них).
Методика решения Сформулировать для себя (может быть пока не полный и не точный) алгоритм, например такой: «Пройти весь массив, подсчитывая произведение элементов очередной пары. Если это произведение больше текущего, то запомнить номер первого элемента этой пары.» Для этого понадобятся 2 переменные: MaxProd – максимальное произведение двух последовательных элементов; MaxNum – номер первого элемента в этой паре. MaxNum = MaxNum 1357 MaxProd
Алгоритм 1.Введем целочисленную переменную MaxProd, в которую будем заносить максимальное произведение двух последовательных элементов в просмотренной части массива и переменную MaxNum, в которую будем заносить номер первого элемента в этой паре. 2.Присвоим начальное значение MaxProd равное произведению первых двух элементов, переменной MaxNum номер В цикле до конца массива: проверяем превосходит ли произведение элементов очередной пары найденный максимум. Если превосходит, то заносим в переменную MaxProd новое произведение, а в переменную MaxNum – номер первого элемента этой пары. 4.По окончании цикла осуществляем вывод значения MaxNum.
Сформулируем окончательный алгоритм на Бейсике: N=30 DIM A(N) For i=1 to N Input A(i) Next i MaxNum =1 MaxProd=A(1)*A(2) For i=1 to N-1 IF A(i)*A(i+1)>MaxProd THEN MaxNum=I MaxProd=A(i)*A(i+1) End If Next i Print MaxNum=; MaxNum END
Задача С2_3 Опишите на русском языке или одном из языков программирования алгоритм поиска номера первого из двух последовательных элементов в целочисленном массиве из 30 элементов, сумма которых максимальна (если таких пар несколько, то можно выбрать любую из них).
Методика решения Сформулировать для себя (может быть пока не полный и не точный) алгоритм, например такой: «Пройти весь массив, подсчитывая сумму элементов очередной пары. Если эта сумма больше текущей, то запомнить номер первого элемента этой пары.» Для этого понадобятся 2 переменные: MaxSum – максимальная сумма двух последовательных элементов; MaxNum – номер первого элемента в этой паре. MaxSum = MaxNum 1357 MaxSum
Алгоритм 1.Введем целочисленную переменную MaxSum, в которую будем заносить максимальную сумму двух последовательных элементов в просмотренной части массива и переменную MaxNum, в которую будем заносить номер первого элемента в этой паре. 2.Присвоим начальное значение MaxSum, равное сумме первых двух элементов, а переменной MaxNum номер 1. 3.В цикле до конца массива: проверяем превосходит ли сумма элементов очередной пары найденный максимум. Если превосходит, то заносим в переменную MaxSum новую сумму, а в переменную MaxNum – номер первого элемента пары. 4.По окончании цикла осуществляем вывод значения MaxNum.
Сформулируем окончательный алгоритм на Бейсике: N=30 DIM A(N) For i=1 to N Input A(i) Next i MaxNum =1 MaxSum=A(1)+A(2) For i=1 to N-1 IF A(i)+A(i+1)>MaxSum THEN MaxNum=i MaxSum=A(i)+A(i+1) End If Next i Print MaxNum=; MaxNum END