Trang 7 / 16 FirstFirst ... 24567891012 ... LastLast
Hiển thị kết quả từ 61 đến 70 / 153
  1. #61
    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
    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
    À, chỗ này mình nhầm 1 chút. Khi thực hiện phép toán giữa 2 toán hạng thì trình biên dịch sẽ tự động typecast kiểu của biểu thức sang kiểu của toán hạng lớn nhất, và thứ tự thực hiện các phép toán là từ trái sang phải theo độ ưu tiên toán tử. Lỗi chính xác phải là như thế này:
    a+a+b => integer + integer + longint => (integer + integer) + longint => (integer + integer) bị tràn (40000) trước khi compiler typecast (integer+integer) sang kiểu longint để cộng với kiểu longint phía sau.

    Cái này vốn dĩ ko phải là lỗi của trình biên dịch. Bạn thử bằng compiler mới nhất của Borland là CodeGear Delphi 2007 với kiểu integer (32bit) và int64 (64bit) sẽ thấy kết quả tương tự. Turbo Pascal ko thể dùng kiểu nguyên mặc định là longint (32 bit) vì nó là compiler 16 bit, kiểu nguyên mặc định của nó có độ dài 16 bit (integer), tương ứng 1 thanh ghi 16 bit (AX, BX, CX,...). Nếu bạn dùng compiler 32 bit (Delphi, Free Pascal 32) thì kiểu nguyên mặc định lúc này vẫn là integer nhưng có độ dài 32bit, tương ứng với 1 thanh ghi 32 bit (EAX, EBX, ...). Kiểu longint lúc này thực chất là 1 tên gọi khác của kiểu integer, và kiểu nguyên lớn hơn integer là int64 (64 bit). Tương tự, nếu bạn dùng compiler 64bit (chạy trên các OS 64bit - kiến trúc AMD64/EMT64) thì kiểu nguyên mặc định có độ dài 64bit.
    Nếu bạn dùng Free Pascal 16 thì bạn cũng sẽ nhận được kết quả giống như Turbo Pascal, Turbo C hay các compiler 16bit khác thôi. Đây là lỗi do mã lệnh của lập trình viên, ko phải lỗi của compiler.

  2. #62
    Tham gia
    08-06-2008
    Bài viết
    5
    Like
    0
    Thanked 0 Times in 0 Posts
    Mí anh chị ui! em mới là thành viên và sang năm em mới bắt đầu học lớp 11 thui
    em chua học pascal bao giờ nên hôk piếc học làm sao để giỏi. Níu anh chị nào bik cách học thì chỉ em với nha! Thank nhìu nhìu lem'

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

    Thấy mí anh chị bàn luận sôi nổi ham ghê nhưng trình độ còn kém quá nên hôk dám góp ý
    Tiếc thật!(T_T)
    Được sửa bởi sugiathanchetbp lúc 07:53 ngày 08-06-2008 Reason: Bổ sung bài viết

  3. #63
    Tham gia
    06-03-2008
    Bài viết
    42
    Like
    0
    Thanked 1 Time in 1 Post
    Để phục vụ cho máy cái trò này tớ khuyên các bac dùng FPC là hơn cả
    chọn options\ complier \ sau đó đóng dấu C_like operator
    ta dùng uses crt, math;
    ta được viết như sau i += 1; nó tương đương với i:= i+1; nhưng nhanh hơn vì nó chỉ bằng 1 phép gán 1 số cho 1 biến chứ không phải là phép tính.
    Ngoài ra còn có -= /= *=
    tiếp nữa để sắp xếp ta chỉ cần dùng hàm sort(); có sẵn
    ngoải ra còn có 1 số hàm tìm max, min của cả mảng
    Viết hoa cả chuỗi, viết thường cả chuỗi
    Làm nhanh lém nhưng tui không nhớ rõ lắm ai cần thì Pm

  4. #64
    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 that_is_lg View Post
    ta được viết như sau i += 1; nó tương đương với i:= i+1; nhưng nhanh hơn vì nó chỉ bằng 1 phép gán 1 số cho 1 biến chứ không phải là phép tính.
    Code:
    i:=i+1; i+=1; i++; inc(i);
    Các compiler hiện đại đủ thông minh để biến các phép toán trên về dạng tối ưu, tốc độ như nhau thôi

  5. #65
    phoenixsinh Guest
    hi hi
    phải là:
    s:=s*i;
    ứ hả?

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

    không biét có thể dùng cái này để tính số lần xuất hiện các kí tự trong một chuỗi ở một chuỗi khác không?
    key:='loves';
    ten:='vanduoc';
    for i:= 1 to 5 do
    begin
    k[i]:=copy(key,i,1);
    for j:=1 to 7 do
    t[i]:=copy(ten,j,1);
    if (k[i]=t[j] then
    dem:=dem+1;
    str(dem,tam);
    insert(tam,so,[i]);

    i hi mình mới nghĩ ra ngay tức thì nên có nhiều lỗi lắm, có những lỗi trầm trọng phải không?
    i hi
    Được sửa bởi phoenixsinh lúc 13:41 ngày 16-06-2008 Reason: Bổ sung bài viết

  6. #66
    Tham gia
    03-07-2008
    Bài viết
    2
    Like
    0
    Thanked 0 Times in 0 Posts
    minh moi buoc vao ngon ngu Lap Trinh

  7. #67
    Tham gia
    23-06-2008
    Bài viết
    67
    Like
    0
    Thanked 0 Times in 0 Posts
    Để use code
    B1: tìm code
    B2: copy code vào word ( save với tên *.doc) hay notepad( save với tên *.txt)
    B3: kích hoạt PC mở tệp (đã lưu ở trên) save as thành tệp *.pas
    B4: chạy chương trình.

  8. #68
    Tham gia
    09-02-2007
    Bài viết
    746
    Like
    0
    Thanked 5 Times in 5 Posts
    Sao mình học pascal mà thấy phát chán lên nhỉ.

  9. #69
    Tham gia
    28-09-2007
    Location
    Vĩnh Yên-Vĩnh Phúc
    Bài viết
    1,167
    Like
    6
    Thanked 14 Times in 12 Posts
    Quote Được gửi bởi phoenixsinh View Post
    hi hi
    phải là:
    s:=s*i;
    ứ hả?

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

    không biét có thể dùng cái này để tính số lần xuất hiện các kí tự trong một chuỗi ở một chuỗi khác không?
    key:='loves';
    ten:='vanduoc';
    for i:= 1 to 5 do
    begin
    k[i]:=copy(key,i,1);
    for j:=1 to 7 do
    t[i]:=copy(ten,j,1);
    if (k[i]=t[j] then
    dem:=dem+1;
    str(dem,tam);
    insert(tam,so,[i]);

    i hi mình mới nghĩ ra ngay tức thì nên có nhiều lỗi lắm, có những lỗi trầm trọng phải không?
    i hi
    sao không dùng ngay hàm pos cho tiện???
    for i:=1 to 5 do
    if(pos(key[i],ten)<>0)then inc(dem);

  10. #70
    Tham gia
    31-01-2007
    Location
    TX Vị Thanh
    Bài viết
    82
    Like
    0
    Thanked 0 Times in 0 Posts
    Để đổi chỗ 2 phần tử - không nhất thiết dùng biến trung gian như sau:
    a:=a+b;
    b:=a-b;
    a:=a-b;
    Các bạn test lại, bảo đảm ok mà!
    Thân ái!

Trang 7 / 16 FirstFirst ... 24567891012 ... 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
  •