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

Учебное пособие 748

.pdf
Скачиваний:
2
Добавлен:
30.04.2022
Размер:
567.54 Кб
Скачать

2.2. Стандартные процедуры и функции для работы со строками

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

 

 

 

 

Таблица 2

Имя и

Процеду

Типы

Тип

Действие

параметры

ра или

параметров

возвра-

 

 

функция

 

щаемого

 

 

 

 

значения

 

 

 

 

 

 

Length(s)

функция

s — string

integer

возвращает длину строки

 

 

 

 

s

 

 

 

 

 

Copy(s,index,

функция

s — string,

string

возвращает подстроку

count)

 

index

 

строки s длины

 

 

и count —

 

count, начиная с позиции

 

 

integer

 

index

 

 

 

 

 

Delete(s,in-

процедура

s — string,

 

удаляет в строке s count

dex,count)

 

index и count

 

символов начиная с по-

 

 

— integer

 

зиции index

 

 

 

 

 

Insert(pods,

процедура

s, pods —

 

вставляет подстроку pods

s,index)

 

string,

 

в строку s с позиции in-

 

 

index — in-

 

dex

 

 

teger

 

 

 

 

 

 

 

SetLength(s,n)

процедура

s — string, n

 

устанавливает длину

 

 

— integer

 

строки s равной n

 

 

 

 

 

Str(x,s)

процедура

s — string, x

 

преобразует x к строко-

Str(x:n,s)

 

— integer,

 

вому представлению (во

Str(x:n:m,s)

 

real и n, m —

 

втором и третьем случа-

 

 

integer

 

ях согласно формату

 

 

 

 

вывода, устанавливае-

 

 

 

 

мому n и m) и записыва-

 

 

 

 

ет результат в строку s

 

 

 

 

 

Val(s,v,code)

процедура

s — string,

 

преобразует строку s к

 

 

v — integer,

 

числовому представле-

 

 

real, и code

 

нию и записывает ре-

 

 

— integer

 

зультат в переменную v.

 

 

 

 

Если преобразование

 

 

 

 

возможно, то в перемен-

 

 

 

 

ной code возвращается 0,

 

 

 

 

если невозможно, то в

 

 

 

 

code возвращается нену-

 

 

 

 

левое значение

 

 

 

 

 

 

 

10

 

 

 

 

 

 

Окончание табл. 2

 

 

 

 

 

Имя и

Процеду

Типы

Тип

Действие

параметры

ра или

параметров

возвра-

 

 

функция

 

щаемого

 

 

 

 

значения

 

 

 

 

 

 

Concat(s1,..,sn)

функция

s1,..., sn —

string

возвращает строку, яв-

 

 

string

 

ляющуюся результатом

 

 

 

 

слияния строк s1,..., sn.

 

 

 

 

Результат тот же, что у

 

 

 

 

выражения

 

 

 

 

s1 + s2 +...+ sn

 

 

 

 

 

IntToStr(i)

функция

i — integer

string

преобразует целое число

 

 

 

 

к строке

 

 

 

 

 

StrToInt(s)

функция

s — string

integer

преобразует строку в

 

 

 

 

целое число. Если пре-

 

 

 

 

образование невозмож-

 

 

 

 

но, то возникает ошибка

 

 

 

 

времени выполнения

 

 

 

 

 

МЕТОДИЧЕСКИЕ УКАЗАНИЯ

КВЫПОЛНЕНИЮ ЛАБОРАТОРНОЙ РАБОТЫ

1.Изучить теоретический материал.

2.Для задачи, выбранной в соответствии с вариантом, разработать алгоритм решения и описать его графическим способом (блок-схема).

3.Составить 2 программы на языке программирования Паскаль:

1) с написанием пользовательской процедуры;

2) с написанием пользовательской функции.

4.Оформить отчет.

ВАРИАНТЫ ЗАДАНИЙ

Вычислить значения функции y = f (x) при заданном значении x, которое вводится с клавиатуры и должно находиться в диапазоне [100..100]. a=(3,5 c)/bc; b=7,2; c=8,7; n – номер варианта. Результат вывести с тремя знаками после запятой.

11

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

1. 2.

3. 4.

5. 6.

7. 8.

9. 10.

11. 12.

13. 14.

12

15. 16.

17. 18.

19. 20.

КОНТРОЛЬНЫЕ ВОПРОСЫ

1.Что такое подпрограмма, для чего она используется?

2.Каковы основные отличительные особенности подпро- грамм-процедур и подпрограмм-функций?

3.Какова структура процедур и функций?

4.Что такое локальные и глобальные параметры?

5.Какие существуют способы использования глобальных параметров?

6.Что такое формальные и фактические параметры?

7.Что такое параметры-значения? Как они описываются

ииспользуются в подпрограмме?

8.Что такое параметры-переменные? Как они описываются и используются в подпрограмме?

9.Что такое рекурсия? Приведите пример.

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

13

ЛАБОРАТОРНАЯ РАБОТА № 10

РАБОТА С ФАЙЛАМИ

Цель лабораторной работы - знакомство с разновидностями файлов в языке Pascal, принципами организации и порядком работы с ними.

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

должны знать:

1)разновидности файлов в языке Pascal;

2)принципы организации и порядок работы с типизированными и нетипизированными файлами;

3)организацию текстовых файлов, операции чтения и записи текстовых файлов.

ТЕОРЕТИЧЕСКИЙ МАТЕРИАЛ ДЛЯ ДОМАШНЕГО ИЗУЧЕНИЯ

В Pascal выделяют три типа файлов: текстовые, типизированные, нетипизированные.

Текстовый файл — содержит строки текста различной длины, чтение или запись осуществляется (как правило) построчно.

Типизированный файл — с точки зрения языка Pascal содержит элементы одного типа, единицей обмена информацией является один элемент.

Нетипизированный файл — содержит любые данные, языком Pascal никак не интерпретируемые.

1. Типизированные файлы

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

14

type <имя_типа> = file of <тип>; var

<имя> : <имя_типа>; или

var

<имя> : file of <тип>; Здесь:

<имя_типа> — имя файлового типа; <тип> — любой тип данных Pascal, кроме файлов; <имя> — имя файловой переменной.

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

Это выполняется процедурой Assign:

Assign(<имя>, ’<путь_к_файлу>’);

Первый параметр — имя файловой переменной, используемой в дальнейшем для обращения к файлу. Может иметь любой файловый тип. Второй параметр — строка, указывающая на путь и имя файла, с которым Pascal далее будет оперировать.

Для создания нового файла на диске после выполнения

процедуры Assign необходимо открыть файл в режиме записи:

ReWrite(<имя>);

Если файл с таким именем не существовал, он создается. Если он существовал, вся информация из этого файла стирается и файл становится пустой. При этом никаких предупреждений не выдается.

Для открытия файла в режиме чтения он должен быть

открыть процедурой:

Reset(<имя>);

После этого можно выполнять чтение или запись, ис-

пользуя соответствующую файловую переменную:

Read(F, i, j); Write(F, n);

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

15

операцией ввода-вывода, применяется функция FilePos. На-

пример:

N := FilePos(F);

Эта функция возвращает переменной N положение указателя относительно начала файла. Самая первая позиция имеет номер 0. Переместить указатель в требуемую позицию можно,

используя функцию Seek. Например:

Seek(F, 5);

Seek(F, FilePos(F) – 1);

Первый оператор устанавливает позицию указателя в файле после 5 элемента (и перед 6-м). Следующий оператор вызывает смещение указателя файла на1 элемент назад относительно текущего положе ния указателя.

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

дачах полного перебора элементов файла:

While not EOF(F) do Read(F, i);

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

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

Count := FileSize(F).

Эта функция возвращает целое число, равное количеству компонент в указанном файле.

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

процедурой:

Close(<имя>);

При этом связь файловой переменной с именем файла, установленная процедурой Assign, сохраняется.

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

Текстовый файл содержит строки текста различной длины. Каждая строка завершается символами «Возврат каретки»

16

(код 13) и «Перевод строки» (код 10). При обычном просмотре эти символы на экране не отображаются, а интерпретируются компьютером как признак окончания одной строки и начала следующей.

Объявление текстового файла выглядит следующим об-

разом: var

<имя> : Text;

Как и в случае других типов файлов перед работой с

текстовым файлом предварительно необходимо связать файловую переменную с файлом на диске процедурой Assign.

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

ся аналогично типизированным файлам процедурами ReSet или ReWrite. Для текстовых файлов, помимо процедур

ReSet/ReWrite, определена еще одна процедура открытия:

Append(<имя>);

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

Далее в зависимости от способа открытия файла можно

либо читать из него данные:

Read(F, i, j); ReadLn(F, s);

либо записывать в него данные:

Write(F, a, b, c); WriteLn(F, Result);

При чтении/записи данных применяются те же правила, что и при вводе/выводе с клавиатуры/на экран, т. е. можно исполь-

зовать форматирование:

WriteLn(F, x:5:2);

Вданном примере F — имя файловой переменной;

x — выводимое выражение; 5 — параметр, указывающий минимальную ширину поля, в которое будет записываться символьное представление; 2 — задает количество десятичных знаков в дробной части вещественного числа.

17

Функции, используемые при вводе/выводе Eof(<имя>) — принимает значение True, если указатель

текущей компоненты файла с указанным именем находится за

последней компонентой файла и False — в противном случае. IOResult — результат последней операции ввода-вывода.

Возвращвет число 0, если операция ввода-вывода завершилась успешно, и другое число — в противном случае.

Eoln(<имя>) — принимает значение True, если текущей компонентой файла является признак конца строки или конца

файла, в остальных случаях принимает значение False. SeekEof(<имя>) — конец файла. Отличается от Eof тем,

что стоящие в конце файла символы пробела и табуляции про-

пускаются.

SeekEoln(<имя>) — конец строки файла. Отличается от Eoln тем, что стоящие в конце строки символы пробела и табуляции пропускаются.

3. Нетипизированные файлы

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

Объявление нетипизированного файла:

var

<имя> : File;

Открытие нетипизированного файла выполняется процедурами ReSet или ReWrite. При этом может указываться до-

полнительный параметр, который указывает размер одного

блока данных в байтах: ReSet(F, 25);

или

ReWrite(F, SizeOf(Integer)*12);

В первом примере открывается файл для чтения/записи с размером блока 25 байт. Во втором случае размер блока указывается через размер типа Integer. Функция SizeOf возвращает количество байт, отводимых под указанный тип или переменную. Если размер блока данных опущен, принимается размер по умолчанию, равный 128 байт.

18

Чтение данных выполняется следующей процедурой:

BlockRead(F, Biffer, Count); BlockRead(F, Biffer, Count, Result);

В примерах из файла F в область памяти, задаваемую переменной Buffer, считывается Count блоков данных. Во втором случае в переменную Result дополнительно заносится число реально считанных блоков данных. Такая ситуация возможна в тех случаях, когда конец файла встречается раньше, чем будет считано заданное число блоков. Если значения Count и Result различаются, это говорит о неполном чтении.

Аналогичные правила действуют для записи данных в

файл:

BlockRead(F, Biffer, Count); BlockRead(F, Biffer, Count, Result);

Частичная запись возможна в том случае, если на диске

заканчивается свободное место.

Пример 1. Создать файл, содержащий 50 случайных целых чисел в диапазоне [10..30], вывести числа на экран в об-

ратном порядке. Program Primer1;

const N=50;

var

F: file of integer; {Объявление файла с целыми числами} i, m : integer;

begin

Assign(F,'c:\bp\test1.dat'); {Связь файловой переменной

с файлом} ReWrite(F); {Открыть файл для записи}

for i:=1 to N do begin

m := Random(20)+10; {Получение случайных чисел} Write(F, m); {Запись числа в файл}

end;

Close(F); {Закрытие файла}

ReSet(F); {Открыть тот же файл для чтения}

19