Từ 1 tới 10 trên tổng số 10 kết quả

Đề tài: Quay lui đệ quy trong C++. kết quả bị sai.

  1. #1
    Ngày gia nhập
    04 2018
    Bài viết
    0

    Mặc định Quay lui đệ quy trong C++. kết quả bị sai.

    Yêu cầu tạo các số tự nhiên ghép bởi các số 1, 2, 3. Mình chuyển thuật toán quay lui đệ quy từ Pascal sang nhưng không hiểu sai chỗ nào mà khi chạy mỗi cấu hình nó in 3 lần. mong các bạn tìm lỗi giúp. mình cảm ơn.
    Code:
    #include <iostream>
    #include <bits/stdc++.h>
    using namespace std;
    int a[10];
    int n=0;
    void xuat();
    void xuly(int i);
    int main()
    {
        n=3;
        xuly(0);
        return 0;
    }
    void xuat()
    {
        for (int i=0;i<n;i++)
            cout<<a[i]<<" ";
        cout<<endl;
    }
    void xuly(int i)
    {
        for(int j=1;j<=n;j++)
        {
            a[i]=j;
            if (i==n) xuat();
            else xuly(i+1);
        }
    }

  2. #2
    Ngày gia nhập
    08 2017
    Bài viết
    1,487

    Mã nguồn Pascal đâu ? Nó đúng không!

    Chưa nói đến công cụ dịch, phải biết dịch giữa các NNLT ở mức cơ bản - cơ sở, rồi mới bàn tiếp

  3. #3
    Ngày gia nhập
    04 2018
    Bài viết
    0

    Trích dẫn Nguyên bản được gửi bởi Monre Xem bài viết
    Mã nguồn Pascal đâu ? Nó đúng không!

    Chưa nói đến công cụ dịch, phải biết dịch giữa các NNLT ở mức cơ bản - cơ sở, rồi mới bàn tiếp
    Bài em làm bằng pascal đây bác.
    C++ em viết bằng codeblocks 17.2

    Code:
    Program Tao_So_Nguyen_Quay_Lui;
    var  x: array[1..100] of Integer;
         n: Integer;
         {----------------}
         Procedure Xuat;
         var i: Integer;
         begin
              for i := 1 to n do
    	      Write(x[i]);
    	  Writeln;
         end;
         {---------------}
         Procedure quaylui(i: Integer);
         var  j: Integer;
         begin
              for j :=1 to n do
         	  begin
          	       x[i] := j;
         	       if i = n then Xuat
          	       else quaylui(i + 1);
         	  end;
         end;
    {---------------}
    begin
         ReadLn(n);
         quaylui(1);
         readln;
    end.

  4. #4
    Ngày gia nhập
    08 2017
    Bài viết
    1,487

    Dịch không đúng.
    Cố đặt tên giống nhau, có chú thích cho từng hàm, từng khối lệnh, nhắc người dùng nhập cái gì, ...

    C++ Code:
    1. #include <iostream>
    2. #include <bits/stdc++.h>
    3. using namespace std;
    4.  
    5. int a[10];
    6. int n=0;
    7.  
    8. void xuat();
    9. void xuly(int i);
    10.  
    11. int main(){
    12.     n=3;
    13.     xuly(0);
    14.     return 0;
    15. }
    16. void xuat(){
    17.     for (int i=0;i<n;i++)
    18.         cout<<a[i]<<" ";
    19.     cout<<endl;
    20. }
    21. void xuly(int i){
    22.     for(int j=1;j<=n;j++){
    23.         a[i]=j;
    24.         if (i==n) xuat();
    25.         else xuly(i+1);
    26.     }
    27. }

    Chương trình nguồn Pascal
    Pascal Code:
    1. program Project1;
    2. {$APPTYPE CONSOLE}
    3.  
    4. //uses SysUtils;
    5. //Program Tao_So_Nguyen_Quay_Lui;
    6. var  x: array[1..100] of Integer;
    7.      n: Integer;
    8. {----------------}
    9. Procedure Xuat;
    10. var i: Integer;
    11. begin
    12.   for i := 1 to n do
    13.     Write(x[i]);
    14.   Writeln;
    15. end;
    16. {---------------}
    17. Procedure quaylui(i: Integer);
    18. var  j: Integer;
    19. begin
    20.   for j :=1 to n do begin
    21.     x[i] := j;
    22.     if i = n then Xuat
    23.     else quaylui(i + 1);
    24.     end;
    25. end;
    26. {---------------}
    27. begin
    28.   Write('Nhap n: ');
    29.   ReadLn(n);
    30.   quaylui(1);
    31.   readln;
    32. end.

    Test pascal:

  5. #5
    Ngày gia nhập
    04 2018
    Bài viết
    0

    Vâng. Cùng thật toán như thế nhưng em không thể tìm ra bài viết ở C++ sai chỗ nào. em mới chuyển qua nghiên cứu C++ nên còn hơi gà.

  6. #6
    Ngày gia nhập
    12 2015
    Nơi ở
    Đà Nẵng
    Bài viết
    383

    Mặc định Quay lui đệ quy trong C++. kết quả bị sai.

    Trích dẫn Nguyên bản được gửi bởi leminhkhang Xem bài viết
    Vâng. Cùng thật toán như thế nhưng em không thể tìm ra bài viết ở C++ sai chỗ nào. em mới chuyển qua nghiên cứu C++ nên còn hơi gà.
    C++ Code:
    1. #include <iostream>
    2. using namespace std;
    3.  
    4. int a[10];
    5. int n=0;
    6.  
    7. void xuat();
    8. void xuly(int i);
    9.  
    10. int main(){
    11.     n=3;
    12.     xuly(0);
    13.     getchar();
    14.     return 0;
    15. }
    16. void xuat(){
    17.     for (int i=0;i<n;i++)
    18.         cout<<a[i]<<" ";
    19.     cout<<endl;
    20. }
    21. void xuly(int i){
    22.     for(int j=1;j<=n;j++){
    23.         a[i]=j;
    24.         if (i==n-1) xuat();//<-----------Thay đổi dòng này từ n sang n-1
    25.         else xuly(i+1);
    26.     }
    27. }

  7. #7
    Ngày gia nhập
    04 2018
    Bài viết
    0

    Cảm ơn bác nhé.

  8. #8
    Ngày gia nhập
    08 2017
    Bài viết
    1,487

    Mảng - array
    - trong pascal
    Pascal Code:
    1. ...
    2. var
    3.   variablename: array [startindex..endindex] of type;
    4. begin
    5.   ...
    có cận dưới là startindex, cận trên là endindex

    - trong c/c++
    type arr[n];
    có cận dưới là 0, cận trên là n - 1

    Không bàn tới tối u, người ta có thể cho thừa, đứng canh - cầm canh, ...

    Đếm, học mãi vẫn nhầm, không giống với câu nói xưa : thật như đếm
    Xem thêm:
    http://diendan.congdongcviet.com/threads/t400748::codeblocks-ide-for-c-cpp.cpp

  9. #9
    Ngày gia nhập
    04 2018
    Bài viết
    0

    Trích dẫn Nguyên bản được gửi bởi Monre Xem bài viết
    Mảng - array
    - trong pascal
    Pascal Code:
    1. ...
    2. var
    3.   variablename: array [startindex..endindex] of type;
    4. begin
    5.   ...
    có cận dưới là startindex, cận trên là endindex

    - trong c/c++
    type arr[n];
    có cận dưới là 0, cận trên là n - 1

    Không bàn tới tối u, người ta có thể cho thừa, đứng canh - cầm canh, ...

    Đếm, học mãi vẫn nhầm, không giống với câu nói xưa : thật như đếm
    Xem thêm:
    http://diendan.congdongcviet.com/threads/t400748::codeblocks-ide-for-c-cpp.cpp
    Lúc đầu em tưởng thuật toán sai nhưng hóa ra cho chạy tới n thì bài toán trở thành 4 số. Nên cứ nghĩ 1 cấu hình nó in 3 lần.
    Cũng nhờ vậy mà được bài học nhớ đời.

  10. #10
    Ngày gia nhập
    08 2017
    Bài viết
    1,487

    trước khi nghĩ tới AI (trí tuệ nhân tạo), máy dịch hãy nghĩ đến người dịch.

    Xem #14:
    http://diendan.congdongcviet.com/threads/t400748::codeblocks-ide-for-c-cpp.cpp?p=922228#post922228

Quyền hạn của bạn

  • Bạn không thể gửi đề tài mới
  • Bạn không thể gửi bài trả lời
  • Bạn không thể gửi các đính kèm
  • Bạn không thể chỉnh sửa bài viết của bạn