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

Лекции

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

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

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

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

type Alfa=array[1..10] of char; Variety=(Book, Journal, Newspaper);

var V: Variety; Name=record First, Last: Alfa; end; Edition=record Nane1:Name;

Title, Publishers: Alfa; case V of Book:(Year:integer); Journal:(Number:1..12;

Volume:integer;

YearJ:1990..2020;); Newspaper:(Day:1..31;

Month:1..12;

YearN:integer;);

end;

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

21

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

Оператор над записями With

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

Синтаксис:

Пример использования:

if Date.Month=12 then begin Date.Month:=1;

Date.Year:= Date.Year+1; end

else

Date.Month:= Date.Month+1;

Используя оператор with, получим более короткую запись:

with Date do

if Month=12 then begin Month:=1;

Year:= Date.Year+1; end

else Month:=Month+1;

Если задан оператор with R do , то R не должна содержать никакой переменной , изменяемой в операторе with. Например, такой оператор не верен

with Map[I] do begin

………….

I:=I+1;

………….

end;

Оператор with R1, R2, ….Rn do эквивалентен последовательности операторов

with R1 do

22

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

with R2 do

………….

with Rn do

Множество

Это структурированный тип языка Паскаль как и массив. Множество в математике – это произвольный набор объектов природы, понимаемый как одно целое.

Значение множества как и значения массива, строятся из нескольких значений одного (базового) типа, со следующими ограничениями:

1.вещественный тип использовать нельзя;

2.для целого типа можно использовать только диапазоны.

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

Синтаксическая диаграмма для множественных типов и для изображения множеств:

Множественный тип

Изображение множества

Пример:

Type Primcolor=(RED, ORANGE, YELLOW, GREEN, BLUE, VIOLET); Color= set of Primcolor;

Var Colorset, Colorset1, Colorset2: Color; OneColor: Primcolor;

B:Boolean; Отметим:

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

2.Порядок расположения элементов в множестве никак не фиксируется.

Пример оператора присваивания: Colorset1:=[RED, VIOLET]; Colorset2:=[];

Colorset1:=[BLUE, RED, GREEN];

23

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

Однако нельзя записать: Colorset1:=[ BLACK ]; Colorset2:=[WHITE];

Операции над множествами

Пусть S1 и S2 однотипные множества

1.Объединение множеств: S1 + S2 содержит элементы, которые принадлежат либо S1, либо S2, либо тому и другому, например

COL1:=[RED, GREEN]; COL2:=[GREEN, BLUE]; COL:= COL1+ COL2;

Получим COL:[ RED, GREEN, BLUE]

2.Пересечение множеств: S1 * S2 содержит элементы, которые принадлежат как S1 так и S2, например:

COL1:= [ RED, GREEN, BLUE];

COL2:=[ORANGE, RED, VIOLET]; COL:= COL1* COL2;

Получим COL:[ RED]

3.Разность множеств (или относительное дополнение): S1 - S2 содержит элементы из S1, которые не принадлежат S2, например: COL1:= [ RED, GREEN, BLUE];

COL2:=[ RED, GREEN, ORANGE]; COL:= COL1COL2;

Получим COL: [ BLUE];

4.Проверка на равенство, неравенство и включение множеств. Бинарные операции обозначаются следующими знаками: = равенство (совпадение) двух множеств;

<> неравенство множеств; <= проверка на вхождение множества из левого операнда в множество

из правого операнда; >= проверка на вхождение множества из правого операнда в множество

из левого операнда;

Результат операций значение логического типа true или false. [1, 2, 3]=[1, 2] false

[1, 2, 3] >=[1, 2] true [1, 2, 3] <>[1, 3, 4] true

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

2 in [1..10, 12]

true

5 in [1, 2, 7, 10]

false

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

24

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

Type SET1=set of 1..10;

Использование множеств позволяет сокращать громоздкие записи If (ch=’a’) OR (ch=’b’) OR (ch=’x’) OR (ch=’y’) then S:=ch; получим при использовании множественного типа

if ch in [‘a’, ‘b’, ‘x’, ‘y’] then S:=ch;

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

program parset; var ch:char; Error:boolean; begin read(ch); write(ch); repeat

if NOT(ch in[‘A’..’Z’]) then Error:=true; read(ch);

write(ch); while ch<> ‘ ‘ do begin

if NOT(ch in [‘A’..’Z’, ‘0’..’9’]) then Error:=true;

read(ch);

write(ch);

end;

WRITELN;

If Error then WriteLN(‘ERROR’); read(ch);

write(ch); until ch=’;’; end.

Файлы в языке Pascal

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

Порядок расположения компонент определяется самой последовательностью. В любой момент времени доступна только одна компонента файла. Другие компоненты доступны путем последовательного продвижения по файлу. Число компонент не фиксируется и называется длиной файла. Файл, не содержащий ни одной компоненты, называется пустым.

25

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

Основные действия над файлами:

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

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

Все остальные действия над файлом являются композицией его просмотра и решения.

Синтаксис:

Вкачестве типа компонент файла разрешается использовать любой простой или структурированный тип за исключением: не допускается тип

имеющий тип-файл.

Для организации работы по вводу-выводу в файл в программе определяются специальные переменные, называемые файловыми переменными. Например:

var f:file of T;

где Т – определяет тип компонент файла.

С каждой файловой переменной также связано понятие текущего указателя файла. Текущий указатель – это скрытая переменная (то есть не явно описанная) которая указывает на некоторый конкретный элемент файла.

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

Пример описания файловых типов и переменных: type Sqwer=file of char;

var F1, F2: Sqwer; table: file of real; zasd: file of Date;

Операции над файлами

Реализованы в виде стандартных процедур и функций и делятся на четыре основные группы:

1.установочные и завершающие операции;

2.операции ввода/вывода;

3.перемещение по файлу;

26

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

4. специальные операции.

Рассмотрим установочные и завершающие операции:

Далее под f-понимаем заранее описанную файловую переменную. Тогда

Assign(f, str); - присвоение имени файлу, где str – строковое выражение для имени файла. Например: Assign(f, ‘frees.txt’);

Rewrite(f); - создание нового файла. Указатель нового файла устанавливается на начало (компонент под номером 0). Если файл уже существовал, то он стирается.

Reset(f); - установка файла в исходное состояние. Файл должен быть уже создан, указатель устанавливается на начало файла (компонент под номером 0).

Close(f); - закрытие файла. Прекращается доступ к файлу и сбрасываются все его буфера.

Операции ввода/вывода.

Read(f, V1, V2, …, Vn); - считывание из файла. V1, V2, …, Vn – имена переменных того же типа, что и компоненты переменной f. После считывания каждого значения указатель автоматически перемещается на следующую компоненту.

Write(f, V1, V2, …, Vn); - запись в файл. V1, V2, …, Vn – имена переменных того же типа, что и компоненты переменной f.

Перемещение по файлу.

Seek(f, N); - поиск N-й компоненты. N- целочисленное выражение, указатель перемещается на N-ю компоненту файла.

Truncate(f);- отсечение от файла его хвостовой части, начинающейся от текущей позиции указателя включительно.

Дополнительные функции.

EOF(f) – логическая функция возвращает значение true, если указатель файла находится в конце файла, в противном случае false.

FilePos(f) – функция определяет номер текущей компоненты, на которую установлен указатель файла.

FileSize(f) – функция определяет количество компонент файла f.

Общие схемы работы над файлами

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

1.Просмотр файла ghj.txt Используя цикл предусловием Assign(f, ‘ghj.txt’);

Reset(f);

while NOT EoF(f) do

27

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

begin

Read(f, компонента); Обработка компоненты; end;

Close(f);

Используя цикл постусловием Assign(f, ‘ghj.txt’);

Reset(f); repeat

Read(f, компонента); Обработка компоненты; Until EoF(f);

Close(f);

2. Запись фала prd.doc Используя цикл предусловием

Assign(‘prd.doc’);

Rewrite(f);

while признак создания файла do begin

Создание компоненты; Write(f, компонента); end;

Close(f);

Используя цикл постусловием Assign(‘prd.doc’);

Rewrite(f); repeat

Создание компоненты; Write(f, компонента); Until NoT создание файла; Close(f);

Например: Дано N>0 измерений хi , представленных в виде файла st.dat вещественных чисел. Вычислить среднее значение М и стандартное отклонение S по формулам

program statistic; var f:file of real; M, S, Fz:real;

N:integer; begin

N:=0; M:=0; S:=0;

28

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

assign(f, ‘st.dat’); reset;

repeat N:=N+1; Read(f, Fz); M:=M+Fz; S:=S+SQR(Fz); Until EoF(f); M:=M/N;

S:=SQRT(S/N-SQR(M)); Writeln(‘M=’, M); Writeln(‘S=’, S); Writeln;

end.

Файлы могут быть локальными в программе или внешними. Внешние файлы выводятся как параметры программы в заголовок.

Текстовые файлы

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

type text=file of char;

text – стандартный идентификатор, такой как integer, real или char. Специальные процедуры работы над текстовыми файлами: Writeln(x); - завершение текущей строки текстового файла х; Readln(x); - переход к началу следующей строки текстового файла х; EoLN(x) – логическая функция, показывающая достигнут ли конец

текущей строки, текстового файла х. Если достигнут то возвращает значение true, в противном случае false.

Все выше перечисленные процедуры применимы только к текстовым файлам.

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

Просмотр текстового файла: Reset(f);

While NOT EoF(f) do begin

while NOT EoLN(f) do begin

read(f, ch); обработка ch; end; readln(f);

end;

29

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

или

Reset(f); repeat repeat read(f, ch);

обработка ch; until EoLN(f); readln(f);

until EoF(f);

Создание текстового файла f: rewrite(f);

while создание файла do begin

while формирование строки do сформировать ch;

write(f, ch); end; writeLN(f); end;

Или

rewrite(f); repeat repeat

сформировать ch; write(f, ch);

until NOT формирование строки; writeLN(f);

until NOT создание файла;

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

Дополнительно для текстовых файлов определены следующие операции: Append(f) – аналогична rewrite, однако не очищает файл, а только

устанавливает текущий указатель файла в его коней.

Для перемещения указателя по текстовому файлу применимы следующие функции:

SeekEoLN(f) – производит поиск конца текущей строки. SeekEoF(f) – осуществляет поиск конца файла.

Пример: Копирование файла Х в файл Y с заменой последовательности подряд стоящих пробелов одним.

Program cop;

30

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