Program Kypca;
{Задание № 12}
{Из мн-ва прямых М , заданных коэффиентами уравнения : Ax+By+C=0 , выбрать прямые :}
{1 – параллельные Оси ОХ}
{2 – Все пары взаимно перпендикулярных прямых}
{3 – Из взаимно перпенд. Выбрать те , которые образуют с Осью ОХ угол меньше заданного}
Uses crt;
Const
p = 50 ; {Максимальное число прямых}
type
ind = 1..p;
V = array [ind] of Real;
VAR
A,B,C,res : V ; {Матрицы соответственных коэф. А,В и С}
k : ind ;
i1,i2,n,d,t,t1,i,q : integer;{n – число прямых , t – перемен. для обозначения ввода с экрана или }
{из файла , t1 – перемен. для обозначения вывода в файл или на }
{экран , (i1,i2,d) – счетчики наличия прямых соответвующих пунктам}
{1,2 и 3 задания , i – счетчик кол-ва ‘ Writeln ’ , q – позиция ‘ Writeln ’}
kof,ugol : Real ; {ugol – значения угла для сравнения , kof – отношение коэф. А и В}
f,r,g : text ; {Объявление файловой переменной и исх. файла из кот. мы считываем данные}
str : string ;
Procedure sravnenie (k : Integer ; VAR kof : Real ; VAR d : Integer ; VAR res : array of Real );
{Процедура нахождения взаимно перпендикулярных прямых из заданных}
{res – матрица , содержащая значения углов м/у перпендикулярными прямыми и Осью ОХ} VAR
w,s : Integer ; {w – перемен. для последовательного перебора прямых внутри процедуры}
Begin
s := 0 ;
for w:=(k+1) to n do
if ( B[w] <> 0 ) and (A[w] <> 0) and (B[w]/A[w] = kof) then
begin
res[k-1] := ABS(arctan(kof)/3.141592654*180);
res[w-1] := ABS(arctan((-1)*A[w]/B[w])/3.141592654*180);
s := s + 1 ;
if t1 = 1 then Writeln (f,k,'-ая прямая _|_ ', w ,'-ой') ;
if t1 = 2 then Writeln (k,'-ая прямая _|_ ', w ,'-ой') ;
d := s ;
end;
end;
Procedure sravnenie_next (k : Integer ; VAR d : Integer);
{Процедура нахождения взаимно перпендикулярных прямых из прямых параллельных }
{одной из Осей}
VAR
m : Integer ; {m – перемен. для последовательного перебора прямых внутри процедуры}
Begin
if (B[k] = 0) and (A[k] <> 0) then
for m:=k+1 to n do
if (A[m] = 0) and (B[m] <> 0) then
begin
d := d + 1 ;
if t1 = 1 then Writeln (f,k,'-ая прямая _|_ ', m ,'-ой');
if t1 = 2 then Writeln (k,'-ая прямая _|_ ', m ,'-ой');
end;
if (A[k] = 0) and (B[k] <> 0) then
for m:=k+1 to n do
if (B[m] = 0) and (A[m] <> 0) then
begin
d := d + 1 ;
if t1 = 1 then Writeln (f,k,'-ая прямая _|_ ', m ,'-ой');
if t1 = 2 then Writeln (k,'-ая прямая _|_ ', m ,'-ой');
end;
end;
Procedure sravnenie_uglov (k : Integer ; VAR ugol : Real ; VAR i2 : Integer);
{Процедура для сравнения заданного угла с углами взаимно перпендикулярных прямых}
VAR g : integer ;
Begin
g:=0;
for k:=1 to n do
if (res[k] <> 0) and (res[k] < ugol) then
begin
i2 := i2 + 1 ;
if t1 = 1 then Writeln (f,' Угол м/у ',k,'-ой прямой и осью OX < заданного ');
if t1 = 2 then Writeln (' Угол м/у ',k,'-ой прямой и осью OX < заданного ');
end;
for k:=1 to n do
if B[k] = 0 then g:=g + 1;
for k:=1 to n do
if (A[k] = 0) and (B[k] <> 0) and (ugol <> 0) and (g <> 0) then
begin
i2 := i2 + 1;
if t1 = 1 then Writeln (f,' Угол м/у ',k,'-ой прямой и осью OX < заданного (т.к. || Оси OX)');
if t1 = 2 then Writeln (' Угол м/у ',k,'-ой прямой и осью OX < заданного (т.к. || Оси OX)');
end;
end;
Begin {Осн. программа}
clrscr; {очистить экран}
Writeln ('Задайте метод ввода данных '); {Выбор способа ввода данных}
Writeln ('1 – из файла C:\in.log');
Writeln ('2 – вручную);
Readln(t); {считка перемен. для обозначения ввода с экрана или из файла }
if t = 1 then {ввод из файла}
begin
assign (r , 'C:\in.log'); {связь r с файлом in.log}
Reset(r); {открыть файл in.log для чтения }
Readln(r,n); {число прямых}
for k:=1 to n do
begin { для уравнения Ax+By+C=0 }
read(r,A[k]); {коэф. А}
read(r,B[k]); {коэф. В}
Readln(r,C[k]); {коэф. С}
end;
Readln(r,ugol); {угол для сравнения}
end;
if t = 2 then {Ввод вручную}
begin
Writeln ('Введите число прямых');
Readln(n);
Writeln ('Введите коэффициенты A,B и С прямых');
for k:=1 to n do
begin
read(A[k]);
read(B[k]);
Readln(C[k]);
end;
Writeln ('Введите угол относительно Оси ОХ , с которым надо сравнивать');
Readln(ugol);
Уважаемый посетитель!
Чтобы распечатать файл, скачайте его (в формате Word).
Ссылка на скачивание - внизу страницы.