Категория C2 • задача №3
Условие задачи
Дано:
дан вещественный массив из 40 элементов. Элементы массива могут принимать произвольные значения. Исходные данные объявлены так, как показано ниже. Запрещается использовать переменные, не описанные ниже, но разрешается не использовать часть из них.
Реализовать:
опишите на русском языке или на одном из языков программирования алгоритм, который находит и выводит минимальный положительный элемент массива или сообщение, что такого элемента нет.
Решение
I этап: выбор основного языка программирования
Среди четырех представленных языков (Pascal, Basic, чистый C, Естественный язык), лично мне, максимально импонирует язык программирования высокого уровня - Pascal.
Опишу основные преимущества (на мой субъективный взгляд) языка программирования Pascal перед остальными языками, представленными в данном задании:
понятная лексика, то есть все ключевые слова, использующиеся в языке программирования, являются понятными;
хорошо продуманная внутренняя структура программы (группировка по разделам: раздел подключения модулей, раздел декларации констант, раздел декларации переменных, раздел описания пользовательских типов данных);
поддержка большого количества стандартных типов данных (например, в отличие от всех представленных в данном задании языков, язык Pascal имеет штатную поддержку такого типа данных как "Множество").
II этап: алгоритмизация поставленной задачи
Поставленная задача подразумевает следующую обработку: для примера рассмотрим одномерный вещественный массив, состоящий из десяти элементов, являющихся дробными случайными числами:
-34.3 | 13.3 | 10.0 | -4.32 | 0.0 | 12.4 | 3.24 | -78.3 | 90.31 | 15.3 | значение |
1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | индекс |
Требуется детерминировать минимальный элемент, но не просто минимальный элемент, а также, чтобы этот элемент был положительным числом. То есть, условно говоря, нужно определить элемент, который больше ноля и максимально близко расположен к нулю.
Выпишем все положительные числа в ряд, встречающиеся в исходном массиве не нарушая порядок их следования:
13.3, 10.0, 12.4, 3.24, 90.31, 15.3
очевидно, что самым наименьшим среди данных чисел является число 3.24, именно данное число и необходимо выписать в качестве ответа.
Важно понимать следующее, что для нахождения ответа потребуется просканировать все элементы массива, так как заранее неизвестно, в какой позиции располагается искомое значение (оно может находиться в самом начале, в самом конце или отсутствовать в принципе).
Возникаем закономерный вопрос: как определить, что наименьшего положительного элемента физически не существуем в заданном массиве?
Ответ: необходимо помимо самого минимального положительного числа запоминать и его номер, тогда, если после сканирования, номер равен нулю, это является сигналом того, что положительных элементов в исходном массиве не обнаружено.
III этап: реализация программы
Реализуем программу на языке программирования высокого уровня Pascal 7.0 с подробными комментариями.
const
{нетипизированная константа, отвечающая за количество элементов исходного массива}
N = 40;
{раздел объявления переменных}
var
{одномерный массив из 40 элементов вещественного типа}
a : array[1..N] of real;
{счетчик циклов}
i : integer;
{хранит индекс минимального положительного элемента исходного массива}
j : integer;
{в данном алгоритме – неиспользуемая «лишняя» переменная}
min : real;
{начало главного блока программы}
begin
{заполнение массива пользовательскими дробными числами вводом с клавиатуры}
for i := 1 to N do
readln(a[i]);
{вставка пустой строки для повышения читабельности}
writeln;
{отталкиваемся от предположения, что положительных элементов в исходном массиве нет}
j := 0;
{циклически просматриваем все элементы исходного массива}
for i := 1 to N do
{текущий элемент массива является положительным}
if(a[i] > 0) then
{найден первый положительный элемент или текущий элемент меньше минимального положительного среди просмотренных элементов массива}
if(j = 0) or (a[i] < a[j]) then
{запоминаем индекс нового положительного минимального элемента}
j := i;
{если минимальный положительный элемент был обнаружен}
if(j <> 0) then
{вывод значение минимального положительного элемента}
writeln(a[j]:7:2)
else
{вывод диалога об отсутствии положительных элементов}
writeln('Положительных элементов не обнаружено!');
end.
Категория C2 • задача №3
Остальные решения из билета №3 для подготовки к ЕГЭ по информатике 2013
Условие задачи (наведите курсор мыши на ссылку) |
Аудиовизуальное решение |
Мультимедийная видеопрезентация |
Решение в формате слайд-шоу |
Текстовое решение |
---|
Комментарии