Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
КНИГА_Учимся программировать TURBO PASCAL 7.doc
Скачиваний:
32
Добавлен:
19.08.2019
Размер:
1.62 Mб
Скачать

Тема I 3 Разные задачи

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

TYPE NN=RECORD

NAME:TRING;

HIGH:INTEGER;

END;

где через точку с запятой перечисляются типы и, возможно, размер полей записи с данным типом NN. Для задания отдельной записи данного типа и файла, состоящих из таких записей, нужно вос­пользоваться секцией описания переменных: VAR F1:FILE OF NN;

N:NN;

Помните, что нельзя сразу задать VAR F1:FILE OF RECORD;

В PASCAL 7.0 такое описание приводит к ошибке!

Обращение к полям записи N организуется как N.NAME и N.HIGH.

Задача 13.1 Создать файл, в который необходимо ввести фамилии и рост учеников. Вывести этот файл на экран через пробел:

ИВАНОВ 177

ПЕТРОВ 181

PROGRAM PRG13_1;

TYPE NN=RECORD

NAME:STRING;

HIGH:INTEGER;

END;

Var f1:file of nn;

N:NN;

I:integer;

BEGIN

ASSIGN(F1,'C:\r1.TXT');

WRITELN('BBЕДИTE ИНФОРМАЦИЮ В ФАЙЛ');

REWRITES(F1);

FOR l:=1 TO 4 DO

BEGIN

READLN(N.NAME,N.HIGH);

WRITE(F1,N);

END;

WRITELN('ФАЙЛ');

RESET(F1);

FOR l:=1 TO 4 DO

BEGIN

READ(F1,N);

WRITELN(N.NAME,' '.N.HIGH);

END;

CLOSE(FI);

END.

Для решения задачи:

- формируем тело программы и описываем переменные;

- привяжем файл rl.TXT к файловой переменной F1 и откро­ем его на запись;

- организуем ввод полей N.NAME и N.HIGH записи с клавиа­туры и занесем их как целую запись N в файл;

- открываем F1 на чтение;

- организуем последовательный просмотр по считыванию элемен­тов файла F1 и записи их на экран дисплея в виде двух полей;

- закрываем файл.

Переменные:

Fl - файл записей;

N - очередная запись;

I - вспомогательная переменная.

Задача 13.2 Создать файл, в который необходимо ввести фамилии и рост учеников. Вывести этот файл на экран через пробел:

ИВАНОВ 177

ПЕТРОВ 181

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

PROGRAM PRG13_2;

TYPE NN=RECORD

NAME:STRING;

HIGH:INTEGER;

END;

TYPE FN= FILE OF NN;

VAR F1: FN ;

N:NN;

PROCEDURE F_IN(VAR F:FN);

{Ввод файла данных}

Var I:integer;

BEGIN

FOR I:=1 TO 4 DO

BEGIN

READLN(N.NAME,N.HIGH);

WRITE(F,N);

END;

END;

PROCEDURE F_OUT(VAR F: FN);

{Вывод файла данных и определение требуемых параметров}

Var I, min,max:integer;

F_MIN,F_MAX:STRING;

BEGIN

МАХ:=0;

MIN:=300;

FOR l:=1 TO 4 DO

BEGIN

READ(F,N);

IF N.HIGH<MIN THEN

BEGIN

MIN:=N.HIGH;

F_MIN:=N.NAME;

END;

IF N.HIGH>MAX THEN

BEGIN

MAX:=N.HIGH;

F_MAX:=N.NAME;

END;

WRITELN(N.NAME,' '.N.HIGH);

END;

WRITELN('CAMЫЙ ВЫСОКИЙ УЧЕНИК');

WRITELN(F_MAX,' ':4,MAX);

WRITELN('CAMЫЙ НИЗКИЙ УЧЕНИК');

WRITELN(F_MIN, ' ':4,MIN);

END;

BEGIN

ASSIGN(F1,'C:\R1.TXT');

WRITELN('BBОДИTE ИНФОРМАЦИЮ В ФАЙЛ');

REWRITE(FI);

F_IN(F1);

WRITELN(' ФАЙЛ 1');

RESET(FI);

F_OUT(F1);

CLOSE(F1);

END.

Для решения задачи:

- формируем тело программы и описываем переменные;

- создаем описание процедуры F_IN(VAR F:FN) для ввода за­писей в файл F;

- создаем описание процедуры F_OUT(VAR F: FN) для вывода записей из файла и определения фамилии и роста самого ма­ленького ученика и самого высокого ученика в данной учеб­ной группе;

- в основной программе привяжем файл rl.TXT к файловой переменной F1 и откроем его на запись;

- вызываем функцию F_IN для ввода записей в файл;

- открываем F1 на чтение и вызываем F_OUT, которая выво­дит результаты на экран;

- закрываем файл.

Переменные:

в функции F_IN:

I - вспомогательная переменная;

в функции F_OUT:

I - вспомогательная переменная;

MIN - рост самого маленького ученика;

МАХ - рост самого высокого ученика;

F_MIN - фамилия самого маленького ученика;

F_MAX- фамилия самого высокого ученика.

в основной программе:

F1 - файл записей;

N - очередная запись.

Задача 13.3 Дано множество из N городов (N < 11), между которыми проложены дороги, длина дорог из­вестна. В каком порядке должен посетить их коммивояжер, чтобы путь его был самым ко­ротким? Маршрут начинается в городе i и кончается в этом же городе. На каждом шагу коммивояжер выбирает тот город, расстоя­ние до которого минимально.

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

Для решения этой задачи нам понадобится задать матрицу рас­стояний METR[N,N], где каждый элемент, находящийся на I-й строке и в J-м столбце, соответствует расстоянию между городами I и J. Очевидно, что матрица расстояний симметрична относительно главной диагонали и сами элементы главной диагонали равны ну­лю.

Для того чтобы отделять города, в которых уже был коммивоя­жер, от городов, которые он еще не посетил, нам понадобится множество М. В это множество последовательно будем заносить города, которые коммивояжер уже посетил. Находясь в городе К и пытаясь определить следующий город L, до которого расстояние минимально, города из множества М рассматривать не нужно. Вы­брав город L, мы заносим его в множество М.

PROGRAM PRG13_3;

{ЖАДНЫЙ АЛГОРИТМ}

VAR M:SET OF 1..10;

STR : ARRAY[1..1O] OF BYTE;

A,N, L, X, Y, J, I, MIN.COST :INTEGER;

METR : ARRAY [1..10, 1..10] OF BYTE;

PROCEDURE IN_METR;

{Формирование матрицы}