03.11.2014 Views

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

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

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

SHOW MORE
SHOW LESS

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 / ИНФОРМАТИКА

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

Saved successfully!

Ooh no, something went wrong!