Рубрики
ЕГЭ Информатика

Часть 1 За правильный ответ на каждое задание части 1 ставится 1 балл

Часть 1

За правильный ответ на каждое задание части 1 ставится 1 балл.

Если указаны два и более ответов (в том числе правиль­ный), неверный ответ или ответ отсутствует — 0 баллов.

Вар.

1

2

3

4

5

6

7

8

9

10

Al

1

4

4

1

3

1

2

3

3

1

А2

2

2

3

1

2

3

1

4

4

1

АЗ

1

3

1

3

4

2

3

4

3

4

А4

1

1

3

4

3

4

2

3

4

2

А5

4

1

2

4

2

3

4

2

1

3

А6

2

4

4

3

1

3

2

4

2

3

А7

3

3

4

2

3

1

4

2

1

4

А8

3

2

3

1

4

3

3

1

2

3

А9

4

1

2

3

3

1

3

4

1

2

AlO

1

3

1

3

4

2

3

4

4

4

All

4

3

2

3

4

3

1

2

1

4

А12

1

4

3

2

2

2

1

4

1

2

А13

2

2

4

4

1

3

2

4

2

3

Часть 2

За правильный ответ на каждое задание части 2 ставит­ся 1 балл, за неверный ответ или его отсутствие — О баллов.

Вар.

1

2

3

4

5

Bl

12112

22112

12122

21112

11122

В2

1

12

2

-8

-1

ВЗ

3

4

4

1

6

В4

24

96

80

192

40

В5

263

18

25

22

25

В6

720

240

21

28

17

В7

7

5

7,14,28

2,4,8,16,32

6,14,22

В8

66

13

14

42

127

В9

75

46

30

12

36

BlO

1875

48

32

1288

400

Bll

ДАГВЖБЕ

ВГБА

ВБГА

FCDA

EFCA

В12

3421

3124

8900

2200

11600

В13

9

11

7

14

7

В14

2

6

9

-28

6

В15

192

68

192

162

64

Вар.

6

7

8

9

10

Bl

11211

21221

22211

21121

22122

В2

8

-14

1

1

-6

ВЗ

3

7

5

9

7

В4

4

62

4

5

351

В5

1023

93

512

64

42

В6

14

15

24

21

25

В7

7,16,25

28

30

5

3

В8

67

78

107

997

555

В9

13

41

18

16

40

BlO

40

Б35

Б39

А4

Б37

Bll

CGDA

CDEA

GCDA

EFBA

BGFC

В12

1500

2600

16500

11000

2000

В13

12

48

28

74

32

В14

30

22

-32

0

27

В15

73

16

243

32

21

Часть 3

Критерии оценивания заданий
с развёрнутым ответом

Вариант 1

подпись: abcde ж ж, -2 1 4 7 :Cl. Требовалось написать про­грамму, при выполнении которой с клавиатуры считывается коор­дината точки на прямой (х — дей­ствительное число) и определяется принадлежность этой точ­ки одному из выделенных отрезков BhD(включая границы). Программист торопился и написал программу неправильно.

Паскаль

Бейсик

Var х: real;

Begin

Readln(х) ;

If х >= -2 then

If х <= 7 then

If x < 4 then

Write(‘не принадлежит’) else

Write (,принадлежит,) end.

INPUT x

IF x >= -2 THEN

IF x <= 7 THEN

IF x < 4 THEN

PRINT «не принадлежит»

ELSE

PRINT «принадлежит»

ENDIF

ENDIF

END

Си

Алгоритмический язык

Void main(void)

{

Float x;

Scanf(«%f»,&x);

If (x >= -2)

If (x <= 7)

If (x < 4)

Printf(«не принадлежит»); else

Printf(«принадлежит»);

}

Ал г

Нач

Вещ х, у

Ввод х, у

Если х >= -2 То

Если х <= 7 то

Если х < 4 то

Вывод,не принадлежит’Иначе

Вывод‘принадлежит’Все

Все

Все

KOH

Последовательно выполните следующее:

1. Перерисуйте и заполните таблицу, которая показыва­ет, как работает программа при аргументах, принадлежащих различным областям (А, В, С, D и Е). Границы (точки — 2, 1, 4 и 7) принадлежат заштрихованным областям (BhDсоот­ветственно).

Область

Условие 1 (х>= -2)

Условие 2 <= 7) _______

Условие 3 (х<4)

Программа выведет

Область обрабатыва­ется верно

А

В

C

D

E

В столбцах условий укажите «да», если условие выполнит­ся, «нет», если условие не выполнится, «—» (прочерк), если ус­ловие не будет проверяться, «не изв.», если программа ведёт се­бя по-разному для разных значений, принадлежащих данной области. В столбце «Программа выведет» укажите, что про­грамма выведет на экран. Если программа ничего не выводит, напишите «—» (прочерк). Если для разных значений, прина­длежащих области, будут выведены разные тексты, напишите «не изв.». В последнем столбце укажите «Да» или «Нет».

2. Укажите, как нужно доработать программу, чтобы не бы­ло случаев её неправильной работы. (Это можно сделать не­сколькими способами, поэтому укажите любой способ доработ­ки исходной программы.)

Ответ:

Содержание верного ответа и указания по оцениванию (допускаются иные формулировки ответа, не искажающие его смысла)

Баллы

Элементы ответа: 1.

Область

Условие 1 (χ>=-2)

Условие 2 (х<=7)

Условие 3 (х<4)

Программа выведет

Область обрабатыва­ется верно

А

Нет

Нет

В

Да

Да

Да

Не принадлежит

Нет

C

Да

Да

Да

Не принадлежит

Да

D

Да

Да

Нет

Принадлежит

Да

E

Да

Нет

Нет

Продолжение табл.

Содержание верного ответа и указания по оцениванию (допускаются иные формулировки ответа, не искажающие его смысла)

Баллы

2. Возможная доработка (Паскаль):

If (х >= -2) and (х <= 1) or (х >= 4) and

(х <= 7) then

Write(‘принадлежит’)

Else

Write (‘не принадлежит’)

Возможны и другие способы доработки.

Например:

If х >= -2 then

If х <= 1 then

Wri te(‘принадлежит’)

Else

If x >= 4 then

If x <= 7 then

Write (‘принадлежит’)

Else

Write (‘не принадлежит’)

Else

Write (‘не принадлежит’)

Else

Write (‘не принадлежит’)

Указания по оцениванию

Обратите внимание! В задаче требуется выполнить три действия.

1. Заполнить таблицу.

2. Исправить ошибку в условном операторе.

3. Исправить ошибку, связанную с неправильным на­бором условий.

Баллы за данное задание начисляются как сумма бал­лов за верное выполнение каждого действия. Рассмот­рим отдельно каждое действие.

1. Действие по заполнению таблицы считается выпол­ненным, если в таблице нет ошибок или ошибки при­сутствуют только в одной строке.

2. Неправильное использование условного оператора, в результате чего при невыполнении первого или второ­го условия программа не выдавала ничего (отсутствуют случаи ELSE). Исправлением этой ошибки может быть либо добавление случая ELSE к каждому условию IF, либо объединение всех условий IF в одно при помощи конъюнкции.

Продолжение табл.

Содержание верного ответа и указания по оцениванию (допускаются иные формулировки ответа, не искажающие его смысла)

Баллы

В сложных случаях это действие считается выполнен­ным, если программа выдаёет одно из двух сообщений: «принадлежит» или «не принадлежит» — для любых чисел Х, при этом программа не стала работать хуже, чем раньше, т. е. для всех точек, для которых програм­ма ранее выдавала верный ответ, доработанная про­грамма также должна выдавать верный ответ.

3. Приведённых трёх ограничений недостаточно для описания двух областей (потеряно условие Х<= 1). Кроме того, необходимо учесть, что области не соеди­нены. Исправлением этой ошибки может быть разбие­ние области на две части и использование дизъюнкции либо использование сложной комбинации каскадных условий.

В сложных случаях это действие считается выполнен­ным, если верно определены заштрихованные области, т. е. программа выводит сообщение «принадлежит» для всех точек закрашенных областей, и только для них, для точек вне заштрихованных областей программа выводит «не принадлежит» или не выводит ничего.

В работе (во фрагментах программ) допускается нали­чие отдельных синтаксических ошибок, не искажаю­щих замысла автора решения

Выполнены все три действия

3

Правильно выполнены два действия из трёх (исправле­ны обе ошибки, но в пункте 1 задания не приведена таблица (либо таблица содержит ошибки в двух и более строках), либо приведена таблица (которая содержит ошибки не более чем в одной строке), но исправлена только одна ошибка программы).

При написании операций сравнения допускается одно неправильное использование строгих/нестрогих нера­венств (считается несущественной ошибкой, погреш­ностью записи). Например, вместо «х <= 1» исполь­зуется «х <1»

2

Правильно выполнено только одно действие из трёх, т. е. либо только приведена таблица, которая содержит ошибки не более чем в одной строке, либо таблица не приведена (или приведена и содержит ошибки более

1

Содержание верного ответа и указания по оцениванию (допускаются иные формулировки ответа, не искажающие его смысла)

Баллы

Чем в одной строке), но исправлена одна ошибка про­граммы. При оценивании этого задания на 1 балл до­пускается не учитывать корректность работы про­грамм на точках границ областей (вместо нестрогих не­равенств в решении были использованы строгие неравенства или наоборот)

Все пункты задания выполнены неверно (таблица ана­лиза правильности алгоритма не приведена либо содер­жит ошибки в двух и более строках, программа не при­ведена либо ни одна из двух ошибок не исправлена)

0

Максимальный балл

3

С2. Дан целочисленный массив из 28 элементов. Элемен­ты массива могут принимать значения от 0 до 100 — процент выполнения учащимися домашних заданий по информатике. Для получения положительной оценки за год требовалось на­брать не менее 40 баллов. Опишите на русском языке или на одном из языков программирования алгоритм, который на­ходит и выводит минимальный балл среди учащихся, полу­чивших за год положительную оценку. Гарантируется, что в классе хотя бы один учащийся получил за год положитель­ную оценку.

Исходные данные объявлены так, как показано ниже. За­прещается использовать переменные, не описанные ниже, но разрешается не использовать часть из них.

Паскаль

Бейсик

Const N = 28;

Var a: array [1..N] of integer;

I, J, min: integer;

Begin

For i : = 1 to N do readln(a[i]);

End.

N = 28

DIM A(N) AS INTEGER

DIM I, J, MIN AS INTEGER

FOR I = 1 TO N

INPUT A(I)

NEXT I

END

СИ

Алгоритмический язык

#include

#define N 28 void main(void) {

Int a [Ni ;

Int i, j, min;

For (i = 0; i <.N; i++) scanf("%d", &a[i]);

I

Алг нач

ЦелN = 28

Целтаб а[1:N] ЦелI, j, MIN Нц дляI От1 ДоN Ввод а [ i ]

Кц

KOH

Русский (естественный) язык

Объявляем массив А из 28 элементов.

Объявляем целочисленные переменные I, J, MIN.

В цикле от 1 до 28 вводим элементы массива А с 1-го по 28-й.

В качестве ответа вам необходимо привести фрагмент программы (или описание алгоритма на естественном языке), который должен находиться на месте многоточия. Вы можете записать решение также на другом языке программирования (укажите название и используемую версию языка програм­мирования, например Borland Pascal 7.0) или в виде блок-схе­мы. В этом случае вы должны использовать те же самые исход­ные данные и переменные, какие были предложены в условии (например, в образце, записанном на естественном языке).

Ответ:

На языке Паскаль

На языке Бейсик

Min := 100;

For i := 1 to N do if (a[i] >= 40) and a(i] < min)

Then min : = a [ i ] ; writein(min);

MIN = 100

FOR I = 1 TO N IF A(I) >= 40 AND A(I) < MIN THEN MIN = A(I) ENDIF NEXT I PRINT MIN

На языке СИ

На алгоритмическом языке

Min = 100;

For (i = 0; i < N; i++)

If (a[i] >= 40 && a[i] < min) min = a[i];

Printf(«%d», min);

MIN := 100

Нц дляI от 1 до N ЕслиA[i] >= 40 и a[i] < MIN то

MIN := a[i]

Все Кц ВыводMIN

На естественном языке

Записываем в переменную MIN начальное значение, равное 100. В цикле от первого элемента до двадцать восьмого сравни­ваем элементы исходного массива с 40. Если текущий элемент больше или равен 40, то сравниваем значение текущего эле­мента массива со значением переменной MIN. Если текущий элемент массива меньше MIN, то записываем в MIN значение этого элемента массива. Переходим к следующему элементу. После завершения цикла выводим значение переменной MIN.

СЗ. У исполнителя Калькулятор две команды, которым присвоены номера:

1. прибавь 3,

2. умножь на 3.

Первая из них увеличивает число на экране на 3, вторая — утраивает его.

Программа для Калькулятора — это последовательность команд.

Сколько есть программ, которые число 3 преобразуют в число 93?

Ответ обоснуйте.

Решение:

Обозначим R(N) количество программ, которые пре­образуют число 3 в число П. Обозначим T(N)Наибольшее кратное девяти, не превосходящее П.

Заметим, что мы можем получить только числа, кратные 3.

Обе команды исполнителя увеличивают исходное число, по­этому общее количество команд в программе не может превосхо­дить (93 — 3)/3 = 31.

Верны следующие соотношения:

Если П не делится на 9, то тогда R(Ri) = R(T()),Так как существует единственный способ получения П из T(N) Прибавлением троек.

Пусть П делится на 9.

Тогда jR(n) = jR(n∕3) + R(N— 3) = R(N∕3) + R(N 9) (если п > 9).

При П= 9 R(Ri) = 2 (два способа: прибавлением двух троек или однократным умножением на 3).

Поэтому достаточно постепенно вычислить значения R(N) Для всех чисел, кратных девяти и не превосходящих 72: сначала вычисляем 7?(3), затем 7?(9), Я(18) и т. д.

Имеем:

7?(3) = 1 = Я(6)

Я(9) = 2 = Я(12) = Я(15)

-R(18) = jR(6) + Я(9) =1 + 2 = 3 = Я(21) = Я(24)

JR(27) = Λ(9) + Я(18) = 2 + 3 = 5 = B(30) = Я(33)

Λ(36) = jR(12) + Я(27) = 2 + 5 = 7 = Я(39) = Я(42)

Я(45) = Я(15) + Я(36) = 2 + 7 = 9 = Я(48) = В(51) jR(54) = Я(18) + Я(4 5) = 3 + 9=12= Я(57) = Я(60) B(63) = — R(21) + Я(54) = 3 + 12 = 15 = jR(66) = В(69)

Я(72) = 2?(24) + Я(63) = 3 + 15 = 18 = Я(75) = Я(78)

□R(81) = Я(27) + Н(72) = 5 + 18 = 23 = Л(84) = В(87)

JR(90) = В(30) + Я(81) = 5 + 23 = 28 = Я(93)

Ответ;28

Другая форма решения

Будем решать поставленную задачу последовательно для чисел 3, 6, 9, 93 (то есть для каждого из чисел определим,

Сколько программ исполнителя существует для его получения). Заметим, что мы можем получить только числа, кратные 3. Количество программ, которые преобразуют число 3 в число П, Будем обозначать через 7?(и). Число 3 у нас уже есть, значит, его можно получить с помощью «пустой» программы. Любая непустая программа увеличит исходное число, т. е. даст число, больше 3. Значит, K(3) = 1. Для каждого следующего числа рассмотрим, из какого числа оно может быть получено за одну команду исполнителя. Если число не делится на девять, то оно может быть получено только из предыдущего с помощью команды прибавь 3. Значит, количество искомых программ для такого числа равно количеству программ для предыдущего возможного числа: R(I) = R(I 3). Если число на 9 делится, то вариантов последней команды два: прибавь 3 и умножь на 3, тогда R(I) = R(I— 3) + R(I∕3).Заполним соответствующую таблицу по привед’нным формулам слева направо:

3

6

9

12

15

18

21

24

27

30

33

36

39

42

45

1

1

2

2

2

3

3

3

5

5

5

7

7

7

9

48

51

54

57

60

63

66

69

72

75

78

81

84

87

90

9

9

12

12

12

15

15

15

18

18

18

23

23

23

28

93

28

При этом ячейки, относящиеся к числам, которые не делятся на девять, можно в решении и опустить (за исключением первого и последнего чисел):

3

9

18

27

36

45

54

63

72

81

90

93

1

2

3

5

7

9

12

15

18

23

28

28

Ответ:28

С4. После единых выпускных экзаменов по информатике в район пришла информация о том, какой ученик какой школы сколько баллов набрал. Эта информация в том же виде была разослана в школы.

Завуч школы № 50 решила наградить двух учащихся, ко­торые лучше всех в школе сдали информатику.

Программа должна вывести на экран фамилии и имена этих учеников.

Если наибольший балл набрало больше двух человек — вывести количество таких учеников.

Если наибольший балл набрал один человек, а следую­щий балл набрало несколько человек — нужно вывести толь­ко фамилию и имя лучшего.

Напишите эффективную, в том числе и по используемой памяти, программу (укажите используемую версию языка программирования, например, Borland Pascal 7.0), которая должна вывести на экран требуемую информацию. Известно, что информатику сдавало больше 5-ти учеников школы № 50.

На вход программе сначала подаётся число учеников, сдававших экзамен. В каждой из следующих N строк нахо­дится информация об учениках в формате:

<Фамилия><Имя><Номер школы><Количество баллов> где <Фамилия> — строка, состоящая не более чем из 30 символов без пробелов, <Имя> — строка, состоящая не бо­лее чем из 20 символов без пробелов, <Номер школы> — це­лое число в диапазоне от 1 до 99, <Количество баллов> — це­лое число в диапазоне от 1 до 100. Эти данные записаны через пробел, причём ровно один между каждой парой (то есть все­го по три пробела в каждой строке).

Пример входной строки:

Иванов Иван 50 87

Пример выходных данных:

Круглов Василий

Тарасова Дарья

Другой вариант выходных данных:

7

Третий вариант выходных данных:

Гусарский Илья

Ответ:

VarS, Smaxz Smax2: string[52];

Ch: char;

I, N, shz ball, max, nmax, max2, nmax2: integer; begin

Max : = -1; Smax : = ,’; nmax : = 0; max2 : = -1; readln(N); {считали количество строк}

For i := 1 to N do {перебираем все входные строки} begin

S : = ’ ‘ ;

Repeat

Read(ch);

S := s + ch

Until ch = ‘,; {считана фамилия и

Запомнена в переменнойз} repeat

Read(ch);

S : = s + ch

Until ch = ‘1; {считано имя

И добавлена к переменной s} readln(sh, ball); {считали номер школы и балл

Ученика}

If sh = 50 then {обрабатываем только учеников 50-й школы} if ball > max then {текущий балл — лучший} begin

Max2 : = max; Smax2 : = Smax; nmax2 : = nmax ;

Max := ball; Smax := s; nmax := 1 end

Else

If ball = max then {текущий балл — такой же, как лучший} begin

Птах := птах + 1; max2 := max; Smax2 := S end

Else

If ball > max2 then {текущий балл — лучше второго} begin

Max2 := ball; Smax2 := S; nmax2 := 1 end

Else

If ball = max2 then {текущий балл такой же, как второй} nmax2 : = nmax2 + 1

End;

If (птах =2) or (птах = 1) and (nmax2 = 1) then * {два лучших ученика}

Begin

Writeln(Smax); writein(Smax2) end else if (птах = 1) and (nmax2 > 1) then {один лучший ученик}

Writeln(Smax)

Else

Writein(птах) {лучших учеников больше двух} end.

Вариант 2

Cl. Требовалось написать программу, которая вводит с клавиатуры координаты точки на плоскости (х, У — действи­тельные числа) и определяет принадлежность точки за­штрихованной области. Про­граммист торопился и написал программу неправильно.

Паскаль

Бейсик

Var х, у: real;

Begin

Readln(x, у);

If у <= х * х then

If х >= -1 then

If у >= 1 then

Write (‘принадлежит’) else

Write (‘не принадлежит,) end.

INPUT X, у

IF у <= X * x THEN

IF X >= -1 THEN

IF y >= 1 THEN

PRINT «принадлежит»ELSE

PRINT «не принадлежит»ENDIF

ENDIF

ENDIF

END

Си

Алгоритмический язык

Void main(void)

{float x, y;

Scanf(«%f%f», &x, &y) ;

If (y <= x * x)

If (x >= -1) if (y >= D

Printf(«принадлежит»); else

Printf(«не принадлежит»); }

Алг

Нач вещ х, у Ввод х, у Если у <= х * х То если х > = -1 То

Если у >= 1 То вывод‘принадлежит’Иначе

Вывод‘не принадлежит’Все все все

KOH

Последовательно выполните следующее:

1. Приведите пример таких чисел х, У, при которых программа работает неправильно.

2. Укажите, как нужно доработать программу, чтобы не было случаев её неправильной работы. (Это можно сделать несколькими способами, поэтому укажите любой способ до­работки исходной программы.)

Ответ:

Содержание верного ответа и указания по оцениванию (допускаются иные формулировки ответа, не искажающие его смысла)

Баллы

Элементы ответа:

1) Пример: Х= 1, У= 1 (Любая пара (х, У), для которой выполняется: х < -1 или >= 1 и х >= 1) или У >Х2) 2) Возможная доработка (Паскаль): if (у <= х * х) and (х >= -1) and (у >= 1) and (х < 0) then write ('принадлежит') else write(,He принадлежит')

(могут быть и другие способы доработки).

Указания по оцениванию

Обратите внимание! В задаче требовалось выполнить три действия: указать пример входных данных, при которых программа работает неверно и исправить две ошибки:

1. Неправильное использование условного оператора, в результате чего при невыполнении первого или вто­рого условия программа не выдавала ничего (отсут­ствуют случаи ELSE).

2. Приведённым трём ограничениям удовлетворяют также те точки плоскости, у которых <=Х2) и

>= 1) и (х > 0).

Правильно выполнены оба пункта задания. Исправле­ны обе ошибки.

В работе (во фрагментах программ) допускается нали­чие отдельных синтаксических ошибок, не искажаю­щих замысла автора решения

3

Содержание верного ответа и указания по оцениванию (допускаются иные формулировки ответа, не искажающие его смысла)

Баллы

Правильно выполнены 2 пункта задания из трёх (ис­правлены обе ошибки, но не указан/неправильно ука­зан пример требуемых входных данных, либо правиль­но указан пример входных данных, программа пра­вильно работает при большем числе случаев, чем исходная, но не при всех).

Например, выдает «принадлежит» для точек, у кото­рых

(£/ <= х2) и >= 1) и (х > 0).

При этом не допускается, чтобы программа неправиль­но работала при тех входных данных, при которых раньше работала правильно (даже если она при этом правильно стала работать при большем количестве входных данных, чем исходная).

ИСКЛЮЧЕНИЕ! При написании операций сравнения допускается одно неправильное использование стро- гих/нестрогих неравенств (считается несущественной ошибкой, погрешностью записи). Например, вместо «у >= 1″используется «у > 1″(даже если программа при этом стала неверно работать при тех входных дан­ных, при которых раньше работала правильно).

Допускается, например, такое решение: if у <= х * х then if х >= -1 then if у >= 1 then write (‘принадлежит’) else write(‘не принадлежит’) else write(‘не принадлежит’) else write(‘не принадлежит’)

2

Правильно выполнено только одно действие из трёх.

То есть, либо только приведён пример входных дан­ных, либо он не приведён (или приведён неверно), но имеется программа, корректно работающая при боль­шем количестве входных данных, чем исходная, но не при всех (допускается применение исключения, опи­санного в критериях оценки задачи на 2 балла).

1

Все пункты задания выполнены неверно (пример вход­ных данных не указан или указан неверно, программа не приведена, либо приведённая программа корректно работает в не большем количестве случаев, чем исход­ная).

0

Максимальный балл

3

С2. Дан вещественный массив из 50 элементов. Элементы массива могут принимать произвольные значения. Опишите на русском языке или на одном из языков программирования алгоритм, который находит и выводит наименьший номер отрицательного элемента массива или сообщение, что такого элемента нет.

Исходные данные объявлены так, как показано ниже. За­прещается использовать переменные, не описанные ниже, но разрешается не использовать часть из них.

Паскаль

Бейсик

Const N = 50;

Var a: array [1..N] of real;

I, j: integer;

Begin

For i := 1 to N do readln(a[i]);

End.

N = 50

DIfd A(N) AS REAL DIM I, J AS INTEGER FOR I = 1 TO N INPUT A(I) NEXT I

END

СИ

Алгоритмический язык

#include

#define N 50 void main(void) {

Float a [N];

Int i, j;

For (i = 0; i < N; i++) scanf (,,%f", &a[i]);

)

Алг нач

ЦелN = 50 ВещтабA[l:N] ЦелI, j

Нц дляI От1 ДоN Ввод а [ i]

Кц

KOH

Русский (естественный) язык

Объявляем массив А из 50 элементов.

Объявляем целочисленные переменные I, J.

В цикле от 1 до 50 вводим элементы массива А с 1-го по 50-й.

В качестве ответа вам необходимо привести фрагмент программы (или описание алгоритма на естественном языке), который должен находиться на месте многоточия. Вы можете записать решение также на другом языке программирования (укажите название и используемую версию языка програм­мирования, например Borland Pascal 7.0) или в виде блок — схемы. В этом случае вы должны использовать те же самые исходные данные и переменные, какие были предложены в условии (например, в образце, записанном на естественном языке).

Ответ:

На языке Паскаль

IIa языке Бейсик

I : = 1 ;

While (i < N) and (a[i] >= 0) do

I : = i + 1;

If a[i] >= 0 then

Writein(‘нет таких’)

Else

Writein (i);

I = I

WHILE I < N AND A(I) >= 0

I = I + 1

ENDW

IF A(I) >= 0 THEN

PRINT «нет таких»

ELSE

PRINT I

ENDIF

На языке СИ

На алгоритмическом языке

For(i = 0; i = 0; i++)

If(a[i] >= 0)

Printf(«Heτ таких»);

Else

Printf(«%d»,i);

I := 1

Нц ПокаI < N и a[i] >= 0

I := i + 1

Кц

Если а[i] > = 0

То

Вывод«нет таких»

Иначе

ВыводI

Все

На естественном языке

Записываем в переменную I начальное значение, равное 1. В цикле пока I меньше 50 и пока I-й элемент неотрицательный, увеличиваем переменную I на единицу. Если после окончания цикла элемент массива с номером I неотрицательный — выводим сообщение, что отрицательных элементов в массиве нет. Иначе, выводим значение переменной I.

СЗ. У исполнителя Калькулятор две команды, которым присвоены номера:

1. прибавь 2,

2. умножь на 2.

Первая из них увеличивает число на экране на 1, вторая — утраивает его.

Программа для Калькулятора — это последовательность команд.

Сколько есть программ, которые число 8 преобразуют в число 64?

Ответ обоснуйте.

Решение:

Обозначим 72(n) — количество программ, которые преобразуют число 8 в число П. Обозначим /(n) наибольшее кратное четырём, не превосходящее П.

Обе команды исполнителя увеличивают исходное число, поэтому общее количество команд в программе не может пре­восходить (64 — 8)/2 = 28.

Верны следующие соотношения:

Если П не делится на 4, то тогда R(N) = R(T(N)),Так как существует единственный способ получения П из T(N) Прибавлением двоек.

Пусть П делится на 4.

Тогда R(n) = R(n∕4) + R(n — 2) = R(n∕4) + R(n -4) (если п > 4).

При л = 12 22(n) = 1 (один способ — прибавлением двух двоек).

Поэтому достаточно постепенно вычислить значения R(N) Для всех чисел, кратных трём и не превосходящих 29: сначала вычисляем 72(8), затем 22(12), 72(16) и т. д.

Имеем:

72(8) = 1 = 72(10) 72(12) = 1 = 72(14) 72(16) = 22(8) + 22(12) =1 + 1 = 2 = J2(18) 72(20) = 22(10) + jR(16) = 1 + 2 = 3 = R(22)

R(24) = 72(12) + 72(20) =1 + 3 = 4= 22(26)

12(28) = 22(14) + 72(24) = 1 + 4 = 5 = 22(30)

22(32) = 22(16) + 72(28) = 2 + 5 = 7 = 72(34)

22(36) = 22(18) + 22(32) = 2 + 7 = 9 = 72(38)

72(40) = 22(20) + 72(36) = 3 + 9= 12 = 72(42) 22(44) = 22(22) + 22(40) = 3 + 12 = 15 = 22(46)

72(48) = 22(24) + 72(44) = 4 + 15 = 19 = 72(50)

22(52) = 22(26) + /2(48) = 4 + 19 = 23 = 22(54)

22(56) = 72(28) + 72(52) = 5 + 23 = 28 = 72(58)

72(60) = 72(30) + 22(56) = 5 + 28 = 33 = 72(62)

72(64) = 72(32) + 22(60) = 7 + 33 = 40

Ответ: 40

Другая форма решения

Будем решать поставленную задачу последовательно для чисел 8, 10, 12, …, 64 (то есть для каждого из чисел определим, сколько программ исполнителя существует для его получения). Количество программ, которые преобразуют число 8 в число П, будем обозначать через 72(л). Число 8 у нас уже есть, значит, его можно получить с помощью «пустой» программы. Любая непустая программа увеличит исходное число, т. е. даст число, больше 8. Значит, /?(8) = 1. Для каждого следующего числа рассмотрим, из какого числа оно может быть получено за одну команду исполнителя. Если число не делится на четыре, то оно может быть получено только из предыдущего с помощью команды прибавь 2. Значит, количество искомых программ для такого числа равно количеству программ для предыдущего числа: R(I) = R(I— 2). Если число на четыре делится, то вариантов последней команды два: прибавь 2 и умножь на 2, тогда R(I) = R(I— 2) + jR(i∕2). Заполним соответствующую таблицу по приведенным формулам слева направо:

8

10

12

14

16

18

20

22

24

26

28

30

32

34

36

1

1

1

1

2

2

3

3

4

4

5

5

7

7

9

38

40

42

44

46

48

50

52

54

56

58

60

62

64

9

12

12

15

15

19

19

23

23

28

28

33

33

40

При этом ячейки, относящиеся к числам, которые не делятся на четыре, можно в решении и опустить (за исклю­чением первого и последнего чисел):

8

12

16

20

24

28

32

36

40

44

48

52

56

60

64

1

1

2

3

4

5

7

9

12

15

19

23

28

33

40

Ответ:40

С4. После единых выпускных экзаменов по информатике в район пришла информация о том, какой ученик какой школы сколько баллов набрал.

Районный методист решила выяснить номер школы, уче­ники которой набрали наибольший средний балл, с точнос­тью до целых. Программа должна вывести на экран номер та­кой школы и её средний балл.

Если наибольший средний балл набрало больше одной школы — вывести количество таких школ.

Напишите эффективную, в том числе и по используемой памяти, программу (укажите используемую версию языка программирования, например, Borland Pascal 7.0), которая должна вывести на экран требуемую информацию. Известно, что информатику сдавало больше 5-ти учеников района. Также известно, что в районе школы с некоторыми номерами не существуют.

На вход программе сначала подаётся число учеников, сдававших экзамен. В каждой из следующих N строк находится информация об учениках в формате:

<Фамилия><Имя> сНомер школы><Количество баллов>где <Фамилия> — строка, состоящая не более чем из 30 символов без пробелов, <Имя> — строка, состоящая не бо­лее чем из 20 символов без пробелов, <Номер школы> — це­лое число в диапазоне от 1 до 99, сКоличество баллов> — це­лое число в диапазоне от 1 до 100. Эти данные записаны через пробел, причём ровно один между каждой парой (то есть все­го по три пробела в каждой строке).

Пример входной строки:

Иванов Иван 50 87

Пример выходных данных:

50 74

Другой вариант выходных данных:

7

Ответ;

Var S1 k: array[1..99] of integer;

Ch: char;

I, N, sh, ball, max, nmax: integer;

Begin

For i := 1 to 99 do {обнуляем массивы}

Begin

S [ i ] : = 0; к [ i ] : = О end;

Readln(N); {считали количество строк}

For i := 1 to N do {перебираем все входные строки} begin

Repeat

Read(ch)

Until ch = ,’; {считана фамилия}

Repeat

Read(ch)

Until ch = , ,; {считано имя}

Readln(sh, ball); {считали номер школы и балл ученика}

S[sh} := s[sh] + ball; {считаем сумму баллов по школе}

K[sh] := k[sh] + 1 {считаем количество учеников из школы} end;

For i := 1 to 99 do

If k[i] > 0 then

S[i] := s[i] div k[i]; {считаем средний балл по каждой школе} max : = 1; nmax : = 1;

For i := 2 to 99 do {ищем максимум среди средних баллов}

If s[i]>s[max] then

Begin

Max : = i; птах : = 1

End

Else

If s[i] = stmax] then {считаем количество максимумов}

Nmax := nmax + 1;

If nmax = 1 then writein (max, »,s[max))

Else writein(nmax)

End.

Вариант 3

Cl. Требовалось написать про­грамму, которая вводит с клавиа­туры координаты точки на плос­кости (х, У — действительные числа) и определяет принадлеж­ность точки заштрихованной об­ласти. Программист торопился и написал программу неправильно.

Паскаль

Бейсик

Var х, у: real;

Begin

Readln(x, у);

If у <= sin(x) then

If у >= 1 — х then if у >= 0 then write (,принадлежит’)

Else

Write(‘не принадлежит’) end.

INPUT x, у

IF у <= SIN(X) THEN

IF у >= 1 — x THEN

IF y >= 0 THEN

PRINT «принадлежит»

ELSE

PRINT «не принадлежит»

ENDIF

ENDIF

ENDIF

END

Си

Алгоритмический язык

Void main(void)

{ float x, y;

Scanf(«⅞ f⅞ f»,&x,&y);

If (y <= sin(x))

If (y >= 1 — x)

If (y >= 0)

Printf(«принадлежит»);

Else

Printf («не принадлежит»); }

Ал г нач вещ х, у Ввод х, у Если у <= sin(x) То

Если у >= 1 — х То если у >= 0 то Вывод‘принадлежит’Иначе

Вывод‘не принадлежит’Все

Все все KOH

Последовательно выполните следующее:

1. Приведите пример таких чисел х, У, при которых программа работает неправильно.

2. Укажите, как нужно доработать программу, чтобы не было случаев её неправильной работы. (Это можно сделать несколькими способами, поэтому укажите любой способ до­работки исходной программы.)

Ответ:

Содержание верного ответа и указания по оцениванию (допускаются иные формулировки ответа, не искажающие его смысла)

Баллы

Элементы ответа:

1) Пример: Х= 2π, У= 0 (Любая пара (х, У), для которой выполняется: У > sin х или У< 1 - х или <= sin х и У>= 0 и х >= 2π))

2) Возможная доработка (Паскаль):

If (у <= sin(×)) and (у >= 1 — х) and (у >= 0) and (х <= 4) then

Write (‘принадлежит’)

Else

Write(‘не принадлежит’)

(могут быть и другие способы доработки).

Указания по оцениванию

Обратите внимание! В задаче требовалось выполнить три действия: указать пример входных данных, при ко­торых программа работает неверно и исправить две ошибки:

1. Неправильное использование условного оператора, в результате чего при невыполнении первого или второго условия программа не выдавала ничего (отсут­ствуют случаи ELSE).

2. Приведённым трём ограничениям удовлетворяют также те точки плоскости, у которых <= sin х) и >= 0) и (х >= 2π).

Правильно выполнены оба пункта задания. Исправле­ны обе ошибки.

В работе (во фрагментах программ) допускается нали­чие отдельных синтаксических ошибок, не искажаю­щих замысла автора решения

3

Содержание верного ответа и указания по оцениванию (допускаются иные формулировки ответа, не искажающие его смысла)

Баллы

Правильно выполнены 2 пункта задания из трёх (ис­правлены обе ошибки, но не указан/неправильно ука­зан пример требуемых входных данных, либо правильно указан пример входных данных, программа правильно работает при большем числе случаев, чем исходная, но не при всех).

Например, выдаёт «принадлежит» для точек, у которых <= sin х) и (t∕ >= 0) и (х >= 2π).

При этом не допускается, чтобы программа неправиль­но работала при тех входных данных, при которых раньше работала правильно (даже если она при этом правильно стала работать при большем количестве входных данных, чем исходная).

ИСКЛЮЧЕНИЕ! При написании операций сравнения допускается одно неправильное использование стро — гих/нестрогих неравенств (считается несущественной ошибкой, погрешностью записи). Например, вместо «у <= 0» используется «у <0» (даже если программа при этом стала неверно работать при тех входных дан­ных, при которых раньше работала правильно).

Допускается, например, такое решение: if у <= sin(x) then if у >= 1 — х then if у >= 0 then write (‘принадлежит’) else write(‘не принадлежит’) else write (‘не принадлежит,)

Else

Write (‘не принадлежит’)

2

Правильно выполнено только одно действие из трёх. То есть либо только приведён пример входных данных, либо он не приведён (или приведён неверно), но имеет­ся программа, корректно работающая при большем ко­личестве входных данных, чем исходная, но не при всех (допускается применение исключения, описанного в критериях оценки задачи на 2 балла).

1

Все пункты задания выполнены неверно (пример вход­ных данных не указан или указан неверно, программа не приведена, либо приведённая программа корректно ра­ботает в не большем количестве случаев, чем исходная).

0

Максимальный балл

3

С2. Дан вещественный массив из 40 элементов. Элементы массива могут принимать произвольные значения. Опишите на русском языке или на одном из языков программирования алгоритм, который находит и выводит минимальный поло­жительный элемент массива или сообщение, что такого эле­мента нет.

Исходные данные объявлены так, как показано ниже. За­прещается использовать переменные, не описанные ниже, но разрешается не использовать часть из них.

Паскаль

Бейсик

Const N = 40;

Var a: array [1..N] of

Real;

I, j: integer;

Min: real;

Begin

For i := 1 to N do readln(a [i]);

End.

N = 40

DIM A(N) AS REAL

DIM I, J AS INTEGER

DIM MIN AS REAL FOR I = 1 TO N INPUT A(I) NEXT I

END

СИ

Алгоритмический язык

#include ttdefine N 40 void main(void) {float a[N]; int i, j; float min;

For (i = 0; i < N; i++) scanf("%f", &a[i]);

}

Алг нач

ЦелN = 40

Вещтаб а[1:N]

ЦелI, j ВещMIN Нц дляI От1 ДоN

ВводA [i ] Кц

KOH

Русский (естественный) язык

Объявляем массив А из 40 элементов.

Объявляем целочисленные переменные I, J, и вещественную переменную MIN.

В цикле от 1 до 40 вводим элементы массива Ac 1-го по 40-й.

В качестве ответа вам необходимо привести фрагмент программы (или описание алгоритма на естественном языке), который должен находиться на месте многоточия. Вы можете записать решение также на другом языке программирования (укажите название и используемую версию языка програм­мирования, например Borland Pascal 7.0) или в виде блок-схе­мы. В этом случае вы должны использовать те же самые исход­ные данные и переменные, какие были предложены в условии (например, в образце, записанном на естественном языке).

Ответ:

На языке Паскаль

На языке Бейсик

3 := 1;

While (j < N) and (a[j] <= 0) do

3 := j + 1;

If a[j] <= 0 then writein(,нет таких') else

Begin

For i := j to N do if (a[i] > 0) and (a[i] < a[j]) then j : = i;

Writein(a[j]) end;

Другой Способ:

J :=0;

For i := 1 to N do

If a[i] > 0 then if (j = 0) or

(a (i ] < a [ j ) ) then j : = i ;

If j = 0 then

Writein(‘нет таких’) else

Writein(a[j]);

J = I WHILE J < N AND A(J) <= 0 J = J + 1 ENDW IF A(J) <= 0 THEN PRINT "нет таких"ELSE FOR I = J TO N IF A(I)>0 AND A(I) < A(J) THEN J = I ENDIF NEXT I PRINT A(J) ENDIF

На языке СИ

На алгоритмическом языке

For(j = 0; j

If(a[j] <= 0) printf("Heτ таких");

Else

{

For(i = j; i < N; i++)

If (a[i] > 0 && a[i] < a[j])

3 = i;

Print f («%f»,a[j]);

}

J := 1

Нц покаJ

КЦ

ЕслиA[j] <= 0 То

Вывод«нет таких»Иначе

Нц дляI от j до N Если а [ i ] • > 0 и a[i] < a[j]

То

3 := i Все

КЦ

Вывод а [ j ] Все

На естественном языке

Записываем в переменную J начальное значение, равное 1. В цикле пока J меньше 40 и пока J-й элемент неположительный, увеличиваем переменную J на единицу (ищем номер первого положительного элемента). Если после окончания цикла элемент массива с номером J неположительный — выводим сообщение, что положительных элементов в массиве нет и заканчиваем работу. Иначе, от J-ro элемента до сорокового сравниваем значение текущего элемента с нулём и со значением J-ro элемента. Если значение текущего элемента больше нуля и меньше чем значение J-ro элемента, то в переменную J записываем номер текущего элемента. После окончания цикла выводим значение J-ro элемента.

СЗ. Два игрока играют в следующую игру. На координат­ной плоскости стоит фишка. Игроки ходят по очереди. В на­чале игры фишка находится в точке с координатами (5, 2). Ход состоит в том, что игрок перемещает фишку из точки с координатами (х, У) в одну из трёх точек: или в точку с коор­динатами (х + 3, У), или в точку с координатами (х, У+ 3), или в точку с координатами (х, У+ 4). Выигрывает игрок, после хода котор jγoрасстояние от фишки до точки с коорди­натами (0, 0) не меньше 13 единиц. Кто выигрывает при безо­шибочной игре обоих игроков — игрок, делающий первый ход, или игрок, делающий второй ход? Каким должен быть первый ход выигрывающего игрока? Ответ обоснуйте.

Ответ:

Содержание верного ответа (допускаются иные формули­ровки ответа, не искажающие его смысла)

Выигрывает второй игрок.

Для доказательства рассмотрим неполное дерево игры, оформленное в виде таблицы, где в каждой ячейке записаны координаты фишки на каждом этапе игры.

1 ход

2 ход

3 ход

4 ход

Стар­товая пози­ция

1-й игрок (все вари­анты хода)

П-й игрок (выигрыш­ный ход)

1-й игрок (все вари­анты хода)

П-й игрок (выигрыш­ный ход, один из вариантов)

5,2

5,6

8,6

11,6

14,6

8,9

11,9

8,10

11,10

1 ход

2 ход

3 ход

4 ход

 

Стар­товая пози­ция

1-й игрок (все вари­анты хода)

П-й игрок (выигрыш­ный ход)

1-й игрок (все вари­анты хода)

П-й игрок (выигрыш­ный ход, один из вариантов)

 

5,5

8,5

11,5

14,5

 

8,8

11,8

 

8,9

11,9

 

8,2

8,5Или 8,6 (достаточно привести один из вариантов)

Те же варианты третьего-четвёртого ходов.

 

Таблица содержит Все возможные варианты ходов перво­го игрока. Из неё видно, что при любом ходе первого игрока у второго имеется ход, приводящий к победе.

С4. После единых выпускных экзаменов по информатике в район пришла информация о том, какой ученик какой школы сколько баллов набрал.

Районный методист решила выяснить номера школ, уче­ники которых набрали средний балл по школе, больший, чем районный средний балл (все средние баллы вычисляются с точностью до целых). Программа должна вывести на экран номера таких школ, в любом порядке. Если такая школа ока­жется только одна — вывести также средний балл по этой школе, с указанием, что это средний балл.

Напишите эффективную, в том числе и по используемой памяти, программу (укажите используемую версию языка программирования, например, Borland Pascal 7.0), которая должна вывести на экран требуемую информацию. Известно, что информатику сдавало больше 5-ти учеников района. Также известно, что в районе школы с некоторыми номерами не существуют.

На вход программе сначала подаётся число учеников, сдававших экзамен. В каждой из следующих N строк находится информация об учениках в формате:

<Фамилия><Имя><Номер школы><Количество баллов> где <Фамилия> — строка, состоящая не более, чем из 30 символов без пробелов, <Имя> — строка, состоящая не бо­лее, чем из 20 символов без пробелов, <Номер школы> — це­лое число в диапазоне от 1 до 99, <Количество баллов> — це-

Лое число в диапазоне от 1 до 100. Эти данные записаны через пробел, причём ровно один между каждой парой (то есть, все­го по три пробела в каждой строке).

Пример входной строки:

Иванов Иван 50 87

Пример выходных данных:

5 50 74 87

Другой вариант выходных данных:

7

Средний балл = 74

Ответ:

Var s, k: array[1..99] of integer;

Ch:char;

Iz N, sh, ball, avg, m: integer;

Begin

For i := 1 to 99 do {обнуляем массивы} begin

S[i] := 0;

K[i] := 0

End;

Readln(N); {считали количество строк}

For i := 1 to N do {перебираем все входные

Строки} begin

Repeat

Read(ch)

Until ch = ,’; {считана фамилия} repeat

Read(ch)

Until ch = ,’; {считано имя}

Readln(sh, ball); {считали номер школы и балл ученика} s[sh] := s[sh] + ball; {считаем сумму баллов по школе} k[sh] := k[sh] + 1 {считаем количество

Учеников из школы} end;

Avg : = 0;

For i := 1 to 99 do

If k[i] > 0 then

Begin

Avg := avg + s[i]; {считаем сумму баллов по району} s[i] := s[i] div k[i]; {считаем средний балл по каждой школе} end;

Avg := avg div N; {считаем средний балл по району} m : = 0;

For i := 1 to 99 do

If s[i] > avg then {отбираем школы, где средний балл выше районного} begin

M := m + 1; {подсчитываем количество таких школ} ball := s[i]; {запоминаем средний балл

Какой-нибудь из них} write(i, ‘ ’ )

End;

Writein;

If m = 1 then

Writein(,Средний балл = ‘,ball) end.

Вариант 4

Cl. Требовалось написать про­грамму, которая вводит с клавиа­туры координаты точки на плос­кости (х, У — действительные числа) и определяет принадлеж­ность точки заштрихованной об­ласти. Программист торопился и написал программу неправильно.

Паскаль

Бейсик

Var х, у: real;

Begin

Readln(x, у);

If у >= — х * х then

If у >= — х — 2 then if у <= 0 then write ('принадлежит’)

Else

Write(‘не принадлежит’) end.

INPUT x, у

IF у >= — X * x THEN

IF у >= — x — 2 THEN

IF y <= 0 THEN

PRINT «принадлежит»

ELSE

PRINT ‘,не принадлежит»

ENDIF

ENDIF

ENDIF

END________________________________________

Си

Алгоритмический язык

Void main(void)

{ float x, y;

Scanf (»%f%f» , &x, &y) ;

If (y >= — x * x)

If (x >= — x — 2)

If (y <= 0)

Printf(«принадлежит»);

Else

Printf(«не принадлежит»); )

Алг

Нач

Вещ х, у

Ввод х, у

Если у >= — х * х то

Если х >= — х — 2 То

Если у <= 0 То вывод‘принадлежит’

Иначе

Вывод‘не принадлежит’Все

Все

Все

KOH

Последовательно выполните следующее:

1. Приведите пример таких чисел х, У, при которых программа работает неправильно.

2. Укажите, как нужно доработать программу, чтобы не было случаев её неправильной работы. (Это можно сделать несколькими способами, поэтому можно указать любой спо­соб доработки исходной программы.)

Ответ:

Содержание верного ответа и указания по оцениванию (допускаются иные формулировки ответа, не искажающие его смысла)

Баллы

Элементы ответа:

1) Пример: Х= 1, У= 0 (Любая пара (х, У), для которой выполняется: У<-х - 2 или <= 0 и х > 0) или

У < — X2)

2) Возможная доработка (Паскаль):

If (у >= — х * х) and (у >= — х — 2) and

(у <= 0) and (х <= 0) then

Write (1принадлежит1)

Else

Write (1не принадлежит’)

(могут быть и другие способы доработки).

Указания по оцениванию

Обратите внимание! В задаче требовалось выполнить три действия: указать пример входных данных, при которых программа работает неверно и исправить две ошибки:

1. Неправильное использование условного оператора, в результате чего при невыполнении первого или второго условия программа не выдавала ничего (отсут­ствуют случаи ELSE).

2. Приведённым трём ограничениям удовлетворяют также те точки плоскости, у которых >= — х2) и

(у <= 0) и (х > 0) и >= — х — 2).

Правильно выполнены оба пункта задания. Исправле­ны обе ошибки.

В работе (во фрагментах программ) допускается нали­чие отдельных синтаксических ошибок, не искажаю­щих замысла автора решения

3

Содержание верного ответа и указания по оцениванию (допускаются иные формулировки ответа, не искажающие его смысла)

Баллы

Правильно выполнены 2 пункта задания из трёх (ис­правлены обе ошибки, но не указан/неправильно ука­зан пример требуемых входных данных, либо правильно указан пример входных данных, программа правильно работает при большем числе случаев, чем исходная, но не при всех).

Например, выдаёт «принадлежит» для точек, у которых >= — X2) и <= 0) и (х > 0) и >= — х — 2).

При этом не допускается, чтобы программа неправиль­но работала при тех входных данных, при которых раньше работала правильно (даже если она при этом правильно стала работать при большем количестве входных данных, чем исходная).

ИСКЛЮЧЕНИЕ! При написании операций сравнения допускается одно неправильное использование стро- гих/нестрогих неравенств (считается несущественной ошибкой, погрешностью записи). Например, вместо «у >= 1» используется «у >1» (даже если программа при этом стала неверно работать при тех входных данных, при которых раньше работала правильно).

Допускается, например, такое решение: if у >= — х * х then if у >= — х — 2 then if у <= 0 then write ('принадлежит , ) else write(’не принадлежит') else write('не принадлежит') else

Write(,He принадлежит’)

2

Правильно выполнено только одно действие из трёх. То есть либо только приведён пример входных данных, либо он не приведён (или приведён неверно), но имеет-‘ ся программа, корректно работающая при большем ко­личестве входных данных, чем исходная, но не при всех (допускается применение исключения, описанно­го в критериях оценки задачи на 2 балла).

1

Все пункты задания выполнены неверно (пример вход­ных данных не указан или указан неверно, программа не приведена, либо приведённая программа корректно работает в не большем количестве случаев, чем исход­ная).

0

Максимальный балл

3

С2. Дан целочисленный массив из 30 элементов. Эле­менты массива могут принимать произвольные значения. C клавиатуры вводится целое число X. Опишите на русском языке или на одном из языков программирования алгоритм, который находит и выводит наименьший номер элемента массива, равного X, или сообщение, что такого элемента нет.

Исходные данные объявлены так, как показано ниже. За­прещается использовать переменные, не описанные ниже, но разрешается не использовать часть из них.

Паскаль

Бейсик

Const N = 30;

Var a: array [1..N] of integer;

Iz j, х: integer;

Begin for i := 1 to’N do

Readln(a[i]);

Readlh(x);

End.

N = 30

DIM A(N) AS INTEGER DIM I, Jz X AS INTEGER

FOR I = 1 TO N INPUT A(I) NEXT I INPUT X

END

СИ

Алгоритмический язык

#include

#define N 30 void main(void) {int a[N];

Int i, j, x;

For (i = 0; i < N; i++) , scanf("%d", &a[i]);

Scanf(«%d»,&x);

}

Алг нач

ЦелN = 30

ЦелтабA[l:N] ЦелIz j, х

Нц дляI От1 ДоN ВводA [i]

Кц

ВводX

KOH

Русский (естественный) язык

Объявляем массив А из 30 элементов.

Объявляем целочисленные переменные I, J.

В цикле от 1 до 30 вводим элементы массива Ac 1-го по 30-й.

Вводит переменную X.

В качестве ответа вам необходимо привести фрагмент программы (или описание алгоритма на естественном языке), который должен находиться на месте многоточия. Вы можете записать решение также на другом языке программирования (укажите название и используемую версию языка програм­
мирования, например Borland Pascal 7.0) или в виде блок — схемы. В этом случае вы должны использовать те же самые исходные данные и переменные, какие были предложены в условии (например, в образце, записанном на естественном языке).

Ответ:

На языке Паскаль

На языке Бейсик

J : = 0;

For i : = N downto 1 do if a[i] = х then

J : = i;

If j = 0 then

Writein(‘нет таких’) else

Writein(j);

Другой» способ:

I = I

WHILE I < N AND A(I) о X

1 = 1 + 1

ENDW

IF A(I) <>X THEN

PRINT «нет таких»

ELSE

PRINT I

ENDIF

I : = 1 ;

While (i < N) and (a [i] <> x) do i : = i + 1 ;

If a[i] <> x then writein(‘нет таких’)

Else

Writein(i);

На языке СИ

На алгоритмическом языке

For(I = 0; i < N && a[i] != x; i++)

If(a[i] != x)

Printf(«Heτ таких»); else

Printf(«%d», i);

I := 1

Нц ПокаI < N и a[i] <>х

I := i + 1

Кц

Если а[i] о х

То

Вывод«нет таких»

Иначе выводI

Все

На естественном языке

Записываем в переменную I начальное значение, равное 1. В цикле пока I меньше 30 и пока I-й элемент не равен X, увеличиваем переменную I на единицу. После окончания цикла: если элемент массива с номером I не равен X — выводим сообщение, что таких элементов в массиве нет. Иначе, выводим значение переменной I.

СЗ. Два игрока играют в следующую игру. На координат­ной плоскости стоит фишка. Игроки ходят по очереди. В на­чале игры фишка находится в точке с координатами (3, 2). Ход состоит в том, что игрок перемещает фишку из точки с координатами (х, У) в одну из трёх точек: или в точку с коор­динатами (х + 3, 1/), или в точку с координатами (х, У+ 2), или в точку с координатами (х, У+ 4). Выигрывает игрок, после хода которого расстояние от фишки до точки с коорди­натами (0, 0) больше 12 единиц. Кто выигрывает при безоши­бочной игре обоих игроков — игрок, делающий первый ход, или игрок, делающий второй ход? Каким должен быть пер­вый ход выигрывающего игрока? Ответ обоснуйте.

Ответ:

Содержание верного ответа (допускаются иные формули­ровки ответа, не искажающие его смысла)

Выигрывает первый игрок, своим первым ходом он дол­жен поставить фишку в точке с координатами (3, 4). Для до­казательства рассмотрим неполное дерево игры, оформлен­ное в виде таблицы, где в каждой ячейке координаты фишки на каждом этапе игры.

1 Ход

2 Ход

3 Ход

4 Ход

5 Ход

Позиция после пер­вого хода

П-й игрок (все вари­анты хода)

1-й игрок (выигрыш­ный ход)

П-й игрок (все вари­анты хода)

1-й игрок (один из ва­риантов)

3,4

6,4

6,6

9,6

12,6

6,8

9,8

6,10

9,10

3,6

6,6

Те же варианты 4-5 Хода

3,8

3,12

Первый игрок выиграл

Таблица содержит Все возможные варианты ходов второ­го игрока. Из неё видно, что при любом ответе второго игрока у первого имеется ход, приводящий к победе.

С4. После единых выпускных экзаменов по информатике в район пришла информация о том, какой ученик какой школы сколько баллов набрал.

Районный методист решила выяснить фамилии учени­ков, которые набрали наибольший балл, по каждой школе в отдельности, но только если из школы информатику сдавало не меньше трёх человек. Если в школе информатику сдавало

Меньше трёх человек, информацию по этой школе выводить не нужно. Программа должна вывести на экран информацию с виде:

<Номер школы> «Фамилия ученика>

В отдельной строке для каждой школы.

Напишите эффективную, в том числе и по используемой памяти, программу (укажите используемую версию языка программирования, например, Borland Pascal 7.0), которая должна вывести на экран требуемую информацию. Известно, что информатику сдавало больше 5-ти учеников района. Также известно, что в районе школы с некоторыми номерами не существуют.

На вход программе сначала подаётся число учеников, сдававших экзамен. В каждой из следующих N строк находится информация об учениках в формате:

<Фамилия><Имя><Номер школы> сКоличество бал — лов>

Где <Фамилия> — строка, состоящая не более чем из 30 сим­волов без пробелов, <Имя> — строка, состоящая не более чем из 20 символов без пробелов, <Номер школы> — целое число в диапазоне от 1 до 99, сКоличество баллов> — целое число в диапазоне от 0 до 100. Эти данные записаны через пробел, причём ровно один между каждой парой (то есть всего по три пробела в каждой строке).

Пример входной строки:

Иванов Иван 50 87

Пример выходных данных:

5 Иванов

50 Петров

74 Сидоров

Ответ:

Var num, bal: array[1..99] of integer;

Name: array[1..99] of string[52];

S: string[52];

Ch: char;

I, N, sh, ball: integer;

Begin

For i := 1 to 99 do {обнуляем массивы} begin

Num[i ] := 0;

Bal[i] := -1

End;

Readln(N); {считали количество строк}

For i := 1 to N do {перебираем все входные строки}

Begin

S : = ,’;

Repeat read(ch); s := s + ch

Until ch = , ,; {считана фамилия и записана в переменную s} repeat

Read(ch)

Until ch = ,’; {считано имя}

Readln(sh, ball); {считали номер школы и балл ученика} if ball > bal[sh] then {если текущий балл лучше}

Begin

Bal[sh] := ball; {запоминаем текущий балл по школе} name[sh] := s {и фамилию ученика}

End;

Num[sh] := num[sh] + 1 {считаем количество учеников из школы} end;

For i := 1 to 99 do

If num[i] >= 3 then {выбираем только школы, из которых сдавало больше трех учеников}

Writein(i, », name[i]) end.

Вариант 5

Cl. Требовалось написать программу, которая вводит с клавиатуры координаты точки на плоскости (г, У — Действительные числа) и определяет принадлежность точки заштрихованной области. Программист торопился и написал программу неправильно.

Паскаль

Бейсик

Var х, у: real;

Begin

Readln(x, у);

Ifx<=y*y then

If х >= 0 then

If у <= 1 then

Write (,принадлежит,) else

Write(‘не принадлежит’) end.

INPUT x, у

IF X <= у * y THEN

IF X >= 0 THEN

IF y <= 1 THEN

PRINT «принадлежит»

ELSE

PRINT «не принадлежит»

ENDIF

ENDIF

ENDIF END

Си

Алгоритмический язык

Void main(void)

{ float x, y;

Scanf(«%f%f»,&x,&y);

If (x <= у * у)

If (x >= 0)

If (y <= 1)

Printf(«принадлежит»); else

Printf(«не принадлежит»); }

Алг

Нач

Вещ х, у

Ввод х, у

Если х < = у * у То

Если х >= 0 то

Если у <= 1 То

Вывод‘принадлежит’Иначе

Вывод‘не принадлежит’Все

Все

Все

KOH

Последовательно выполните следующее:

1. Приведите пример таких чисел Х, у, при которых программа работает неправильно.

2. Укажите, как нужно доработать программу, чтобы не было случаев её неправильной работы. (Это можно сделать несколькими способами, поэтому можно указать любой спо­соб доработки исходной программы.)

Ответ:

Содержание верного ответа и указания по оцениванию (допускаются иные формулировки ответа, не искажающие его смысла)

Баллы

Элементы ответа:

1) Пример: Х= 0, У= -1 (Любая пара (х, У), для которой выполняется: х < 0 или (у < 0 и х >= 0) или х >У2)

2) Возможная доработка (Паскаль):

If (х <= у * у) and (х >= 0) and (у <= 1) and (у >= 0) then write (‘принадлежит ‘ ) else write(‘не принадлежит’)

(могут быть и другие способы доработки).

Содержание верного ответа и указания по оцениванию (допускаются иные формулировки ответа, не искажающие его смысла)

Баллы

Указания по оцениванию

Обратите внимание! В задаче требовалось выполнить три действия: указать пример входных данных, при которых программа работает неверно и исправить две ошибки:

1. Неправильное использование условного оператора, в результате чего при невыполнении первого или второго условия программа не выдавала ничего (отсут­ствуют случаи ELSE).

2. Приведённым трём ограничениям удовлетворяют также те точки плоскости, у которых (х <= У2) и <= 1) и (х >=f 0) и < 0).

Правильно выполнены оба пункта задания. Исправле­ны обе ошибки.

В работе (во фрагментах программ) допускается нали­чие отдельных синтаксических ошибок, не искажаю­щих замысла автора решения

3

Правильно выполнены 2 пункта задания из трёх (ис­правлены обе ошибки, но не указан/неправильно ука­зан пример требуемых входных данных, либо правиль­но указан пример входных данных, программа пра­вильно работает при большем числе случаев, чем исходная, но не при всех).

Например, выдает «принадлежит» для точек, у кото­рых (х <= У2) и <= 1) и (х >= 0) и < 0).

При этом не допускается, чтобы программа неправиль­но работала при тех входных данных, при которых раньше работала правильно (даже если она при этом правильно стала работать при большем количестве входных данных, чем исходная).

ИСКЛЮЧЕНИЕ! При написании операций сравнения допускается одно неправильное использование стро — гих/нестрогих неравенств (считается несущественной ошибкой, погрешностью записи). Например, вместо «у >= 0» используется «у > 0» (даже если программа при этом стала неверно работать при тех входных дан­ных, при которых раньше работала правильно).

2

Содержание верного ответа и указания по оцениванию (допускаются иные формулировки ответа, не искажающие его смысла)

Баллы

Допускается, например, такое решение: if х <= у * у then if х >= 0 then if у <= 1 then

Write (,принадлежит,) else

Write (,не принадлежит’) else t

Write (1не принадлежит,) else

Write(‘не принадлежит 1)

Правильно выполнено только одно действие из трёх.

То есть, либо только приведён пример входных дан­ных, либо он не приведён (или приведён неверно), но имеется программа, корректно работающая при боль­шем количестве входных данных, чем исходная, но не при всех (допускается применение исключения, опи­санного в критериях оценки задачи на 2 балла).

1

Все пункты задания выполнены неверно (пример вход­ных данных не указан или указан неверно, программа не приведена, либо приведённая программа корректно работает в не большем количестве случаев, чем исход­ная).

0

Максимальный балл

3

С2. Дан целочисленный массив из 40 элементов. Элемен­ты массива могут принимать произвольные значения. Опи­шите на русском языке или на одном из языков программи­рования алгоритм, который находит и выводит значение вто­рого максимума (элемента, который в отсортированном по невозрастанию массиве стоял бы вторым).

Исходные данные объявлены так, как показано ниже. За­прещается использовать переменные, не описанные ниже, но разрешается не использовать часть из них.

Паскаль

Бейсик

Const N = 40;

Var a: array [1..N] of integer;

I, k, max, max2: integer; begin

For i := 1 to N do readln(a[i]);

N = 40 DIM A(N) AS INTEGER DIM I, К, MAX, MAX2 AS

INTEGER

FOR I = 1 TO N INPUT A(I) NEXT I

End.

END

СИ

Алгоритмический язык

#include ‘ ((define N 40 void main(void) {int a [N] ;

Int i, k, max, max2 ;

For (i = 0; i < N; i++) scanf("%d", &a{i]);

Алг

Нач

ЦелN = 40 ЦелтабA[l:N] ЦелI, k, MAX, ∙ МАХ2 Нц ДляI От1 ДоN Ввод а [ i ]

Кц

)

KOH

Русский (естественный) язык

Объявляем массив А из 40 элементов.

Объявляем целочисленные переменные I, К, MAX, МАХ2.

В цикле от 1 до 40 вводим элементы массива Ac 1-го по 40-й.

В качестве ответа вам необходимо привести фрагмент программы (или описание алгоритма на естественном языке), который должен находиться на месте многоточия. Вы можете записать решение также на другом языке программирования (укажите название и используемую версию языка програм­мирования, например Borland Pascal 7.0) или в виде блок — схемы. В этом случае вы должны использовать те же самые исходные данные и переменные, какие были предложены в условии (например, в образце, записанном на естественном языке).

Ответ:

На языке Паскаль

На языке Бейсик

Max : = а [ 1 ] ;

Max2 := а[2];

If max < max2 then

Begin

Max := а [ 2];

Max2 := а[1]

End;

For i := 3 to N do if a[i] > max then begin

Max 2 := max;

Max : = a [ i ] end else

If a[i] > max2 then max2 : = a [ i ] ;

Writein(max2);

MAX = A(I)

MAX2 = A (2)

IF MAX < MAX2 THEN

MAX = A(2)

MAX2 = A(I) ENDIF

FOR I = 3 TO N IF A(I) > MAX THEN MAX2 = MAX MAX = A(I) ELSE

IF A(I) > MAX2 THEN MAX2 = A(I) ENDIF ENDIF NEXT I

PRINT MAX2

На языке СИ

На алгоритмическом языке

Max = a [ 0 ] ;

Max2 = a [ 1 ] ;

If (max < max2)

{

Max = a [ 1 ] ;

Max2 = a [ 0 ] ;

}

For(i = 2; i < N; i++) if(a[i] > max) {

Max 2 = max ;

Max = a [ i ] ;

}

Else

I f(a[i] > max2) max2 = a [ i ] ;

Printf(«%dπ, max2);

MAX := a[l]

MAX2 := a [2] ЕслиMAX < MAX2

TO MAX := a[2] MAX2 := a[l]

Все

Нц дляI От3 ДоN Если а [ i ] > MAX

То

MAX2 := MAX

MAX := a[i] Иначе

Если а [ i ] >МАХ2 То

MAX2 := a[i] Все все

Кц

Вывод МАХ2

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *