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

Лекции

.pdf
Скачиваний:
15
Добавлен:
11.04.2015
Размер:
764.74 Кб
Скачать

Информатика. Конспект лекций тема №1. Автор Рожков В.И.

if выражение1 then if выражение2 then оператор1 else оператор2 Служебное слово else всегда сопоставляется с ближайшим по тексту служебным словом if, которое еще не связано со служебным словом else. if выражение1 then

begin

if выражение2 then оператор1

else оператор2

end

Операторы цикла

Оператор цикла с предусловием

Имеет следующую алгоритмическую структуру

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

Выражение должно иметь тип boolean. Истинность выражения проверяется каждый раз перед выполнением цикла. Оператор while выполняется, пока выражение не станет равным False. Если значение выражения False в самом начале, то оператор while вообще не выполняется. Пример вычисления факториала.

Var X, FACT, N:integer; begin

N:=5; X:=1; while X<=N do

11

Информатика. Конспект лекций тема №1. Автор Рожков В.И.

begin

FACT:= FACT*X; X:=X+1;

end;

Оператор цикла с постусловием

Имеет следующую алгоритмическую структуру

Синтаксис оператора цикла с постусловием

Последовательность операторов между repeat и until выполняется до тех пор, пока значение выражения не станет true. Оператор repeat until выполняется по крайней мере один раз. Слова repeat until играют роль скобок, поэтому скобки begin end являются избыточными (но не правильными). Пример вычисления факториала.

Var X, FACT, N:integer; begin

N:=5; X:=1; repeat

FACT:= FACT*X; X:=X+1;

until X>N ;

12

Информатика. Конспект лекций тема №1. Автор Рожков В.И.

Оператор цикла с параметром

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

Синтаксис оператора цикла с параметром

Диапазон

Переменная и выражения должны быть одного и того же типа ( кроме типа real) и их значения не должны изменятся внутри оператора for. Если в случае to (downto) начальное значение больше (меньше) конечного значения, то оператор for не выполняется ни разу. После выполнения оператора for значение переменных цикла не определено.

Пример: подсчитать количество “счастливых шестизначных билетов”, у которых сумма трех цифр равна 13.

Program happy; var I, J, K, N:integer; begin

N:=0;

for I:=0 to 9 do for K:=0 to 9 do for J:=0 to 9 do if I+K+J=13 then N:=N+1;

N:=SQR(N);

Writeln(N);

end.

Перечисляемый тип

Иногда приходится работать с данными, которые не попадают в категорию названных ранее типов. В этом случае создается новый тип данных, состоящий из значений, заключаемых в скобки. Перечисляемый тип

– это тип, определяемый программистом, составленный из множества упорядоченных элементов.

13

Информатика. Конспект лекций тема №1. Автор Рожков В.И.

Синтаксическая диаграмма для перечисляемых типов имеет следующий вид:

Например

Type Color = (RED, ORANGE, YELLOW, GREEN, BLUE, VIOLET); Day=(Monday, Tuesday, Wednesday, Thursday, Friday, Saturday,

Sunday);

Для любого перечисляемого типа Т, определенного записью type T=(W1, W2, …, Wn), где Т – идентификатор типа; W1, W2, …, Wn – константные идентификаторы, постулируются следующие аксиомы:

1.Wi <> Wj если i <> j (различимость);

2.Wi < Wj если i < j (упорядоченность);

3.значениями типа Т могут быть только W1, W2, …, Wn

Операции отношения =, <>, <=, >, >= применимы если оба компонента отношения имеют одинаковый тип.

Наличие упорядоченности позволяет ввести функции получения следующего или предыдущего элемента:

SUCC(Wi)= Wi+1 для i=1, 2, …, n-1; PRED(Wi)= Wi-1 для i=2, 3, …, n;

Функция определения порядкового номера константного идентификатора Wi:

ORD(Wi)=i-1

ORD(W1)=0

Запрещается использовать один и тот же константный идентификатор при задании различных перечисляемых типов.

type Color=(RED, BLUE, GREEN); Traf_Color=(YELLOW, ORANGE, BLUE);

Пример работы с переменными перечисляемого типа program perechis;

type Day=(MO, TU, WE, TH, FR, SA, SU); (* задание перечисляемого типа *)

var D1, D2:Day; (* Описание переменных *) D1:=MO;

D2:=FR;

If D1 < D2 then D1:=SUCC(D1) else D1:=PRED(D1);

for D1:=TU to SU do D2:=PRED(D1);

14

Информатика. Конспект лекций тема №1. Автор Рожков В.И.

Диапазоны

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

Синтаксис:

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

Пусть задан перечисляемый тип DAY

Type Day=(Monday, Tuesday, Wednesday, Thursday, Friday, Saturday, Sunday);

Можно выделить два диапазона: Workday(рабочие дни) и Weekend (выходные дни)

Workday= Monday.. Friday;

Weekend= Saturday.. Sunday; Var D:Day;

WDay: Workday;

Wend: Weekend;

Переменной D можно присвоить любое из значений, заданных при определении типа DAY. Переменной WDay – любое из пяти значений диапазона Workday.

Наиболее часто диапазоны используются для переменных целого типа. var Hour: 1..60;

При задании диапазона можно использовать имена констант. Const Linesize=80;

var Curline: 1.. Linesize;

ch: ‘A’..’Z’; (*пример использования литерного типа*) chr:’0’..’9’;

Использование диапазонов имеет несколько преимуществ:

1.повышается удобочитаемость программ;

2.появляется возможность более экономного распределения памяти;

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

15

Информатика. Конспект лекций тема №1. Автор Рожков В.И.

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

Данный оператор является обобщением условного оператора для случая произвольного числа альтернатив.

case Color of Red: X:=Y+2; Yellow: X:=Y-2; Green: X:=Y Else

Writeln (‘Ошибка’); end;

Сначала вычисляется текущее значение переменной Color. Затем это значение сравнивается с константами, записанными перед оператором. В случае совпадения значения переменной и константы выполняется оператор после этой константы.

Синтаксическая диаграмма:

Альтернатива

Ветвь else

Правила использования оператора выбора:

1. Значение выражения - “переключателя”, записанное после служебного слова case, должно принадлежать дискретному типу.

16

Информатика. Конспект лекций тема №1. Автор Рожков В.И.

2.Все константы, предшествующие операторам альтернатив, должны иметь тип, совместимый с типом выражения.

3.Все константы в альтернативах должны быть уникальными в пределах оператора варианта (то есть повторения констант в альтернативах не допускается), диапазоны не должны пересекаться и не должны содержать констант, указанных в данной или других альтернативах.

Пример: Простой калькулятор program CAL;

var ch:char;

OP1, OP2:real; begin

read(ch); case ch of ‘+’: begin

read(OP1, OP2); writeln(OP1+OP2); end;

‘-’: begin read(OP1, OP2);

writeln(OP1-OP2); end;

‘*’ : begin read(OP1, OP2);

writeln(OP1*OP2);

end; ‘/’ : begin

read(OP1, OP2); writeln(OP1/OP2); end;

Else

Writeln (‘Ошибка’); end (*case*);

end.

Массивы

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

1.Каждый компонент массива может быть явно обозначен и к нему имеется прямой доступ.

2.Число компонент массива определяется при его описании и в

дальнейшем не меняется.

Применение массива позволяет программе обращаться к нескольким различным ячейкам памяти, используя одно имя. Для доступа к конкретному

17

Информатика. Конспект лекций тема №1. Автор Рожков В.И.

элементу или компоненте массива требуется дополнительная информация, в качестве которой выступает индекс массива. Когда индекс состоит из одного индексного выражения, массив называется одномерным. Из двух - двухмерный и т.д. Переменные с индексами записываются двумя способами. Первый сокращенная форма A[I, J, K] и второй полная форма A[I][J][K].

Синтаксическая диаграмма

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

Определение типа массива имеет вид: Type A=array[T1] of T2;

где А – идентификатор нового типа; Т1 – тип индекса; Т2 – тип компонент.

Пример:

var X:array[1..20] of real; Y :array[Color] of Color;

Многомерный массив var M:array[A..B] of array [C..D] of T; Обращение к I, Jэлементу массива M[I][J].

Для многомерных массивов пользуются следующим сокращением var M:array[A..B, C..D] of T; и M[I, J].

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

1.Сначала определяется тип со структурой массива. Затем описывается переменная имеющая данный тип.

Type REST=array[1..10] of real; var R:REST;

2.Вся необходимая информация о типа индексов и компонент указывается в разделе описания переменных.

var R:array [1..10] of real;

В качестве типа индекса рекомендуется использовать символические константы

const N=8; M=10;

var TARN: array[1..N, 1..M] of real;

в этом случае задача модификации программы значительно упрощается. Пример: Найти максимальное значение в массиве

program MAX; const M=10; N=20; var I, J:M..N;

X:array[M..N] of real; begin

18

Информатика. Конспект лекций тема №1. Автор Рожков В.И.

for I:=M to N do read(X[I]); J:=M;

for I:=M+1 to N do

if X[I] > X[J] then J:=I; writeln(‘Максимальный элемент - ’, X[J]); end.

В качестве типа индекса можно использовать перечисляемый тип, а также диапазон литерного типа:

var Sekond:array [‘A’..’Q’] of char;

Если одномерный массив описать как array [1..N] of char;

то это будет строка символов. Над строками можно выполнять те же действия, что и над обычными массивами. К элементам строки можно обращаться с помощью переменных с индексами. Над строками определены все шесть операций отношения, при ограничении, что можно сравнивать строки одинаковой длины.

Записи

Запись (тип record) – это структура данных, состоящая из фиксированного числа компонентов, называемых полями. При этом поля могут быть различных типов. При определении типа record указывается ее тип и идентификатор (идентификатор поля). Область действия каждого идентификатора поля – это наименьшая запись, в которой он определен.

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

Пример определения записи для даты рождения: type Date = record

Day:1..31;

Month:( January, February, March, April, May, June, July, August, September, October, November, December);

Year:integer;

End;

Доступ к элементам (полям) записей производится с помощью конструкции, называемой селектор записи и имеющей общий вид

R.F

где: R-переменная комбинированного типа, F – идентификатор поля. Опишем переменную типа запись Date

var Son:Date;

тогда обращение к полям записей выглядит следующим образом Son.Day:=15;

19

Информатика. Конспект лекций тема №1. Автор Рожков В.И.

Son.Month:= November; Son.Year:=1998;

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

type Family=(Father, Mother, Son1, Son2); List=array[Family] of Date;

var Z:List;

тогда доступ к полям Z[Mother].Day:=22; Z[Mother]. Month:= February; Z[Mother]. Year:=1961; Z[Son1].Day:=30;

Z[Son1]. Month:= October; Z[Son1]. Year:=1987;

Синтаксическая диаграмма:

Комбинированный тип

Список полей

Фиксированная часть

Вариантная часть

Дискриминант

20

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]