03.11.2014 Views

Выпуск 5 - Российский государственный профессионально ...

Выпуск 5 - Российский государственный профессионально ...

Выпуск 5 - Российский государственный профессионально ...

SHOW MORE
SHOW LESS

You also want an ePaper? Increase the reach of your titles

YUMPU automatically turns print PDFs into web optimized ePapers that Google loves.

Если условия задачи подразумевают только<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 / ИНФОРМАТИКА

Hooray! Your file is uploaded and ready to be published.

Saved successfully!

Ooh no, something went wrong!