if (x >= 0) and (x <= pi/2) and
(y <= 1) and (y >= sin(x)) then
write('принадлежит')
else write('не принадлежит');
End.
здесь использовано сложное условие, в котором 4 отношения связаны операциями and («И», требуется одновременное выполнение всех условий)
Возможные проблемы:
· как правило, в этой задаче требуется использовать знания из курса математики (решение уравнений, графики функций, область допустимых значений, составление уравнений прямой по приведенному графику)
· как показывает анализ опубликованных задач этого типа, нужно уметь, прежде всего, разбираться в серии вложенных условных операторов в полной и неполной форме
· неправильная «лесенка» в записи сбивает с толку и подталкивает к неверному решению; чтобы разобраться в программе, лучше на черновике построить блок-схему алгоритма и правильную «лесенку»
· чтобы не запутаться, к какому оператору относится else, используйте следующее правило:
o если перед else нет слова end, нужно искать ближайший сверху условный оператор if
o если перед else стоит end (конец блока), нужно искать парный ему begin (начало блока) и соответствующий условный оператор if... then begin
· проверяйте, все ли необходимые условия учтены в программе, это особенно актуально для немонотонных функций типа синуса или косинуса (немонотонные функции на некоторых участках возрастают при увеличении аргумента, а на некоторых – убывают); например, в этой задаче можно пропустить необходимость выполнения условия
· не перепутайте, где нужно использовать операцию and («И»), а где –or («ИЛИ»)
· нужно внимательно проверять, всегда ли программа выдает сообщение, если заданное условие не выполняется
· часто бывает полезно нарисовать блок-схему алгоритма, которая позволяет увидеть ход выполнения программы при всех возможных вариантах
· проверяйте, включает ли заданная область свои границы; если включает – в отношениях будут нестрогие неравенства (<=, >=), если не включает – строгие (<, >)
· при оценке работы можно (при абсолютно правильном решении) потерять баллы из-за синтаксических ошибок в программе (скобки, точки с запятой, неправильное написание оператора и т.п.)
|
За что снимают баллы:
· неправильно определены входные данные, при которых исходная программа работает неверно
· исправлены не все ошибки в программе, например, легко «просмотреть», что необходимо еще условие
· программа работает правильно в большем количестве случаев, чем исходная, но не для всех возможных исходных данных
· перепутаны знаки < и >, логические операции or и and
· неверно расставлены операторные скобки begin-end
· синтаксические ошибки (знаки пунктуации – запятые, точки, точки с запятой; неверное написание ключевых слов); чтобы получить 3 балла, нужно при абсолютно правильном решении сделать не более одной синтаксической ошибки; на 2 балла – до двух ошибок, на 1 балл – до трех ошибок
|
C2 (высокий уровень, время – 30 мин)
Тема: Обработка массива (написать программу из 10-15 строк).
Что нужно знать:
· для обращения к элементу массива используют квадратные скобки, запись A[i] обозначает элемент массива A с номером (индексом) i
· для обработки всех элементов массива используется цикл вида[***]
for i:=1 to N do begin
{ что-то делаем с элементом A[i] }
End;
переменная i обозначает номер текущего элемента массива, она меняется от 1 до N с шагом 1, то есть мы «проходим» последовательно все элементы
· если матрица имеет имя A, то обращение A[i,k] обозначает элемент, расположенный на пересечении строки i и столбца k
· каждая строка матрицы – это обычный (одномерный, линейный) массив; для того, чтобы обработать строку i в матрице из M столбцов, нужно использовать цикл, в котором меняется номер столбца k:
for k:=1 to M do begin
{ что-то делаем с элементом A[i,k] }
End;
· каждый столбец матрицы – это обычный (одномерный, линейный) массив; для того, чтобы обработать столбец k в матрице из N строк, нужно использовать цикл, в котором изменяется номер строки i:
for i:=1 to N do begin
{ что-то делаем с элементом A[i,k] }
End;
Пример задания:
Дан целочисленный массив из 20 элементов. Элементы массива могут принимать целые значения от 0 до 1000. Опишите на русском языке или на одном из языков программирования алгоритм, позволяющий найти и вывести минимальное значение среди элементов массива, которые имеют чётное значение и не делятся на три. Гарантируется, что в исходном массиве есть хотя бы один элемент, значение которого чётно и не кратно трем.
Исходные данные объявлены так, как показано ниже. Запрещается использовать переменные, не описанные ниже, но использовать все описанные переменные не обязательно.
Естественный язык: