задачи с2(2004-2009)

19
С3(2004) Опишите алгоритм поиска трех последовательных элементов, сумма которых максимальна, в числовом массиве из 30 элементов. Решение запишите в словесной форме или на алгоритмических языках Бейсик или Паскаль. С3(2005) Опишите на русском языке или одном из языков программирования алгоритм подсчета числа элементов равных максимальному в числовом массиве из 30 элементов. С2(2006) Опишите на русском языке или на одном из языков программирования алгоритм поиска второго по величине (т.е. следующего по величине за максимальным) элемента в числовом массиве из 30 различных элементов. С2(2007) Опишите на русском языке или одном из языков программирования алгоритм поиска номера первого из двух последовательных элементов в целочисленном массиве из 30 элементов, сумма которых максимальна (если таких пар несколько, то можно выбрать любую из них). C2(2008) Опишите на русском языке или одном из языков программирования алгоритм подсчета максимального количества подряд идущих совпадающих элементов в целочисленном массиве длины 30. C2(2009) Опишите на русском языке или одном из языков программирования алгоритм получения из заданного целочисленного массива размером 30 элементов другого массива, который будет содержать модули значений элементов первого массива (не используя специальной функции, вычисляющей модуль числа). С3. Содержание правильного ответа и указания по оцениванию Баллы Введем числовые переменные Max и Trio, в которые

Upload: znamenka

Post on 01-Nov-2015

467 views

Category:

Documents


3 download

TRANSCRIPT

Page 1: задачи с2(2004-2009)

С3(2004) Опишите алгоритм поиска трех последовательных элементов, сумма которых максимальна, в числовом массиве из 30 элементов. Решение запишите в словесной форме или на алгоритмических языках Бейсик или Паскаль.

С3(2005) Опишите на русском языке или одном из языков программирования алгоритм подсчета числа элементов равных максимальному в числовом массиве из 30 элементов.

С2(2006) Опишите на русском языке или на одном из языков программирования алгоритм поиска второго по величине (т.е. следующего по величине за максимальным) элемента в числовом массиве из 30 различных элементов.

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

C2(2008) Опишите на русском языке или одном из языков программирования алгоритм подсчета максимального количества подряд идущих совпадающих элементов в целочисленном массиве длины 30.

C2(2009) Опишите на русском языке или одном из языков программирования алгоритм получения из заданного целочисленного массива размером 30 элементов другого массива, который будет содержать модули значений элементов первого массива (не используя специальной функции, вычисляющей модуль числа).

С3.Содержание правильного ответа и указания по оцениванию Баллы

Введем числовые переменные Max и Trio, в которые занесем сумму первых трех элементов массива. Затем в цикле до конца массива: прибавляем к переменной Trio очередной элемент массива, вычитаем из нее первый элемент четверки, сумму которой она содержит, сравниваем результат со значением переменной Max; если он больше, то заносим его в переменную Max. По окончании работы алгоритма переменная Max содержит максимальную сумму трех подряд идущих элементов массива.Примеры правильных и эффективных программ:На языке Паскаль На языке Бейсикconst N=30;var a:array[1..N] of integer; Max, Trio, i: integer;begin

N=30DIM i, Max, Trio, a(N) AS INTEGERTrio=a(1)+a(2)+a(3)Max=Trio

Page 2: задачи с2(2004-2009)

Trio:=a[1]+a[2]+a[3]; Max:=Trio; for i:=4 to N do begin Trio:=Trio+a[i]-a[i-3]; if Trio>Max then Max:=Trio; end; writeln(Max);end.

LOOPFOR i = 4 TO N Trio=Trio+a(i)-a(i-4) IF Trio > Max THEN Max = TrioNEXT iPRINT MaxEND

Описан правильный алгоритм, время работы которого линейно зависит от длины массива

2

Описан правильный алгоритм, не допускающий немедленного обобщения на произвольное число элементов или время работы которого более чем линейно по длине массива

1

Задание не выполнено или выполнено неверно 0Максимальный балл 2

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

Ответ (критерии оценивания):Содержание верного ответа и указания по оцениванию

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

Введем целочисленную переменную Max, в которую будем заносить максимальный из просмотренных элементов массива, и целочисленную переменную Num, в которой будем подсчитывать число повторений максимального элемента в просмотренной части массива. В цикле до конца массива: сравниваем очередной элемент массива с текущим значением переменной Max, если он больше, то заносим его значение в Max и устанавливаем счетчик Num в 1, если они равны, то увеличиваем счетчик Num на 1. По окончании цикла переменная Num содержит число повторений максимального элемента массива.Пример правильной и эффективной программы (на основе алгоритма, использующего однократный проход по массиву):На языке Паскаль На языке БейсикConst N=30;Var a:array[1..N] of integer; Max, Num, i: integer;Begin Max:=a[1]; Num:=1; For i:=2 to N do Begin If a[i]>Max then begin Max:=a[i]; Num:=1; end else if a[i]=Max then Num:=Num+1; End; Writeln(Num);End.

N=30DIM i, Max, Num, a(N) AS INTEGERMax=a(1)Num=1LOOPFOR i = 2 TO NIF a(i)>Max THEN Max=a(i) Num=1 ELSE IF a(i)=Max THEN Num=Num+1 ENDIF ENDIFNEXT iPRINT NumEND

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

1

Задание выполнено неверно 0

C3

Page 3: задачи с2(2004-2009)

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

Содержание верного ответа и указания по оцениванию

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

Баллы

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

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

2

На языке Паскаль На языке Бейсикconst N=30;var a:array[1..N] of real; Max1, Max2, i: real;begin Max1:=a[1]; Max2:=a[1]; if a[2]>Max1 then Max1:=a[2] else Max2:=a[2]; for i:=3 to N do begin if a[i]>Max1 then begin Max2:=Max1; Max1:=a[i]; end else if a[i]>Max2 then Max2:=a[i]; end; writeln(Max2);end.

N=30DIM i, Max1, Max2, a(N) AS REALMax1=a(1)Max2=a(1)IF a(2)>Max1 THEN Max1=a(2)ELSE Max2=a(2)FOR i = 3 TO NIF a(i)>Max1 THEN Max2=Max1 Max1=a(i) ELSE IF a(i)>Max2 THEN Max2=a(i) ENDIF ENDIFNEXT iPRINT Max2END

Имеется не более двух ошибок из числа следующих:1) Не задано или неверно задано первое значение Max12) Неверно вычисляется первое значение переменной Max23) Не указано условие завершения цикла4) Программа не выводит результат5) Индексная переменная в цикле не увеличивается (при использовании циклов

while или repeat-until)В программе на Паскале неверно расставлены операторные скобки

1

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

0

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

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

C2

C2

Page 4: задачи с2(2004-2009)

Введем целочисленную переменную MaxSum, в которую будем заносить максимальную сумму двух последовательных элементов в просмотренной части массива, и переменную MaxNum, в которую будем заносить номер первого элемента в этой паре. Первоначально в эти переменные занесем сумму первых двух элементов и номер 1 соответственно. В цикле до конца массива: проверяем, превосходит ли сумма элементов очередной пары уже найденный максимум; если да, то заносим в переменную MaxSum новую сумму, а в переменную MaxNum – номер первого элемента пары. По окончании цикла выводим значение переменной MaxNum.Пример правильной и эффективной программы (на основе алгоритма, использующего однократный проход по массиву):

На языке Паскаль На языке Бейсикconst N=30;var a:array[1..N] of integer;MaxSum, MaxNum, i: integer;beginMaxNum:=1;MaxSum:=a[1]+a[2];for i:=2 to N-1 do beginif a[i]+a[i+1]>MaxSum then beginMaxNum:=i;MaxSum:=a[i]+a[i+1];endend;writeln(MaxNum);end.

N=30DIM i, MaxSum, MaxNum, a(N) AS INTEGERMaxNum=1MaxSum=a(1)+a(2)FOR i = 2 TO N-1IF a(i)+a(i+1)>MaxSum THEN MaxNum=iMaxSum=a(i)+a(i+1)ENDIFNEXT iPRINT MaxNumEND

Page 5: задачи с2(2004-2009)

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

2

Имеется не более двух ошибок из числа следующих:1) Не задано первое значение MaxNum2) Неверно задается первое значение MaxSum3) Не указано или неверно указано условие завершения цикла4) Индексная переменная в цикле не меняется5) Неверно расставлены операторные скобки

1

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

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

C2 Опишите на русском языке или одном из языков программирования алгоритм подсчета максимального количества подряд идущих совпадающих элементов в целочисленном массиве длины 30. Ответ: Содержание верного ответа и указания к оцениванию (допускаются иные формулировки ответа, не искажающие его смысла) Пример правильного описания алгоритма на русском языке. Заводим переменную MaxCoin для хранения максимального количества подряд идущих совпадающих элементов и счетчик NumCoin для хранения числа элементов в последней группе совпадающих элементов. Просматривая элементы массива, сравниваем очередной элемент со следующим за ним. Если значения совпадают, увеличиваем счетчик NumCoin на единицу. Если очередной элемент массива оказывается не равным предыдущему, то сравниваем текущее значение счетчика со значением переменной MaxCoin; если он больше, то заменяем значение переменной MaxCoin значением счетчика. После сравнения записываем в счетчик NumCoin единицу. Так повторяем до конца массива. В конце работы нужно еще раз сравнить значение счетчика со значением переменной MaxCoin и переопределить ее, если счетчик больше.

Page 6: задачи с2(2004-2009)

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

Page 7: задачи с2(2004-2009)

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

C2 Опишите на русском языке или одном из языков программирования алгоритм получения из заданного целочисленного массива размером 30 элементов другого массива, который будет содержать модули значений элементов первого массива (не используя специальной функции, вычисляющей модуль числа). Ответ: Содержание верного ответа и указания по оцениванию (допускаются иные формулировки ответа, не искажающие его смысла) Заводим новый целочисленный массив той же длины. В цикле от первого элемента до последнего сравниваем элементы исходного массива с нулем и отрицательным элементам меняем знак. Записываем значения в элементы

Page 8: задачи с2(2004-2009)

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

Page 9: задачи с2(2004-2009)

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

подсчета числа элементов, равных максимальному, в числовом массиве из 30

элементов.

Ответ (критерии оценивания):

Задание С2 относится к высокому уровню сложности. За решение этого задания

можно получить два балла. По содержанию проверяет умение формально

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

языке программирования.

Содержание правильного ответа

Введем целочисленную переменную Max, в которую будем заносить

максимальный из просмотренных элементов массива, и целочисленную

переменную Num, в которой будем подсчитывать число повторений

максимального элемента в просмотренной части массива. Занесем в Маx

значение первого элемента массива, в Num занесем 1.

В цикле до конца массива: сравниваем очередной элемент массива с

текущим значением переменной Max, если он больше, то заносим его

значение в Max и устанавливаем счетчик Num в 1, если они равны, то

увеличиваем счетчик Num на 1. По окончании цикла переменная Num

содержит число повторений максимального элемента массива.

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

ы

Page 10: задачи с2(2004-2009)

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

том числе и алгоритм, требующий двукратного прохода по

массиву).

Возможно использование числа 30 вместо константы. Возможно

наличие отдельных синтаксических ошибок (пропущенные «;»,

неверная запись оператора присваивания и т.п.), не искажающих

замысла автора программы.

В качестве примера правильного и эффективного алгоритма

приведен фрагмент программы (заполнение массива опущено):

2

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

const N = 30;

var a:array[1..N] of

integer;

Max, Num, i:

integer;

begin

Max := a[1];

Num := 1;

for i := 2 to N do

if a[i] > Max then

begin

Max := a[i];

Num := 1

end

else

if a[i] = Max then

Num := Num + 1;

writeln(Num)

end.

N = 30

DIM i, Max, Num, a(N) AS

INTEGER

Max = a(1)

Num = 1

FOR i = 2 TO N

IF a(i) > Max THEN

Max = a(i) : Num = 1

ELSE

IF a(i) = Max THEN

Num = Num + 1

END IF

END IF

NEXT i

PRINT Num

END

Имеется не более двух ошибок из числа следующих: 1

Page 11: задачи с2(2004-2009)

1) Не задано или неверно задано первое значение Max

2) Не задано или неверно задано первое значение Num

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

4) Индексная переменная в цикле не увеличивается (при

использовании циклов while или repeat-until)

5) В программе на Паскале неверно расставлены операторные

скобки

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

сформулирован неверно (в частности, неверно подсчитывается

количество вхождений максимума в массив).

0

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

Page 12: задачи с2(2004-2009)

Можно ли засчитать за правильное решение приведенный здесь алгоритм?Можно ли считать предложенный алгоритм наиболее эффективным?Оценка?

Page 13: задачи с2(2004-2009)

Возможно ли формальное исполнение описанного здесь алгоритма?Оценка?

Возможно ли формальное исполнение описанного здесь алгоритма?Оценка?

Page 14: задачи с2(2004-2009)

Замечания.

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

использованием которых будет производиться проверка алгоритмов.

2. Осуществите формальное исполнение алгоритма с тестовыми примерами

исходных данных. Оцените правильность полученных результатов.

3. Возможные ошибки.

a. Нет описания используемых переменных.

b. Неправильно записаны операторы присваивания.

c. Неверно заданы начальные условия.

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

e. Индексная переменная в цикле не увеличивается (при использовании

циклов while или repeat-until)

4. Помните, что:

эффективность алгоритмов в данной задаче не оценивается, поэтому

оценка за решение, в котором используется два просмотра массива,

не снижается;

не оценивается «стиль» программирования, аккуратность записи,

наличие отступов и прочие важные, но данным заданием не

проверяемые вещи;

нельзя применять в программах на языках программирования

стандартные функции из библиотек (например сортировка массива по

возрастанию).

5. Подберите задачи, решение которых будет способствовать успешному

решению данной.

1) Поиск максимального элемента в массиве.

2) Поиск элемента в массиве удовлетворяющего некоторому условию.

3) Определение количества элементов удовлетворяющих некоторому

условию.

4) Задача на комбинацию 2 и 3.

Page 15: задачи с2(2004-2009)

6. Рассмотреть решение, использующее один цикл.

Типы задач с использованием одномерного массива.

1. Найти сумму (произведение) элементов массива. (Среднее арифметическое,

среднее геометрическое элементов массива)

2. Поиск порядкового номера элемента массива удовлетворяющего некоторому

условию (первого, последнего, самого элемента, всех порядковых номеров

или элементов).

3. Поиск максимального и минимального элементов массива.

4. Определение количества элементов удовлетворяющих некоторому условию.

5. Изменение значения некоторых элементов.

6. Работа с несколькими таблицами.

7. Перестановка двух элементов таблицы.

8. Перестановка части таблицы.

9. Удаление элементов из таблицы.

10. Вставка элемента в таблице (после заданного элемента, перед заданным

элементом, нескольких элементов).

11. Упорядочивание таблицы по возрастанию (убыванию).

12. Проверка упорядоченности массива.

13. Слияние двух упорядоченных массивов.

Рекомендуемая литература.

В.Б. Попова “Turbo Pascal для школьников”

С.М. Окулова “Основы программирования”