Лекции.Орг


Поиск:




Категории:

Астрономия
Биология
География
Другие языки
Интернет
Информатика
История
Культура
Литература
Логика
Математика
Медицина
Механика
Охрана труда
Педагогика
Политика
Право
Психология
Религия
Риторика
Социология
Спорт
Строительство
Технология
Транспорт
Физика
Философия
Финансы
Химия
Экология
Экономика
Электроника

 

 

 

 


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




 

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

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

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 <= 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” перед остановкой в ожидании ввода. Это является подсказкой для человека, использующего программу. Вывод – подсказку перед оператором ввода следует делать всегда.

 

Задача 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.







Поделиться с друзьями:


Дата добавления: 2016-11-18; Мы поможем в написании ваших работ!; просмотров: 1271 | Нарушение авторских прав


Поиск на сайте:

Лучшие изречения:

Бутерброд по-студенчески - кусок черного хлеба, а на него кусок белого. © Неизвестно
==> читать все изречения...

2437 - | 2357 -


© 2015-2024 lektsii.org - Контакты - Последнее добавление

Ген: 0.012 с.