На языке Паскаль J S:=0; for i:=l to N do If (a[i] mod 15<>0) then

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

S:=0; for i:=l to N do

If (a[i] mod 15<>0) then

S:=s+a[i] ;

Writein(s) ;

На языке Бейсик ⅛»‘= о ‘

⅛OR I = 1 TO N IF A(I) MOD 15<>0 THEN S = S + A(I)

I ENDIF

∣NEXT I

⅛RINT S

На языке Си

∣s=0;

!for (i=0; i

I if (a[i]%15!=0)

S+=a[i];

Iprintf («%d”, s) ;

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

Записываем в переменную S начальное значение, равное 0. В цикле от ^первого элемента до тридцатого находим остаток от деления элемента исходного массива на пятнадцать. Если остаток от деления на пятнадцать не равен нулю, то считаем сумму текущего элемента массива и значения переменной S. Результат сложения сохраняем в переменную S. Переходим к следующему элементу массива.

После завершения цикла выводим значение переменной S.

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

Баллы

Предложен правильный алгоритм, выдающий верное значение.

Допускается запись алгоритма на другом языке, использующая аналогичные переменные. В случае если язык программирования использует типизированные переменные, описания переменных должны быть аналогичны описаниям переменных на естественном языке. Использование нетипизированных или необъявленных переменных возможно только в случае, если это допускается языком программирования, при этом количество переменных и их идентификаторы должны соответствовать условию задачи.

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

2

В любом варианте решения может присутствовать не более одной ошибки из числа следующих.

1) Не инициализируется или неверно инициализируется переменная S.

2) Неверно осуществляется проверка на делимость на пятнадцать.

3) На делимость на пятнадцать проверяется не значение элемента, а его индекс.

4) Неверно осуществляется накопление суммы в цикле (например, s : =a [ i ] 😉

5) Отсутствует вывод ответа.

6) Используется переменная, не объявленная в разделе описания переменных.

7) Не указано или неверно указано условие завершения

1

Цикла.

8) Индексная переменная в цикле не меняется (например, в цикле while) или меняется неверно.

9) Неверно расставлены операторные скобки

Ошибок, перечисленных в п. 1-9, две или больше, или алгоритм сформулирован неверно.

0

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

2

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

1. прибавь 2,

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

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

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

Сколько есть программ, которые число 1 преобразуют в число 31 ? Ответ обоснуйте.

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

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

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

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

2) Пусть П делится на 3.

Тогда R(Ri) = R(N∕3)+R(N-2) (если п>3).

Если и=3, то R(N) = 2 (два способа: прибавлением двойки или однократным умножением на 3).

Поэтому достаточно по индукции вычислить значения R(N)Для всех нечетных чисел, кратных трем и не превосходящих 31.

Имеем:

Ад= I

Ад = 2 = ад=ад

Ад = Λ(3)+Λ(7) = 2+2 = 4 =/?(! 1) = Λ(13)

R( 15) = R(5)+R( 13) = 2+4 =6 = R( 17) = Я( 19)

Λ(21) = Λ(7)+Λ(19) = 2+6 = 8 = /?(23) = Я(25)

Я(27) = ад+ад) = 4+8=12 = 7?(29) = Я(31)

Ответ: 12.

Другой способ решения

Очевидно, из числа 1 нельзя получить четное число. Будем решать поставленную задачу последовательно для чисел 1, 3, 5, …, 31 (тоесть для каждого из таких чисел определим, сколько программ исполнителя существует для его получения). Количество программ, которые преобразуют число 1 в число П, будем обозначать через R(ιi).Число 1 у нас уже есть, значит, его можно получить с помощью «пустой» программы. Любая непустая программа увеличит исходное число, т. е. даст число, большее!. Значит, 7?(1) = 1. Для каждого следующего числа рассмотрим, из какого числа оно может быть получено за одну команду исполнителя. Если число не делится на три, то оно может быть получено только из предыдущего нечетного числа с помощью команды Прибавь 2. Значит, количество искомых программ для такого числа равно количеству программ для предыдущего нечетного числа: R(I)=R(I -2). Если число на 3 делится, то вариантов последней команды два: Прибавь 2 И Умножь на 3, Тогда R(I)=R(J— 2) + R(I∕3).Заполним соответствующую таблицу по приведенным формулам слева направо:

1

3

5

7

9

11

13

15

17

19

21

23

25

27

29

31

1

2

2

2

4

4

4

6

6

6

8

8

8

12

12

12

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

Баллы

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

3

Два балла ставятся в одном из двух случаев:

1. Правильное указание количества возможных программ, основанное на верных рассуждениях, но доказательство правильности неполно. В частности, оценка в 2 балла выставляется в случае, если просто перечислены все правильные программы и не доказано отсутствие других программ, кроме приведенных.

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

2

Представленное решение обладает одним из свойств

1. Указано, что нужно рассматривать значения П, Меньшие чем 31, и приведены правильные рекуррентные соотношения (см. выше), возможно, неполные.

2. Правильно выписаны и обоснованы значения R(H) Для небольших П.

3. Правильно написан ртвет но нет его обоснования.

1

Не выполнено ни одно из перечисленных выше условий.

0

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

3

I C4 IПо каналу связи передается последовательность положительных целых чисел X1, X2,… все числа не превышают 1000, их количество заранее неизвестно. Каждое число передается в виде отдельной текстовой строки, содержащей десятичную запись числа. Признаком конца передаваемой последовательности является число 0. Участок последовательности от элемента Xt, до элемента Xt+n называется подъемом, если на этом участке каждое следующее число больше предыдущего. Высотой подъема называется разность Xt+n- Xt. Напишите эффективную программу, которая вычисляет наибольшую высоту среди всех подъемов последовательности. Если в последовательности нет ни одного подъема, программа выдает 0. Программа должна напечатать отчет по следующей форме:

Получено… чисел

Наибольшая высота подъема: …

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

Перед текстом программы кратко опишите используемый вами алгоритм решения задачи.

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

144

17

27 3 7 9 11 10 0

Пример выходных данных для приведенного выше примера входных данных:

Получено 8 чисел

Наибольшая высота подъема: 10

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

Программа читает все входные данные один раз, не запоминая все входные данные в массиве. Во время чтения программа помнит число LMax — высоту самого высокого из уже закончившихся подъемов, а также необходимые сведения о текущем подъеме, например число L — высоту текущего подъема (то есть разность между последним и первым числом участка) и последнее прочитанное число T (это число — наибольшее из чисел текущего подъема). Прочитав очередное число R, программа сравнивает его с числом Т. Если R >Т, то значение L увеличивается на R-T. В противном случае фиксируется конец подъема и начало нового участка. То есть, во-первых, значение L сравнивается с LMax и, при необходимости LMax полагается равным L. Во-вторых, полагаем L = O

Ниже приведены примеры решения задания на языках Паскаль и Бейсик, а также на алгоритмическом языке. Допускаются решения, записанные на других языках программирования.

Пример правильной и эффективной программы на языке Паскаль:

Program с4_1; var

Rz Tz Nz Lz LMax : Integer;

Begin

N :=0;

L :=0;

LMax:=0;

Т:=1001; repeat ReadLn(R) ; if R<>0 then N:=N+1; if R>T then L:=L+R-T else begin if L>LMax then LMax:=L;

L :=0; end; T:=R; until R=0; WriteLn(‘Получено,, N, ‘чисел’); WriteLn(‘Наибольшая высота подъема ‘, LMax); end.

Пример правильной и эффективной программы на Алгоритмическом языке:

Алг С4_1 Нач целRfТ, Nz Lz LMax N:=0 L: =0 LMax:=0 Т:=1001;

Нц

ВводR

ЕслиRoO ТоN:=N+1 все

ЕслиR>T То L:=L+R-T Иначе Если L>LMax то LMax:=L все L:=0 Все T : =R Кц при R=O Вывод«Получено «, N, » чисел», Нс вывод«Наибольшая высота подъема «, LMax, Нс Кон

Пример правильной и эффективной программы на языке Бейсик: DIM R, Т, N, L, LMax AS INTEGER N=O L=O LMax = О T = 1001; DO INPUT R IF R О О THEN N = N + 1 IF R > T THEN L = L + R-T ELSE IF L > LMax THEN LMax = L L = O END IF T = R

LOOP UNTIL R=O

PRINT «Получено «; N; «чисел»

PRINT «Наибольшая высота подъема «; Lmax

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

Баллы

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

4

Программа работает верно, но размер используемой памяти зависит от длины используемой последовательности. Например, входные данные запоминаются в массиве или другой структуре данных (например, контейнер priority_queue, set или map в C++), размер которого соответствует числу N.

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

3

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

Допускается наличие от одной до пяти синтаксических ошибок, описанных выше.

2

В программе есть блок выделения очередного подъема, однако этот блок написан с ошибками. Допускается наличие от одной до пяти синтаксических ошибок, описанных выше.

1

Прочее

0

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

4

подпись: cl

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

Диагностическая работа 2

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

Программист торопился и написал программу неправильно.

Бейсик

INPUT х, у

IF y<=3-x*x THEN

IF y>=0 THEN

IF y>=x+l THEN

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

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

END IF

END IF

END IF

END

Паскаль

Var x7у: real;

Begin

Readln(x, y);

If y<=3-x*x then

If y>=0 then

If y>=x+l then

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

Else

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

Си

Void main(void){

Float xzу;

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

If (y<=3-x*x)

If (y>=0)

If (y>=x+l)

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

Else

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

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

Алг нач вещXzy Ввод х, у ЕслиY<=3-x*x То если у>=0 То еслиY>=x+l То вывод1принадлежит’Иначе

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

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

1. Перерисуйте и заполните таблицу, которая показывает, как работает программа при аргументах, принадлежащих различным областям А, В, С, D, Е, F, G и H (каждая область ограничена осями координат и нарисованными на рисунке графиками). Точки, лежащие на границах областей, отдельно не рассматривать.

Область

Условие 1 (y<=3-x*x)

Условие 2 (y>=θ)

Условие 3 (y>=x+l)

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

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

А

В

C

D

E

F

G

H

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

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

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

Область

Условие 1 (y<=3-x*x)

Условие 2 (у>=0)

Условие 3 (y>=x+l)

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

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

А

Нет

Нет

В

Нет

Нет

C

Да

Нет

Нет

D

Да

Нет

Нет

E

Да

Да

Нет

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

Да

F

Да

Да

Да

Принадлежит

Да

G

Да

Да

Да

Принадлежит

Да

H

Да

Да

Нет

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

Нет

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

If (y<=3-x*x) and ((y>=x+l) or ((x>=0) and (y>=0))) then write (,принадлежит’)

Else write(’не принадлежит’)

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

Указания по оцениванию | Баллы

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

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

2. Исправить ошибку, связанную с ошибочной записью условного оператора (отсутствуют ELSE).

3. Исправить ошибку, связанную с неполнотой набора условий (чтобы различить области E и Н, нужно проверить условие Х > 0).

Количество баллов, выставляемых за решение, — это количество успешно выполненных действий.

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

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

Чем раньше, то есть для всех точек, для которых программа ранее выдавала верный ответ, доработанная программа также должна выдавать верный ответ.

Возможный (не единственный!) способ выполнить это действие — добавить случаи ELSE к каждому условию IF.

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

Приведённым трем ограничениям, например, не удовлетворяют точки плоскости, у которых Y<3-X2, у <X+L,Х > 0, у>0. Поэтому возможным способом исправления ошибки может быть разбиение области на две части и использование дизъюнкции либо отбрасывание от большей области её части.

Успешно заполнена таблица. Программа работает правильно для всех областей.

3

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

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

2

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

1

Или наоборот).

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

0

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

3

02 J Дай целочисленный массив из 30 элементов. Элементы массива могут принимать целые значения от 0 до 1000. Опишите на русском языке или на одном из языков программирования алгоритм, позволяющий найти и вывести количество элементов массива, кратных трем, десятичная запись которых заканчивается цифрой 1.

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

Паскаль

Const

N=30;

Var

A: array [1..N] of integer;

I, j, k: integer;

Begin

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

End.

Бейсик

N=30

DIM A(N) AS INTEGER

DIM I, J, K AS INTEGER

FOR I = 1 TO N

INPUT A(I)

NEXT I

END

Си

#include tfdefine N 30 void main (){ int a [N] ; int i, j, k; for (i=0; i

}

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

Алг

Нач

ЦелN=30

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

Кц

Кон

Естественный язык

Объявляем массив А из 30 элементов. Объявляем целые переменные I, J, К.

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

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

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

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