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

Informatika_2-y_semestr

.pdf
Скачиваний:
18
Добавлен:
11.04.2015
Размер:
1.98 Mб
Скачать

Информатика 2012г.

21

В языке программирования Паскаль нельзя записать двухстороннее неравенство 1<x<2 правильная запись (x>1) AND (x<2).

Стандартные логические функции:

ODD(x) – значение True, если х – целое нечетное число, False – если х – целое четное число.

EOF(f) - значение True, если файл f находится в состоянии “конец файла”, в противном случае False.

EOLN(f) - значение True, если файл f находится в состоянии “конец строки”, в противном случае False.

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

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

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

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

1.NOT

2.*, /, DIV, MOD, AND

3.+, -, OR

4.=, <>, <=, >, >=, IN

операции одинакового старшинства выполняются слева на право. Скобками задается желаемый порядок вычисления.

Переменные и выражения должны быть одного типа. Исключение для переменной real, тогда тип выражения может быть integer.

Например заданы следующие описания

Var I, J, K:integer;

A, B, C:real; Ch1, ch2: char; Bool:bolean; Bool:=A=B; Ch1:=ch2; I:=K*J div 2; A:=K*J div 2;

Информатика 2012г.

22

Нельзя записать I:=A*B/C; т.к. I – переменная целого типа Преобразование вещественного типа в целый тип допустимо только

через функции приведения типов

I:=round(A*B/C);

I:=trunc(A*B/C);

Соответствие между целыми типа и литерным типом задается функции приведения типов ORD() и CHR()

I:=ORD(Ch1)+ORD(ch2);

ch2:=CHR(I);

Недопустимая запись

I:=J:=0; необходимо писать I:=0; J:=0;

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

Является простейшим структурным оператором и задает последовательность выполнения операторов, входящих в него в порядке «один за другим». Операторы, входящие в состав составного оператора, заключаются между служебными словами begin и end.

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

Условный оператор

Выбирает и выполняет один из операторов входящих в состав условного оператора.

Выражение должно быть типа boolean. Если значение выражения true то выполняется оператор после служебного слова then, в противном случае выполняется оператор за служебным словом else. Если часть условного оператора, начиная со слова else, отсутствует, то управление передается оператору, следующему за условным оператором.

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

Информатика 2012г.

23

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 begin

Информатика 2012г.

24

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 ;

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

Информатика 2012г.

25

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

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

Диапазон

Переменная и выражения должны быть одного и того же типа ( кроме типа 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.

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

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

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

вид:

 

 

 

 

Информатика 2012г.

26

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

Например

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

Информатика 2012г.

27

Диапазоны

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

Синтаксис:

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

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

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

Информатика 2012г.

28

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

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

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

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

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

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

Ветвь else

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

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

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

Информатика 2012г.

29

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.Число компонент массива определяется при его описании и в дальнейшем не меняется.

Применение массива позволяет программе обращаться к нескольким

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

Информатика 2012г.

30

элементу или компоненте массива требуется дополнительная информация, в качестве которой выступает индекс массива. Когда индекс состоит из одного индексного выражения, массив называется одномерным. Из двух -двухмерный и т.д. Переменные с индексами записываются двумя способами. Первый сокращенная форма 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;

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