Hiển thị kết quả từ 1 đến 9 / 9

Chủ đề: Tại sao ?

  1. #1
    Tham gia
    14-03-2007
    Bài viết
    510
    Like
    0
    Thanked 3 Times in 3 Posts

    Tại sao ?

    Code:
    Program dayrangcua;
    Type
       mang=array [1..100] of integer;
    var 
       a:mang;
       n:integer;
    Procedure nhap(var n:integer);
    begin
       Write('Nhap n = ');
       Readln(n);
    end;
    Procedure day(n:integer;a:mang);
    var i:integer;
    begin
       For i:=1 to n do
       begin
          WRite('a[',i,']=');
          REadln(n);
       end;
    end;
    Procedure tinh(n:integer;a:mang):integer;
    var i,c,d:integer;
    begin
       i:=1;
       c:=0;
       d:=0;
       While i<=n do
       begin
       if c<0 then exit;
         If a[i]>a[i+1] then
         begin
             if c<0 then exit;
             d:=d+1;
             if c=0 then
             begin
                  i:=i+1;
             end else c:=c-1;
         end;
      If a[i]<a[i+1] then
      begin
         if c<0 then exit;
         d:=d+1;
         If c=0 then
         begin
            i:=i+1;
            end else c:=c-1;
         end;
      end;
    Write('So phan tu la = ',d);
    readln;
    end;
    Procedure run;
    begin
        nhap(n);
        day(n,a);
        tinh(n,a);
    end;
    begin
     run;
    end.
    Đây là bài em làm theo đề " Dãy răng cưa ", in ra số phần tử răng cưa.
    Ví dụ 3<5>4<7 thì in ra 4 phần tử răng cưa.
    3<5>4>3 thì chỉ in ra 3 phần tử răng cưa.
    Cái khổ là nó không in ra cái gì chứ nó in ra cũng đỡ quá.. ^^
    Quote Quote

  2. #2
    Tham gia
    17-10-2007
    Location
    Hà Nội
    Bài viết
    758
    Like
    0
    Thanked 8 Times in 7 Posts
    2 trường hợp a[i]>a[i+1] và a[i]<a[i+1] giống hệt nhau??? Mà không hiểu biến c của bạn có ý nghĩa gì? Tôi thấy bạn cứ gặp c=0 là cho c=-1 mà khi c=-1 thì sẽ thoát ra?

  3. #3
    Tham gia
    14-03-2007
    Bài viết
    510
    Like
    0
    Thanked 3 Times in 3 Posts
    À cái đó thì biến c dùng để kiểm tra xem nó có tăng giảm hay không, chứ không thì không nghĩ ra cách nào khác, không biết là dãy đó tăng trước hay là giảm trước để mà làm code ở sau, có 2 trường hợp là : 3 < 4 >2 nhưng lại có trường hợp 4>2<3 nên không thể xác định được.
    Bạn có thể code bài đó theo cách của bạn được không ? Dãy giảm liên tục và tăng liên tục thì làm được chứ thế này thì khó code quá.

  4. #4
    Tham gia
    26-02-2007
    Bài viết
    12
    Like
    1
    Thanked 0 Times in 0 Posts
    Mình vẫn chưa hiểu cái đề bài. phần tử răng cưa là như thế nào vậy

  5. #5
    Tham gia
    17-10-2007
    Location
    Hà Nội
    Bài viết
    758
    Like
    0
    Thanked 8 Times in 7 Posts
    Quote Được gửi bởi 50xu View Post
    Mình vẫn chưa hiểu cái đề bài. phần tử răng cưa là như thế nào vậy
    Trong diễn đàn đó bạn, bạn tìm lại đi

  6. #6
    Tham gia
    17-10-2007
    Location
    Hà Nội
    Bài viết
    758
    Like
    0
    Thanked 8 Times in 7 Posts

    Ngạc nhiên ???

    Quote Được gửi bởi m2mpro View Post
    Bạn có thể code bài đó theo cách của bạn được không ? Dãy giảm liên tục và tăng liên tục thì làm được chứ thế này thì khó code quá.
    Chết thật, cách của mình thế nào nhỉ? Lâu quá quên hẳn rồi ->chịu

  7. #7
    Tham gia
    14-10-2007
    Location
    ô hay, đến từ đâu thì kệ người ta chứ :p
    Bài viết
    112
    Like
    0
    Thanked 19 Times in 7 Posts
    Lâu lâu không sửa code, nên thử debug code bạn xem sao

    Đầu tiên, code gặp "sự cố" từ ngay phần nhập
    Procedure day(n:integer;a:mang);
    var i:integer;
    begin
    For i:=1 to n do
    begin
    WRite('a[',i,']=');
    REadln(n); end;
    end;
    thế nên là dữ liệu vào hẻm có chi
    ít nhất nó phải là
    Code:
    Procedure day(n:integer;var a:mang);
    var i:integer;
    begin
       For i:=1 to n do
       begin
          WRite('a[',i,']=');
          REadln(a[i]);   end;
    end;
    Cơ mà mình cũng hẻm hỉu sao bạn hông nhập luôn = 1 thủ tục mà phải tách ra làm 2 , lại còn mất công truyền tham biến và tham trị <-- đấy là mình sửa bài bạn chứ bài mình hẻm thế nha


    Đến phần xử lí ( cái nà mới chạy đã có lỗi )
    Procedure tinh(n:integer;a:mang):integer;
    Thủ tục mà trả về kết quả là seo bạn

    Còn phần thân , cơ bản là bạn hỉu sai đề bài

    Đề bài cho 1 dãy bất kì cơ mà bạn ( đâu phải là dãy bắt buộc răng cưa từ phần tử đầu tien ? ), nếu code của bạn, chỉ cần cho a[1] = a[2] là treo ngược cành cây lun

    Cơ bản là do bạn hỉu sai đề bài nên có thể coi bài bạn là sai, nhưng vì môn tin nó hay ở chỗ thuật toán sai nhưng chưa chắc bài sẽ sai hoàn toàn vì thế nên bài của bạn sẽ vẫn chạy đúng cái test mà đoạn răng cưa ở ngay đầu ( đương nhiên là sau khi đã sửa phần nhập )

    Còn về lời giải đúng, hình như có một bài là bài dãy đơn điệu ( theo mình thấy có lẽ bài đó khó hơn bài nà )mà đã có rất nhiều topic bàn tới, bạn chịu khó đi tìm để tham khảo nha

    Cái bài nà, mình kiểm tra bao giờ thấy :
    + nó bắt đầu tăng hay bắt đầu giảm thì tính
    + khi nào nó hết thì kiểm tra , nếu đoạn này dài hơn max tìm được trước đó thì cập nhật lại max

    < theo ngu ý của mình thì nó là thế, còn cài đặt thì mình lười lắm -__* ,nhưng nếu bạn không thể cài đặt được thì lúc đó tính sau ^___^ >
    Được sửa bởi cashier lúc 22:19 ngày 22-01-2008 Reason: thick sửa nên sửa ^___^!

  8. #8
    Tham gia
    14-03-2007
    Bài viết
    510
    Like
    0
    Thanked 3 Times in 3 Posts
    Cám ơn mọi người, bài này mình đã làm lại rồi, nói chung là cũng good. Cám ơn mọi người đã góp ý kiến...

  9. #9
    Tham gia
    19-10-2006
    Location
    JavaScriptB@nk.com - Vô địch JavaScript Việt Nam 4 năm liền | 2.000+ JavaScripts
    Bài viết
    1,912
    Like
    0
    Thanked 13 Times in 12 Posts
    ????????????????????????????????????????????
    gõ tiêu đề cụt ngủn, nên tui vô đây, mà chả đọc bài nào hết, kéo xuống dưới spam chơi vậy đóa

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
  •