Рассмотренных операторов вполне достаточно для написания программ любой сложности. Тем не менее, в некоторых случаях использование операторов перехода может упростить программу.
Оператор перехода имеет вид:
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.Метки и операторы перехода
Похожие статьи:
-
Оператор безусловного перехода goto
Оператор безусловного перехода (goto) означает перейти к и применяется в случаях, когда после выполнения некоторого оператора надо выполнить не следующий…
-
Операторы условных и безусловных переходов.
Операторы циклов. Операторы цикла используются для организации многократно повторяющихся вычислений. Любой цикл состоит из тела цикла, то есть тех…