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.

Вариант с использованием оператора goto:<br />

Выполняемое действие<br />

Строки программы<br />

Начало программы<br />

program mas_find;<br />

Объявление массива<br />

var mas: array[1..10] of integer;<br />

Объявление цикловой переменной i: integer;<br />

Объявление метки (для перехода по goto) label 1;<br />

begin<br />

ввод массива<br />

Цикл перебора элементов массива for i := 1 to 10 do<br />

begin<br />

Если очередной элемент массива равен<br />

if mas[i] = 0 then goto 1;<br />

нулю, то выполнить безусловный переход<br />

на метку 1<br />

Конец цикла end;<br />

Вывод номера (индекса) последнего обработанного<br />

в цикле элемента (на котором<br />

1: writeln('Номер первого нулевого<br />

элемента: ',i:2);<br />

цикл был прерван)<br />

Конец программы<br />

end.<br />

Вариант с использованием оператора break 2 :<br />

Выполняемое действие<br />

Строки программы<br />

Начало программы<br />

program mas_find;<br />

Объявление массива<br />

var mas: array[1..10] of integer;<br />

Объявление цикловой переменной i: integer;<br />

begin<br />

ввод массива<br />

Цикл перебора элементов массива for i := 1 to 10 do<br />

begin<br />

Если очередной элемент массива равен<br />

if mas[i] = 0 then break;<br />

нулю, то прервать цикл досрочно при помощи<br />

оператора break<br />

Конец цикла end;<br />

Вывод номера (индекса) последнего обработанного<br />

в цикле элемента (на котором<br />

writeln('Номер первого нулевого<br />

элемента: ', i:2);<br />

цикл был прерван)<br />

Конец программы<br />

end.<br />

Обе приведенные выше программы обладают существенным недостатком: в обоих случаях предполагается,<br />

что искомый элемент гарантированно имеется в массиве.<br />

Вопрос учащимся: почему это является недостатком? Что будет, если искомого элемента в массиве нет?<br />

В противном случае невозможно точно определить, действительно ли на экран выведен номер элемента<br />

массива, удовлетворяющего условию, или такой элемент не найден, а цикл перебора элементов полностью<br />

завершен и управление естественным образом передано на оператор вывода на экран (очевидно, в этом<br />

случае он напечатает номер последнего просмотренного элемента, так как по завершении цикла значения<br />

цикловых переменных сохраняются).<br />

Для устранения этого недостатка введем дополнительную переменную-флаг, значение которой<br />

фиксирует факт обнаружения искомого элемента массива. Такая переменная может иметь логический<br />

тип (boolean) и принимать значения true или false либо иметь целый тип (integer), и<br />

тогда значение false обозначается, например, нулем, а true — любым ненулевым числом. (Цело-<br />

2<br />

Некоторые программисты считают, что использование оператора безусловного перехода goto противоречит принципам<br />

структурного программирования. Однако при отсутствии в используемой версии языка Паскаль специального<br />

оператора прерывания цикла break (он был добавлен только начиная с версии Turbo Pascal 7.0) попытки использования<br />

цикла с постусловием (repeat … until) гораздо значительнее усложняют программу, чем применение goto, учитывая<br />

необходимость в таком цикле вручную осуществлять изменение индекса/индексов текущего элемента и контроль<br />

выхода за пределы массива. Поэтому здесь и далее ради универсальности получаемого алгоритма по отношению к версии<br />

языка Паскаль мы будем использовать оператор goto. Если в используемой вами версии языка определен оператор<br />

break, то в этом и последующих листингах достаточно заменить оператор goto 1 на break и удалить строку определения<br />

метки 1.<br />

35<br />

май 2012 / ИНФОРМАТИКА

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

Saved successfully!

Ooh no, something went wrong!