
- •Переменные
- •Типы переменных и констант
- •Целые типы данных языка Turbo Pascal
- •Стандартные математические функции, используемые
- •Арифметические выражения
- •Операторы
- •Оператор присваивания
- •Ввод и вывод результатов вычислений
- •Общая структура программы на Turbo Pascal
- •Пример выполнения задания 1
- •Тема 2 Логические выражения Условный оператор
- •Условный оператор
- •Пример выполнения задания 2
- •Тема 3 Использование циклических структур. Операторы цикла с предусловием и с постусловием
- •Оператор цикла с предусловием
- •Оператор цикла с постусловием
- •Пример выполнения задания 3
- •Тема 4 Использование циклических структур. Оператор цикла с параметром
- •Пример выполнения задания 4
- •Тема 5 Использование и обработка одномерного массива
- •Описание одномерного массива
- •Часто встречающиеся задачи на одномерный массив
- •Пример выполнения задания 5
- •Тема 6 Использование и обработка двумерного массива
- •Задачи с использованием главной или побочной диагонали матрицы
- •Пример выполнения задания 6
- •Тема 7 Организация программ с использованием функций
- •Пример выполнения задания 7
- •Тема 8 Организация программ с использованием процедур
- •Параметры
- •Пример выполнения задания 8
- •Тема 9 Текстовые файлы
- •Символьный тип данных
- •Операции над строками
- •Особенности работы со строками
- •Редактирование строк
- •Сору (s:string; start, len:integer):string;
- •Преобразование строк
- •Процедуры и функции для работы с текстовыми файлами
- •Примеры выполнения задания 9
- •Тема 10
- •Работа с комбинированными типами данных
- •(Записями)
- •Общие сведения
- •Особенности работы с записями
- •Пример выполнения задания 10
- •Тема 11 Типизированные файлы
- •Процедуры и функции для работы с типизированными файлами
- •Прямой доступ к элементам файла
- •Примеры выполнения задания 11
Примеры выполнения задания 9
Дан текстовый файл abc.txt. Удалить из каждой строки файла abc.txt все пробелы и расположить символы строки в обратном порядке.
Результат записать в файл def.txt.
Примечание. Формирование текстового файла с исходными данными abc.txt можно выполнить в любом текстовом редакторе, в том числе и в редакторе Турбо Паскаля.
Порядок создания файла:
войти в редактор Турбо Паскаля;
набрать несколько строк текста (в конце последней строки обязательно нажать Enter);
сохранить под именем: abc.txt.
program lab6;
uses crt;
var s : string;
f, g: text;
n,k,i:integer;
begin clrscr;
assign (f, abc.txt);
assign (g, def.txt);
reset (f); {открыть файл abc.txt на чтение}
rewrite (g); {открыть файл def.txt на запись}
while not eof (f) do
begin readln (f, s); {текущая строка файла запишется в ОЗУ в ячейку, отведенную под переменную s}
п := pos( ); {позиция первого по порядку пробела}
while n > 0 do
begin
delete(s, n, 1); {удаление пробела в позиции п}
п := pos( );
end;
{формирование новой строки s1 из символов строки s,
расположенных в обратном порядке}
k:=length(s);
for i:= 1 to k do
s1[i]:=s[k+1-i];
{запись строки s1 в файл g }
writeln(g, s1);
end; close(f); close(g);
end.
Тема 10
Работа с комбинированными типами данных
(Записями)
Общие сведения
Достаточно часто приходится обрабатывать данные об объектах, состоящих из элементов различных типов. Например, для такого объекта, как абитуриент, можно при описании использовать следующие характеристики
Фамилия |
Имя |
Отчество |
Год рождения |
Гражданство |
Телефон |
Факультет |
Иванов |
Сергей |
Петрович |
1990 |
Россия |
1234567 |
ФАВТ |
Для описания подобных объектов в Турбо Паскале используется специальный тип данных – запись.
Комбинированный тип данных или запись представляет собой совокупность ограниченного числа логически связанных компонент, принадлежащих к различным типам.
Компоненты записи называются полями, каждое из которых определяется именем, вслед за которым через двоеточие указывается тип этого поля. Поля записи могут относиться к любому типу, допустимому в языке Паскаль, за исключением файлового типа.
Описание записи начинается со служебного слова record, затем следует список полей с указанием их типов. Заканчивается описание записи словом end:
Record имя поля 1 : тип поля 1;
имя поля 2 : тип поля 2;
. . . . . . . . . . . . . . . . . . .
имя поля N : тип поля N
end;
Если типы нескольких полей совпадают, то имена полей перечисляются через запятую.
Рассмотрим примеры.
Представить комплексные числа А и В в виде записей (re + im*i), где re, im – вещественные числа, а также описать дату (число, месяц, год).
type comp = record
re, im: real
end;
data = record
day: 1..31;
month: 1..12;
year: integer
end;
var a, b: comp; dt: data;
Особенности работы с записями
1. Обращение к записи в целом возможно только в операторе присваивания, где слева и справа от знака присваивания используются имена записей одинакового типа, например: b := a;
Естественно, что до выполнения этого оператора значения всех полей переменной – записи a должны быть определены. Во всех прочих случаях оперируют отдельными полями записи.
2. Реализуется прямой доступ к любому полю записи. Чтобы обратиться к отдельному полю записи, необходимо задать имя переменной типа запись и через точку указать имя нужного поля, например:
a. re := 1.54; a. im := – 2.45;
Такое имя называется составным.
Поскольку обращение к каждому полю записи идет по его имени, то при определении типа запись порядок указания ее полей не играет роли и может быть произвольным.
3. Допускается любая степень вложенности одной записи в другую. Любое поле записи может быть само записью, например:
type stud = record
name : string[15];
data: record
day : 1 .. 31:
month : 1 .. 12;
year : integer
end;
sex : ( m, w )
end;
var cc : stud;
Значения переменной сс можно задать, определив значения всех полей, например, следующим образом:
cc. name := 'Миронов А. В. ';
cc. data. day := 15;
cc. data. month := 11;
cc. data. year := 1989;
cc. sex := m;
4. Для упрощения работы с записями используется оператор присоединения with . Он позволяет заменить составные имена, характеризующие каждое поле, просто именами полей, а имена записи определить в операторе присоединения:
with M do S;
гдеМ – имя записи,
S – оператор, простой или составной.
Оператор S представляет собой область действия оператора присоединения, в пределах которой можно не использовать составные имена.
Иначе говоря, оператор присоединения позволяет работать с полями записи, как с простыми переменными.
Без оператора присоединения: |
С оператором присоединения |
Пример 1 |
|
a.re := 1.54; a.im := 2.45
|
with a do begin re := 1.54; im := 2.45 end; |
Пример 2 |
|
data.day := 15; data.month := 12; data.year:=1989
|
with data do begin day := 15; month := 12; year:=1989 end; |
5. Допускается использование записей в качестве компонент других сложных типов, например, массивов. Массив комплексных чисел можно задать так:
var mascomp : array [1 .. 10] of comp;
Оператор присваивания нового значения полю re во второй записи массива имеет вид:
mascomp [2] .re := 1.54.
При вводе элементов массива из записей с клавиатуры обычно используют оператор присоединения:
write(‘Введи комплексное число’);
for i := 1 to 10 do
with mascomp[i] do
begin writeln (‘действительная часть: ’);
readln(re);
write(‘мнимая часть: ’);
readln(im)
end;