≡ информатика
сайты - меню - вход - новости




Школа экспертов
Вернуться на основную страницу «Школы экспертов»

Ниже представлены ученические решения экзаменационных заданий. Оцените каждое из них в соответствии с критериями проверки заданий ЕГЭ. После нажатия кнопки «Проверить» вы узнаете правильный балл за каждое из решений. В конце будут подведены итоги.

Задание 2901
Задание 3789


Задание № 2901

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

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

 

БейсикПаскаль

N=30

DIM A(N) AS INTEGER

DIM I, X, Y AS INTEGER

DIM S AS SINGLE

FOR I = 1 TO N

INPUT A(I)

NEXT I

END

const

N=30;

var

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

i, x, y: integer;

s: real;

begin

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

end.

Си++Алгоритмический

#include <iostream>

using namespace std;

#define N 30

int main(void)

{

int a[N];

int i, x, y;

float s;

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

cin >> a[i];

}

алг

нач

цел N = 30

целтаб a[1:N]

цел i, x, y

вещ s

нц для i от 1 до N

ввод a[i]

кц

...

кон

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

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

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

Объявляем вещественную переменную S.

В цикле от 1 до 30 вводим элементы

массива A с 1-го по 30-й.

Python

# допускается также

# использовать две

# целочисленные переменные x, y

# и вещественную переменную s

a = []

n = 30

for i in range(0, n):

a.append(int(input()))

...

 

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


Пояснение

БейсикПаскаль

X = 0

Y = 0

FOR I = 1 TO N

IF A(I) MOD 2 = 1 THEN

X = X + A(I)

Y = Y + 1

ENDIF

NEXT I

S = X / Y

PRINT S

x:=0;

y:=0;

for i:=1 to N do

if (a[i] mod 2=1) then begin

x:=x+a[i];

y:=y+1;

end;

s:=x/y;

writeln(s);

СиАлгоритмический

x=0;

y=0;

for (i=0; iif (a[i]%2==1)

{

x=x+a[i];

y++;

}

s=(float)x/y;

cout « s « endl;

x:=0

y:=0

нц для i от 1 до N

если mod(a[i],2) = 1

то

x := x+ a[i]

y := y+1

все

кц

s := x/y

вывод s

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

Записываем в переменные X и Y начальное значение, равное нулю. В цикле от первого элемента до тридцатого находим остаток от деления элемента исходного массива на два.

Если этот остаток равен единице, то увеличиваем счетчик суммы X на значение текущего элемента массива, а счетчик количества Y на 1. Переходим к следующему элементу.

После цикла производим деление счетчика суммы X на счетчик количества Y и записываем результат в переменную S. Выводим значение переменной S.



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

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

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

1) Значения переменных X и Y находятся верно, однако среднее арифметическое считается неверно (например, производится действие X/N или неверно происходит преобразование типов при делении).

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

3) Не инициализируются или неверно инициализируются переменные X и Y.

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

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

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

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

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

1
Ошибок, перечисленных в п. 1—8, две или больше, или алгоритм сформулирован неверно.0
Максимальный балл2


Пример 1.

 

x=y=0;

for i=1 to N do

if odd(a[i]) then begin

x=x+a[i];

y=y+1;

end

s=x/y

writeln(s);

Оцените это решение в баллах:

Пример 2.

 

Обнуляем X и Y

FOR I = 0 TO N-1

Если оста­ток от де­ле­ния A(I+1) на 2 не ноль THEN X = X + A(I+1), Y = Y + 1 end

Next I

S = X / Y

PRINT (S)

Оцените это решение в баллах:

Пример 3.

 

X:=0;

Y:=0;

S:=0;

for i:=1 to N do

if (a[i] mod 2=1) then

X:=X+a[i];

Y:=Y+1;

S:=X/N;

writeln(S);

Оцените это решение в баллах:

Пример 4.

 

x:=0;

y:=0;

float x1,y1;

for (i=0; iif (a[i]%2==1)

{

x=x+a[i];

y++;

}

x1 = (float)x;

y1 = (float)y;

s=x/y;

printf( s);

Оцените это решение в баллах:

Пример 5.

 

x,y= 0

for i:=1 to N do

if ((a[i] +1) mod 2)=0 then begin

x:=x+a[i];

inc(y);

end;

s:=x/y;

print(s);

Оцените это решение в баллах:

Пример 6.

 

X = 0

Y = 0

FOR I = 1 TO N

S = A(I) / 2

IF (INT(S) – S)*(INT(S) – S)>0 THEN

X = X + A(I)

Y = Y + 1

ENDIF

NEXT I

S = X / Y

PRINT S

Оцените это решение в баллах:



Задание № 3789

Дан целочисленный массив из 30 элементов. Элементы массива могут принимать значения от 150 до 200 – рост учащихся выпускного класса. В команду по автогонкам входят все учащиеся, чей рост не более 175 см. Гарантируется, что такие учащиеся в классе есть. Опишите на русском языке или на одном из языков программирования алгоритм, который находит и выводит рост самого высокого участника гоночной команды.

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

 

БейсикПаскаль

N=30

DIM A(N) AS INTEGER

DIM I, J, MAX AS INTEGER

FOR I = 1 TO N

INPUT A(I)

NEXT I

...

END

const

N=30;

var

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

i, j, max: integer;

begin

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

...

end.

Си++Алгоритмический

#include <iostream>

using namespace std;

#define N 30

int main(void)

{

int a[N];

int i, j, max;

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

cin >> a[i];

...

}

алг

нач

цел N = 30

целтаб a[1:N]

цел i, j, max

нц для i от 1 до N

ввод a[i]

кц

...

кон

Русский (естественный) язык
Объявляем массив A из 30 элементов.

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

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

...

Python

# допускается также

# использовать две

# целочисленные переменные j, max

a = []

n = 30

for i in range(0, n):

a.append(int(input()))

...

 

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


Пояснение

БейсикПаскаль

MAX = 150

FOR I = 1 TO N

IF A(I) <= 175 AND A(I) > MAX THEN

MAX = A(I)

ENDIF

NEXT I

PRINT MAX

max:=150;

for i:=1 to N do

if (a[i]<=175) and (a[i]>max) then

max:=a[i];

writeln(max);

СиАлгоритмический

max=150;

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

if (a[i]<=175 && a[i]>max)

max=a[i];

cout << max;

max = 150

нц для i от 1 до N

если a[i]<=175 и a[i]> max

то max := a[i]

все

кц

вывод max

Русский (естественный) язык
Объявляем массив A из 30 элементов.

Записываем в переменную MAX начальное значение, равное 150. В цикле от первого элемента до тридцатого сравниваем элементы исходного массива со 175.

Если текущий элемент меньше или равен 175, то сравниваем значение текущего элемента массива со значением переменной MAX.

Если текущий элемент массива больше MAX, то записываем в MAX значение этого элемента массива. Переходим к следующему элементу.

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



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

1. Не ини­ци­а­ли­зи­ру­ет­ся или не­вер­но инициализируется пе­ре­мен­ная MAX (например, ей при­сва­и­ва­ет­ся значение a[1] или число боль­шее 150).

2. В срав­не­нии со 175 вме­сто знака «меньше или равно» ис­поль­зу­ет­ся знак «меньше».

3. От­сут­ству­ет вывод ответа.

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

5. Не ука­за­но или не­вер­но указано усло­вие завершения цикла.

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

7. Не­вер­но расставлены опе­ра­тор­ные скобки.

1
Ошибок, пе­ре­чис­лен­ных в п. 1–7, две или больше, или ал­го­ритм сформулирован неверно.0
Максимальный балл2


Пример 1.

 

Присваиваем в MAX = 0. В цикле от 1 ..30 сравниваем элементы А со 175.

Если Аi <= 175, то сравниваем его значение со значением MAX. Если оно больше MAX, то присваиваем в MAX значение Аi.

Оцените это решение в баллах:

Пример 2.

 

for (i=0; iif (a[i]<=175 || a[i]>max)

max=a[i];

printf("% d", max);

Оцените это решение в баллах:

Пример 3.

 

max:=-150;

for i:=1 to N do

if (a[i]<=175) and (a[i]>max) then

begin

max:=a[i];

end;

if max = -150 then writeln(max)

else writeln («таких уча­щих­ся нет »);

Оцените это решение в баллах:

Пример 4.

 

MAX = A(1)

FOR I = 1 TO N

IF A(I) > MAX THEN

MAX = A(I)

ENDIF

NEXT I

IF A(I) <= 175THEN THEN PRINT MAX

Оцените это решение в баллах:



Наверх
Вернуться на основную страницу «Школы экспертов»