Program Lab_2_4;
uses crt, Types, Transf, IntersDr, IOGeom;

(****************************************
 * Puncte de intersectie:
 * Intersectia unui set de segmente
 *  (segmentul care intersecteaza un nr. maxim de segmente)
 ****************************************)
const
  filein  = 'Segmente.txt';
  fileout = 'Lab_2_4.txt';

var
  s: TabelSegmente;
  p: TabelPuncte;
  inter: TElem;
  s_max, i, j, k: word;
  nr, nr_p: word;

begin
  clrscr;

  { Citirea datelor din fisierul <filein>, daca exista }
  nr := readf_segmente(filein, s);

  { Citirea datelor de la tastatura }
  if nr = 0 then begin
     nr := introdu_segmente(s);
     {Salvarea segmentelor in fisier} 
     writef_segmente(filein, s, nr);
  end;   
  
  { Afisarea segmentelor }
  write_segmente(s, nr);

  { Determinarea segmentului care intersecteaza cele mai multe segmente }
  s_max := 0; {Nr. segmentului cu maxim intersectii}
  nr_p  := 0; {Nr. de puncte de intersectie}
  for i := 0 to nr-1 do
  begin
     k := 0;
     {Determinam punctele de inters a s[i] cu toate celelalte segmemte}
     for j := 0 to nr-1 do
        if( (i<>j) and (inters_seg_seg(s[i], s[j], p[k])=inters) ) then
        begin
           inter[k] := j; {Segmentul cu care se inters s[i]}
           inc(k);         {Nr. de segmente intersectate}
        end;

     if k > nr_p then {Daca s[i] are mai multe intersectii decat s[s_max], atunci...}
     begin
        nr_p  := k;
        s_max := i;
     end;
  end;

  { Afisarea rezultatului }
  writeln;
  if nr_p = 0 then writeln('Segmentele nu se intersecteaza') else 
  begin
    writeln('Segmentul s[', s_max,'] intersecteaza ', nr_p,' segmente:');
    for i := 0 to nr_p-1 do write(inter[i],' ');
    writeln; writeln;
    writeln('Apasa orice tasta pentru a vedea punctele de intersectie...');
    readkey;

    { Afisarea rezultatului }
    write_puncte(p, nr_p);

    { Salvarea rezultatului in fisierul <fileout> }
    writef_puncte(fileout, p, nr_p);
   end; 
  
  readkey;
end.
