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

Методичка Паскаль

.pdf
Скачиваний:
101
Добавлен:
30.04.2015
Размер:
592.26 Кб
Скачать

Const N = 100; { N - максимальное количество студентов }

Type Stud = Record {данные об одном студенте–запись из трех полей:}

Name : String;

{ фамилия}

Group : Integer;

{ номер группы}

Rating : Real

{ рейтинг }

End;

 

Students = Array [1..N] Of Stud; { данные обо всех студентах - }

 

{ это массив записей }

Var St : Students;

{ список студентов – массив записей }

K, M, L, Gr : Integer;

Pst : Stud; { промежуточная переменная, необходимая для того, } {чтобы менять местами два элемента массива при его сортировке}

Begin

ClrScr;

{а) Ввод данных о студентах } Write (‘Сколько студентов ’); Readln (M);

For K := 1 To M Do

With St [K] Do { вводим все поля записи St[K] } Begin

Write (‘Введите фамилию ’,K,’ студента ‘); Readln (Name);

Write (‘Введите номер его группы ‘); Readln (Group);

Write (‘Введите его рейтинг ‘); Readln (Rating)

End;

{б) Вывод списка заданной группы }

Write (‘Список какой группы требуется ’);

Readln (Gr);

71

Writeln(‘Список группы № ‘,Gr);

For K := 1 To M Do { просматриваем весь список }

With St [K] Do

If Group = Gr { если номер группы студента равен требуемому} Then Writeln (Name:20); { то печатаем его фамилию }

{ в) Сортировка студентов по их рейтингу } For K := 1 To M – 1 Do

For L := K + 1 To M Do

If St[L]. Rating > St[K]. Rating

Then Begin

Pst:= St[L];

St[L]:=St[K];

St[K]:=Pst

End;

{ вывод отсортированного списка}

Writeln (‘Список студентов в порядке убывания рейтинга:’); For K := 1 To M Do

Writeln (Name:20, Group:5, Rating:7:2);

Readln

End.

Контрольные задания

13.1. Составить программу, которая обрабатывает информацию о a.) книгах;

b.) товарах на складе; c.) кинофильмах; d.) школах города;

e.) факультетах университета; f.) сотрудниках фирмы.

72

Информация об объекте должна представлять собой совокупность разнотип-

ных полей (не менее четырех). Программа должна:

1.вводить информацию;

2.выводить информацию на экран;

3.позволять редактировать ее (т.е. изменять значения некоторых полей);

4.осуществлять поиск по нескольким признакам;

5.выполнять сортировку по нескольким полям.

73

Тема 13. Работа с файлами в языке Паскаль

Краткое изложение теоретического материала

Все программы, составленные до настоящего момента, обрабатывали данные (переменные, константы), хранящиеся в оперативной памяти ком-

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

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

рования, существует возможность хранить данные независимо от про-

граммы. Для этого эти данные должны быть представлены в виде файла.

Файл – это поименованное место на внешнем носителе, представляю-

щее собой совокупность отдельных записей. Файл данных позволяет:

хранить данные во внешней памяти долговременно и независимо от программы;

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

По способу представления данных файлы делятся на

текстовые: в них информация представлена в виде текста - после-

довательности символов. Например, число 2006 представляет собой последо-

вательность из четырех символов (т.е. строку) – ‘2006’.

файлы с данными во внутреннем представлении: в них данные представлены в той форме, в какой они хранятся в памяти компьютера (см.

соответствующую литературу о представлении данных в памяти ЭВМ). На-

пример, то же самое число 2006 в таком файле будет записано уже не в виде четырех цифр, а как целое число (в двоичной системе счисления). Файлы во внутреннем представлении в языке Паскаль называют еще структурирован-

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

По способу доступа к данным файлы делятся на

74

файлы последовательного доступа: для того, чтобы обратиться к N-

ой записи файла, необходимо прочесть предыдущие N-1 запись (аналог – магнитофонная кассета);

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

Вобобщенном виде алгоритм работы с файлами следующий:

1.открыть файл;

2.записать в него или прочитать из него данные;

3.закрыть файл.

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

Записи текстового файла – это строки различной длины, поэтому тек-

стовые файлы являются файлами последовательного доступа. Структура текстового файла представлена на Рис. 6.

Eoln

Eoln

Eoln

Eoln

Eof

Рис. 6. Структура текстового файла

Таким образом, текстовый файл представляет собой совокупность строк разной длины. Именно поэтому к записям файла возможен только по-

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

бражаемым символом Eoln («End of line» - конец строки). В конце файла за-

писан специальный неотображаемый символ Eof («End of file» - конец фай-

ла).

75

В текстовом файле может храниться не только текст, но и данные дру-

гих типов (например, числа) в текстовом представлении (т.е. по сути дела все равно текст).

Для работы с текстовыми файлами в языке Паскаль используются сле-

дующие команды, описания и функции: 1. Описание файловой переменной:

Var f : text;

где f – имя файловой переменной, text – еще один стандартный тип данных – текстовый файл.

Файловая переменная – это переменная-указатель, посредством кото-

рой идет взаимодействие программы (чтение/запись данных) с внешним файлом.

2. Связывание файловой переменной с конкретным именем внешне-

го файла:

Assign ( f, <имя файла> );

где f – имя файловой переменной, <имя файла> - строковая константа или переменная. Например, выполнение команды

Assign ( f, ’c:\tp70\example.txt’ );

свяжет файловую переменную f с файлом «example.txt», который расположен на диске C: в папке с именем «tp70». После записи такой команды в тексте программы нигде далее не будет указываться имя файла, с которым работает программа.

3. Открытие файла для записи данных:

Rewrite (f);

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

4. Открытие файла для чтения данных:

Reset (f);

76

Для чтения можно открыть только существующий файл. Указатель ус-

танавливается на первую запись (т.е. на первый символ первой строки) фай-

ла.

5. Открытие файла для дополнения (т.е. дописывания данных в ко-

нец файла):

Append (f);

Для дополнения можно открыть только существующий файл. Указа-

тель устанавливается после последней записи (строки). 6. Запись данных в файл:

Write ( f, <список вывода> );

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

ран. Имя файловой переменной f указывает на то, что вывод будет осуществ-

ляться в файл.

Команда Writeln ( f, <список вывода> ); записывает в текстовый файл данные и символ Eoln.

7. Чтение данных из файла:

Read ( f, <список переменных> );

Команда Readln ( f, <список переменных> ); позволяет прочитать данные, а также символ Eoln.

8. Закрытие файла:

Close ( f );

9.Логическая функция Eof ( f ) возвращает значение ИСТИНА, если указатель указывает на символ конца файла и ЛОЖЬ в противном случае.

10.Логическая функция Eoln ( f ) возвращает значение ИСТИНА, если указатель указывает на символ конца строки и ЛОЖЬ в противном случае.

Примеры решаемых задач Пример 1. Составить программу, которая:

а) запишет в файл Message. txt текстовое сообщение;

77

б) прочитает из файла Message. txt текстовое сообщение и выведет его

на экран.

Пояснение. Для решения этой и подобной задач лучше составлять две отдельные программы: первая программа формирует файл, вторая – его об-

рабатывает.

Программы:

Program A;

 

Uses Crt;

 

Var s : string;

{ переменная s для хранения текстового сообщения }

f : text;

{ f – файловая переменная }

Begin

 

Clrscr;

 

Assign (f, ’Message. txt’); { связывание файловой переменной f с

файлом ’Message. txt’, который будет создан в текущей папке }

Rewrite(f);

{ открыли файл для записи }

Write (‘Введите текст сообщения ‘);

Readln (s);

{ ввели в переменную s текст сообщения }

Writeln (f, s);{ записали в файл содержимое переменной s }

Close (f);

{ закрыли файл }

Writeln (‘Файл создан’);{ вывели на экран поясняющее сообщение }

Readln

 

End.

 

Program B;

 

Uses Crt;

 

Var m : string;

{ переменная m для хранения текстового сообщения }

t : text;

{ t – файловая переменная }

Begin

Clrscr;

Assign (t, ’Message. txt’); { связывание файловой переменной f с

файлом ’Message. txt’, который существует в текущей папке }

78

Reset (t); { открыли файл для чтения }

Readln (t, m); { считали из файла t в переменную s текст сообщения} Writeln (‘Сообщение:' , m); { вывели на экран текст сообщения }

Close (t);

{ закрыли файл }

Readln

 

End.

 

Пример 2. Составить программу, которая:

а) запишет в файл Students.txt список студентов группы (фамилия и год рождения);

б) обработает файл Students.txt следующим образом:

-выведет на экран список студентов группы;

-выведет список студентов заданного года рождения;

-допишет в файл информацию о новом студенте.

Программы:

Program A;

 

Uses Crt;

 

Var fam : string;

{ переменная fam для хранения фамилии студента }

year, n, k : integer; { переменная year для хранения года рождения}

f : text;

{ f – файловая переменная }

Begin

 

Clrscr;

 

Assign (f, ’Students. txt’); { связывание файловой переменной f с

файлом ’Students. txt’, который будет создан в текущей папке }

Rewrite(f);

{ открыли файл для записи }

Write (‘Введите количество студентов в группе ‘);

Readln (n);

For k:=1 To n Do

Begin

Write(‘Введите фамилию ’,k,’-го студента ’);

Readln (fam);

{ Ввели в переменную fam фамилию }

 

79

{ закрываем файл }
80

Writeln (f, fam); { записали в файл фамилию студента и сим-

 

 

вол Eoln }

Write(‘Введите год его рождения ’);

Readln (year);

{ Ввели в переменную year год рождения }

Writeln (f, year)

{ записали в файл год рождения студента и

 

 

символ Eoln }

End;

 

 

Close (f);

{ закрыли файл }

Writeln (‘Файл создан’); { вывели на экран поясняющее сообщение}

Readln

 

 

End.

 

 

Program B;

 

 

Uses Crt;

 

 

Var fam : string;

{ переменная fam для хранения фамилии студента }

year, n, : integer; { переменная year для хранения года рождения }

f : text;

{ f – файловая переменная }

Begin

 

 

Clrscr;

 

 

Assign (f, ’Students. txt’); { связываем файловую переменную f с

файлом ’Students. txt’, который будет создан в текущей папке } { а) вывод на экран содержимого файла ’Students. txt’ }

Reset (f); { открываем файл для чтения }

Writeln (‘Список группы ‘);

While Not Eof (f) Do { пока не достигнут конец файла }

Begin

Readln (f, fam); { читаем из файла фамилию и символ Eoln } Readln (f, year);{ читаем из файла год рождения и символ Eoln} Writeln (fam:20, year: 5) { печатаем фамилию и год рождения } End;

Close (f);