Sinh Viên Việt Nam

THÀNH CÔNG MART chuyên phân phối thanh long, tủ vải sinh vien, tủ vải đựng quần áo, tu vai dung quan ao giá rẻ và các loại như may tap co bung, | nồi cơm điện | Goi massage hong ngoai | Goi massage | Gối mát xa | Gối massage | Gối massage hồng ngoại | Máy sấy quần áo |May say quan ao | noi com dien | bếp nướng than hoa | bếp nướng than hoa nam hồng | bep nuong than hoa nam hong | bep nuong than hoa | Ghế massage toàn thân nệm massage toàn thân Máy xay công nghiệp máy xay công suất lớn Đai massage x5 Đai mát xa x5 dai mat xa x5 dai massage x5 Điều khiển điều hòa đa năng Máy xay sinh tố công nghiệp máy xay đậu nành nguyên xác Máy xay công nghiệp oshika hàng nhật bản oshika Thương hiệu nhật bản


Trở lại   Sinh Viên Việt Nam > Diễn Đàn Tin Học > Lập Trình > Pascal - Delphi - Kylix

Gởi Ðề Tài Mới  Trả lời
 
Ðiều Chỉnh Xếp Bài
  #1  
Cũ 02-02-2010, 10:17 PM
Pascal
Guest
 
Bài gửi: n/a
Post Bài toán kt cắt nhau đoạn thẳng và tia vài vấn đề với fp

Hôm nay tui làm bài này cho một đứa học 11(tui học 12) kt xem đoạn thẳng và tia có cắt nhau không, code đã đời chạy trên freepascal thì toàn báo sai nhưng chuyển qua borland pascal lại chạy đúng, mở cửa sổ watches lên kt thì mới thấy sao tự nhiên free tính 4*3,399999999999999999999999....=16,3(chẵn khó tin) >"< làm cho hàm kiểm tra điểm thuộc đường thẳng(thuocdt) bị sai
Ai biết vấn đề này không thì nói cho mình hiểu với, và ai có cách tối ưu hóa code thì nói lun thể ^^
Code đây:
Code:
program test;
const inputfile= 'data.inp';
        outputfile= 'data.out';
type int= integer;
        rea= real;
        boo= boolean;
        txt= text;
        poi= record
          x, y: rea;
        end;
        lin= record
          a, b: poi;
          a1, b1, c1: rea;
        end;
var t1, t2: lin;
        o: poi;

procedure doctep;
var fi: txt;
begin
  assign(fi, inputfile); reset(fi);
  readln(fi, t1.a.x, t1.a.y, t1.b.x, t1.b.y);
  readln(fi, t2.a.x, t2.a.y, t2.b.x, t2.b.y);
  close(fi);
end;

function max(a, b: real): real;
begin
  if a>= b then max:= a
  else max:= b;
end;

function min(a, b: real): real;
begin
  if a= min(t.a.x, t.b.x)) and
  (m.x= 0)
  and ((m.y- t.a.y)*(t.b.y- t.a.x)>= 0) then thuoctia:= true
  else thuoctia:= false;
end;

function vttd(var o: poi; t1, t2: lin): int;
var d, dx, dy: rea;
begin
  heso(t1); heso(t2);
  d:= t1.a1*t2.b1- t2.a1*t1.b1;
  dx:= t1.b1*t2.c1- t2.b1*t1.c1;
  dy:= t1.c1*t2.a1- t2.c1*t1.a1;
  if d= 0 then
    begin
      if (dx 0) or (dy 0) then vttd:= 0;
      if (dx= 0) and (dy= 0) then vttd:= 2;
    end
  else
    begin
      o.x:= dx/d;
      o.y:= dy/d;
      if not(thuocdoan(o, t1)) and thuocdoan(o, t2) then vttd:= 3
      else vttd:= 1;
    end;
end;

procedure xuli;
var fo: txt;
begin
  assign(fo, outputfile); rewrite(fo);
  if vttd(o, t1, t2)= 1 then
    begin
     if thuocdoan(o, t1) and thuoctia(o, t2) then
       write(fo, 'Doan thang va tia cat nhau')
     else write(fo, 'Doan thang va tia ko cat nhau');
    end
  else write(fo, 'Doan thang va tia ko cat nhau');
  close(fo);
end;

BEGIN
  doctep;
  xuli;
END.
test
Code:
3 5 4 1
1 1 4 4
Trả Lời Với Trích Dẫn
Gởi Ðề Tài Mới  Trả lời

Bookmarks

Ðiều Chỉnh
Xếp Bài

Quyền viết bài
Bạn không thể gửi chủ đề mới
Bạn không thể gửi trả lời
Bạn không thể gửi file đính kèm
Bạn không thể sửa bài viết của mình

BB code is Mở
Mặt cười đang Mở
[IMG] đang Mở
HTML đang Tắt


Chủ đề giống nhau
Chủ đề Người khởi xướng chủ đề Diễn đàn Trả lời Bài mới gửi
Sự khác nhau màu board của cái dòng vid ~ nhau dohoa Đồ Họa Máy Tính 0 17-01-2010 06:39 PM
CPU 775 :630 va 631 giong nhau hay khac nhau vay itpro Mainboard & Memory 0 17-01-2010 08:24 AM
Yêu nhau cho tốt hehe Nhạc Quốc Tế 0 07-06-2009 11:55 AM
Khi những cô nàng quậy phá, uống bia, ôm nhau và ...hôn nhau lebuuhoang Cute Girl 0 04-06-2009 11:08 PM
Các nghị sĩ đối lập Đài Loan tặng nhau nắm đấm và xô đẩy nhau một cách hung bạo để gi ThọĐạiÚy Tin Xã Hội 0 03-11-2008 10:35 AM




Powered by: vBulletin v3.8.4 Copyright ©2000-2019, Jelsoft Enterprises Ltd.