ANTICHAT.XYZ    VIDEO.ANTICHAT.XYZ    НОВЫЕ СООБЩЕНИЯ    ФОРУМ  
Баннер 1   Баннер 2
Antichat снова доступен.
Форум Antichat (Античат) возвращается и снова открыт для пользователей. Здесь обсуждаются безопасность, программирование, технологии и многое другое. Сообщество снова собирается вместе.
Новый адрес: forum.antichat.xyz
Вернуться   Форум АНТИЧАТ > Программирование > С/С++, C#, Delphi, .NET, Asm
   
 
 
Опции темы Поиск в этой теме Опции просмотра

Pascal, немогу изменить программу
  #1  
Старый 15.05.2009, 15:50
Аватар для Kot.Merlin
Kot.Merlin
Новичок
Регистрация: 14.05.2009
Сообщений: 1
Провел на форуме:
2557

Репутация: 0
По умолчанию Pascal, немогу изменить программу

Приветствую вас.
Нужна помощь в изменение программы.
Суть состоит в том, что выделенная часть программы ищет наименьшее значение из параллельных плоскостей.
Нужно изменить на функцию так, чтобы она выбирала из значений те, которые больше заданного числа и выводила их на экран.
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; {Коэф. всех плоскостей}
PARXY:PARXY_MATR; {Номера плоскостей, // XoY}
PAR_PL:PAR_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 PARXY:PARXY_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_PL:PAR_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[I];
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[I]];
WRITE(outFile,' ',PARXY[I],' ');
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[I];
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[I]];
WRITE(' ',PARXY[I],' ');
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[I]:=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[I]:=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. {Конец программы}
 
Ответить с цитированием
 



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
изменить java приложение для телефона Legion342 О Работе 0 04.04.2009 22:23
Продам программу для удаленного администрирования Sokolik Разное - Покупка, продажа, обмен 2 19.03.2009 14:47
Нужно написать программу Daro О Работе 3 17.01.2009 08:25



Здесь присутствуют: 1 (пользователей: 0 , гостей: 1)
 


Быстрый переход




ANTICHAT.XYZ