Суббота, 18.05.2024, 19:10
Информатика в школе
Приветствую Вас Гость | RSS
Главная Операторы изменяющие естественный ход событий Регистрация Вход
Форма входа

Меню сайта

Мини-чат
300

Категории
Школа и сайт [4]
Software [18]
Hardware [14]

Календарь
Календари для ucoz

Статистика

Онлайн всего: 1
Гостей: 1
Пользователей: 0

Операторы изменяющие естественный ход событий

              Язык Паскаль задумывался как структурный язык. То есть любой алгоритм в нем можно описывать в виде набора операторов условия и цикла, каждый из которых можно рассматривать как отдельный блок. В блоки вкладываются более мелкие блоки, и т.д. Поэтому реализация программы легко осуществляется в рамках структурного программирования. Ряд языков программирования (таких, например как Фортран и Бейсик) не удовлетворяют свойству структурности: в них для описания алгоритма приходится использовать, например, оператор безусловного перехода(goto).
             Для первых языков программирования использование безусловного перехода являлось совершенно естественным,
так как сама инструкция безусловного перехода
используется в каждой программе, написанной на машинном коде. Без нее нельзя реализовать такие,
например, конструкции, как if...else.
Первоначально языки программирования придумывались как средство более удобной записи машинных команд,
поэтому в них оператор goto применялся очень широко. Однако после была выработана идея, что использование в программе безусловного перехода сильно запутывает программу, особенно если этот переход осуществляется "наверх",то есть возвращает нас в программе к тем операторам, которые уже выполнялись. Тезис структурного программирования призывает вовсе не использовать в программе оператор goto. Для людей, которые, вероятно, первый раз о таком слышат, это кажется вполне естественным. А вот для программистов,которые привыкли мыслить "в терминах goto", отказ от его использования был очень странен и вызывал много возражений. Поэтому для облегчения перехода на Паскаль программистов старой школы и для тех редких случаев, когда использование goto оказывается более удобным, оператор был оставлен в языке.

Позже большинство программистов отказались от регулярного использования оператора goto, однако бывают случаи, когда он может быть полезен.

Необходимо знать, что всегда можно обойтись без оператора goto.

Оператор безусловного перехода goto

Оператор безусловного перехода goto имеет следующую форму:

goto метка

Он переносит выполнение программы к оператору, помеченному меткой метка.

Метка представляет собой идентификатор или целое без знака. Чтобы пометить оператор меткой, необходимо перед оператором указать метку с последующим двоеточием:

label1: оператор

Метки должны быть описаны в разделе меток с использованием служебного слова label:

label 1,2,3;

Пример:

Задача 1. Вывести числа в обратном порядке.

Решение.

label 1,2;
begin
i
:=5;
2
: if i<0 then goto 1;
write(i);
Dec(i);
goto 2;
1
:
end.

будет выведено 54321.

Метка должна помечать оператор в том же блоке, в котором описана. Метка не может помечать несколько операторов.Переход на метку может осуществляться либо на оператор в том же блоке, либо на оператор в объемлющей конструкции.

Так, запрещается извне цикла переходить на метку внутри цикла.

Использование оператора безусловного перехода в программе считается признаком плохого стиля программирования.

Для основных вариантов использования goto в язык Паскаль введены специальные операторы: break - переход на оператор,

 следующий за циклом, exit - переход за последний оператор процедуры, continue - переход за последний оператор в

теле цикла.

Единственный пример уместного использования оператора goto в программе - выход из нескольких вложенных циклов одновременно. 

Пример:

Задача 2. Найти элемент k в двумерном массиве.

Фрагмент.

...

found:=False;
for i:=1 to 10 do
for j:=1 to 10 do
if a[i,j]=k then
begin
found
:=True;
goto c1;
end;
c1
: writeln(found);

...

Пример:

Задача 3. Найти квадратный корень числа.

Решение.
label goback;
var num: real; 
begin 
goback:write ('Введите число: '); 
readln (num); if num < 0 then goto goback;
 num := sqrt (num);
 write ('Квадратный корень: ', num:5:2);
 end.

Операторы break и continue

Операторы break и continue используются для того, чтобы прервать ход выполнения цикла. Оператор break выполняет полный выход из цикла, т.е. все возможные итерации цикла прерываются. Оператор continue прерывает только текущую итерацию.


Пример:

Задача 4. У пользователя несколько раз запрашивается число, только в том случае, если он не вводит ноль.

Решение.
Var num: real;
i: integer;
 
begin
 
for i := 1 to 5 do
begin

write
('Введите число: ');
readln(num);
if num=0 then break; writeln (num)
 
end;
end.

В примере

Пример:

Задача 5. У пользователя несколько запрашиваются 5 чисел и суммируются только положительные из них.

Решение.
var  num,sum:real;
        i:integer;
begin
sum:=0;
 
for i := 1 to 5 do
begin

write
('Введите число: ');
 
readln(num);
 
if num < 0 then continue; sum:=sum + num
end;
 
write (sum:10:2);
end
.


<<
Часы

Праздники России

Праздники России



Uploader

Поиск

Полезные ссылки
  • Официальный блог
  • Сообщество uCoz
  • Программисту
  • Олимпиаднику
  • Как создать сайт с нуля
  • Сайт МОУ СОШ №81
  • 3DNews

  • Александр Михайлович Марченко © 2024 Конструктор сайтов - uCoz