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

Đề tài: Bài toán cây nhị phân tìm kiếm bằng C, lỗi debug hàm chèn(insert). Sửa giúp mình?

  1. #1
    Ngày gia nhập
    05 2010
    Bài viết
    8

    Wink Bài toán cây nhị phân tìm kiếm bằng C, lỗi debug hàm chèn(insert). Sửa giúp mình?

    Lần trước mình đã có tạo một bài hỏi về cách làm bài toán này:
    Dùng cây nhị phân tìm kiếm để lưu trữ điểm toán, lý, hóa. điểm trung bình, xếp loại.
    Lấy họ tên sinh viên làm khóa để tìm kiếm.
    In ra màn hình
    Tìm kiếm một người trong danh sách.
    và đây là phần code của mình:
    C Code:
    1. #include <iostream.h>
    2. #include <conio.h>
    3. #include <stdio.h>
    4. #include <alloc.h>
    5. #include <math.h>
    6. struct SinhVien
    7. {
    8.  
    9. char Hoten[30];
    10. char xeploai[10];
    11. float toan;
    12. float ly;
    13. float hoa;
    14. float dtb;
    15. };
    16. struct TNode
    17. {
    18. SinhVien SV;
    19. struct TNode *pL,*pR;
    20. };
    21. typedef TNode *TREE;
    22. TREE T;
    23. int n;
    24. //---------------Chen nut k vao cay T------------------
    25. int ChenCay(TREE &T,SinhVien k)
    26. {
    27. if (T!=NULL)
    28. {
    29. if (strcmp(T->SV.Hoten,k.Hoten)==0) return 0;
    30. if (strcmp(T->SV.Hoten,k.Hoten)>0) return ChenCay(T->pL,k);
    31. else return ChenCay(T->pR,k);
    32. }
    33. else
    34. { T=(TREE)malloc(sizeof(TNode));
    35. if (T==NULL) return -1;
    36. T->SV=k;
    37. T->pL=T->pR=NULL;
    38. return 1;
    39. }
    40. }
    41. //---------------Tao cay T---------------
    42. void TaoCay(TREE &T)
    43. { T=NULL;
    44. SinhVien k;
    45. char Hoten[30];
    46. cout<<"\n nhap so sinh vien n=";
    47. cin>>n;
    48. for (int i=1;i<=n;i++)
    49. {
    50. cout<<"\n thong tin sinh vien thu "<<i<<" :";
    51. cout<<"\n Nhap ten sinh vien :";
    52. cin.ignore(1);
    53. cin.get(Hoten,30);
    54. cout<<"\n Toan :";cin>>k.toan;
    55. cout<<"\n ly :";cin>>k.ly;
    56. cout<<"\n Hoa:";cin>>k.hoa;
    57. k.dtb=int((k.toan+k.ly+k.hoa)/3);
    58. if (k.dtb>=8)
    59. {
    60.           strcpy(k.xeploai,"Gioi");}
    61. else
    62. {
    63.           if(k.dtb>=6)
    64.           {
    65.           strcpy(k.xeploai,"Kha");
    66.           }
    67.           else
    68. {
    69.                    if(k.dtb>=5)
    70.                    {
    71.                      strcpy(k.xeploai,"TB");
    72.                    }
    73.                    else {strcpy(k.xeploai,"yeu");}
    74.                    
    75. }
    76. }
    77.  
    78. ChenCay(T,k);
    79. }
    80. }
    81. //hienthi
    82. void Hienthi(SinhVien k)
    83. {
    84.  cout<<k.Hoten<<"\t"<<k.toan<<"\t"<<k.ly<<"\t"<<k.hoa<<"\t"<<k.dtb<<"\t"<<k.xeploai<<"\n";
    85. }
    86. //duyet cay
    87. void NLR(TREE T)
    88. {
    89. if (T!=NULL)
    90. {
    91. Hienthi(T->SV);
    92. NLR(T->pL);
    93. NLR(T->pR);
    94. }
    95. }
    96. //tim kiem theo hoten
    97. TREE timkiem(TREE T,char *x)//x la tu khoa de tim kiem
    98.  
    99. {
    100.  
    101.   if(T==NULL)
    102.  
    103.     return NULL;
    104.  
    105.   if(strcmp(T->SV.Hoten,x)==0)
    106.  
    107.     return T;
    108.  
    109.   else
    110.  
    111.   {
    112.  
    113.     if(strcmp(T->SV.Hoten,x)>0)
    114.  
    115.        return timkiem(T->pL,x);
    116.  
    117.     else
    118.  
    119.        return timkiem(T->pR,x);
    120.  
    121.   }
    122.  
    123. }
    124. void Httimkiem(TREE &T)
    125. {
    126.       char Hoten[30]; TREE H;
    127.  
    128.  
    129. cout<<"\n Nhap ten sinh vien :";
    130. //cin.ignore(1);
    131. gets(Hoten);
    132. H=timkiem(T,Hoten);
    133. Hienthi(H->SV);
    134.  
    135. }
    136. //Chuong trinh chinh
    137. int main()
    138. {
    139. TaoCay(T);
    140. NLR(T);
    141. Httimkiem(T);
    142. }

    lúc mình nhập vào thông tin của 2 sinh viên nhưng khi xuất ra chỉ được kết quả một sinh viên nhưng sai phần tên, và khi gõ lại tên sinh viên để tìm kết quả thì báo lỗi debug.
    Thầy mình bảo mình làm sai ở hàm chèn cây(ChenCay), mong các bạn sửa dùm mình. Mình cảm ơn!!!

  2. #2
    Ngày gia nhập
    11 2010
    Nơi ở
    hell
    Bài viết
    165

    kiểu struct mà trong đó có con trỏ thì ko nên gán = vì khi 2 con trỏ sẽ trỏ tới cùng một ô nhớ chứa giá trị.sau hàm chèn zô thì nó bị xóa và mất luôn giá trị.
    HT117-5277

  3. #3
    Ngày gia nhập
    05 2010
    Bài viết
    8

    mình đã sửa rồi vãn lỗi như vầy, nó còn ko thể hiển thị thông tin sinh viên ra nữa.

  4. #4
    Ngày gia nhập
    11 2010
    Nơi ở
    hell
    Bài viết
    165

    Trích dẫn Nguyên bản được gửi bởi trungdv007 Xem bài viết
    Lần trước mình đã có tạo một bài hỏi về cách làm bài toán này:
    Dùng cây nhị phân tìm kiếm để lưu trữ điểm toán, lý, hóa. điểm trung bình, xếp loại.
    Lấy họ tên sinh viên làm khóa để tìm kiếm.
    In ra màn hình
    Tìm kiếm một người trong danh sách.
    và đây là phần code của mình:
    C Code:
    1. #include <iostream.h>
    2. #include <conio.h>
    3. #include <stdio.h>
    4. #include <alloc.h>
    5. #include <math.h>
    6. struct SinhVien
    7. {
    8.  
    9. char Hoten[30];
    10. char xeploai[10];
    11. float toan;
    12. float ly;
    13. float hoa;
    14. float dtb;
    15. };
    16. struct TNode
    17. {
    18. SinhVien SV;
    19. struct TNode *pL,*pR;
    20. };
    21. typedef TNode *TREE;
    22. TREE T;
    23. int n;
    24. //---------------Chen nut k vao cay T------------------
    25. int ChenCay(TREE &T,SinhVien k)
    26. {
    27. if (T!=NULL)
    28. {
    29. if (strcmp(T->SV.Hoten,k.Hoten)==0) return 0;
    30. if (strcmp(T->SV.Hoten,k.Hoten)>0) return ChenCay(T->pL,k);
    31. else return ChenCay(T->pR,k);
    32. }
    33. else
    34. { T=(TREE)malloc(sizeof(TNode));
    35. if (T==NULL) return -1;
    36. T->SV=k;
    37. T->pL=T->pR=NULL;
    38. return 1;
    39. }
    40. }
    41. //---------------Tao cay T---------------
    42. void TaoCay(TREE &T)
    43. { T=NULL;
    44. SinhVien k;
    45.  
    46.  
    47. [COLOR="Red"]char Hoten[30];[/COLOR]      để ý chỗ này
    48.  
    49. cout<<"\n nhap so sinh vien n=";
    50. cin>>n;
    51. for (int i=1;i<=n;i++)
    52. {
    53. cout<<"\n thong tin sinh vien thu "<<i<<" :";
    54. cout<<"\n Nhap ten sinh vien :";
    55. cin.ignore(1);
    56.  
    57. [COLOR="Red"]cin.get(Hoten,30);  
    58. [/COLOR]                                                // bạn nhập tên cho biến họ tên chứ ko pải cho sv k
    59.  
    60. cout<<"\n Toan :";cin>>k.toan;
    61. cout<<"\n ly :";cin>>k.ly;
    62. cout<<"\n Hoa:";cin>>k.hoa;
    63. k.dtb=int((k.toan+k.ly+k.hoa)/3);
    64. if (k.dtb>=8)
    65. {
    66.           strcpy(k.xeploai,"Gioi");}
    67. else
    68. {
    69.           if(k.dtb>=6)
    70.           {
    71.           strcpy(k.xeploai,"Kha");
    72.           }
    73.           else
    74. {
    75.                    if(k.dtb>=5)
    76.                    {
    77.                      strcpy(k.xeploai,"TB");
    78.                    }
    79.                    else {strcpy(k.xeploai,"yeu");}
    80.                    
    81. }
    82. }
    83.  
    84. ChenCay(T,k);
    85. }
    86. }
    87. //hienthi
    88. void Hienthi(SinhVien k)
    89. {
    90.  cout<<k.Hoten<<"\t"<<k.toan<<"\t"<<k.ly<<"\t"<<k.hoa<<"\t"<<k.dtb<<"\t"<<k.xeploai<<"\n";
    91. }
    92. //duyet cay
    93. void NLR(TREE T)
    94. {
    95. if (T!=NULL)
    96. {
    97. Hienthi(T->SV);
    98. NLR(T->pL);
    99. NLR(T->pR);
    100. }
    101. }
    102. //tim kiem theo hoten
    103. TREE timkiem(TREE T,char *x)//x la tu khoa de tim kiem
    104.  
    105. {
    106.  
    107.   if(T==NULL)
    108.  
    109.     return NULL;
    110.  
    111.   if(strcmp(T->SV.Hoten,x)==0)
    112.  
    113.     return T;
    114.  
    115.   else
    116.  
    117.   {
    118.  
    119.     if(strcmp(T->SV.Hoten,x)>0)
    120.  
    121.        return timkiem(T->pL,x);
    122.  
    123.     else
    124.  
    125.        return timkiem(T->pR,x);
    126.  
    127.   }
    128.  
    129. }
    130. void Httimkiem(TREE &T)
    131. {
    132.       char Hoten[30]; TREE H;
    133.  
    134.  
    135. cout<<"\n Nhap ten sinh vien :";
    136. //cin.ignore(1);
    137. gets(Hoten);
    138. H=timkiem(T,Hoten);
    139. Hienthi(H->SV);
    140.  
    141. }
    142. //Chuong trinh chinh
    143. int main()
    144. {
    145. TaoCay(T);
    146. NLR(T);
    147. //Httimkiem(T);
    148. }

    lúc mình nhập vào thông tin của 2 sinh viên nhưng khi xuất ra chỉ được kết quả một sinh viên nhưng sai phần tên, và khi gõ lại tên sinh viên để tìm kết quả thì báo lỗi debug.
    Thầy mình bảo mình làm sai ở hàm chèn cây(ChenCay), mong các bạn sửa dùm mình. Mình cảm ơn!!!
    ngoài ra hàm tìm kiếm của bạn có vấn đề.cần viết lại
    HT117-5277

  5. #5
    Ngày gia nhập
    05 2010
    Bài viết
    8

    phần xuất kí tự của mình còn bị lỗi, lúc in ra màn hình chỉ có phần điểm, còn phần tên bị lỗi, ko xuất ra được, nên hàm tìm kiếm chưa sử dụng được. Bạn có thể sửa lỗi phần xuất tên cho mình được ko??? thank bạn nhiều.

  6. #6
    Ngày gia nhập
    11 2010
    Nơi ở
    hell
    Bài viết
    165

    Mặc định Bài toán cây nhị phân tìm kiếm bằng C, lỗi debug hàm chèn(insert). Sửa giúp mình?

    Trích dẫn Nguyên bản được gửi bởi trungdv007 Xem bài viết
    phần xuất kí tự của mình còn bị lỗi, lúc in ra màn hình chỉ có phần điểm, còn phần tên bị lỗi, ko xuất ra được, nên hàm tìm kiếm chưa sử dụng được. Bạn có thể sửa lỗi phần xuất tên cho mình được ko??? thank bạn nhiều.

    mình chạy thấy ổn mà.còn phần code tìm kiếm thì bạn tự viết nha.dạo này nhiều chiện qá chẳg mần ăn được chi hít.....
    HT117-5277

  7. #7
    Ngày gia nhập
    05 2010
    Bài viết
    8

    có ai giúp mình sửa bài chạy hoàn thjên với ah.hjk
    các cao nhân đâu hết rồi, giúp mình với, hik. mình sắp nộp bài rồi.
    Đã được chỉnh sửa lần cuối bởi trungdv007 : 15-11-2011 lúc 11:05 AM.

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

  1. Giúp mình insert dữ liệu từ asp.net vào Sql với
    Gửi bởi haininh118 trong diễn đàn Nhập môn lập trình C#, ASP.NET
    Trả lời: 16
    Bài viết cuối: 29-09-2012, 10:01 AM
  2. mong các bạn giúp mình ,bị lỗi hàm thư viện nhưng sao chạy debug vẫn được
    Gửi bởi thansautk trong diễn đàn Nhập môn lập trình C#, ASP.NET
    Trả lời: 3
    Bài viết cuối: 11-06-2009, 06:06 PM
  3. Tìm kiếm trên file! Tìm kiếm xâu mẫu dùng giải thuật Naive | Giúp mình code sai ở đâu
    Gửi bởi totoise trong diễn đàn Thắc mắc lập trình C/C++/C++0x
    Trả lời: 1
    Bài viết cuối: 19-04-2009, 08:22 PM
  4. Giúp em debug thuật toán QuickSort
    Gửi bởi tivalat trong diễn đàn Nhập môn lập trình C/C++
    Trả lời: 5
    Bài viết cuối: 25-05-2008, 07:09 PM
  5. [VC++6] Giúp về thủ thuật debug?
    Gửi bởi minhson trong diễn đàn Thắc mắc lập trình Visual C++
    Trả lời: 9
    Bài viết cuối: 03-04-2007, 12:06 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