Метки и операторы перехода

      Комментарии к записи Метки и операторы перехода отключены

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

Оператор перехода имеет вид:

GOTO .

Здесь GOTO – зарезервированное слово (перейти на метку).

– метка.

Меткав Турбо Паскале – это произвольный идентификатор, позволяющий именовать некоторый оператор программы и таким образом ссылаться на него. В целях совместимости со стандартным языком Паскаль в языке Турбо Паскаль допускается в качестве меток использование целых чисел без знака. В стандартном Паскале метка – это целое без знака. Метка располагается непосредственно перед помечаемым оператором и отделяется от него двоеточием. Перед тем, как появиться в программе, метка должна быть описана. Описание меток состоит из зарезервированного слова LABEL (метка), за которым следует список меток.

label 222, a1, met;

Описанной меткой должен быть помечен ровно один оператор программы.

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

Пусть программа содержит последовательность операторов:

x :+ 2; a := b; goto 99;

14 : a := 0; x := b; 99 : y := x; write(x)

В этом случае сначала выполняются операторы x := 2 и a := b, затем следует переход к оператору, помеченному меткой 99, то есть к оператору y := x. После оператора y := x будет выполнен оператор write(x).

Задача 11.Выяснить, имеются или не имеются среди чисел cos(i3)sin(in), i = 1, …, n, меньшие 0.0001. Если имеются, то выводится “есть”, если нет – “нет” (рис. 50).

Программа.

program task11;

label m1;

var i, n : integer;

begin

readln(n);

for i := 1 to n do

if cos(i*i*i)*sin(i*n)0.0001 then

begin

write(‘есть’)’;

goto m1

end;

write(‘нет’);

m1 : end.

Если оказывается, что некоторое число меньше 0.0001, то следующие числа уже не рассматриваются, следует вывод “есть” и переход на конец программы. Перед end расположен помеченный меткой m1пустой оператор. Основное назначение пустого оператора – дать возможность выхода из середины программы или составного оператора.

Программу можно написать с двумя операторами перехода:

program task11в;

label m1,m2;

var i, n : integer;

begin

readln(n);

for i := 1 to n do

if cos(i*i*i)*sin(i*n)0.0001 then goto m1;

write(‘нет’); goto m2;

m1 : write(‘есть’)’;

m2 : end.

C помощью оператора перехода, расположенного вне условного оператора или оператора цикла, нельзя перейти внутрь этого условного оператора или оператора цикла. Частое использование оператора GOTO считается дурным тоном. Это затрудняет чтение программы и нарушает принципы структурного программирования.

Работа с массивами

При описании массива необходимо указать общее число входящих в массив элементов и тип этих элементов. Например:

var

a: array [1..10] of real;

b : array [0..50] of char;

c : array [–3..4] of boolean;

При описании массива используются зарезервированные слова ARRAY и OF (массив из). За словом ARRAY в квадратных скобках указывается тип–диапазон, с помощью которого компилятор определяет общее число элементов массива. Тип–диапазон задается левой и правой границами изменения индекса массива, так что массив а состоит из 10 элементов, массив b – из 51, а массив с – из 8.

Доступ к каждому элементу массива в программе осуществляется с помощью индекса – целого числа (точнее, выражения порядкового типа), служащего своеобразным именем элемента в массиве (если левая граница типа–диапазона равна 1, индекс элемента совпадает с его порядковым номером). При упоминании в программе любого элемента массива сразу за именем массива должен следовать индекс элемента в квадратных скобках, например:

b[17] := ‘f”;

c[–2] := a[1]a[2]

for k := 1 to 10 do a[k] := 0;

В правильно составленной программе индекс не должен выходить за пределы, определенные типом диапазоном. Например, можно использовать элементы a[1], b[38], c[0], но нельзя a[0] или с[38]. Турбо Паскаль может контролировать использование индексов в программе на этапе компиляции и на этапе счета.

Для иллюстрации работы с массивами составим программы для задач, алгоритмы которых разработаны в теме 2.

Задача 12.Определить количество студентов в группе, имеющих рост выше среднего.

Соответствует задаче 7 в теме 2.

program task12;

const

m = 40;

var

i, n, k : integer; s : real;

r : array [1..m] of real;

begin

readln(n);

s := 0;

for i := 1 to n do

begin

readln(r[i]);

s := s + r[i]

end;

s := s/n;

k := 0;

for i := 1 to n do

if r[i]s then k := k+1;

write (‘Количество студентов ростом выше среднего = ‘,k)

end.

m – константа целого типа. Максимальное количество студентов в группе может быть равно 40. Для величин ростов студентов используется одномерный массив из m элементов. n – количество студентов в каждой конкретной группе, для которой производится расчет. i – номер текущего студента. k – счетчик количества студентов, имеющих рост выше среднего. r – массив ростов студентов.

Задача 13.Задана последовательность из n чисел. Определить количество положительных, отрицательных и нулевых элементов. Это задача 8 из темы 2, где разработан алгоритм и приведена схема алгоритма. Запишем программу.

program task13;

const

h = 20;

var i, k, l, m,n : integer;

a : array [1..h] of real;

begin

write(‘Введите n, n

for i :=1 to n do

begin

write(‘Элемент ‘,i); readln(a[i])

end;

l := 0; r := 0; m := 0

for i := 1 to n do

if a[i]

k := k+1

else

if a[i] 0 then

l := l+1

else

m := m + 1;

write(‘Отрицательных ‘,k, ‘ . Положительных ‘,l,’ . Нулевых ‘,m)

end.

В программе введены вспомогательные операторы вывода write(‘Введите n, n

Задача 14.Группа из N человек сдавала в зимнюю сессию M экзаменов. Известны результаты экзаменов. Подсчитать средний балл по каждому предмету.

В задаче 13, приведенной в теме 2, разработан алгоритм расчета среднего балла для каждого студента. В нашей задаче отличие заключается в том, что необходимо найти сумму элементов каждого столбца aij и тогда среднее Sj = Sj /N. Результатом расчета будет одномерный массив S, состоящий из M элементов.

Исходные данные: N – количество студентов в группе, M – число экзаменов в сессию, матрица A – оценки. a[i,j] – оценка i – го студента по j – му экзамену. Массив А –двухмерный массив, состоящий из N строк и M столбцов. Размер массива – N M. Размерность массива А равна двум, то есть две координаты (номер строки и номер столбца) определяют положение каждого элемента.

Программа.

program task14;

const

n = 30; m = 5;

var

i,j : integer;

s : array [1..m] of real; {Описание одномерного массива s.}

a : array [1..n,1..m] of integer;{Описание двухмерного массива а.}

begin

for i := 1 to n do for j := 1 to m do readln(a[i,j]);{Ввод элементов матрицы.}

for j := 1 to m do

begin

s[j] := 0;

for i := 1 to n do s[j] := s[j] + a[i,j];{Суммируются элементы}

{ каждого столбца матрицы}

s[j] := s[j]/n

end;

for j := 1 to m do write (s[j]) {Вывод одномерного массива}

end.

Статьи к прочтению:

Урок 9.Метки и операторы перехода


Похожие статьи: