ÐÑпÑÑк 5 - РоÑÑийÑкий гоÑÑдаÑÑÑвеннÑй пÑоÑеÑÑионалÑно ...
ÐÑпÑÑк 5 - РоÑÑийÑкий гоÑÑдаÑÑÑвеннÑй пÑоÑеÑÑионалÑно ...
ÐÑпÑÑк 5 - РоÑÑийÑкий гоÑÑдаÑÑÑвеннÑй пÑоÑеÑÑионалÑно ...
Create successful ePaper yourself
Turn your PDF publications into a flip-book with our unique Google optimized e-Paper software.
Если условия задачи подразумевают только<br />
обнаружение самого факта наличия в массиве<br />
элемента, соответствующего заданному<br />
условию, то достаточно по результатам проверки<br />
состояния флага вывести требуемое<br />
сообщение (“элемент есть” / “элемента нет”).<br />
Кроме того, в подобном случае для упрощения<br />
программы, если для нее отсутствуют<br />
ограничения на время работы (не учитывается<br />
критерий оптимальности программирования),<br />
то можно исключить из нее досрочное<br />
прерывание цикла (оператор goto) и выполнять<br />
полный перебор элементов.<br />
Вопрос учащимся: почему в этом случае<br />
допустимо продолжить просмотр элементов<br />
массива?<br />
Ведь после обнаружения искомого элемента<br />
все другие элементы, не соответствующие<br />
условию, не меняют состояния флага, а если<br />
в массиве искомый элемент будет обнаружен<br />
повторно, то флаг повторно будет приравнен<br />
true (или 1), но это также не повлияет на результат<br />
решения задачи.<br />
Пример<br />
Определить, имеется ли в одномерном целочисленном<br />
массиве хотя бы один нулевой элемент:<br />
Нет<br />
false<br />
Нулевой<br />
элемент не<br />
найден<br />
Начало<br />
Ввод массива mas[]<br />
flag = false<br />
i = 1 to 10<br />
mas[i] = 0<br />
flag<br />
Конец<br />
Да<br />
flag = true<br />
true<br />
Нулевой<br />
элемент<br />
есть<br />
Выполняемое действие<br />
Строки программы<br />
Начало программы<br />
program mas_find;<br />
Объявление массива<br />
var mas : array[1..10] of integer;<br />
Объявление цикловой переменной i : integer;<br />
Объявление логической переменной-флага flag : boolean;<br />
begin<br />
ввод массива<br />
Первоначально флаг “сбрасывается” (приравнивается<br />
flag := false;<br />
false)<br />
Цикл перебора элементов массива for i := 1 to 10 do<br />
begin<br />
Если текущий элемент массива равен нулю, то if mas[i] = 0 then flag := true;<br />
флаг “устанавливается” (приравнивается true)<br />
Конец цикла end;<br />
Если флаг “установлен”, то выводится номер if flag then writeln('Нулевой элемент есть')<br />
(индекс) последнего обработанного в цикле else writeln('Нулевой элемент не найден');<br />
элемента, на котором цикл был прерван. Если<br />
же флаг по-прежнему “сброшен”, то выводится<br />
сообщение об отсутствии в массиве такого элемента<br />
Конец программы<br />
end.<br />
Поиск второго, третьего и т.д. элемента, соответствующего условию<br />
Задача поиска в массиве не первого, а второго, третьего и т.д. элемента, соответствующего<br />
условию, отличается от предыдущей задачи тем, что в ней для искомого элемента фактически добавлено<br />
еще одно условие — факт обнаружения перед этим первого удовлетворяющего условию<br />
элемента (либо двух, трех и т.д. предыдущих искомому элементов, удовлетворяющих условию).<br />
Реализация проверки факта обнаружения предыдущих подходящих элементов также осуществляется<br />
при помощи флага.<br />
Вопрос учащимся: как можно в этом случае использовать переменную-флаг? Каким должен быть тип<br />
этой переменной?<br />
37<br />
май 2012 / ИНФОРМАТИКА