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 />

Первоначально флаг приравнивается нулю flag := 0;<br />

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

begin<br />

Если текущий элемент массива равен нулю, то: if mas[i] = 0 then<br />

begin<br />

— значение флага увеличивается на 1; flag := flag+1<br />

— если теперь флаг равен заданному n, то<br />

if flag = n then goto 1;<br />

выполняется безусловный переход на метку 1<br />

Конец ветви then внешнего условного<br />

end<br />

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

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

Если флаг равен n, то выводится номер (индекс) 1: if flag = n<br />

последнего обработанного в цикле элемента, на then writeln('Номер ',n:1,'-го нулевого<br />

котором цикл был прерван. Иначе (если флаг элемента: ',i:2)<br />

равен нулю — ни одного нулевого элемента else writeln('Искомый элемент не найден');<br />

не найдено, или если он меньше n — найдено<br />

меньше нулевых элементов, чем нужно)<br />

выводится сообщение об отсутствии в массиве<br />

такого элемента<br />

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

end.<br />

Таблица трассировки (для конкретного примера массива):<br />

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

Значения<br />

переменных<br />

i mas[i] flag<br />

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

mas[] = (1,0,2,0,3,0,4,0,5,0)<br />

flag := 0; – – 0<br />

for i := 1 to 10 do 1 1 0<br />

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

текущий элемент — не нулевой: ветвь then пропускается<br />

1 1 0<br />

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

текущий элемент — нулевой: выполняется ветвь then<br />

2 0 0<br />

flag := flag+1; 2 0 1<br />

if flag = n then goto 1;<br />

значение flag не равно n (трем): ветвь then пропускается<br />

2 0 1<br />

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

текущий элемент — не нулевой: ветвь then пропускается<br />

3 2 1<br />

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

текущий элемент — нулевой: выполняется ветвь then<br />

4 0 1<br />

flag := flag+1; 4 0 2<br />

if flag = n then goto 1;<br />

значение flag не равно n (трем): ветвь then пропускается 4 0 2<br />

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

текущий элемент — не нулевой: ветвь then пропускается<br />

5 3 2<br />

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

текущий элемент — нулевой: выполняется ветвь then<br />

6 0 2<br />

flag := flag+1; 6 0 3<br />

if flag = n then goto 1;<br />

значение flag равно n (трем): выполняется ветвь then и производится<br />

6 0 3<br />

досрочное прерывание цикла<br />

1: if flag = n<br />

then writeln('Номер ',n:1,'-го нулевого элемента: ',i:2)<br />

else writeln('Искомый элемент не найден'); 6 0 3<br />

flag = 3: выполняется ветвь then — на экран выводится строка<br />

Номер 3-го нулевого элемента: 6<br />

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

соответствующего заданному условию, то (так же, как и в предыдущей задаче при выяснении<br />

факта наличия первого такого элемента) тоже можно для упрощения программы исключить из<br />

39<br />

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

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

Saved successfully!

Ooh no, something went wrong!