ЕДИННЫЙ ГОСУДАРСТВЕННЫЙ ЭКЗАМЕН Часть С демо-варианта 2009
С1 Требовалось написать программу, которая вводит с клавиатуры координаты точки на плоскости (x,y – действительные числа) и определяет принадлежность точки заштрихованной области, включая ее границы. Программист торопился и написал программу неправильно. Последовательно выполните следующее: 1) Приведите пример таких чисел x, y, при которых программа неверно решает поставленную задачу. 2) Укажите, как нужно доработать программу, чтобы не было случаев ее неправильной работы.
С1 Решение ПРОГРАММА НА ПАСКАЛЕ ПРОГРАММА НА БЕЙСИКЕ ПРОГРАММА НА СИ var x,y: real; begin readln(x,y); if y=0 then if y>=sin(x) then write('принадлежит') else write('не принадлежит') end. INPUT x, y IF y=0 THEN IF y>=SIN(x) THEN PRINT "принадлежит" ELSE PRINT "не принадлежит" ENDIF END void main(void) { float x,y; scanf("%f%f",&x,&y); if (y=0) if (y>=sin(x)) printf("принадлежит "); else printf("не принадлежит"); }
С2 Опишите на русском языке или одном из языков программирования алгоритм получения из заданного целочисленного массива размером 30 элементов другого массива, который будет содержать модули значений элементов первого массива (не используя специальной функции, вычисляющей модуль числа). Решение
С3 Два игрока играют в следующую игру. На координатной плоскости стоит фишка. Игроки ходят по очереди. В начале игры фишка находится в точке с координатами (5,2). Ход состоит в том, что игрок перемещает фишку из точки с координатами (x,y) в одну из трех точек: или в точку с координатами (x+3,y), или в точку с координатами (x,y+3), или в точку с координатами (x,y+4). Выигрывает игрок, после хода которого расстояние по прямой от фишки до точки с координатами (0,0) не меньше 13 единиц. Кто выигрывает при безошибочной игре обоих игроков – игрок, делающий первый ход, или игрок, делающий второй ход? Каким должен быть первый ход выигрывающего игрока? Ответ обоснуйте. Решение
С4 На вход программе подаются сведения о номерах школ учащихся, участвовавших в олимпиаде. В первой строке сообщается количество учащихся N, каждая из следующих N строк имеет формат:, где – строка, состоящая не более чем из 20 символов, – строка, состоящая из 4-х символов (буква, точка, буква, точка), – не более чем двузначный номер. и, а также и разделены одним пробелом. Пример входной строки: Иванов П.С. 57 Требуется написать как можно более эффективную программу (укажите используемую версию языка программирования, например, Borland Pascal 7.0), которая будет выводить на экран информацию, из какой школы было меньше всего участников (таких школ может быть несколько). При этом необходимо вывести информацию только по школам, пославшим хотя бы одного участника. Следует учитывать, что N>=1000. Решение
Элементы ответа: 1) Пример: x=3, y=0,5 (Любая пара (x,y), для которой выполняется: y>1 или x =sin x и x>π/2 и y=sin(x)) and (x
Решение: Заводим новый целочисленный массив той же длины. В цикле от первого элемента до последнего сравниваем элементы исходного массива с нулем и отрицательным элементам меняем знак. Записываем значения в элементы второго массива с тем же номером. Печатать значения массива не обязательно. С2
НАЗАД С2 На языке ПаскальНа языке Бейсик const N=30; var a, b:array[1..N] of integer; i: integer; begin for i:=1 to N do read(a[i]); for i:=1 to N do if a [i] < 0 then b[i]:= - a[i] else b[i]:= a[i]; end. FOR I=1 to N INPUT A(I) NEXT I N=30 DIM I, A(N), B(N) AS INTEGER FOR I = 1 TO N IF A(I) < 0 THEN B(I) = - A(I) ELSE B(I) = A(I) ENDIF NEXT I END
Выигрывает второй игрок. Для доказательства рассмотрим неполное дерево игры, из вариантов оформленное в виде таблицы, где в каждой ячейке записаны координаты фишки на каждом этапе игры. 1 ход 2 ход3 ход4 ход Стартовая позиция I-й игрок (все варианты хода) II-й игрок (выигрышный ход) I-й игрок (все варианты хода) II-й игрок (выигрышный ход, один 5,2 5,6 8,6 11,6 14,6 8,9 11,9 8,10 11,10 5,5 8,5 11,5 14,5 8,8 11,8 8,9 11,9 8,2 8,5 или 8,6 НАЗАД НАЗАД С3
Решение: var nc:array[1..99] of integer; p:1..99; c:char; i, k, N, min: integer; begin readln(N); for i:=0 to 99 do nc[i]:=0; for i:=1 to N do begin repeat НАЗАД С4