Page 135 - C:\Users\Admin\Desktop\Sach mem upweb\
P. 135

100 Problems & Solutions                                               Trang 135


                         Until fin;
                       End;
                      BEGIN
                       Init;
                       Process;
                      END.

                      Bài 76/2001 - Đoạn thẳng và hình chữ nhật
                      (Dành cho học sinh PTTH)
                      Thuật toán:
                      - Xét đoạn thẳng cắt với từng cạnh của hình chữ nhật, điều kiện cắt của đoạn thẳng với
                      một đoạn thẳng khác (cạnh của hình chữ nhật) là:
                       + Hai đầu của đoạn thẳng khác phía với đoạn thẳng của hình chữ nhật;
                       + Hai đầu của đoạn thẳng hình chữ nhật khác phía với đoạn thẳng.
                      Chương trình:
                      Program Bai76;
                      const inp= ‘input.txt’;
                            out= ‘output.txt’;
                      function cat (xs, ys, xe, ye, xl, yt, xr, yb: real): boolean;
                      var a, b, x, y: real;
                          lg1, lg2: boolean;
                      Begin
                      if xs=xe then
                      begin
                        lg1:=(xs<xl) or (xs>xr) or ((ys>yt) and (ye>yt)) or ((ys<yb) and (ye<yb));
                        lg2:=(xs>xl) and (xs<xr) and (ys<yt)and (ye<yt) and (ys>yb) and (ye>yb);
                      cat:=not (lg1 or lg2);
                      end
                      else begin
                      if ys=ye then
                      begin
                        lg1:=((xs<xl) and (xe<xl)) or ((xs>xr) and (xe>xr)) or (ys>yt) or (ys<yb));
                        lg2:=(xs>xl) and (xe>xl) and (xs<xr)and (xe<xr) and (ys<yt) and (ys>yb);
                      cat:=not (lg1 or lg2);
                      end
                      else begin
                      cat:=false;
                      a:=(ys-ye)/(xs-xe);
                      b:=ys-a*xs;
                      y:= a*xl+b;
                      if(y<=yt)and(y>=yb)then cat:= true;
                      y: =a*xr+b;
                      if(y<=yt)and(y>=yb)then cat:=true;
                      x:=(yt-b)/a;
                      if (x>=xl)and (x<=xr)then cat:=true;
                      x:=(yb-b)/a;
                      if (x>=xl)and (x<=xr)then cat:=true;
                      end;
                      end;
                      end;



                      Tin học & Nhà trường                                       100 Đề Toán - Tin học
   130   131   132   133   134   135   136   137   138   139   140