Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:

Программирование Часть 1 - ТурбоПаскаль

.pdf
Скачиваний:
27
Добавлен:
29.03.2016
Размер:
599.33 Кб
Скачать

11-

Условный оператор позволяет проверить условие и в зависимости от его результатов выполнить то или иное действие. Таким образом, условный оператор – это средство ветвления вычислительного процесса, которое может быть записано в двух формах: полной и неполной.

Структура условного оператора имеет вид:

If {условие}

then

begin

{инструкции выполняемые, если условие истинно};

end

else

begin

{инструкции выполняемые, если условие ложно};

end;

Условный оператор работает по следующему алгоритму:

1.Вычисляется значение условия (выражение логического типа).

2.Если значение выражения условия равно true, то выполняются инструкции, следующие за сло-

вом then. Если значение выражения условия равно false, то выполняются инструкции, следующие за

словом else.

Примечание:

1.Перед ключевым словом else символ «;» не ставится.

2.Если при выполнении (невыполнении) условия надо выполнить только одну инструкцию, то слова begin и end после then (else) могут быть опущены.

2.5.3. Операторы повторений

2.5.3.1. Счётный оператор цикла For

При решении многих задач некоторую последовательность действий приходится выполнять не-

сколько раз. Такие повторяющиеся действия называются циклами и реализуются в программе с исполь-

зованием операторов циклов (повторений). В языке Турбо Паскаль имеется три различных оператора, с

помощью которых можно запрограммировать циклы. Один из них – оператор For. Он используется ес-

ли заранее известно число таких повторений.

Структура оператора цикла For:

12-

For {пар_цикла{:={нач_знач} to { кон_знач } do

begin

{последовательность операторов}; end;

Здесь For, to, do – зарезервированные слова (для, до, выполнить);

{пар_цикла{ - параметр цикла – переменная порядкового типа;

{нач_знач} - начальное значение – выражение того же типа, определяет начальное значение пере-

менной – счетчика цикла;

{кон_знач} - конечное значение – выражение того же типа, определяет конечное значение пере-

менной – счетчика цикла;

{последовательность операторов} – произвольный набор операторов.

Для данной структуры шаг наращивания параметра цикла строго постоянен и равен «+1». Суще-

ствует другая форма оператора:

For {пар_цикла{:={нач_знач} downto { кон_знач } do

begin

{последовательность операторов}; end;

Для данной структуры шаг наращивания параметра цикла строго постоянен и равен «-1».

Примечания:

1)Если между begin и end находится только одна инструкция, то begin и end не пишутся.

2)Нельзя проводить какое–либо изменение параметра цикла внутри тела цикла.

Оператор цикла for работает следующим образом:

1)Вычисляется начальные и конечные значения параметра цикла;

2)Если начальное значение превосходит конечное, то тело цикла не выполняется. В противном случае, изменяется параметр цикла и вместе с каждым его значением выполняется тело цикла.

2.5.3.2. Оператор цикла while с предпроверкой условия

Оператор цикла while используется в программе, если надо провести некоторые повторные вы-

числения (цикл), однако число повторов заранее неизвестно и определяется логикой программы.

13-

Структура оператора цикла выглядит следующим образом:

while {условие} do

begin

{последовательность операторов}; end;

Здесь While, do – зарезервированные слова (пока, выполнить);

{условие{ - выражение логического типа;

{последовательность операторов} – произвольный набор операторов.

Оператор цикла while работает следующим образом:

1.Вычисляется условие.

2.Если условие false, то вход в цикл не выполняется и управление передается оператору, следу-

ющему непосредственно за операторами тела цикла.

3.Если же условие true, то происходит вход в цикл и однократное выполнение операторов. Как только достигнут конец тела цикла, управление передается на его заголовок, где снова вычис-

ляется его условие.

Примечание:

1.Для того чтобы последовательность инструкций между begin и end была выполнена хотя бы один раз, необходимо, чтобы перед выполнением инструкции while условие было истинно;

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

2.5.3.3. Оператор цикла repeat с постпроверкой условия

Оператор цикла repeat как и инструкция while, используется в программе, если надо провести не-

которые повторные вычисления (цикл), однако число повторов заранее неизвестно и определяется ло-

гикой программы.

Структура оператора цикла выглядит следующим образом:

repeat

{последовательность операторов}; until }условие{;

14-

Здесь repeat, until – зарезервированные слова;

{условие{ - выражение логического типа;

{последовательность операторов} – произвольный набор операторов.

Оператор работает следующим образом:

1.Выполняются инструкции следующие за слово repeat.

2.Вычисляется значение условия. Если условие false, то повторно выполняются инструкции цикла. Если же условие true, то выполнение цикла заканчивается.

Таким образом, операторы, находящиеся между repeat и until, выполняются до тех пор, пока условие равно false.

Примечания:

1. Последовательность инструкций между repeat и until всегда будет выполнена хотя бы один

раз.

2. Для того чтобы цикл завершился, необходимо, чтобы последовательность операторов между repeat и until изменяла значения переменных, входящих в выражение условие.

Таблица 2.3. - Сравнение работы операторов цикла (repeat, while, for).

Цикл с предусловием while

Цикл с постусловием repeat

Цикл со счетчиком for

n/n

(пока условие истинно)

(до истинности условия)

 

 

 

 

 

1

До начала цикла должны быть сделаны начальные установки

Начальная установка переменной

 

переменных, управляющих условием цикла, для корректного

счетчика цикла до заголовка не

 

входа в цикл.

 

требуется

 

 

 

 

2

В теле цикла должны присутствовать операторы, изменяющие

Изменение в теле цикла значений

 

переменные условия так, чтобы цикл через некоторое число

переменных, стоящих в заголовке

 

итераций закончился.

 

цикла, не допускается.

 

 

 

 

3

Цикл работает пока условие

Цикл работает пока условие

Количество итераций цикла неиз-

 

true.

false.

менно и точно определяется зна-

 

 

 

чениями верхней и нижней границ

 

 

 

и шага цикла.

 

 

 

 

4

Цикл завершается, когда

Цикл завершается, когда усло-

Нормальный ход работы цикла

 

условие становится лож-

вие становится истинным.

может быть нарушен оператором

 

ным.

 

goto или процедурами Break и

 

 

 

Continue.

 

 

 

 

5

Цикл может не выполниться

Цикл обязательно выполняется

Цикл может не выполниться ни

 

 

 

 

15-

 

ни разу, если исходное зна-

как минимум один раз.

разу, если шаг цикла будет изме-

 

чение условия при входе в

 

нять значение счетчика цикла от

 

цикл false

 

нижней границы в направлении,

 

 

 

противоположном верхней грани-

 

 

 

цы.

 

 

 

 

6

Если в теле цикла требуется

Независимо от количества опе-

Если в теле цикла требуется более

 

более одного оператора, то

раторов в теле цикла использо-

одного оператора, то необходимо

 

необходимо использовать

вание составного оператора не

использовать составной оператор.

 

составной оператор.

требуется.

 

 

 

 

 

2.5.3.4. Оператор выбора

Рассмотренный условный оператор if позволяет выбирать только одно из двух возможных дей-

ствий в зависимости от логического выражения.

Оператор выбора case является обобщением оператора if – он дает возможность выполнять одно из нескольких действий в зависимости от значения ключа выбора.

В качестве ключа выбора используется выражение, которое располагается между ключевыми сло-

вами case и of. Результатом этого выражения может быть только значение порядкового типа, общее ко-

личество, элемент которого не превышает 65535.

Структура оператора case:

case {ключ_выбора} of

}список_выбора_1{ : begin

{последовательность операторов 1}; end;

}список_выбора_2{ : begin

{последовательность операторов 2}; end;

…………………………………

}список_выбора_n{ : begin

{последовательность операторов n};

end

else begin

16-

{последовательность операторов, выполняемая в случае, если выражение не попало ни в один из списков выбора};

end

end;

Здесь case, of, else, end – зарезервированные слова.

{ключ_выбора{ - выражение логического типа, параметр, по которому осуществляется выбор;

}список_выбора { - константатого же типа, что и выражение {ключ_выбора{.

{последовательность операторов} – произвольный набор операторов.

Алгоритм работы оператора case следующий: вычисляется значение ключа выбора case, затем по-

лученное значение последовательно сравнивается с каждой из констант списка выбора. Если значение выражения совпадает с константой из списка, то выполняется соответствующая этому списку последо-

вательность операторов, и на этом выполнение оператора case завершается. Если значение выражения не совпадает ни с одной константой из всех списков, то выполняется последовательность инструкций идущих после else. Синтаксис инструкции case позволяет не использовать else и соответствующую по-

следовательность инструкций. В этом случае, если значение выражения не совпадает ни с одной кон-

стантой из всех списков, то выполняется следующая за cаse команда.

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

Современная технология структурного программирования основана на принципе «программиро-

вать без Goto»: считается, что злоупотребление операторами перехода затрудняет понимание програм-

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

раторов перехода может упростить программу.

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

Goto }метка{;

Здесь goto – зарезервированные слова;

{метка{ - метка.

Метка в Турбо Паскале – это произвольный идентификатор, позволяющий именовать некоторый оператор программы и таким образом ссылаться на него.

Метка располагается непосредственно перед помеченным оператором и отделяется от него двое-

точием.

17-

Оператор может помечаться несколькими метками, которые в этом случае отделяются друг от друга двоеточием. Перед тем, как появиться в программе, метка должна быть описана (см.п.2.2.). Опи-

сание меток состоит из зарезервированного слова label (метка), за которым следует список меток:

……

label

lab, lb1, lb2;

……

Begin

……

Goto lab;

……

lb1: ……

……

lab: ……

……

Goto lb2;

……

lb2: ……

……

Goto lb2;

……

End.

Действие оператора goto состоит в передаче управления соответствующему меченному оператору.

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

- метка, на которую сылается оператор goto, должна быть описана в разделе описаний и она обяза-

тельно должна встретиться где-нибуть в теле программы;

- метки, описанные в процедуре (функции), локализуются в ней, поэтому передачу управления извне процедуры (функции) на метку внутри неё невозможна.

2.5.4. Массивы

Рассмотренные выше простые типы данных позволяют использовать в программе одиночные объ-

екты – числа, символы, строки и т.п. В Турбо Паскале могут использоваться также объекты, содержа-

щие множество однотипных элементов. Это массивы – формальное объединение нескольких однотип-

18-

ных объектов (чисел, символов, строк и т.п.), рассматриваемое как единое целое. Массив – это упоря-

доченный набор однотипных элементов, имеющих общее имя.

Объявление массива. Перед использованием массив, как и любая переменная, должен быть объ-

явлен в разделе объявления переменных. Объявление массива выглядит следующим образом:

{имя}: array [{нижний_индекс} ... {верхний_индекс}] of {тип};

где

{имя} – имя переменной – массива.

{array} – ключевое слово, обозначающее, что переменная является массивом;

{нижний_индекс}, {верхний_индекс} – целые числа, определяющие диапазон изменения индексов

(номеров) элементов массива и, неявно, количество элементов (размер) массива;

{тип} – тип элементов массива.

Пример:

t: array[1..31] of real; k: array[0..2] of integer;

n: array[1..30] of longint;

При упоминании в программе любого элемента массива сразу за именем массива должен следо-

вать индекс элемента в квадратных скобках, например:

1. Оператор присваивания.

А[1]:=3;

А[2]:=4;

........

или

B[1]:=’Иванов’;

B[2]:=’Петров’;

........

Такой способ задания значений используется, если массив небольшой.

2. Оператором ввода с клавиатуры.

For i:=1 to 10 do

begin

Writeln(‘введите ’,i,’-ый элемент массива’);

Readln(a[i]);

19-

{в качестве индекса используется параметр цикла }

end;

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

3. Заполнение массива с использованием генератора случайных чисел.

.......

RANDOMIZE;

For i:=1 to 10 do

a[i]:=Random(x);

…....

{массив заполнится целыми числами в диапазоне от 0 до Х}

4. Заполнение по формуле.

for i:=1 to 10 do

a[i]:=sin(i)-cos(i);

5. Вывод массива.

For i:=1 to 10 do writeln(a[i]);

Вывод пятого элемента массива записывается так : write(a[5]).

Хотелось бы отметить, что {тип}, определяющий тип элементов массива и идущий за резервиро-

ванным словом of, - любой тип Турбо Паскаля, соответственно он может быть и другим массивом,

например:

{имя}: array [{нижний_индекс 1} ... {верхний_индекс 1}] of array [{нижний_индекс 2} ... {верх-

ний_индекс 2}] of array [{нижний_индекс 3} ... {верхний_индекс 3}] of … array [{нижний_индекс n} ...

{верхний_индекс n}] of {тип};

либо допустим другой вариант записи:

{имя}: array [{нижний_индекс 1} ... {верхний_индекс 1},{нижний_индекс 2} ... {верхний_индекс

2},{нижний_индекс 3} ... {верхний_индекс 3} … {нижний_индекс n} ... {верхний_индекс n}] of {тип}.

Глубина вложенности структурированных типов вообще, в том числе и массивов – произвольная,

поэтому колличество элементов в списке индексных типов (размерность массива) не ограниченно, но следует учитывать, что суммарная длина внутреннего представления массива не должна превышать

65520 байт.

20-

2.5.5.Записи

Запись – это структура данных, состоящая из фиксированного числа компонентов, называемых полями записи. При использовании массивов основное ограничение заключается в том, что все элемен-

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

Как было отмечено, «запись» относится к структурированному типу, описывающий набор данных разных типов. Каждое поле имеет уникальное (в пределах записи) имя. Чтобы описать запись, необхо-

димо указать ее имя, имена объектов, составляющих запись, и их типы.

Структура объявления типа записи имеет следующий вид:

type <имя записи> = Record <поле 1> : <тип 1>; <поле 2> : <тип 2> <поле n> : <тип n>

End;

Пример:

 

Type

 

pupil = Record

 

fam : string[15];

{поле фамилии}

b1,b2,b3,b4,b5 : 2..5;

{поля баллов}

sb : Real

{средний бал}

End;

 

Для хранения данных о 25 учениках класса, необходимо ввести массив klass - массив записей.

Var klass : array[1..25] Of pupil;

Доступ к полям записи можно осуществить двумя способами:

1. С указанием имени переменной и имени поля. Например, klass[2].fam, klass[3].sb, klass[1].b4

Ввод фамилий и оценок учащихся, т.е. элементов массива klass, можно записать так:

for i:=1 to 25 do begin

readln(klass[i].fam);