Добавил:
sofyvits@ya.ru на позитиве Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Скачиваний:
481
Добавлен:
10.01.2016
Размер:
919.04 Кб
Скачать

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

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

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

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).

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

Программа.

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 пустой оператор. Основное назначение пустого оператора – дать возможность выхода из середины программы или составного оператора.

Рис. 7. Пример блок-схемы алгоритма

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

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]. Паскаль может контролировать использование индексов в программе на этапе компиляции и на этапе счета.

Проиллюстрируем работу с массивами на примерах.

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

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 – массив ростов курсантов.

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

program task;

const

h = 20;

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

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

begin

write(‘Введите n, n <= 20’); readln(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] <0 then

k := k+1

else

if a[i] >0 then

l := l+1

else

m := m + 1;

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

end.

В программе введены вспомогательные операторы вывода write(‘Введите n, n <= 20’), write(‘Элемент ‘,i). Эти операторы служат для пояснения исходной информации. При выполнении программы на экран выводится “Введите n, n <= 20” перед остановкой в ожидании ввода. Это является подсказкой для человека, использующего программу. Вывод-подсказку перед оператором ввода следует делать всегда.

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

В данной задаче необходимо найти сумму элементов каждого столбца ∑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 writeln (s[j]) {Вывод одномерного массива}

end.

Соседние файлы в папке Лекции Информатика и программирование