Trang 6 / 16 FirstFirst ... 345678911 ... LastLast
Hiển thị kết quả từ 51 đến 60 / 153
  1. #51
    Tham gia
    27-05-2008
    Location
    phu quoc
    Bài viết
    128
    Like
    0
    Thanked 13 Times in 5 Posts
    hix!!1 cho dù đã dc học pascal này khoảng 3 tháng. có 1 giải nhì hội thi tin học trẻ không chuyên về pascal của huyện phú quốc nhưng thú thật tui hiểu có một phần những gì các ông anh nói. quả thật la núi cao còn có núi cao hơn...chungkid1 à ông có thể cùng với mr_invincible... típ tục pót mấy cái pascal nhưng cụ thể 1 chút dc không. tui không hiểu nhìu về pascal nhưng làm sao ma đơn giản 1 chút thì tui rất cám ơn... xin chỉ giáo

    [=========> Bổ sung bài viết <=========]

    học pascal thì rất thú vị nhưng mà em có một thắc mắc ???
    trong học đường thí vụ nhưng lớp 8 bọn em đã dc học pascal nhưng không bik cách ứng dụng.chỉ bik lập trình sau đó nhan Ctrl+f9 sau đó save để đó.

    các sư phụ chỉ em làm sao ứng dụng nó vào trong thực tiễn. vd làm sao để đoạn code đó trở thành 1 chương trình sử dụng dc nhưng chương trinh word hoậc excel cua windown xp vậy
    Được sửa bởi Mr.Bo_Aloha lúc 10:38 ngày 27-05-2008 Reason: Bổ sung bài viết

  2. #52
    Tham gia
    16-05-2008
    Bài viết
    16
    Like
    0
    Thanked 1 Time in 1 Post
    Tôi nghĩ chúng ta có thể hoán vị hai số mà không cần biến trung gian(tiết kiệm bộ nhớ chút-hay đó):
    "Đoạn trình cốt lõi của việc hoán vị a và b:"
    begin
    a:=a+b;
    b:=a-b;
    a:=a-b;
    end;

  3. Thành viên Like bài viết này:


  4. #53
    Tham gia
    27-05-2008
    Location
    phu quoc
    Bài viết
    128
    Like
    0
    Thanked 13 Times in 5 Posts

    Rất hay !

    Quote Được gửi bởi toadprince View Post
    Tôi nghĩ chúng ta có thể hoán vị hai số mà không cần biến trung gian(tiết kiệm bộ nhớ chút-hay đó):
    "Đoạn trình cốt lõi của việc hoán vị a và b:"
    begin
    a:=a+b;
    b:=a-b;
    a:=a-b;
    end;
    trong chương trinh của anh toadprince em nghĩ rất sáng tạo:

    nếu theo cách đó là ta đã biến a thành a:=(a+b)-a => a sẽ có giá trị của b

    và biến b thành b:= (a+b)-b vậy b cũng có giá trị của a
    đây là cách áp dụng cộng thuật toán thông minh...

    nhưng cẩn thận nếu không hiểu rõ thì sẻ dễ nhầm hơn so với cách dùng trung gian...

  5. #54
    Tham gia
    24-05-2008
    Bài viết
    16
    Like
    0
    Thanked 1 Time in 1 Post
    Quote Được gửi bởi tuananh3988 View Post
    free pascal thì khác turbo ở điểm nào vậy?có nhiều cải tiến hơn ko?
    Theo tôi thì Free Pascal hoàn toàn vượt trội so với Turbo
    Bạn thử xem 1 ví dụ sau:
    Var a:integer;
    Begin
    a:=20000;
    write(a+a);
    readln;
    end.
    Nếu chương trình này được chạy trên:
    Turbo ==> kq:-25536
    Free Pascal ==> kq:40000
    Lý do: phép cộng này trên turbo bị tràn số. Như vậy khi làm bài trên turbo rất dễ bị sai khi thực hiện với số lớn
    Ngoài ra Turbo còn gặp rất nhiều lỗi khác, bạn hãy tự tìm hiểu

  6. Thành viên Like bài viết này:


  7. #55
    Tham gia
    29-05-2008
    Bài viết
    1
    Like
    0
    Thanked 0 Times in 0 Posts

    Thông tin

    chao` chung song muon' hoc pascal thi phai bat dau ra sao ?
    giup minh nhe'
    thanks

  8. #56
    Tham gia
    23-02-2003
    Location
    Melbourne
    Bài viết
    5,201
    Like
    0
    Thanked 24 Times in 18 Posts
    Quote Được gửi bởi tiensusu View Post
    Theo tôi thì Free Pascal hoàn toàn vượt trội so với Turbo
    Bạn thử xem 1 ví dụ sau:
    Var a:integer;
    Begin
    a:=20000;
    write(a+a);
    readln;
    end.
    Nếu chương trình này được chạy trên:
    Turbo ==> kq:-25536
    Free Pascal ==> kq:40000
    Lý do: phép cộng này trên turbo bị tràn số. Như vậy khi làm bài trên turbo rất dễ bị sai khi thực hiện với số lớn
    Ngoài ra Turbo còn gặp rất nhiều lỗi khác, bạn hãy tự tìm hiểu
    Cái này ko phải là lỗi của Turbo Pascal mà là lỗi của bạn Khi lập trình ko chỉ có thuật toán mà còn phải chú ý đến giới hạn kiểu dữ liệu của compiler đang sử dụng nữa.
    Turbo Pascal là compiler 16bit, kiểu chuẩn integer có kích thước 16bit, việc cộng bị tràn là chuyện đương nhiên, bật Range checking lên bạn sẽ thấy Turbo báo lỗi. Trong khi đó FreePascal là trình biên dịch 32bit, kiểu integer có độ dài 4byte => phép cộng trên ko thể bị tràn.

  9. #57
    Tham gia
    24-05-2008
    Bài viết
    16
    Like
    0
    Thanked 1 Time in 1 Post
    Quote Được gửi bởi jiSh@n View Post
    Cái này ko phải là lỗi của Turbo Pascal mà là lỗi của bạn Khi lập trình ko chỉ có thuật toán mà còn phải chú ý đến giới hạn kiểu dữ liệu của compiler đang sử dụng nữa.
    Turbo Pascal là compiler 16bit, kiểu chuẩn integer có kích thước 16bit, việc cộng bị tràn là chuyện đương nhiên, bật Range checking lên bạn sẽ thấy Turbo báo lỗi. Trong khi đó FreePascal là trình biên dịch 32bit, kiểu integer có độ dài 4byte => phép cộng trên ko thể bị tràn.
    Vậy thì theo jiSh@n thì với 2 cách làm sau đây tại sao ra kết quả khác nhau(trong Turbo):
    1.Var a:integer;b:longint;
    Begin
    a:=20000; b:=0;
    write(b+a+a);
    readln;
    end.
    kq ==> 40000
    2.Var a:integer;b:longint;
    Begin
    a:=20000; b:=0;
    write(a+a+b);
    readln;
    end.
    kq ==> -25536

  10. #58
    Tham gia
    23-02-2003
    Location
    Melbourne
    Bài viết
    5,201
    Like
    0
    Thanked 24 Times in 18 Posts
    Quote Được gửi bởi tiensusu View Post
    Vậy thì theo jiSh@n thì với 2 cách làm sau đây tại sao ra kết quả khác nhau(trong Turbo):
    1.Var a:integer;b:longint;
    Begin
    a:=20000; b:=0;
    write(b+a+a);
    readln;
    end.
    kq ==> 40000
    2.Var a:integer;b:longint;
    Begin
    a:=20000; b:=0;
    write(a+a+b);
    readln;
    end.
    kq ==> -25536
    Trên các compiler thì kiểu của biểu thức sẽ là kiểu của toán hạng đầu tiên.
    b+a => longint + integer => kiểu của kết quả sẽ là longint
    a+b => integer + longint => kiểu kết quả là integer, bất chấp b là kiểu longint.

    Hãy thử trên CodeGear Delphi 2007 cũng cho ra kết quả tương tự:
    Code:
    var a:integer; b:int64;
    begin
      a:=maxint;  b:=maxint; // 2147483647
      writeln(a+a+b); // 2147483645
      writeln(b+a+a); // 6442450941
      readln;
    end.
    Được sửa bởi jiSh@n lúc 22:55 ngày 29-05-2008

  11. #59
    Tham gia
    17-10-2007
    Location
    Hà Nội
    Bài viết
    758
    Like
    0
    Thanked 8 Times in 7 Posts
    Phép toán trên không bị tràn số bởi vì Free Pascal định nghĩa integer giống như longint -> maxint là 2*10^9, vẫn chưa bị tràn. Do đó đây cũng không phải cải tiến gì mấy. VD: với kiểu longint 2*10^9 +2*10^9 vẫn tràn số như thường

    [=========> Bổ sung bài viết <=========]

    Quote Được gửi bởi toadprince View Post
    Tôi nghĩ chúng ta có thể hoán vị hai số mà không cần biến trung gian(tiết kiệm bộ nhớ chút-hay đó):
    "Đoạn trình cốt lõi của việc hoán vị a và b:"
    begin
    a:=a+b;
    b:=a-b;
    a:=a-b;
    end;
    Các này mình cũng biết rồi nhưng thực sự thì các này không phải là cách hay bởi:
    - Bộ nhớ tiết kiệm được quá ít, không có ý nghĩa trên thực tế (với kiểu số chỉ tiết kiệm được 6 hay 8 KB như thế thì không ăn nhằm gì so với những chương trình lớn dùng đến vài chục MB
    - Cách làm trên không tổng quát (không thể dùng để đổi chỗ các kiểu phức tạp như mảng, xâu, kí tự...) hoặc nếu cố gắng làm thì khá rắc rối
    - Dễ dẫn đến tràn số. VD: bạn thử đổi chỗ 2 số khoảng 2*10^9 theo các trên xem được không? -> các này không áp dụng được với nhiều trường hợp
    Được sửa bởi mr_invincible lúc 23:28 ngày 29-05-2008 Reason: Bổ sung bài viết

  12. #60
    Tham gia
    24-05-2008
    Bài viết
    16
    Like
    0
    Thanked 1 Time in 1 Post
    Quote Được gửi bởi jiSh@n View Post
    Trên các compiler thì kiểu của biểu thức sẽ là kiểu của toán hạng đầu tiên.
    b+a => longint + integer => kiểu của kết quả sẽ là longint
    a+b => integer + longint => kiểu kết quả là integer, bất chấp b là kiểu longint.
    Bạn đã thử chưa mà dám quả quyết như vậy, mình đã thử ví dụ này:
    Code:
    Var a:integer;b:longint;
          Begin
             a:=20000; b:=20000;
             write(a+b);
             readln;
          end.
    kq ==> 40000 (vượt quá giới hạn Integer)
    Theo mình thì Pascal sẽ dựa vào biến lớn nhất trong biểu thức để tính toán, với những biến nhỏ hơn(byte) thì mặc định là Integer.
    Theo như jiSh@n giải thích thì lỗi này là do compiler nhưng mình muốn hỏi tại sao không mặc định là longint cho nó khỏe, mình vẫn bảo thủ cho rằng lỗi này là do Pascal. Phần mềm nào mà chẳng bị lỗi, nhất là khi nó đã mười mấy năm rồi chưa được nâng cấp

Trang 6 / 16 FirstFirst ... 345678911 ... LastLast

Tags for this Thread

Bookmarks

Quy định

  • Bạn không thể tạo chủ đề mới
  • Bạn không thể trả lời bài viết
  • 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
  •