Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
ВМИП часть 1.doc
Скачиваний:
15
Добавлен:
22.02.2015
Размер:
187.9 Кб
Скачать

6. Свойства данных. Основные (простые) типы данных. Объявление, инициализация данных. Внутренние и внешние данные.

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

Типы данных:

типы

простые структурированные указатели строки процедурные объекты

порядковые массивы

вещественные записи

множества

целые файлы

логический

символьный

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

тип-диапазон

К простым типам относятся порядковые и вещественные типы. К порядковым типам – целый, логический, символьный, перечисляемый и тип-диапазон.

INTEGER – целочисленные данные, во внутреннем представлении занимают 2 байта; диапазон возможных значений: от -32768 до +32767; данные представляются точно;

BOOLEAN – логический тип, занимает 1 байт и имеет два значения: FALSE (ложь) и TRUE (истина);

CHAR – символ, занимает 1 байт;

ПЕРЕЧИСЛЯЕМЫЙ – задается перечислением тех значений, которые он может получать. Каждое значение именуется некоторым идентификатором и располагается в списке, обрамленном круглыми скобками:

type

colors = (red, white, blue);

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

ТИП-ДИАПАЗОН – подмножество своего базового типа (любого порядкового типа кроме типа-диапазона). Задается границами своих значений внутри базового типа: <мин.значение> .. <макс.значение>. Например:

type или var

dig = 48..57; date : 1..31;

Тип константы определяется способом записи ее значения. Например:

const

с1 = 17; (константа типа integer)

c2 = 3.14; (константа типа real)

c3 = ‘A’; (константа типа char)

c4 = ‘3.14’; (константа типа string)

c5 = false; (константа типа boolean)

При описании переменных за идентификатором ставится двоеточие и имя типа. Несколько переменных одного типа можно объединять в список, разделяя запятыми. В начале должно стоять зарезервированные слово var:

var sigma : real;

var a,b,c,d :integer;

Преобразование типов данных: функция ROUND округляет REAL до INTEGER, функция TRUNC усекает REAL путем отбрасывания дробной части. Чтобы преобразовать CHAR в целое число используется функция ORD, обратное преобразование INTEGER в CHAR осуществляет функция CHR.

7. Pascal. Организация процедур и функций Формальные и фактические аргументы. Вызов процедур и функций.

8. Способы описания и передачи параметров процедур и функций.

Процедуры Procedure и функции Function (подпрограммы) – относительно самостоятельные фрагменты программы, оформленные особым образом и снабженные именем. Упоминание этого имени в тексте программы называется вызовом процедуры (функции). Отличие функции от процедуры – результатом исполнения операторов, образующих тело функции, всегда является некоторое единственное значение или указатель. Процедура может возвращать множество значений. Внутри подпрограммы могут реализовываться более маленькие подпрограммы.

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

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

Любая подпрограмма перед ее использованием должна быть описана. Объекты, описанные до подпрограммы, называются глобальными по отношению к данной подпрограмме:

var i : integer; i – глобальная для процедуры S, j – локальная переменная.

Procedure S;

var j : integer;

begin {S}

writeln(j);

end; {S}

Имена, локализованные в подпрограмме, могут совпадать с ранее объявленными глобальными именами. В этом случае локальное имя «закрывает» глобальное и делает его недоступным.

Описание подпрограмм. Заголовок.

Procedure <имя подпрограммы> (<список формальных параметров>);

Function <имя подпрограммы> (<список формальных параметров >) : тип;

Описание подпрограмм. Параметры.

Список формальных параметров не обязателен и может отсутствовать. Если он есть, то в нем перечисляются имена формальных параметров и их типы:

Procedure S(a : real; b,c : integer);

Function G(m,k : real) : real;

пример:

Program My_prog;

var

x,y : real;

{----------} a и b – формальные параметры;

procedure sum(a,b real); x,y в момент обращения к процедуре – фактические параметры

begin {sum}

if a >= 0 then

b := b+a

else

b := b-a;

end; {sum}

{----------}

begin {My_prog}

sum(x,y); {вызов процедуры sum с фактическими параметрами x и y}

writeln(x, y);

end. {My_prog}

Любой из формальных параметров подпрограммы может быть либо параметром-значением, либо параметром-переменной, либо параметром-константой. В предыдущем примере a и b определены как параметры-значения. Параметры-переменные определяются через слово var, а параметры-константы – через слово const:

procedure My_prog(var a : real; b : real; const c : string);

a – параметр-переменная, b – параметр-значение, c – параметр-константа.

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

Параметры-массивы: если мы хотим передать какой-то массив.

type

vector10 = array[1..10] of real; {новый тип переменных с именем vector10}

procedure S(a : vector10); {a имеет тип vector10}

Параметры-функции и параметры-процедуры.

Для объявления используется заголовок процедуры (функции), в котором опускается ее имя:

type

proc1 = procedure (a,b,c : real; var d : real);

func1 = function (var s : string) : real;

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

p1 : proc1;

f1 : func1;

Описание подпрограмм. Вызов подпрограмм. Способы вызова.

Вызов процедуры осуществляется путем написания имени подпрограммы и списка формальных параметров, а вызов функции – в какой-либо формуле или операторе главной программы:

Procedure sum(var a,b : real);

Вызов: sum(a,b);

Function dif(var d : integer);

Вызов: m := n+dif(d);

Рекурсия.

Когда подпрограмма обращается сама к себе.

Пример – вычисление факториала.

Program Factorial;

var n : integer;

Function Fac(n : integer) : real;

begin {Fac}

if n < 0 then

writeln (‘Ошибка ввода N’);

else

if n = 0 then

Fac := 1

else Fac := n*Fac(n-1)

end; {Fac}

{----------}

begin {Factorial}

repeat

readln(n);

writeln(‘n! = ‘, Fac(n))

until EOF

end. {Factorial}

Рекурсивный косвенный вызов.

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

procedure B(j : real); forward;

procedure A(i : real);

begin

B (i); {вызов процедуры В}

end;

procedure B;

begin

A(j); {вызов процедуры A}

….

end;

Расширенный синтаксис вызова функции.

Можно вызвать функцию и не использовать то значение, которое она возвращает (то есть внешне вызов функции выглядит как вызов процедуры)

function MyFunc(var x : integer) : integer;

begin

if x < 0 then x := 0

else MyFunc := x+10

end;

var i : integer;

begin {main}

i := 1;

i := 2*MyFunc(i)-100; {стандар. вызов функции}

MyFunc(i); {расшир.синтаксис вызова}

end. {main)

9. Перечисляемые, интервальные типы данных. Составные типы данных: строковый, файловый.

К простым типам относятся порядковые и вещественные типы. К порядковым типам – целый, логический, символьный, перечисляемый и тип-диапазон.

ПЕРЕЧИСЛЯЕМЫЙ – задается перечислением тех значений, которые он может получать. Каждое значение именуется некоторым идентификатором и располагается в списке, обрамленном круглыми скобками:

type

colors = (red, white, blue);

cardsuit = (clubs, diamonds, hearts, spades);

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

Если определить переменные

var

col : colors;

card : cardsuit;

то возможны операторы

col := red; НО НЕ col := hearts;

card := diamonds; card := blue;

ТИП-ДИАПАЗОН (ИНТЕРВАЛЬНЫЙ ТИП) – подмножество своего базового типа (любого порядкового типа кроме типа-диапазона). Задается границами своих значений внутри базового типа:

<мин.значение> .. <макс.значение>. Например:

type или var

dig = 48..57; date : 1..31; Минимальное и максимальное значения констант называются нижней и верхней границами отрезка, определяющего интервальный тип. Нижняя граница должна быть меньше верхней. Над переменными, относящимися к интервальному типу, могут выполняться все операции и применяться все стандартные функции, которые допустимы для соответствующего базового типа. При использовании в программах интервальных типов данных может осуществляться контроль за тем, чтобы значения переменных не выходили за границы, введенные для этих переменных в описании интервального типа. Функции для данного типа: HIGH(x) – возвращает максимального значения типа-диапазона, к которому принадлежит переменная x; LOW(x) – возвращает минимальное значение.

СТРОКОВЫЙ ТИП String. Строка трактуется как цепочка символов. К любому символу в строке можно обратиться как к одномерному массивуarray[0..N]ofCHAR:

var st : String;

begin;

……..

if st[5] = ‘A’ then …..

end.

Самый первый байт в строке имеет индекс 0 и содержит текущую длину строки. Первый значащий символ строки занимает второй байт и имеет индекс 1. Над длиной строки можно совершать необходимые действия и т.о. изменять ее длину (например, можно удалить из строки все пробелы).

Длину строки можно получить с помощью функции LENGTH(st). К строкам можно применять операцию «+» (сцепление): st = ‘a’+ ‘b’ (получим st = ab). Если длина сцепленной строки превысит максимально допустимую длину N, то лишние символы отбрасываются.

Процедуры и функции для данного типа:

CONCAT(s1 [,s2,…sn]) – функция типа string; возвращает строку, представляющую собой сцепление строк-параметров s1,s2…sn.

COPY(st, index, count) – функция типа string; копирует из строки st count-символов, начиная с символа с номером index.

DELETE(st, index, count) – процедура, удаляет из строки st count-символов, начиная с символа с номером index.

INSERT(subst, st, index) – процедура; вставляет подстроку subst в строку st, начиная с символа index.

LENGTH(st) – функция типа integer; возвращает длину строки st.

POS(subst, st) – функция типа integer; отыскивает в строке st первое вхождение подстроки subst и возвращает номер позиции, с которой она начинается; если подстрока не найдена, возвращается ноль.

STR(x [:WIDTH [:DECIMALS]], st) – процедура, преобразует число х любого вещественного или целого типа в строку символов st. Параметры WIDTH и DECIMALS задают формат преобразования: WIDTH определяет общую ширину поля, выделяемого под соответствующее символьное представление х, DECIMALS – количество символом в дробной части (если х – вещественное).

VAL(st, x, code) – процедура, преобразует строку символов stdво внутреннее представление целой или вещественной переменной х, которое определяется типом этой переменной; параметр code содержит ноль, если преобразование прошло успешно, и тогда в х помещается результат преобразования. В противном случае он содержит номер позиции в строке st, где обнаружен ошибочный символ. а содержимое х не меняется.

UPCASE(ch) – функция типа CHAR, возвращает для символьного выражения ch соответствующую заглавную букву.

ФАЙЛОВЫЙ ТИП – файловый тип или переменную файлового типа можно задать одним из 3х способов:

<имя> = FILE OF <тип>; где <имя> ­– имя файлового типа (идентификатор)

<имя> = text; FILE, OF – зарезервированные слова, text – имя стандартного

<имя> = FILE; типа текстовых файлов, <тип> - любой тип, кроме файлов.

В зависимости от способа объявления можно выделить три вида файлов:

  1. типизированные (задаются через FILE OF);

  2. текстовые (через тип text);

  3. нетипизированные (через тип FILE).

  1. Pascal. Массивовый тип данных. Организация одномерных, многомерных массивов. Записи.

Описание массива задается так:

<имя типа> = array [<список индексных типов>] of <тип>,

где <имя типа> - идентификатор, array и of – зарезервированные слова, [<список индексных типов>-список из одного или нескольких индексных типов, разделенных запятыми, <тип> - любой тип языка. Компоненты массива являются переменными одного типа (!).

пример: type vector10 = array [1..10] of real;

Определение переменной как массива: var a,b : array [1..10] of real; или var a,b : vector10;

Т.к. <тип> - любой тип языка, то в его качестве может выступать другой массив:

type mat = array [0..5] of array [-2..2] of real;

или type mat = array [0..5, -2..2] of real; – двумерный массив.

Можно одним оператором «=» передать все элементы одного массива другому массиву того же типа:

var a,b : array[1..5] of real;

begin

…….

a := b;

…….

end.

Сравнивать два массива можно поэлементно:

for i:=1 to 5 do

begin

if a[i] := b[i] then

writeln(‘Массивы равны’);

end;

Записи – структура данных, состоящая из фиксированного числа компонентов, называемых полями записи. В отличии от массива компоненты (поля) записи могут быть различного типа (!).

Структура объявления типа записи:

<имя типа> = RECORD <список полей> END

<имя типа> - идентификатор, RECORD, END – зарезервированные слова, <список полей> - последовательность разделов записи, между которыми ставится «;».

type

birthday = record здесь birthday – запись с полями day, month, year, hour

day, month, year : integer; переменные a и b содержат записи типа birthday

hour : real;

end;

var a,b : birthday;

Как и в массиве, значения переменных типа записи можно присваивать другим переменным того же типа: a := b.

К каждому из компонентов записи можно получить доступ, если использовать составное имя (т.е. указать имя переменной, затем точку и имя поля):

a.day := 27;

b.year := 2000;

Вложенные поля:

type Birthday = record

day, month, year : integer;

hour : real

end;

var

с : record

name : string;

bd : Birthday

end;

begin

……

if c.bd.year = 200 then ….

end.

Чтобы упростить доступ к полям записи, используется оператор присоединения:

WITH <переменная> DO <оператор>

WITH, DO – ключевые слова, <переменная> - имя переменной типа запись, за которым следует список вложенных полей (не обязательно), <оператор> - любой оператор языка.

with c.bd do month := 9;

Записи с вариантными полями – когда запись состоит из одного фиксированного поля и вариантной части, которая задается предложением CASEOF. Вариантная часть состоит из нескольких вариантов. Каждый вариант определяется константой выбора, за которой следует двоеточие и список полей, заключенный в круглые скобки. Пример:

type

form = record

name : string;

case byte of

0: (birthplace : string [40]);

1: (country : string [20];

entryport : string [20];

entrydate : 1..31;

exitdate : 1..31);

end;

  1. Операторы языка Pascal. Простые операторы. Управляющие операторы: конструкция оператора if, оператор выбора.

Один из самых используемых операторов языка – оператор присваивания «:=».

В языке определены арифметические операции: + (сложение), - (вычитание), * (умножение), / (деление), div (деление целочисленное).

mod – получение остатка от целочисленного деления (пример 5 mod 2 = 1).

Операции отношения: = (равно), <> (не равно), < (меньше), > (больше), <= (меньше или равно), >= (больше или равно).

Логические операции: not – логическое НЕ, and – логическое И, or – логическое ИЛИ, xor – исключающее ИЛИ.

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

Язык допускает произвольную глубину вложенности операторов:

begin

….

begin

….

....

end;

….

end;

Т.к. end является закрывающей операторной скобкой, то перед ним «;» ставить необязательно. Наличие «;» перед end означает, что между последним оператором и операторной скобкой end располагается пустой оператор. Пустой оператор используется для передачи управления в конец составного оператора.

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

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

Структура:

IF <условие> THEN <оператор1> ELSE <оператор2>

Работает по следующему алгоритму: вначале вычисляется условное выражение <условие>, если результат есть TRUE (истина), то выполняется <оператор1>, если FALSE (ложь), то <оператор2>.

Примеры:

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