ЕГЭ. Решение задания С2 - теория и практика. 11 класс
Пример задания С2
Дан целочисленный массив из 30 элементов. Элементы массива могут принимать целые значения от 0 до 100 – баллы учащихся выпускного класса за итоговый тест по информатике. Для получения положительной оценки за тест требовалось набрать не менее 20 баллов. Опишите на русском языке или на одном из языков программирования алгоритм, который позволяет найти и вывести минимальный балл среди учащихся, получивших за тест положительную оценку. Известно, что в классе хотя бы один учащийся получил за тест положительную оценку.
Для успешного выполнения задания учащиеся должны
знать :
• Виды циклических алгоритмов, их особенности;
• Реализацию компьютером всех видов циклов;
• Алгоритмы основных операций обработки элементов одномерного массива;
• Основные ошибки, возникающие при работе с элементами массива.
уметь:
• Описывать, заполнять и распечатывать одномерный массив;
• Реализовывать алгоритмы основных операций с элементами одномерного массива (нахождение суммы, произведения, количества элементов с заданным признаком, максимума, минимума, сортировка, вставка и удаление элементов, и т.д.)
• Оценивать программу с точки зрения возникновения логических ошибок, задавать потоки «критических» данных для тестирования программы;
• Производить трассировку программы с целью обнаружения логических ошибок и устранять их;
• Грамотно и корректно писать программу на одном из языков программирования с учетом требований к стилю программы.
ТЕОРИЯ К РАЗДЕЛУ
Массив – это совокупность однородных однотипных элементов, расположенных рядом друг с другом в памяти компьютера и имеющие общее имя.
Однородные элементы – это элементы, имеющие какой – то общий признак (учащиеся
9 «А» класса; работники гимназии 710 и т.д.).
Однотипные элементы – это элементы, имеющие один тип ( все данные массива имеют тип REAL или все данные массива имеют тип BYTE и т.д.).
Имя массива – это правильный идентификатор. Элементы массива пронумерованы, и обратиться к каждому из них можно номеру (или нескольким номерам). Номера элементов массива называют индексами, а сами элементы массива – индексными переменными ( индексированными переменными).
Например, дадим массиву имя MAS, тогда обращение к первому и пятому элементу массива запишется: MAS[1], MAS[5] (индекс указывается в квадратных скобках).
Размерность (ранг) массива – это количество индексов или измерений массива.
Одномерный массив – вектор – это массив, в котором элементы нумеруются одним индексом ( А[2], S[4] - одно измерение). Примером такого массива служит список класса, последовательность нечетных чисел и т.д.
Массив S четных чисел содержит элементы: 2, 4, 6, 8, 10, …
S[1] =2, S[2] = 4, S[3] = 6, S[4] = 8 и т.д.
Размер массива – это количество элементов, содержащихся в массиве (по всем измерениям).
В памяти компьютера все элементы массива занимают одну непрерывную область, располагаются рядом друг с другом.
Размер области памяти, занимаемой массивом зависит от размера и типа массива, т.е. от количества и типа элементов массива. Например, если описан вектор из 20 чисел типа INTEGER, то в памяти под него будет выделено 20٭2 байт = 40 байт, т.е. 40 подряд идущих ячеек.
В общем случае, размер области памяти, выделяемой под массив равен произведению размера массива на длину типа элементов массива.
Обработка массива осуществляется поэлементно. И только, если два массива
А и В полностью совпадают по типу, размеру и размерности, то допустима запись А : = В.
Будьте внимательны ! при работе с массивами в случаях, когда в программе используется заполненный массив меньшего размера, чем описан. Из – за неверно заданного индекса можно выйти за границы реально используемого массива, и получить непредсказуемый результат.
Описание массива требуется компилятору для выделения памяти под его элементы.
При объявлении массива нельзя задавать границы индексов при помощи переменных. Память под массив выделяется до выполнения программы, а переменные получают значения только в ходе выполнения программы.
В общем виде описание одномерного массива выглядит так:
Var
<Имя >: array [<нижняя граница>. .<верхняя граница>] of <тип>; где
Имя – имя массива, правильный идентификатор;
Array (массив), of – зарезервированные слова;
Тип – тип элементов массива.
Нижняя граница индекса показывает наименьшее возможное значение индекса, верхняя – наибольшее. Нижняя граница не превосходит верхнюю.
Тип границ – порядковый.
При описании массива удобно использовать предварительно описанные именованные константы, которые задают количество элементов. Употребление констант предпочтительнее, т.к. в случае изменения размеров массива не нужно будет вносить исправления по всему тексту программы, достаточно поменять значение именованной константы.
Возможен и другой вариант: при описании массива размер указывается конкретным числом, исходя из условия задачи (если речь идет об учащихся класса, то массив размером 100 элементов будет достаточным для решения задачи). Конкретное количество элементов массива запрашивается у пользователя в программе с проверкой на непревышение количества, заданного при описании.
Массив также можно описать как типизированную константу в разделе описания констант. Список значений элементов массива при этом заключается в круглые скобки.
Пример:
Const x: array[1..5] of integer = (1,3,5,7,9);
В этом случае не просто выделяется память под массив, а происходит заполнение ячеек заданными значениями. Элементы такого массива можно изменять в ходе программы, как и любые другие типизированные константы. Описание массива как типизированной константы используется на практике:
• для задания массивов с неизменными значениями элементов;
• при отладке программ, чтобы каждый раз не заполнять массив вручную при запуске программы.
Выше были рассмотрены способы описания массивов в разделе var буз явного указания идентификатора типа. Такие «безымянные» массивы называются анонимными. При описании массивов также широко используется предварительное описание типа в разделе описания типов данных. Такая возможность может потребоваться , например, при использовании имени массива в качестве параметра процедуры или функции.
Пример:
Type
Имя типа= array [нижняя граница .. верхняя граница] of тип элементов;
Var
Имя массива : имя типа;
Пример различных способов описания вектора:
Const M=5; N=20;
Type MAS=array [1. . 5] of Char;{предварительное описание типа массива}
Var A, B : array [ 1. . 100] of Integer; {два вектора по 100 целых чисел}
C, D : MAS;{два вектора по 5 символов}
F : array [ M. . N] of Byte;{вектор из 15 целых чисел}
W : array [ ‘a’. .’f ’ ] of Real; {вектор из 6 вещественных чисел}
Необходимо: 1) различать индекс и значение элемента массива.(А[1] := 5; число 1 – это индекс (номер) элемента массива, а 5 – значение, которое ему присваивается)
2) помнить, что в Turbo Pascal есть ограничение по памяти, отводимой под переменные – 64 Кбайта, т.е. описание массива
VAR A : array [1. . 105, 1 . . 105] of Real; приведет к ошибке № 22: слишком большая структура. Чтобы обойти эту ситуацию, используют спец. Приемы.
Недопустимо:
1) использовать вещественные числа для границ индексов ( А : array [ 1.0 . . 10.0] of Byte)
2) использовать выражения с переменными для границ индексов
( А : array [ 1 . . а + b] of Byte)
3) чтобы значение нижней границы массива превышало значение верхней
( А : array [ 100 . . 10] of Byte)
При выполнении программы не обязательно заполнять все описанные ячейки массива данными, т.е. реальное количество элементов в массиве может быть меньше, чем указано в описании, но ни в коем случае не должно быть больше.
Для ввода, вывода и обработки массивов применяют циклы, особенно удобен цикл FOR, т.к. номера элементов следуют по порядку с шагом 1.
Прежде чем выполнять действия с массивом, его надо заполнить. Значения элементов массива можно задать различными способами: с клавиатуры; с помощью счетчика случайных чисел; присваиванием; а позже научимся считывать в массив данные из файлов.
Примеры различных способов заполнения вектора из 10 элементов:
VAR A : array [ 1. . 10] of Integer; i : Byte;
1) С клавиатуры: FOR i :=1 TO 10 DO READLN ( A[ i ]);
2) Счетчиком сл.чисел: FOR i :=1 TO 10 DO A[ i ] := RANDOM(100);
3) Присваиванием: FOR i :=1 TO 10 DO A[ i ] := 2 * i + 1;
Примеры различных способов печати вектора из 10 элементов:
1) Эл. выводятся в строчку, через пробел: FOR i :=1 TO 10 DO WRITE ( A[ i ], ‘ ‘);
2) Эл. выводятся в столбик: FOR i :=1 TO 10 DO WRITELN ( A[ i ]);
После проверки знания теории очень важно выработать понимание того, как работает компьютер, выполняя программу, обрабатывающую массив. Для этого полезны задания типа «Что будет на экране в результате выполнения программы…» или «Для чего предназначена приведенная программа …». Для правильного и рационального выполнения этого типа заданий необходимо ознакомить учащихся с приемами трассировки программы.
Следующим этапом подготовки к выполнению задания ЕГЭ является усвоение алгоритмов основных операций обработки элементов массива:
• нахождение суммы элементов, в том числе с заданными свойствами;
• нахождение произведения элементов, в том числе с заданными свойствами;
• нахождение максимума, минимума, среднего арифметического, в том числе среди элементов с заданными свойствами;
• нахождение количества элементов с заданными свойствами;
• проверка массива на монотонность, знакочередование и т.п.;
• сортировка массива.
После того, как вышеуказанные навыки будут отработаны, полезно выполнить практикум, составленный из заданий С2 различных лет, тренировочных вариантов ЕГЭ, из сборников по подготовке, заданий, размещенных на сайтах ФИПИ, ВУЗов и т.д.
На странице приведен фрагмент.
Автор: Кондратьева Марина Олеговна
→ Маня58 24.02.2011 4 12661 1240 |
Спасибо за Вашу оценку. Если хотите, чтобы Ваше имя
стало известно автору, войдите на сайт как пользователь
и нажмите Спасибо еще раз. Ваше имя появится на этой стрнице.