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

Bóc hộp Wiko Getaway giá rẻ, dáng đẹp và Selfie thì cực Chất

Gameshow “Ai Là Triệu Phú” trên VTV đang chờ đón bạn – Tải ngay!

Reviews hay rinh note 4, galaxy V được vi vu Hàn Quốc

Mời anh em tham gia Vn-zoom support team

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

Tin tức công nghệ sản phẩm mới
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
    VZD
    1.513
    Cảm ơn
    87
    Điểm
    233/168 bài viết

    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
    150
    VZD
    619
    Cảm ơn
    32
    Điểm
    35/27 bài viết

    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
    276
    VZD
    21.648
    Cảm ơn
    150
    Điểm
    105/71 bài viết

    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
    VZD
    1.513
    Cảm ơn
    87
    Điểm
    233/168 bài viết

    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
  •