Follow us on...
Follow us on Twitter Follow us on Facebook Watch us on YouTube

Tuyển chuyên viên tin tức VN-Zoom 2014

Tìm HD - Phần mềm tìm và xem phim HD miễn phí

Hoãn tổ chức offline VN-Zoom 8 năm tại TP HCM

Chiêm ngưỡng BaoMoi đẹp "tuyệt diệu" trên Windows Phone

Tài trợ VNZ Siêu phẩm Tân Kiếm Thế chibi 3D mới

Tuyển BQT VN-Zoom
kết quả từ 1 tới 4 trên 4
  1. #1
    HGMinh95's Avatar
    HGMinh95 vẫn chưa có mặt trong diễn đàn Rìu Bạc
    Tham gia
    May 2010
    Bài
    429
    Cảm ơn
    87
    Điểm
    232/168 bài viết
    VR power
    0

    Question Lỗi về hàm trong pascal

    Đây là đề bài
    Code:
    var pointer: integer;
        m, n: integer;
        s: string[101];
    
    function klg(c: char): integer;
      begin
           if c = 'C' then exit(12);
           if c = 'O' then exit(16);
           if c = 'H' then exit(1);
      end;
    
    function cal: integer;
      var  k, crrm, code: integer;
           nto: char;
      begin
           if s[pointer] in ['C','H','O'] then
             begin
                  nto:= s[pointer];
                  inc(pointer);
                  k:= 1;
                  if s[pointer] in ['0'..'9'] then
                    begin
                         val(s[pointer], k, code);
                         inc(pointer);
                    end;
                  exit(k*klg(nto));
             end;
    
           inc(pointer);
           //writeln(pointer,' ', s[pointer]);
           crrm:= 0;
           while s[pointer] <> ')' do
             begin
                  crrm:= crrm + cal;
                  //writeln('OK  ', pointer);
             end;
    
           inc(pointer);
           k:= 1;
           if s[pointer] in ['0'..'9'] then
             begin
                  val(s[pointer], k, code);
                  inc(pointer);
             end;
           exit(k*crrm);
      end;
    
    begin
         readln(s);
         pointer:= 1;
         n:= length(s);
         s:= s + ' ';
         m:= 0;
         while pointer <= n do m:= m + cal;
         write(m);
    end.
    Khi chạy với input
    (C)2
    chương trình bị lỗi exitcode 201

    Mình thử dùng F7 để check thì nó báo lỗi ở vòng lặp này:
    Code:
      
    while s[pointer] <> ')' do
      begin
            crrm:= crrm + cal;
            //writeln('OK  ', pointer);
      end;
    Sau đó mình viết thêm lệnh để writeln('OK ', pointer); (bỏ dấu // đi) thì thấy vòng lặp này lặp lại 2 lần, nhưng biến pointer không hề tăng dù có lời gọi hàm cal ở crrm:= crrm + cal;

    Tuy nhiên khi thêm 1 tham số vào hàm cal, tức là function cal(i: integer): integer;, sau đó sửa hết các lời gọi hàm cal thành cal(1) thì chương trình chạy đúng, mặc dù tham số 1 không có ý nghĩa gì cả @@!

    Mọi người giúp mình giải thích tại sao với

  2. #2
    tuichua's Avatar
    tuichua vẫn chưa có mặt trong diễn đàn Rìu Sắt
    Tham gia
    Aug 2011
    Bài
    149
    Cảm ơn
    31
    Điểm
    35/27 bài viết
    VR power
    0

    Default

    mình học c++ nên k rõ pascal lắm.trong c++ có kiểu stack để làm bài này còn trong pascal thì chịu

  3. #3
    Englandhuynh's Avatar
    Englandhuynh vẫn chưa có mặt trong diễn đàn ¨°o.O ║╦ Programmer ║╦ O.o°
    Tham gia
    Oct 2011
    Đến từ
    TPHCM
    Bài
    271
    Cảm ơn
    144
    Điểm
    105/71 bài viết
    VR power
    0

    Default

    kiểu stack trong c++ thế nào vậy ? Pascal cũng có stack bằng mảng 1 chiều mà

  4. #4
    HGMinh95's Avatar
    HGMinh95 vẫn chưa có mặt trong diễn đàn Rìu Bạc
    Tham gia
    May 2010
    Bài
    429
    Cảm ơn
    87
    Điểm
    232/168 bài viết
    VR power
    0

    Default

    Trích tuichua View Post
    mình học c++ nên k rõ pascal lắm.trong c++ có kiểu stack để làm bài này còn trong pascal thì chịu
    có thể dùng mảng để lưu stack mà bạn
    Nhưng mình đâu có hỏi thuật toán bài này, mình chỉ hỏi về cái lỗi kia thôi

 

 

Tag của Đề tài này

Quyền sử dụng

  • 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ể tự sửa bài viết của mình
  •