Вики-учебник для подготовки к ЕГЭ/Информатика/Программирование стандартных алгоритмов

Материал из Letopisi.Ru — «Время вернуться домой»
Перейти к: навигация, поиск

Шаблон:Campus

Описание задания

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

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

Примеры решения

2008 год:

Опишите на русском языке или одном из языков программирования алгоритм вычисления разности между средним арифметическим максимального и минимального значений элементов заданного целочисленного массива из 30 элементов и средним арифметическим всех элементов этого массива.

Содержание верного ответа и указания по оцениванию (допускаются иные формулировки ответа, не искажающие его смысла)
Введем целочисленные переменные Max, Min и Sum, в которые будем заносить соответственно значения максимального и минимального элемента в просмотренной части массива, а также накапливать сумму значений элементов. Присвоим им в качестве начального значение первого элемента массива. Также заводим две переменные SM и SA типа real для хранения средних значений. В цикле от второго элемента до конца массива: прибавляем элемент к сумме, сравниваем его с Max, если он больше, заносим его значение в переменную Max. В противном случае сравниваем его с Min, если он меньше, заносим его значение в переменную Min. По окончании цикла вычисляем среднее арифметическое Max и Min, заносим его в переменную SM. В переменную SA заносим частное от деления суммы элементов на количество элементов в массиве. Выводим разность SM - SA. Пример правильной и эффективной программы (на основе алгоритма, использующего однократный проход по массиву):
На языке Паскаль На языке Бейсик
Const N=30;

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

Max, Min, Sum, I: integer; SM, SA: real;

begin Max := a[1];

Min := a[1];

Sum := a[1];

for I := 2 to N do begin

Sum := Sum + a[I];

if a[I] > Max then Max := a[I]

else if a[I] < Min then Min := a[I];

end;

SM := (Max + Min)/2;

SA := Sum/N;

writeln (SM - SA);

end.

N=30

DIM I, Max, Min, Sum A(N) AS INTEGER

DIM SA, SM AS REAL

Max = A(1)

Min = A(1)

Sum = A(1)

FOR I = 2 TO N Sum = Sum + A(I)

IF A(I) > Max THEN Max = A(I) ELSE IF A(I) < Min THEN Min = A(I)

END IF

END IF

NEXT I

SM = (Max + Min)/2

SA = Sum/N

PRINT SM-SA

END

______________________________________________________________________________________________________________

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

На языке Паскаль На языке Бейсик

Var a:string;

i,s:byte;

begin

writeln('a=');

readln(a);

for i:=1 to length(a) do

if ((a[i]='a' or (a[i]='o' or a[i]='i'

or a[i]='j' or a[i]='e' or a[i]='u')) then s:=s+1;

writeln ('s=',s);

readln;

end.

DEFSTR A

DEFINT I, S, M

CLS

S=0

INPUT "a=" ; a

FOR I=1 TO LEN(a)

IF ((MID$(a,i,1)="a") OR (MID$(a,i,1)="o") OR (MID$(a,i,1)="i") OR ((MID$(a,i,1)="j") OR ((MID$(a,i,1)="a") OR ((MID$(a,i,1)="e") OR ((MID$(a,i,1)="u")) THEN S=S+1

NEXT I

PRINT "S=";S

END

______________________________________________________________________________________________________________

Опишите на одном из языков программирования алгоритм вычисления суммы всех цифр и количества прописных латинских букв по введенной с клавиатуры строке символов.

На языке Паскаль На языке Бейсик

Program Stroca;

Uses crt;
var s,s1,s2,n,k:integer;
a:string;
i,kod: Byte;
Begin
clrscr;
s:=0;
s1:=0;
write('a=');
readln(a);
for i:=1 to length(a) do
begin
kod:=ord(a[i]);
if ((kod>=65) and (kod<=90)) then s1:=s1+1;
if ((kod>=48) and (kod<=57)) then
begin
val(a[i],n,k);
s:=s+n;
end;
end;
writeln('StrocLat=',s1,' sum=',s);
readkey;
end.
DEFSTR A

DEFINT K, S, N, S1

CLS

S=0

S1=0

INPUT "a="; a

FOR I=1 TO LEN(a)

KOD=ASC(MID$(a,i,1))

IF ((KOD>=65) AND (KOD<=90) THEN S1=S1+1

IF ((KOD>=48) AND (KOD<=57) THEN N=VAL(MID$(a,i,1) : S=S+N

NEXT

PRINT "StrocLat=",S1," sum=", S

END

Основные причины ошибок, которые допускают учащиеся

Стоит сразу упомянуть о группе работ, демонстрирующих незнание экзаменующимся стандартных алгоритмов, в результате выполняется попытка заменить решение поставленной задачи той задачей, решение которой известно (результат «натаскивания» учащихся на решение нескольких заученных задач).
Около 21% учащихся, приступивших к решению задачи, допускают алгоритмические ошибки в решении. Несмотря на то, что формулировка задания допускает запись решения фактически на любом языке, и в связи с этим не предъявляются и особые требования к синтаксису, если это не искажает смысл алгоритма, т.е. не приводит к логическим ошибкам, справляются с заданием около 30%. Воспользовались возможностью записи алгоритма на русском языке 11% экзаменующихся, но формальная запись алгоритма на естественном языке оказалась не простым заданием для них. Как показали результаты экзамена, учащиеся не умеют грамотно и четко формулировать целостные логические (алгоритмические) высказывания на родном языке. Описание алгоритма, приводимое в качестве решения, зачастую не формализовано или содержит слишком крупные блоки (например, «находим среди них максимальное…») (у 3 % учащихся). Большинство экзаменующихся записывало ответ на известном им языке программирования. В этом случае возникают другие ошибки в решении:
• неверное описание переменных (массивов) (2 % экзаменующихся);
• неверный тип данных (7 % экзаменующихся);
• неверная организация ввода-вывода данных (12 % экзаменующихся);
• в организации работы циклов (например, неверное определение граничных значений счетчиков циклов) (7% экзаменующихся);
• в организации работы с массивами (например, выход за пределы массива при организации циклов) (6 % экзаменующихся);
• около 5% допускали ошибки в расстановке операторных скобок.
Есть группа ошибок, которые допускали учащиеся, независимо от языка представления решения:
• 7% экзаменующихся не знакомы с массивами и решают задачу, используя просто входную последовательность чисел;
• не выполнена инициализация переменных у 6% учащихся (не заданы или неверно заданы первоначальные значения переменных, например, при поиске максимального (минимального) элемента массива). Критерии оценивания этого задания требуют от экспертов выявления элементов, которые должны быть указаны в записи, т.к. цель этого задания экзамена – определить, насколько учащийся умеет записать алгоритм решения задачи и продемонстрировать понимание того, что у каждой используемой переменной должно быть какое-то начальное значение.


Назад к разделу Алгоритмизация и программирование

Назад к разделу Вики-учебник для подготовки к ЕГЭ/Раздел Информатика

Персональные инструменты
Инструменты