Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Лекции_TP.doc
Скачиваний:
10
Добавлен:
22.12.2018
Размер:
1.4 Mб
Скачать

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

А) бесформатный ввод/вывод – информация из оперативной памяти выводится на внешнее устройство без каких-либо дополнительных преобразований.

Б) форматный в/в – информация из внутреннего двоичного кода преобразуется во внешнее представление и в этом виде выводится на экран. Форматный в/в осуществляется с помощью текстовых файлов: VAR F:TEXT;

TEXT – не зарезервированное слово в Паскале, а идентификатор стандартного типа, такой же как REAL и т. д. Для одного текстового файла невозможно производить операции и ввода, и вывода.

Запись (комбинированный тип данных) record.

Это множество (структура) различных типов данных. Объявление записи осуществляется в разделе переменных.

VAR <имя записи>:RECORD

<список полей>

END;

STR:RECORD;

ND:BYTE;

FIO:CHAR;

D:REAL END;

Описать структуру: название фирмы, название автомобиля (марка), стоимость, количество, мощность.

VAR FIRMA:RECORD

NAZFIR: CHAR

MARKA AVTO: CHAR

PAY:REAL

KOLICH:BYTE

MOSHN:REAL

R:= FIRMA.PAY*FIRMA.KOLICH

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

Описание типа данных запись: ( общий вид )

TYPE < имя типа >=RECORD

< список полей >

END;

VAR< имя записи >:< имя типа >;

Пример:

TYPE COMP=RECORD

T:CHAR;

D:REAL;

S:BYTE;

END;

VAR A,A1,A2:COMP;REZ:BYTE;

MAS:ARRAY[1..100] OF COMP;

CONST N=100;

Каждая отдельная часть записи – это поле. Обращение к отдельным полям комбинированного типа производится следующим образом: используются составные имена с точкой.

< имя записи>.< имя поля >

READ(A.T);

READ(A.D);

.. . . . . . . . . .

READ(A.S);

REZ:= A.S *N;

Пример: дан многочлен 4А+7В-3А+8А-2К+1Р-2В-5К; найти подобные члены для переменной а и вычислить суммарный коэффициент.

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

М1 – элемент многочлена (запись);

М2 – элемент результирующий (запись);

СОЕР – коэффициент (элемент записи);

ВUК – буква (элемент записи);

ЕLЕМ – тип записи;

SUМ – сумма коэффициентов.

PR EX4 (INPUT,OUTPUT);

TYPE

ELEM = RECORD

COEF:INTEGER;

BUK:CHAR;

END;

VAR

M1,M2:ELEM;

SUM:INTEGER;

BEGIN

SUM:=0

READLN;

WRITELN(‘введите многочлен:’);

WHILE NOT EOLN DO

BEGIN

READ(M1.COEF, M1.BUK);

IF M1.BUK =’A’ THEN SUM:= SUM+M1.COEF;

END;

M2.COEF:=SUM

M2.BUK:=’A’

WRITELN(‘ подобный член =’,M2.COEF:3,M2.BUK);

END.

___________________

Подобный член = 9А

Комбинированный тип может иметь сложную структуру.

TYPE R=RECORD

A: BYTE;

B:RECORD;

B,C:REAL;

END;

END;

VAR X:R; VAR B:R;

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

BEGIN BEGIN

. . . R.A. . . . B.B.B

R.B.C

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

Пример: обработка данных с использованием RECORD. Ввести список фамилий с баллами по какому-то предмету и определить количество занимающихся на “5”.

PROGRAM R5;

TYPE T=RECORD;

NAME:CHAR;

BALL:BYTE;

END;

VAR LIST:ARRAY [1..10] OF T;

SUM,I,K:BYTE;

BEGIN

SUM1:=0

WRITELN(‘ введите учащегося ’)

FOR K:=1 TO 10 DO BEGIN

READ( LIST[K].NAME, LIST[K].BALL);

IF LIST[K].BALL=5 THEN SUM:=SUM1+1

END;

WRITELN(‘ количество отличников’,SUM1);

END.

К отдельному компоненту записи можно обратиться с помощью оператора WITH, упрощая обращение. Имя записи выносится в заголовок оператора.

WITH < имя записи > DO < оператор >

В блоке используются только имена полей.

Предыдущая программа; в ней после

FOR K:=1 TO10 DO BEGIN

WITH LIST[K] DO

READ(NAME,BALL);

IF BALL=5 THEN

SUM1:=SUM1+1;

END;

END;

WRITELN(‘ количество отличников ’,SUM1);

END.