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

Мансуров. Основы программирования в среде Lazarus. 2010

.pdf
Скачиваний:
45
Добавлен:
27.04.2021
Размер:
6.3 Mб
Скачать

Глава 3 Более сложные элементы языка

____________________________________________________________________

LightCyan -ярко-бирюзовый;

LightRed - ярко-красный;

LightMagenta - ярко-малиновый;

Yellow - желтый;

White - белый;

Blink - мерцание (мигание);

Процедура TextBackGround(Color)- устанавливает цвет фона.

Процедура ClrScr - очищает экран, одновременно окрашивая его в цвет установленного фона.

Процедура Window(x1, y1, x2, y2)- определяет на экране окно,

где x1, y1- координаты левого верхнего угла, а x2, y2- координаты пра-

вого нижнего угла окна

Функция KeyPressed - возвращает значение true, если клавиша нажата и false – в противном случае.

Функция readkey – считывает символ с клавиатуры.

Пример.

Написать программу, которая очищает экран и устанавливает синий фон.

Затем выводит текст желтым цветом.

program project1;

uses

CRT, FileUtil;

begin

TextBackGround(Blue);

ClrScr;

GoToXY(6, 6);

TextColor(Yellow);

221

3.5 Модули в Паскале

____________________________________________________________________

writeln(UTF8ToConsole('Привет, Вася!'));

writeln(UTF8ToConsole('Нажмите любую клавишу'));

readkey;

end.

Дальнейшие "игры" с цветами и окнами предоставляю вам самому, ува-

жаемый читатель, а сейчас давайте напишем более серьезную программу.

Пример.

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

честве проданных компьютеров каждым менеджером за месяц. Написать про-

грамму, которая выводит таблицу, в которой следующие графы: фамилия, ко-

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

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

Стоимость компьютера принять равной 1000$, размер премии за каждый проданный компьютер 25$

program manager; uses

CRT, FileUtil, SysUtils; var

name: array of string[18]; kol: array of integer;

sum, cost, prem, i, k, n: integer; progprem: integer;

begin

writeln(UTF8ToConsole('Введите количество менеджеров'));

readln(n);

SetLength(name, n);

222

Глава 3 Более сложные элементы языка

____________________________________________________________________

SetLength(kol, n);

for k:= 0 to n - 1 do

begin

writeln(UTF8ToConsole('Введите фамилию'));

readln(name[k]);

writeln(UTF8ToConsole('Введите количество компьютеров'));

readln(kol[k]);

end;

ClrScr;

GoToXY(6,1);

write(UTF8ToConsole('Сведения о реализации компьютеров'));

GoToXY(14,2);

write(UTF8ToConsole('за январь 2010 г.'));

GoToXY(1,3);

 

write('------------------------------------------------

');

GoToXY(1,4);

 

write(UTF8ToConsole('Фамилия

Количество Выручка Премия'));

GoToXY(1,5);

 

write('------------------------------------------------

');

cost:= 1000;

 

progprem:= 25;

 

for k:= 0 to n - 1 do

 

begin

 

sum:= cost * kol[k];

 

prem:= progprem * kol[k];

 

writeln;

 

writeln(name[k]);

 

GoToXY(24, k + 6);

 

write(kol[k]);

 

223

3.5 Модули в Паскале

____________________________________________________________________

GoToXY(32, k + 6);

 

write(sum);

 

GoToXY(40, k + 6);

 

write(prem);

 

end;

 

sum:= 0;

 

i:= 0;

 

for k:= 0 to n - 1 do

 

begin

 

i:= i + kol[k];

 

sum:= i * cost; {Сумма выручки}

 

prem:=i * progprem;

 

end;

 

GoToXY(1, n + 6);

 

write('------------------------------------------------

');

GoToXY(17, n + 7);

 

writeln(UTF8ToConsole('Итого:'));

 

GoToXY(24, n + 7);

 

write(i);

 

GoToXY(32, n + 7);

 

write(sum);

 

GoToXY(40, n + 7);

 

write(prem);

 

GoToXY(1, n + 9);

 

write(UTF8ToConsole('Нажмите любую клавишу')); readkey;

end.

224

Глава 3 Более сложные элементы языка

____________________________________________________________________

3.6. Файлы

Файл – некоторый участок на диске, где хранятся данные. Каждому файлу присваивается уникальное имя, благодаря которому становится возможным об-

ращаться к различным данным на диске. Файлы состоят из отдельных элемен-

тов одного типа. Размер файла зависит от объема того физического устройства,

на котором он хранится.

3.6.1 Тип данных – запись

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

Общий вид объявления записи:

type

<имя записи> = record

<имя1>: <тип1>;

<имя2>: <тип2>;

..............

<имяN>: <типN>;

end;

После этого можно объявить переменные с типом запись:

var <имя переменной>: <имя записи>;

Пример. Пусть имеется таблица следующей структуры:

Фамилия

Имя

Отчество

Группа

Год рождения

 

 

 

 

 

Тогда можно объявить запись следующего вида:

type

225

3.6 Файлы

____________________________________________________________________

student = record

family, name, otch, group: string[20];

birthday: integer;

end;

var

a, b: student;

Обращение к элементам записи выполняется через уточненное (состав-

ное) имя.

a.family:= 'Иванов';

b.group:= 'ПОВТАС-1/08';

Чтобы не удлинять слишком текст программы, в Паскале предусмотрен оператор присоединения with. Это дает возможность определить кусок про-

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

Синтаксис оператора:

with <список имен записей> do

begin

… {в этом блоке при обращении к полям записи не обязательно каж-

дый раз указывать имя записи}

………

end;

Пример:

type

student = record

family, name, otch, group: string[20];

end;

226

Глава 3 Более сложные элементы языка

____________________________________________________________________

var

a, b: student;

begin

with b do

begin

family:= 'Иванов';

group:= 'ПОВТАС-1/08';

end;

end.

3.6.2Файловые типы

Впрограмме для работы с файлами вводятся файловые переменные. Пере-

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

тать данные с диска или записывать данные на диск. Синтаксис описания фай-

ловой переменной:

var <имя файловой переменной>: <тип файла>;

Различают три типа файлов:

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

типизированный файл;

нетипизированный файл Текстовый файл состоит из последовательности любых символов перемен-

ной длины, поделенных на строки. Каждая строка заканчивается специальным признаком "конец строки" – eoln (end of line).

Описание текстового файла имеет вид:

var <имя файловой переменной>: TextFile;

Типизированный файл состоит из элементов одного типа. Однако про-

граммист может создать свой тип данных – запись с разнородными типами по-

227

3.6 Файлы

____________________________________________________________________

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

Описание типизированного файла имеет вид:

var <имя файловой переменной>: File of <тип компонентов>;

И, наконец, в нетипизированных файлах хранятся данные любого типа и структуры. Описание нетипизированного файла имеет вид:

var <имя файловой переменной>: File;

Пример.

var

name: TextFile; // Текстовый файл

kol: File of integer; // Типизированный файл buf: File; // Нетипизированный файл

Файл name состоит из последовательности строк любых символов пере-

менной длины, файл kol из целых чисел, файл buf содержит данные любого типа и структуры, т.е. интерпретируются независимо от типа и структуры со-

держащихся в нем данных.

Для всех типов файлов определяется специальный признак "конец файла"

eof (end of file).

3.6.3 Процедуры для работы с файлами

3.6.3.1. Общие процедуры для работы с файлами всех типов

Для связи файловой переменной с файлом во внешней памяти использует-

ся процедура:

AssignFile(f, fname);

228

Глава 3 Более сложные элементы языка

____________________________________________________________________

где f - файловая переменная, fname - переменная типа string, содер-

жащая имя файла. Процедура AssignFile – связывает имя внешнего файла на диске с файловой переменной.

Общий вид имени файла:

<диск>:\<имя каталога>\<имя подкаталога>\...\<имя файла> (Windows) /<имя каталога>/<имя подкаталога>/.../<имя файла> (Linux)

Если указано только имя файла, то принимается текущий каталог и теку-

щее логическое устройство. Только после выполнения AssignFile можно обращаться к другим процедурам по обработке файлов.

AssignFile(name, 'Name.dat')

AssignFile(kol, 'C:\Work\Kol.dat')

AssignFile(data, '/home/user/data.dat')

Процедура Rewrite – создает и открывает новый файл.

Описание:

Rewrite(f)

f - является файловой переменной. Перед использованием Rewrite пере-

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

AssignFile. Если файл с таким именем уже существует, то он удаляется, а

на его месте создается новый пустой файл.

Процедура Reset- открывает существующий файл для чтения или запи-

си. Описание:

Reset(f)

где f - файловая переменная. Перед использованием Reset переменная f

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

После создания или открытия любого файла создается специальный указа-

229

3.6 Файлы

____________________________________________________________________

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

ремещается к следующему элементу. После записи указатель автоматически перемещается к только что записанному в файл на диске элементу.

Процедура CloseFile (f)- закрывает открытый файл.

Функция Eof() в случае, если достигнут конец файла, возвращает зна-

чение true и false , если конец файла еще не достигнут.

Процедура Rename(f, newname); позволяет переименовать файл; newname - переменная типа string, содержащая новое имя файла;

Процедура Erase(f);- удаляет файл.

Функция IOResult – позволяет определить результат последней опера-

ции ввода/вывода. Возвращает 0, если ввод/вывод прошел успешно. Если опе-

рация ввода/вывода прошла неудачно, возвращает код ошибки.

Функция FileExists(fname) – позволяет определить существует ли файл fname на диске. Здесь fname - переменная типа string, в ней задается имя файла на внешнем устройстве, чаще всего на диске. Допускается указывать имя файла вместе с путем к файлу, например

FileExists('C:\Work\Data\Student.dat') – возвращает true,

если файл существует и false, если файл с этим именем в указанной папке не существует.

3.6.3.2. Процедуры для работы с текстовыми файлами

Текстовые файлы являются файлами с последовательным доступом. Дос-

туп к каждой строке возможен лишь последовательно, начиная с первой. Если нужно, например, прочитать строку n, то сначала нужно прочитать все n-1

строк.

Процедура Reset(f) открывает текстовый файл только для чтения.

Процедура Rewrite(f) создает новый файл (если файл с тем же именем

230