1999 - GIAO ĐIỂM CÁC ĐƯỜNG THẲNG (DÀNH CHO HỌC SINH THPT)PROGRAM...

Bài 6/1999 - Giao điểm các đường thẳng

(Dành cho học sinh THPT)

Program Bai6;

(* Tinh so giao diem cua n duong thang 0 trung nhau *)

Uses Crt;

Const

fn = 'P6.INP';

fg = 'P6.OUT';

max = 100;

exp = 0.0001;

Var

a ,b ,c : array[1..max] of real;

n : integer;

sgd : integer;

Procedure Nhap;

f: text;

i: integer;

Begin

Assign( f ,fn ); Reset( f );

Readln( f ,n );

For i := 1 to n do

Readln( f ,a[i] ,b[i] ,c[i] ); { ax + by = c }

Close( f );

End;

(*---*)

Procedure Chuanbi;

sgd := 0;

Function Giaodiem( i ,j : integer;Var x ,y : real ) : boolean;

d ,dx ,

dy : real;

d := a[i] * b[j] - a[j] * b[i];

dx := c[i] * b[j] - c[j] * b[i];

dy := a[i] * c[j] - a[j] * c[i];

If d <> 0 then

begin

x := dx / d;

y := dy / d;

end;

giaodiem := d <> 0;

Function Giatri( i : integer;x ,y : real ) : real;

Giatri := a[i] * x + b[i] * y - c[i];

Function bang( a ,b : real ) : boolean;

bang := abs( a - b ) <= exp;

Function Thoaman( i ,j : integer;x ,y : real ) : boolean;

ii: integer;

Thoaman := false;

For ii := 1 to i - 1 do

If (ii <> j) and bang( giatri( ii ,x ,y ) ,0 ) then

exit;

Thoaman := true;

Function Catrieng( i : integer ) : integer;

ii , gt:integer;

x, y : real;

gt := 0;

For ii := 1 to i do

If giaodiem( i ,ii ,x ,y ) then

If thoaman( i ,ii ,x ,y ) then Inc( gt );

catrieng := gt;

Procedure Tinhsl;

i : integer;

Inc( sgd ,catrieng( i ) );

Procedure GhiKQ;

Begin

Writeln(So giao diem cua cac duong thang la: ' ,sgd );

End;

BEGIN

ClrScr;

Nhap;

Chuanbi;

Tinhsl;

ghiKQ;

END.