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

Đề tài: code không còn lỗi nhưng ko chạy được

  1. #1
    Ngày gia nhập
    11 2008
    Bài viết
    47

    Mặc định code không còn lỗi nhưng ko chạy được

    chạy ko có heap thì không bị lỗi trong khi có hàm heap nó không vào hàm không biết mình sai phạm ở đâu nhờ các bạn chỉ giúp

    PHP Code:
    #include<stdio.h>
    #include<stdlib.h>

    void hc_heap(int a[], int lint r)
    {
        
    int x=a[l], i=lj=2*1;
        while (
    j<=r)
        {
            if(
    j<&& a[j]<a[j+1]) j++;
            if(
    x>a[j]) exit(0);
            
    a[i]=a[j];
            
    i=j;
            
    j=2*i;
        }
            
    a[i]=x;
        
    }

    void tao_heap (int a[], int n)
    {
        for(
    int l=(n-1)/2l>0l--)
            
    hc_heap(a,l,n-1);
    }

    void hoanvi(int &aint &b)
    {
        
    int temp;
        
    temp=a;
        
    a=b;
            
    b=temp;
    }

    void heapsort(int a[], int n)
    {
        
    tao_heap(a,n);
        for(
    int r=n-1;r>0;r--)
        {
            
    hoanvi(a[0],a[r]);
                    
    hc_heap(a,0,r-1);
        }
    }

    void nhap(int *aint &n)
    {
            
    randomize();
        
    printf("Nhap n:");
        
    scanf("%d",&n);
        for(
    int i=0;i<n;i++)
            
    a[i]=random(100);
    }
                
    void xuat(int *aint n)
    {
        for(
    int i=0i<ni++)
                
    printf("%4d",a[i]);
    }

    void main()
    {
        
    int a[100],n;
        
    nhap(a,n);
        
    /*heapsort(a,n);*/
        
    xuat(a,n);
        
    heapsort(a,n);
        
    xuat(a,n);


  2. #2
    Ngày gia nhập
    11 2008
    Nơi ở
    Neverland
    Bài viết
    48

    Bài của bạn về cơ bản viết thuật toán HeapSort thế cũng được nhưng bạn phải chú ý mảng của bạn là viết trên C chứ không phải Pascal nên chỉ số đầu là 0 . Gốc của cây là phần tử chỉ số 0 nên hai nút con trái và phải của nó phải là 1 và 2 tương tự với nút gốc i thì con trái và phải lần lượt là 2*i+1 và 2*i+2 . Khi đó bước tạo Heap phải cho l chạy tới cả gốc 0 . Mình đã sửa lại vào Code của bạn :
    Code:
    #include<stdio.h>
    #include<stdlib.h>
    
    void hc_heap(int a[], int l, int r)
    {
        int x=a[l], i=l, j=2*l+1;//nút con trái j=2*l+1
        while (j<=r)
        {
            if(j<r && a[j]<a[j+1]) j++;
            if(x>a[j]) break;//chỗ này chỉ dùng break dùng exit(0) sẽ thoát ra DOS
            a[i]=a[j];
            i=j;
            j=2*i+1;//nút con trái j=2*i+1
        }
            a[i]=x;
        
    }
    
    void tao_heap (int a[], int n)
    {
        for(int l=(n-2)/2; l>=0; l--) //nút cha có giá trị từ 0 đến (n-2)/2
            hc_heap(a,l,n-1);
    }
    
    void hoanvi(int &a, int &b)
    {
        int temp;
        temp=a;
        a=b;
            b=temp;
    }
    
    void heapsort(int a[], int n)
    {
        tao_heap(a,n);
        for(int r=n-1;r>0;r--)
        {
            hoanvi(a[0],a[r]);
                    hc_heap(a,0,r-1);
        }
    }
    
    void nhap(int *a, int &n)
    {
        randomize();
        printf("Nhap n:");
        scanf("%d",&n);
        for(int i=0;i<n;i++)
            a[i]=random(100);
    }
                
    void xuat(int *a, int n)
    {
        for(int i=0; i<n; i++)
                printf("%4d",a[i]);
    }
    
    void main()
    {
        int a[100],n;
        nhap(a,n);
        /*heapsort(a,n);*/
        xuat(a,n);
        heapsort(a,n);
        xuat(a,n);
    }
    PS:Bạn nên dùng các dấu xuống dòng để in kết quả cho rõ ràng nếu chương trình có lỗi về thuật toán dùng Trace để tìm lỗi kết hợp cửa sổ Watch sẽ biết chương trình sai ở đâu .

  3. #3
    Ngày gia nhập
    11 2008
    Bài viết
    47

    cảm ơn bạn rất nhiều
    Đã được chỉnh sửa lần cuối bởi Forever Love : 05-11-2008 lúc 11:05 PM.

  4. #4
    Ngày gia nhập
    12 2007
    Bài viết
    54

    Tui chưa học tạo heap đề nên ko biết tạo nó dùng để làm gì ? Ai giúp thích giúp mình với . Thanks
    Rất mong được mọi người giúp đỡ :

    Kiến thức mình biết chỉ là hạt cát trên sa mạc

  5. #5
    Ngày gia nhập
    11 2008
    Nơi ở
    Neverland
    Bài viết
    48

    Heap là một đống hay một cây nhị phân trong đó nút gốc có giá trị lớn hơn hai nút con của nó . Được dùng trong thuật toán HeapSort (sắp xếp kiểu vun đống) để sắp xếp mảng . Muốn tìm hiểu thêm thangit có thể đọc các sách viết về Cấu trúc dữ liệu và Giải thuật .

Các đề tài tương tự

  1. Bài tập C nhờ các anh em test giùm đoạn code này xem còn lỗi nào phát sinh ngoài ý muốn ko.
    Gửi bởi shizuoka trong diễn đàn Nhập môn lập trình C/C++
    Trả lời: 6
    Bài viết cuối: 20-11-2012, 07:03 AM
  2. Add nick nhờ người khác chỉ code mà còn chửi bới, ai gặp rồi vô bàn luận
    Gửi bởi leminhtu88 trong diễn đàn Giải trí - Thư giãn
    Trả lời: 28
    Bài viết cuối: 21-06-2012, 10:51 AM
  3. Socket Host service WCF chạy .net framwork 4.0 còn client chạy 2.0 được ko?
    Gửi bởi kqphu trong diễn đàn Thắc mắc lập trình C#
    Trả lời: 3
    Bài viết cuối: 04-05-2012, 09:57 AM
  4. code nhập xuất học sinh trong c-free thì chạy dc ,còn trong visual thì ko
    Gửi bởi art_mu trong diễn đàn Thảo luận, góp ý code C/C++ của bạn
    Trả lời: 2
    Bài viết cuối: 08-02-2012, 10:37 PM
  5. Chuyển code từ turbo C++ 3.0 sang VC++ không còn chạy nữa?
    Gửi bởi bachtrong43 trong diễn đàn Thắc mắc lập trình Visual C++
    Trả lời: 5
    Bài viết cuối: 20-04-2009, 06:27 PM

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