Приветствую вас. Нужна помощь в изменение программы. Суть состоит в том, что выделенная часть программы ищет наименьшее значение из параллельных плоскостей. Нужно изменить на функцию так, чтобы она выбирала из значений те, которые больше заданного числа и выводила их на экран. Program PLOSKOSTY; {РАЗРАБОТАЛ: КУЧЕРОВ.С.Г, ГР.6122, ФРТ.} {ПРОГРАММА ВЫПОЛНЯЕТ ПОИСК ПЛОСКОСТЕЙ,// XoY, ПАРАЛЛЕЛЬНЫЕ ПЛОСКОСТИ И МИНИМАЛЬНОЕ РАССТОЯНИЕ МНЖДУ ПАРАЛЛЕЛЬНЫМИ ПЛОСКОСТЯМИ} USES CRT; {Подключение модуля работы с экраном} CONST MAX=20; {Максимальное количество плоскостей} EPS=0.0000000001; {Точность определения параллельных плоскостей} TYPE EQUATION_MATR=ARRAY[1..4] OF REAL; {Тип для массива коэф. одной плоскости} COEF_MATR=ARRAY[1..MAX] OF EQUATION_MATR; {Тип для массива коэф. всех плоскостей} PARXY_MATR=ARRAY[1..MAX] OF INTEGER; {Тип для массива номеров плоскостей, // XoY} PAR_PL_MATR=ARRAY[1..MAX,1..2] OF INTEGER; {Тип для массива номеров параллельных плоскостей} DIST_MATR=ARRAY[1..MAX] OF REAL; {Тип для массива расстояний} var inputFile:TEXT; {Входной файл} outFile:TEXT; {Файл результатов} N, {Количество плоскостей} XY, {Кол. плоскостей, // XoY} PP: integer; {Кол. параллельных плоскостей} EQU:EQUATION_MATR; {Коэф. одной плоскости} COEF:COEF_MATR; {Коэф. всех плоскостей} PARXYARXY_MATR; {Номера плоскостей, // XoY} PAR_PLAR_PL_MATR; {Номера параллельных плоскостей} DIST: DIST_MATR; {расстояния между параллельными плоскостями} A, B, C, D: integer; {Коэффициенты} E:REAL; {Погрешность оценки параллельных плоскостей} MIN_DIST:REAL; {Минимальное расстояние} MINPL1,MINPL2:INTEGER; {Номера плоскостей между которыми мин. расст.} CH : INTEGER; {Символ для ввода} {-------Подпрограмма поиска плоскостей, // XoY--------} PROCEDURE PARAL_XY(COEF:COEF_MATR;N:INTEGER;VAR PARXYARXY_MATR; VAR XY:INTEGER); VAR I,J:INTEGER; {Рабочие переменные} BEGIN J:=0; {Установка начальных значений} FOR I:=1 TO N DO BEGIN IF COEF[I,1]=0 THEN {Проверка } BEGIN { условия } IF COEF[I,2]=0 THEN { А=0 и В=0} BEGIN J:=J+1; PARXY[J]:=I {Запись номера плоскости, // XoY} END END END; XY:=J END; {------Подпрограмма поиска параллельных плоскостей--------} PROCEDURE PARAL_PL(COEF:COEF_MATR;N:INTEGER;E:REAL;VAR PAR_PLAR_PL_MATR;VAR DISTIST_MATR;VAR PP:INTEGER); VAR CONDITION, {Условия } CONDITION1, { параллельности } CONDITION2: BOOLEAN; { плоскостей } I,J : INTEGER; {Рабочие переменные} BEGIN PP:=0; {Установка начальных значений} {Проверка параллельности плоскостей} FOR I:=1 TO N-1 DO BEGIN FOR J:=I+1 TO N DO BEGIN CONDITION1:=ABS(COEF[I,1]*COEF[J,2]-COEF[I,2]*COEF[J,1]) < E; CONDITION2:=ABS(COEF[I,1]*COEF[J,3]-COEF[I,3]*COEF[J,1]) < E; CONDITION:=CONDITION1 AND CONDITION2; IF CONDITION THEN {Плоскости параллельны} BEGIN PP:=PP+1; PAR_PL[PP,1]:=I; {Запись номеров } PAR_PL[PP,2]:=J; { параллельных плоскостей } {Вычисление расстояния между параллельными плоскостями} DIST[PP]:=ABS( COEF[I,4]/SQRT(SQR(COEF[I,1])+ SQR(COEF[I,2])+SQR(COEF[I,3]))- COEF[J,4]/SQRT(SQR(COEF[J,1])+ SQR(COEF[J,2])+SQR(COEF[J,3]))) END END END END; {----------Процедура вывода результатов в файл------------} PROCEDURE OUT_TO_FILE(COEF:COEF_MATR; N:INTEGER); {-----Вывод исходных данных-----} BEGIN WRITELN(outFile,' '); WRITELN(outFile,' ИСХОДНЫЕ ДАННЫЕ '); WRITELN(outFile,' '); WRITELN(outFile,'КОЛИЧЕСТВО ПЛОСКОСТЕЙ N=',N); WRITELN(outFile,' '); WRITELN(outFile,' НОМЕР КОЭФФИЦИЕНТЫ'); WRITELN(outFile,'ПЛОСКОСТИ A B C D'); FOR I:=1 TO N DO BEGIN EQU:=COEF; WRITE(outFile,' ',I,' '); FOR J:=1 TO 4 DO WRITE(outFile,' ',EQU[J]:8:3,' '); WRITELN(outFile,' '); END; WRITELN(outFile,' '); {-----Вывод результатов-----} WRITELN(outFile,' '); WRITELN(outFile,' РЕЗУЛЬТАТЫ '); WRITELN(outFile,' '); IF XY > 0 THEN {Есть плоскости, // XoY} BEGIN WRITELN(outFile,' ПЛОСКОСТИ, // XoY '); WRITELN(outFile,' '); WRITELN(outFile,' НОМЕР КОЭФФИЦИЕНТЫ'); WRITELN(outFile,'ПЛОСКОСТИ A B C D'); WRITELN(outFile,' '); FOR I:=1 TO XY DO BEGIN EQU:=COEF[PARXY]; WRITE(outFile,' ',PARXY,' '); FOR J:=1 TO 4 DO WRITE(outFile,' ',EQU[J]:8:3,' '); WRITELN(outFile,' '); END END ELSE {Нет плоскостей, // XoY} WRITELN(outFile,' ПЛОСКОСТЕЙ, // XoY, НЕТ'); WRITELN(outFile,' '); IF PP > 0 THEN {Есть параллельные плоскости} BEGIN WRITELN(outFile,' ПАРАЛЛЕЛЬНЫЕ ПЛОСКОСТИ'); WRITELN(outFile,' '); WRITELN(outFile,' НОМЕР КОЭФФИЦИЕНТЫ'); WRITELN(outFile,'ПЛОСКОСТИ A B C D'); WRITELN(outFile,' '); FOR I:=1 TO PP DO BEGIN EQU:=COEF[PAR_PL[I,1]]; WRITE(outFile,' ',PAR_PL[I,1],' '); FOR J:=1 TO 4 DO WRITE(outFile,' ',EQU[J]:8:3,' '); WRITELN(outFile,' '); EQU:=COEF[PAR_PL[I,2]]; WRITE(outFile,' ',PAR_PL[I,2],' '); FOR J:=1 TO 4 DO WRITE(outFile,' ',EQU[J]:8:3,' '); WRITELN(outFile,' '); WRITELN(outFile,'---------------------------------------------------------'); WRITELN(outFile,' ') END; WRITELN(outFile,' СРЕДИ ПАРАЛЛЕЛЬНЫХ ПЛОСКОСТЕЙ НАИМЕНЬШЕЕ РАССТОЯНИЕ'); WRITELN(outFile,' МЕЖДУ ПЛОСКОСТЯМИ ',MINPL1,' И ',MINPL2,' , РАВНОЕ D=',MIN_DIST:8:3); END ELSE {Параллельных плоскостей нет} WRITELN(outFile,'ПАРАЛЛЕЛЬНЫХ ПЛОСКОСТЕЙ НЕТ'); END; {-----------Процедура вывода результатов на экран---------------} PROCEDURE OUT_TO_MONITOR(COEF:COEF_MATR; N:INTEGER); BEGIN {-----Вывод исходных данных-----} WRITELN; WRITELN(' ИСХОДНЫЕ ДАННЫЕ '); WRITELN; WRITELN('КОЛИЧЕСТВО ПЛОСКОСТЕЙ N=',N); WRITELN; WRITELN(' НОМЕР КОЭФФИЦИЕНТЫ'); WRITELN('ПЛОСКОСТИ A B C D'); FOR I:=1 TO N DO BEGIN EQU:=COEF; WRITE(' ',I,' '); FOR J:=1 TO 4 DO WRITE(' ',EQU[J]:8:3,' '); WRITELN; END; WRITELN; {-----Вывод результатов-----} WRITELN; WRITELN(' РЕЗУЛЬТАТЫ '); WRITELN; IF XY > 0 THEN {Есть плоскости, // XoY} BEGIN WRITELN(' ПЛОСКОСТИ, // XoY '); WRITELN; WRITELN(' НОМЕР КОЭФФИЦИЕНТЫ'); WRITELN('ПЛОСКОСТИ A B C D'); WRITELN; FOR I:=1 TO XY DO BEGIN EQU:=COEF[PARXY]; WRITE(' ',PARXY,' '); FOR J:=1 TO 4 DO WRITE(' ',EQU[J]:8:3,' '); WRITELN; END END ELSE {Нет плоскостей, // XoY} WRITELN(' ПЛОСКОСТЕЙ, // XoY, НЕТ'); WRITELN; IF PP > 0 THEN {Есть параллельные плоскости} BEGIN WRITELN(' ПАРАЛЛЕЛЬНЫЕ ПЛОСКОСТИ'); WRITELN; WRITELN(' НОМЕР КОЭФФИЦИЕНТЫ'); WRITELN('ПЛОСКОСТИ A B C D'); WRITELN; FOR I:=1 TO PP DO BEGIN EQU:=COEF[PAR_PL[I,1]]; WRITE(' ',PAR_PL[I,1],' '); FOR J:=1 TO 4 DO WRITE(' ',EQU[J]:8:3,' '); WRITELN; EQU:=COEF[PAR_PL[I,2]]; WRITE(' ',PAR_PL[I,2],' '); FOR J:=1 TO 4 DO WRITE(' ',EQU[J]:8:3,' '); WRITELN; WRITELN('---------------------------------------------------------'); WRITELN END; WRITELN(' СРЕДИ ПАРАЛЛЕЛЬНЫХ ПЛОСКОСТЕЙ НАИМЕНЬШЕЕ РАССТОЯНИЕ'); WRITELN(' МЕЖДУ ПЛОСКОСТЯМИ ',MINPL1,' И ',MINPL2,' , РАВНОЕ D=',MIN_DIST:8:3); END ELSE {Параллельных плоскостей нет} WRITELN('ПАРАЛЛЕЛЬНЫХ ПЛОСКОСТЕЙ НЕТ') END; {-----Подпрограмма поиска наименьшего расстояния между плоскостями----} FUNCTION MIN_OF_DIST(DISTIST_MATR;PP:INTEGER): INTEGER; VAR I : REAL; {Расстояние} J : INTEGER; {Рабочая переменная} BEGIN I:=DIST[1]; {Установка начальных значений} FOR J:=2 TO PP DO BEGIN IF I > DIST[J] THEN BEGIN I:=DIST[J]; MIN_OF_DIST:=J {Присвоение меньшего значения} END END END;{--------Тело основной программы--------} BEGIN CLRSCR; {Очистка экрана} {-----Связывание с файлом исходных данных-----} { $I- } Assign(inputFile,'C:\IN1.TXT'); RESET(inputFile); { $I+ } IF IORESULT <> 0 THEN {Проверка связи с файлом} BEGIN WRITELN(' НЕТ ВХОДНОГО ФАЙЛА '); HALT(1) {Завершение программы} END; {---Чтение исходных данных---} WRITELN('Меню выбора исходных данных. Нажмите:'); WRITELN(' 1 - если данные находятся в файле IN.TXT'); WRITELN(' 2 - если вы хотите ввести исходные данные вручную'); READ( CH ); CASE CH OF 1: BEGIN READLN(inputFile,N); FOR I:=1 TO N DO BEGIN FOR J:=1 TO 4 DO READ(inputFile, EQU[J]); READLN(inputFile); COEF:=EQU END END; 2: BEGIN WRITELN('Введите количество плоскостей'); READ(N); WRITELN('Введите коэффициенты плоскостей'); {Ввод коэффициентов} FOR I:=1 TO N DO BEGIN FOR J:=1 TO 4 DO READ(EQU[J]); COEF:=EQU END END; END; {-----Обработка исходных данных-----} PARAL_XY(COEF,N,PARXY,XY); {Обращение к подпрограмме PARAL_XY} E:=EPS; PARAL_PL(COEF,N,E,PAR_PL,DIST,PP); {Обращение к подпрограмме PARAL_PL} IF PP > 0 THEN BEGIN MIN_DIST:=DIST[MIN_OF_DIST(DIST,PP)]; {Минимальное расстояние} MINPL1:=PAR_PL[MIN_OF_DIST(DIST,PP),1]; {Плоскости, между которыми} MINPL2:=PAR_PL[MIN_OF_DIST(DIST,PP),2]; { минимальное расстояние } END; WRITELN('Программа обработала исходные данные, выберите метод вывода результатов'); WRITELN(' Нажмите:'); WRITELN(' 1 - если хотите вывести результаты на экран'); WRITELN(' 2 - если хотите вывести результаты в файл OUT.TXT'); WRITELN(' 3 - если хотите вывести результаты и на экран, и в файл OUT.TXT'); READ( CH ); CASE CH OF 1: BEGIN CLRSCR; OUT_TO_MONITOR(COEF,N); {Обращение к подпрограмме OUT_TO_MONITOR} READLN; READLN; END; 2: BEGIN ASSIGN(outFile,'H:\OUT.TXT'); {Связывание с файлом результатов} REWRITE(outFile); {Открытие файла} OUT_TO_FILE(COEF,N); {Обращение к подпрограмме OUT_TO_FILE} CLOSE(outFile) END; 3: BEGIN ASSIGN(outFile,'H:\OUT.TXT'); {Связывание с файлом результатов} REWRITE(outFile); {Открытие файла} OUT_TO_FILE(COEF,N); {Обращение к подпрограмме OUT_TO_FILE} CLOSE(outFile); CLRSCR; {Очистка экрана} OUT_TO_MONITOR(COEF,N); Обращение к подпрограмме OUT_TO_MONITOR} READLN; END END; CLOSE(inputFile); {Закрыть исходный файл} End. {Конец программы}