2018-08-02 22:04:49 +03:00
< html >
< head >
< object type = "application/x-oleobject" classid = "clsid:1e2a7bd0-dab9-11d0-b93a-00c04fc99f9e" >
< param name = "Keyword" value = "goto" >
< param name = "Keyword" value = "label" >
< / object >
< meta http-equiv = "Content-Type" content = "text/html; charset=windows-1251" >
< title > < / title >
< link rel = "StyleSheet" href = "../../default.css" >
< / head >
< body >
2025-11-07 16:12:31 +03:00
< H1 > Оператор безусловного перехода goto< / H1 >
Оператор безусловного перехода < b > < code > goto< / code > < / b > имеет следующую форму:< blockquote >
2018-08-02 22:04:49 +03:00
< p > < code > < b > goto< / b > < / code > < code class = "codeit" >
2025-11-07 16:12:31 +03:00
метка< / code > < / p >
2018-08-02 22:04:49 +03:00
< / blockquote >
2025-11-07 16:12:31 +03:00
< p > Он переносит выполнение программы к оператору, помеченному меткой < code class = "codeit" >
метка< / code > . < / p >
< p > Метка представляет собой идентификатор или целое без знака. Чтобы пометить
оператор меткой, необходимо перед оператором указать метку с последующим
двоеточием: < / p >
2018-08-02 22:04:49 +03:00
< blockquote >
< p > < code > label1:< / code > < code class = "codeit" >
2025-11-07 16:12:31 +03:00
оператор< / code > < / p >
2018-08-02 22:04:49 +03:00
< / blockquote >
2025-11-07 16:12:31 +03:00
< p > Метки должны быть описаны в разделе меток с использованием служебного слова
2018-08-02 22:04:49 +03:00
< b > < code > label< / code > < / b > :< / p >
< blockquote >
< p > < code > < b > label< / b > 1,2,3;< / code > < / p >
< / blockquote >
2025-11-07 16:12:31 +03:00
< p > Например, в результате выполнения программы< / p >
2018-08-02 22:04:49 +03:00
< blockquote > < p > < code > < b > label< / b > 1,2;< br >
< b > begin< / b > < br >
< b > var< / b > i := 5;< br >
2: < b > if< / b > i< 0 < b > then< / b > < b > goto< / b > 1;< br >
write(i);< br >
Dec(i);< br >
< b > goto< / b > 2;< br >
1:< br >
< b > end< / b > .< / code > < / p >
< / blockquote >
2025-11-07 16:12:31 +03:00
< p > будет выведено < code > 543210< / code > .< / p >
< p > Метка должна помечать оператор в том же блоке, в котором описана. Метка не
может помечать несколько операторов.< / p >
< p > Переход на метку может осуществляться либо на оператор в том же блоке, либо
на оператор в объемлющей конструкции. Так, запрещается извне цикла переходить на метку внутри цикла.< / p >
< p > Использование оператора безусловного перехода в программе считается признаком
плохого стиля программирования. Для основных вариантов использования < code > < b >
goto< / b > < / code > в язык Паскаль введены специальные
процедуры: < code > < b > < font color = "#800000" > break< / font > < / b > < / code >
- переход на оператор, следующий за циклом, < code > < b > < font color = "#800000" > exit< / font > < / b > < / code > - переход за последний оператор процедуры, < code > < b >
2018-08-02 22:04:49 +03:00
< font color = "#800000" > continue< / font > < / b > < / code >
2025-11-07 16:12:31 +03:00
- переход за последний оператор в теле цикла.< / p >
< p > Один из немногих примеров уместного использования оператора < code > < b > goto< / b > < / code > в программе - выход из нескольких вложенных циклов одновременно.
Например, при поиске элемента < code > k< / code > в
двумерном массиве:< / p >
2018-08-02 22:04:49 +03:00
< blockquote >
< p > < code > < b > var< / b > a: < b > array< / b > [1..10,1..10] < b > of< / b > integer;< br >
...< br >
< b > var < / b > found := False;< br >
< b > for< / b > < b > var < / b > i:=1 < b > to< / b > 10 < b > do< / b > < br >
< b > for< / b > < b > var < / b > j:=1 < b > to< / b > 10 < b > do< / b > < br >
< b > if< / b > a[i,j]=k < b > then< / b > < br >
< b > begin< / b > < br >
found := True;< br >
< b > goto< / b >
c1;< br >
< b > end< / b > ;< br >
c1: writeln(found);< / code > < / p >
< / blockquote >
< p > < / p >
< / body >
< / html >