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, мы заносим его в множество М.
|