Добавил:
Рыльский филиал МГТУ ГА. Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:

Теория / Конспект Лекций

.pdf
Скачиваний:
0
Добавлен:
29.03.2024
Размер:
851.63 Кб
Скачать

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

const K= 1024; MAX= 16384;

В разделе описания переменных необходимо определить тип всех переменных, используемых в программе:

var P,Q,R: Integer;

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

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

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

Кроме описаний и операторов Паскаль - программа может содержать комментарии, которые представляют собой произвольную последовательность символов, расположенную между открывающей скобкой комментариев { и закрывающей скобкой комментариев }.

Типы данных

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

Таблица 1. Простые типы данных стандартного Паскаля.

Идентификатор

Длина

Диапазон значений

Операции

(байт)

 

 

 

 

 

Целые типы

 

 

 

 

 

integer

2

-32768..32767

+, -, /, *, Div, Mod,

>=, <=, =, <>, <, >

 

 

 

byte

1

0..255

+, -, /, *, Div, Mod,

>=, <=, =, <>, <, >

 

 

 

word

2

0..65535

+, -, /, *, Div, Mod,

>=, <=, =, <>, <, >

 

 

 

shortint

1

-128..127

+, -, /, *, Div, Mod,

>=, <=, =, <>, <, >

 

 

 

 

 

 

 

longint

4

-2147483648..2147483647

+, -, /, *, Div, Mod,

>=, <=, =, <>, <, >

 

 

 

 

 

11

 

Вещественные типы

real

6

 

2,9x10-39 - 1,7x1038

+, -, /, *,

 

 

 

 

>=, <=, =, <>, <, >

single

4

 

1,5x10-45 - 3,4x1038

+, -, /, *,

 

 

 

 

>=, <=, =, <>, <, >

double

8

 

5x10-324 - 1,7x10308

+, -, /, *,

 

 

 

 

>=, <=, =, <>, <, >

extended

10

 

3,4x10-4932 - 1,1x104932

+, -, /, *,

 

 

 

 

>=, <=, =, <>, <, >

 

 

 

Логический тип

 

 

 

 

 

 

boolean

1

 

true, false

Not, And, Or, Xor,

 

>=, <=, =, <>, <, >

 

 

 

 

 

 

Символьный (литерный) тип

 

 

 

 

 

 

char

1

 

все символы кода ASCII

+,

 

>=, <=, =, <>, <, >

 

 

 

 

Для описания каждого типа данных в Паскаль существует свой стандартный идентификатор (Таблица 1). Пользователь может образовывать собственные типы данных и давать им произвольные имена.

Интервальный тип позволяет задавать две константы, определяющие границы диапазона значений для данной переменной. Компилятор при каждой операции с переменной интервального типа проверяет, остается ли значение переменной внутри установленного для нее диапазона. Границы диапазона не могут быть вещественными. Значение первой константы должно быть обязательно меньше значения второй. Например: vаr date : 1

..31; month : 1 .. 12; simv : ‘a’ ..’z’;

Программы, реализующие линейные алгоритмы содержат операторы ввода, присваивания и вывода, которые выполняются в естественном порядке (в порядке расположения).

Оператор присваивания. Значение переменной может быть заданно или изменено с помощью оператора присваивания. Синтаксис оператора присваивания:

Имя переменной := Выражение;

Переменная (левая часть) и выражение (правая часть) должны быть одного типа.

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

Пример 1. Составить программу для вычисления значений функций Y и F для заданных значений переменной x и постоянных a и b. Значения переменной x>=0. Включить в программу комментарии. Вывести на экран значения F,Y для соответствующих значений x.

Y e ax (x Sin(ax b) x Cos(bx));

F ln | ax2 b | 1.

12

Program primer1;

 

{ Раздел описания данных}

 

Const a=2.0; b=3.0;

 

Var

x,Y,F: real;

 

Begin

{ Раздел операторов}

Writeln(' Введите x>=0 ');

{Запрос на ввод x}

Readln(x);

{Ввод значения x}

Y:= Exp (-a*x)*(x* Sin (a*x+b) - Sqrt (x)* Cos (b*x));

F:= Ln (Sqrt( Abs (a*x*x-b)))-1;

{Вычисление значений Y и F}

Writeln('При x = ',x,' Y = ',Y,'

F = ',F); {Вывод результатов}

End.

 

 

Пример 2. Ввести трёхзначное число и вывести на экран в столбик его цифры, начиная со старшей.

{Для выделения десятичных цифр воспользуемся операциями Div и

Mod.}

Program cifra;

Const

d = 10; s = 100;

Var

num, c1, c2, c3 : integer;

Begin

 

Writeln('Введите целое трехзначное число'); Read(num); C1:= num div S; Writeln ('Цифра 1: ', С1);

C2:= (num mod S) div d; Writeln('Цифра 2: ', С2); С3:= num mod d; Writeln('Цифра 3: ', С3);

end.

Тема 1.3. Управляющие структуры программирования

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

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

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

IF <логическое выражение> then <Оператор 1>

[ Else

<Оператор 2>;]

13

Здесь IF , then, Else – зарезервированные слова языка, означающие соответственно ЕСЛИ, ТО, ИНАЧЕ, квадратные скобки означают, что конструкция Else <Оператор 2> может отсутствовать. Например, оператору

if X<>0 then

Y:= A/X else

Y:= A;

соответствует следующий ход вычислений:

Если в момент выполнения программы окажется, что X ≠ 0, то будет вычислено Y= A/X. Если же окажется, что X= 0, то будет вычислено Y= А.

Оператор IF , then, Else – это один оператор, поэтому ";" после оператора 1, т.е. перед Else, не ставится.

Порядок выполнения условного оператора приведен на рисунке 1.

Да

Условие

Нет

 

 

Оператор

 

Оператор

Рисунок 1 – Схема полного условного оператора

Если условный оператор не имеет конструкции Else, то тогда он называется сокращенным условным оператором. Если логическое выражение принимает значение ЛОЖЬ, сразу выполняется оператор, следующим за условным (рисунок 2). Например, оператор

If X>0 Then

K:= K+1; {увеличение К на 1 (подсчет числа положительных Х)}

Да Услови Нет Оператор1

Рисунок 2 – Схема неполного условного оператора

14

Возможности условного оператора расширяют, используя составной оператор, объединяющий несколько операторов в одну группу. Составной оператор содержит операторы одной группы и ограничивается операторными скобками (Begin end;).

If b<>0 then

begin {составной оператор}

y:=a/b; {если b не равно 0, то выполниться 2 оператора}

Writeln('частное=',y); end

else

writeln(‘деление на 0!’);

Оператор выбора (варианта)

Оператор If позволяет выбрать один из двух возможных путей решения. В ряде случаев таких путей бывает гораздо больше. При этом также необходимо выбрать один из них. Применение оператора If для таких задач неэффективно.

В Паскале для выбора одного из нескольких путей решения используется оператор Case (вариант из) – обобщение условного оператора. В общем виде он записывается так:

Case выражение Of Значения1 : Оператор1; Значения2 : Оператор2;

. . .

ЗначенияN : ОператорN; End; { Конец списка выбора }

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

Значения1, . . . , ЗначенияN – значения выражения, при которых выполняются Оператор1, . . . , Оператор N соответственно.

Если селектор принял значение, не принадлежащее ни одному из перечисленных, то оператор Case пропускается и выполняется следующий за ним оператор (как при неполном If).

Например:

Case Num Mod 2 Of

0: Writeln('Четное');

1: Writeln('Нечетное');

End;

или

Case Month Of

1,2,3 : Writeln('Первый квартал');

4,5,6 : Writeln('Второй квартал');

15

End;

Если после Значений i необходимо выполнять несколько операторов, они заключаются в операторные скобки Begin end:

Значения i: Begin операторы_i; End;

Пример 3. Перевести цифру римской системы счисления в ее десятичный эквивалент. Римская цифра вводится c клавиатуры (в виде похожей на нее латинской буквы), а затем на экране должен появиться ее десятичный эквивалент.

Program Rim;

Var R : Char; N : Integer; Begin

Writeln('Введите римскую цифру'); Readln(R);

Case R Of

'M': N:= 1000;

'D': N:= 500;

'C': N:= 100;

'L': N:= 50;

'X': N:= 10;

'V': N:= 5;

‘I': N:= 1

End; { Case }

Write ('Десятичное число:', N);

End.

Оператор безусловного перехода

Оператор безусловного перехода (goto) означает "перейти к" и применяется в случаях, когда после выполнения некоторого оператора надо выполнить не следующий по порядку, а какой-либо другой, отмеченный меткой оператор. Метка – это произвольный идентификатор, позволяющий именовать некоторый оператор программы и таким образом ссылаться на него. В Паскале метка – это целое без знака. Метка располагается непосредственно перед помеченным оператором и отделяется от него двоеточием. Необходимо описать метку в разделе Label.

Например, в результате выполнения программы:

label 1,2; var i : byte; begin

i := 5;

2: if i<0 then goto 1;

16

write(i); {отображение значения i без перехода на новую строку} Dec(i); {уменьшение значения i на 1}

goto 2; 1:

end.

будет выведено 543210.

Метка должна помечать оператор в том же блоке, в котором описана. Метка не может помечать несколько операторов.

Использование оператора goto затрудняет чтение и понимание программы, по этому вместо него используют другие управляющие конструкции.

1.3.2. Организация циклов

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

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

В Паскале существует три вида циклических конструкций:

-цикл с предусловием, когда цикл начинается с проверки условия продолжения цикла;

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

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

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

Оператор цикла с параметром целесообразно использовать для реализации циклического процесса с известным числом повторений. Цикл for (для) существует в двух формах:

For Параметр := НачальноеЗначение to КонечноеЗначение do Оператор1; или

For Параметр := НачальноеЗначение Downto КонечноеЗначение do Оператор1;

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

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

17

В операторе 2 использовано слово Downto. При этом значения параметра убывают (изменяются от большего – начального значения – до меньшего с шагом -1). Работу оператора иллюстрирует схема рисунка 4,б.

 

 

 

 

 

Параметр:=нач.зн

 

Параметр:=нач.зн

 

 

 

 

 

 

 

 

 

 

 

Парамет

 

Нет

Парамет

Нет

 

р

 

 

 

 

р

 

 

 

 

 

Да

 

 

 

 

Да

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

Оператор1

 

 

 

Оператор1

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

Параметр:=Параметр+1

 

 

 

Параметр:=Параметр-1

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

а

 

 

 

б

 

 

Рисунок 4 - Схема работы оператора For

Если начальное значение равно конечному, то в обоих случаях (при То и Downto) оператор выполняется один раз.

В общем случае (если параметр пробегает несколько значений) оператор 1 выполняется несколько раз.

Например: {к величине S прибавляется 10 чисел от 1 до 10}

For i := 1 To 10 Do S:= S+i;

Если многократно нужно выполнить несколько операторов, то они помещаются в блок операторов – между служебными словами Begin и End.

Пример 4. Определение номера буквы в латинском алфавите.

Program Lett;

Var Bukva, ch:char; K:integer;

Begin

Write(‘введите букву: ’);

Read(bukva);

K:=0;

For ch:=’A’ to bukva do K:=k+1;

Writeln(‘буква ’,bukva, ‘ имеет номер ’,k,’ в латинском алфавите’);

18

End.

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

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

Repeat

Операторы

Until условие;

Схема его работы представлена на рисунке 5.

В теле цикла записывается один или несколько операторов, которые будут выполняться многократно. Они располагаются между служебными словами Repeat и Until, поэтому обрамлять их словами Begin и End не

Операторы

Нет

Условие

Да

 

вып.

 

Рисунок 5 - Схема выполнения оператора цикла Repeat

нужно. После слова Until записывается условие выхода из цикла (по значению параметра). Цикл выполняется пока условие не станет истинно.

В соответствии со схемой цикл выполняется по крайней мере 1 раз. Пример 5. Изобразить степени двойки, не превышающие 1000.

Program Two; Var Num: Integer; Begin

Num:=2; Repeat

Writeln (Num);

Num:=Num*2; Until Num>1000;

End.

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

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

While условие do

19

Оператор1;

Условие

Нет

 

Да

Оператор 1

Рисунок 6 - Схема выполнения оператора цикла While

Если в теле цикла необходимо выполнить несколько операторов, то они заключаются в операторные скобки Begin и End;

В отличие от Repeat цикл While может не выполняться ни разу.

Пример 6. Отобразить

столько символов `*` сколько задаст

пользователь.

 

Var i, n: integer; Begin

Write (`Количество знаков: `); Readln(n);

i:=1;

While i<=n do begin Write (`*`); i:=i+1;

End;

End.

Тема 1.4. Процедуры и функции

1.4.1. Сложные типы данных: массивы, записи, множества

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

В Паскале выделяют пять структурированных типов:

массивы;

20

Соседние файлы в папке Теория