Announcement

Collapse
No announcement yet.

Giúp em về cấu trúc cây Sinh viên này với

Collapse
X
 
  • Filter
  • Time
  • Show
Clear All
new posts

  • [Ansi C] Giúp em về cấu trúc cây Sinh viên này với

    Em không hiểu sao bài tập này của em lại chạy bị lỗi. Em đã debug nhưng vẫn không hiểu nó bị lỗi đó là như thế nào. Các anh coi dùm em nha

    PS: Vừa tìm ra lỗi nhờ thằng bạn.
    Code:
    #include <stdio.h>
    #include <conio.h>
    #include <iostream>
    #include <string>
    using namespace std;
    typedef struct ssv
    {
    	char *HoTen,*GioiTinh;
    	long NamSinh;
    	double MSSV;
    	float ToanA2, CTDL, KTMT, LiA2, LiA3, DBT;
    } sv;
    typedef struct SVNode
    {
    	sv info;
    	struct SVNode *SVRight, *SVLeft;
    } *SVTREE;
    void CreateSVNode(SVNode *&a, sv x)
    {
    	a=new SVNode;
    	if (a=NULL)
    	{
    		cout<<"Loi bo nho khong the tao cay. Tat chuong trinh va kiem tra loi cua HDD."<<endl;
    		exit(1);
    	}
    	else
    	{
    		a->info=x;
    		a->SVLeft=a->SVRight=NULL;
    	}
    }
    void CreateSVTree(SVTREE &a)
    {
    	a=NULL;
    }
    int AddSVNode(SVTREE &a, sv x)
    {
    	if (a)
    	{
    		if (a->info.MSSV==x.MSSV) 
    		{
    			cout<<"Sinh vien vua nhap da bi trung.";
    			return 0;
    		}
    		if (a->info.MSSV>x.MSSV) return AddSVNode(a->SVLeft,x);
    		else return AddSVNode(a->SVRight,x);
    	}
    	CreateSVNode(a,x);
    	return 1;
    }
    void LNR(SVTREE a, int &n)
    {
    	if (a!=NULL)
    	{
    		LNR(a->SVLeft,n);
    		n++;
    		cout<<"SINH VIEN THU "<<n<<endl;
    		cout<<"  Ho va ten: "<<a->info.HoTen<<endl;
    		cout<<"  MSSV: "<<a->info.MSSV<<endl;
    		cout<<"  Nam sinh: "<<a->info.NamSinh<<endl;
    		cout<<"  Gioi tinh: "<<a->info.GioiTinh<<endl;
    		cout<<"  Diem Toan A2: "<<a->info.ToanA2<<endl;
    		cout<<"  Diem Li A2:   "<<a->info.LiA2<<endl;
    		cout<<"  Diem Li A3:   "<<a->info.LiA3<<endl;
    		cout<<"  Diem KTMT:    "<<a->info.KTMT<<endl;
    		cout<<"  Diem CTDL&GT: "<<a->info.CTDL<<endl;
    		cout<<"  Diem TRUNG BINH: "<<a->info.DBT<<endl;
    		LNR(a->SVRight,n);
    	}
    }
    void main()
    {
    	cout<<"Copyright (c) 2012 - Nguyen Van Uy."<<endl<<endl<<"Welcome to Sinh Vien Tree Struct Program v1.0 "<<endl<<endl;
    	SVTREE SVT, svtam;
    	int n=0;
    	sv sinhvien;
    	sinhvien.HoTen=(char*) malloc(50*sizeof(char));
    	sinhvien.GioiTinh=(char*) malloc(3*sizeof(char));
    	char *b,c,gt;
    	int g;
    	b=(char*) malloc(50*sizeof(char));
    	CreateSVTree(SVT);
    	CreateSVTree(svtam);
    	cout<<"NHAP VAO THONG TIN SINH VIEN THU 1 (Nhan ESC de exit nhap): "<<endl<<endl;
    	do
    	{
    		cout<<"Ho va ten:                ";
    		c=getche();
    		if(c==27) break;
    		else 
    		{
    			g=sprintf(sinhvien.HoTen,"%c",c);
    			gets(b);
    			strcat(sinhvien.HoTen,b);
    			free(b);
    			cout<<"MSSV:                     "; cin>>sinhvien.MSSV;
    			cout<<"Gioi tinh (1-Nam, 0-Nu):  "; 
    				do
    				{
    					gt=getch();
    					getch();
    					if (gt=='1') 
    					{
    						sinhvien.GioiTinh="Nam";
    						cout<<"Nam"<<endl;
    					}
    					else if (gt=='0')
    					{   
    						sinhvien.GioiTinh="Nu";
    						cout<<"Nu"<<endl;
    					}
    				}while(gt==0 || gt==1);
    			cout<<"Nam sinh:                 ";cin>>sinhvien.NamSinh;
    			cout<<"Diem Toan A2:             ";cin>>sinhvien.ToanA2;
    			cout<<"Diem Li A2:               ";cin>>sinhvien.LiA2;
    			cout<<"Diem Li A3:               ";cin>>sinhvien.LiA3;
    			cout<<"Diem KTMT:                ";cin>>sinhvien.KTMT;
    			cout<<"Diem CTDL&GT:             ";cin>>sinhvien.CTDL;
    		};
    		sinhvien.DBT=(sinhvien.ToanA2 + sinhvien.LiA2 + sinhvien.LiA3 + sinhvien.KTMT + sinhvien.CTDL)/5;
    		n++;
    		if (AddSVNode(svtam,sinhvien)==0) 
    		{
    			//n=n-1;
    			cout<<"Sinh vien vua nhap da bi trung. "<<endl<<"NHAP LAI THONG TIN SINH VIEN THU "<<n<<" (Nhan ESC de exit nhap): "<<endl<<endl;
    		}
    		else
    		{
    			n++;
    			SVT=svtam;
    			cout<<"NHAP VAO THONG TIN SINH VIEN THU "<<n<<" (Nhan ESC de exit nhap): "<<endl<<endl;
    		}
    	}while (1);
    	int k=0;
    	LNR(SVT,k);
    	getch();
    }
    
    
    
    
    /* sprintf example */
    //#include <stdio.h>
    //
    //int main ()
    //{
    //  char buffer [50];
    //  int n, a=5, b=3;
    //  n=sprintf (buffer, "%d plus %d is %d", a, b, a+b);
    //  printf ("[%s] is a %d char long string\n",buffer,n);
    //  return 0;
    //}
    Last edited by 11520473; 09-06-2012, 01:21.
    http://picshome.com/getfile.php?id=1...ame=MySign.png

  • #2
    Cấu trúc SVnode sao lại là *SVTREE. Sao không code như bình thường . Sử dụng nhiều cái quá chi cho rắc rối.Vừa sài new vừa sài malloc Sử dụng nhiều con trỏ mà còn sài tham chiếu con trỏ *&a .Đề bài có yêu cầu đến mức đó không ?

    Comment


    • #3
      mình đọc trên xuống mình thấy bạn sai ngay hàm thêm node nha. giống như cây bình thường nếu T!=NULL thì tim vị trí thế còn nếu T==NULL thì khi đó cho info=x; và cho svleft=svright=NULL nhé. không có chuyện tạo 1 node mới mà lại không có liên kết gì đâu bạn. mà trong cây thì không phải tạo node mơi giống như trong danh sách liên kết đâu bạn nhé. Còn mấy hàm xuất của bạn thì mình cũng chưa bao giờ động đến nên cũng không biết. Tại sao bạn lại không code giống như 1 chương trình bình thường mà mình đã học nhi, như vậy thì anh em còn sửa được chứ, đằng này bạn code cái gì mà mình cũng chưa thây trong sách viết nên chịu thôi.kaka tự tìm hiểu thêm nhé.
      :love:
      Tương lai khóc hay cười phụ thuộc vào độ lười của quá khứ.
      :cry:

      Comment


      • #4
        rảnh rỗi sửa luôn. tự tìm thêm để sửa cho đúng nhé
        PHP Code:
        #include <stdio.h>
        #include <conio.h>
        #include <iostream>
        #include <string>
        using namespace std;
        typedef struct ssv
        {
            
        char *HoTen,*GioiTinh;
            
        long NamSinh;
            
        double MSSV;
            
        float ToanA2CTDLKTMTLiA2LiA3DBT;
        sv;
        typedef struct SVNode
        {
            
        sv info;
            
        struct SVNode *SVRight, *SVLeft;
        SVNode;
        typedef SVNode *SVTREE -> // (như thế này thì mới là cây bạn nhé)
        void CreateSVNode(SVNode *&asv x)  // Cây thì không cần dùng hàm này
        {
            
        a=new SVNode;
            if (
        a=NULL)
            {
                
        cout<<"Loi bo nho khong the tao cay. Tat chuong trinh va kiem tra loi cua HDD."<<endl;
                exit(
        1);
            }
            else
            {
                
        a->info=x;
                
        a->SVLeft=a->SVRight=NULL;
            }
        }
        void CreateSVTree(SVTREE &a)  // theo mình biết thì cây cũng không dùng hàm này nhé
        {
            
        a=NULL;
        }
        int AddSVNode(SVTREE &asv x)
        {
            if (
        a)
            {
                if (
        a->info.MSSV==x.MSSV
                {
                    
        cout<<"Sinh vien vua nhap da bi trung.";
                    return 
        0;
                }
                if (
        a->info.MSSV>x.MSSV) return AddSVNode(a->SVLeft,x);
                else return 
        AddSVNode(a->SVRight,x);
            }
        // đây là phần phải sửa nhé
            
        a->info=x;
            
        a->SVleft=a->SVright=NULL;
                return 
        1;
        }
        void LNR(SVTREE aint &n)
        {
            if (
        a!=NULL)
            {
                
        LNR(a->SVLeft,n);
                
        n++;
                
        cout<<"SINH VIEN THU "<<n<<endl;
                
        cout<<"  Ho va ten: "<<a->info.HoTen<<endl;
                
        cout<<"  MSSV: "<<a->info.MSSV<<endl;
                
        cout<<"  Nam sinh: "<<a->info.NamSinh<<endl;
                
        cout<<"  Gioi tinh: "<<a->info.GioiTinh<<endl;
                
        cout<<"  Diem Toan A2: "<<a->info.ToanA2<<endl;
                
        cout<<"  Diem Li A2:   "<<a->info.LiA2<<endl;
                
        cout<<"  Diem Li A3:   "<<a->info.LiA3<<endl;
                
        cout<<"  Diem KTMT:    "<<a->info.KTMT<<endl;
                
        cout<<"  Diem CTDL>: "<<a->info.CTDL<<endl;
                
        cout<<"  Diem TRUNG BINH: "<<a->info.DBT<<endl;
                
        LNR(a->SVRight,n);
            }
        }
        void main()
        {
            
        cout<<"Copyright (c) 2012 - Nguyen Van Uy."<<endl<<endl<<"Welcome to Sinh Vien Tree Struct Program v1.0 "<<endl<<endl;
            
        SVTREE SVTsvtam;
            
        int n=0;
            
        sv sinhvien;
            
        sinhvien.HoTen=(char*) malloc(50*sizeof(char));
            
        sinhvien.GioiTinh=(char*) malloc(3*sizeof(char));
            
        char *b,c,gt;
            
        int g;
            
        b=(char*) malloc(50*sizeof(char));
            
        CreateSVTree(SVT);
            
        CreateSVTree(svtam);
            
        cout<<"NHAP VAO THONG TIN SINH VIEN THU 1 (Nhan ESC de exit nhap): "<<endl<<endl;
            do
            {
                
        cout<<"Ho va ten:                ";
                
        c=getche();
                if(
        c==27) break;
                else 
                {
                    
        g=sprintf(sinhvien.HoTen,"%c",c);
                    
        gets(b);
                    
        strcat(sinhvien.HoTen,b);
                    
        free(b);
                    
        cout<<"MSSV:                     "cin>>sinhvien.MSSV;
                    
        cout<<"Gioi tinh (1-Nam, 0-Nu):  "
                        do
                        {
                            
        gt=getch();
                            
        getch();
                            if (
        gt=='1'
                            {
                                
        sinhvien.GioiTinh="Nam";
                                
        cout<<"Nam"<<endl;
                            }
                            else if (
        gt=='0')
                            {   
                                
        sinhvien.GioiTinh="Nu";
                                
        cout<<"Nu"<<endl;
                            }
                        }while(
        gt==|| gt==1);
                    
        cout<<"Nam sinh:                 ";cin>>sinhvien.NamSinh;
                    
        cout<<"Diem Toan A2:             ";cin>>sinhvien.ToanA2;
                    
        cout<<"Diem Li A2:               ";cin>>sinhvien.LiA2;
                    
        cout<<"Diem Li A3:               ";cin>>sinhvien.LiA3;
                    
        cout<<"Diem KTMT:                ";cin>>sinhvien.KTMT;
                    
        cout<<"Diem CTDL>:             ";cin>>sinhvien.CTDL;
                };
                
        sinhvien.DBT=(sinhvien.ToanA2 sinhvien.LiA2 sinhvien.LiA3 sinhvien.KTMT sinhvien.CTDL)/5;
                
        n++;
                if (
        AddSVNode(svtam,sinhvien)==0
                {
                    
        //n=n-1;
                    
        cout<<"Sinh vien vua nhap da bi trung. "<<endl<<"NHAP LAI THONG TIN SINH VIEN THU "<<n<<" (Nhan ESC de exit nhap): "<<endl<<endl;
                }
                else
                {
                    
        n++;
                    
        SVT=svtam;
                    
        cout<<"NHAP VAO THONG TIN SINH VIEN THU "<<n<<" (Nhan ESC de exit nhap): "<<endl<<endl;
                }
            }while (
        1);
            
        int k=0;
            
        LNR(SVT,k);
            
        getch();
        }




        /* sprintf example */
        //#include <stdio.h>
        //
        //int main ()
        //{
        //  char buffer [50];
        //  int n, a=5, b=3;
        //  n=sprintf (buffer, "%d plus %d is %d", a, b, a+b);
        //  printf ("[%s] is a %d char long string\n",buffer,n);
        //  return 0;
        //} 
        Last edited by 11520139; 09-06-2012, 08:06.
        :love:
        Tương lai khóc hay cười phụ thuộc vào độ lười của quá khứ.
        :cry:

        Comment

        LHQC

        Collapse
        Working...
        X