Создание программы для выбора прямых из множества прямых, заданных коэффициентами уравнения: Ax+By+C=0

Страницы работы

Содержание работы

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);

Похожие материалы

Информация о работе