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

Đề tài: Hàm "sắp xếp theo tên abc , nếu trùng nhau thi xếp theo họ" bị lỗi

  1. #1
    Ngày gia nhập
    01 2013
    Bài viết
    1

    Angry Hàm "sắp xếp theo tên abc , nếu trùng nhau thi xếp theo họ" bị lỗi

    chào các A/C cộng đồng C việt . em có 1 vấn đề thắc mắc em làm hoài không được mong được a/c giúp đỡ .

    hàm sắp xếp theo tên abc , nếu trùng nhau thi xếp theo họ ???
    em viết hàm như sau :

    Code:
    class sv
    {
    private:
    	int maso;
    	int tuoi;
    	char ten[30],gioitinh[5],diachi[50],kt[100];
    	float toan,ly,hoa,tong;
    	char ch[100];
    	int temp;
    public:
    	//void sxtt();
    };
    
    class ds_sv
    {
    private:
    	sv slsv[10],sv1;
    	sv chuoi[30],temp;
    	int n;
    public:
    	sv ch[100];
    	void nhap_slsv();
    	void xuat_slsv();
    	void sapxep();
            void sxtt();
    	void trungtuyen();
    };
    
    void sv::sxtt()
    {
    	for(int i=1;i<=n-1;i++)
    	{
    		for(int j=i+1;j<=n;j++)
    		{
    			if(strcmp(chuoi[i].ten,chuoi[j].ten)>0) // no bao lỗi chỗ này hoài , minh khong hiểu sao nữa hic
    			{
    				temp=chuoi[i];
    				chuoi[i]=chuoi[j];
    				chuoi[j]=temp;
    			}
    		}
    	}
    }
    
    void main()
    {
    	ds_sv ds;
    	sv sv;
    	ds.nhap_slsv();
    	cout<<"\n\nDS Diem TB - SV Sap Xep Tang Dan : \n";
    	ds.sapxep();
    	ds.xuat_slsv();
    
    	cout<<"\n\nDS SV Duoc Trung Tuyen : \n";
    	ds.trungtuyen();
    
           cout<<"\n\nDS SV Duoc xep theo ten abc : \n";
           ds.sxtt();
           ds.xuat_slsv();
    }
    code của mình , nếu sai gi các anh chị sửa lại dùm mình , hàm sắp xếp theo ten abc mình làm không dược bi báo lỗi hoài hic .

  2. #2
    Ngày gia nhập
    11 2012
    Bài viết
    136

    Bạn đưa cả bài lên xem nào, post luôn cả lỗi nhé, thế này cũng khó xác định, nhưng thấy bạn viết hàm sắp xếp hình như nhập mảng từ 1 thì phải, thường sẽ nhập từ phần tử thứ 0 tới n-1, giả sử bạn nhập từ chỉ số 0 như thế là sẽ không thể có phần tử có chỉ số n trong mảng của bạn được và giả sử mà bạn nhập n <30 thì khi đó đối tượng chuoi[n] của bạn chỉ là một giá trị ngẫu nhiên không xác định mà chính xác là nó chưa có gì. chuyển vòng for thành
    C++ Code:
    1. for(int i=0;i<n-1;i++)
    2. {
    3.      for(int j=i+1;j<n;j++)
    4. .......
    5. }
    xem sao, còn nếu từ 1 tới n thì không rõ, nên cấp phát động cho các đối tượng khi các class có kích thước lớn do toàn bộ các biến bạn khi báo sẽ trên vùng nhớ stack, cấp phát động trên vùng nhớ heap rõ hơn thì google
    Giao lưu và học hỏi
    https://www.facebook.com/kimcy1992

  3. #3
    Ngày gia nhập
    01 2013
    Bài viết
    1

    Trích dẫn Nguyên bản được gửi bởi hieurain Xem bài viết

    hàm sắp xếp theo tên abc , nếu trùng nhau thi xếp theo họ ???
    em viết hàm như sau :

    Code:
    class sv
    {
    private:
    	int maso;
    	int tuoi;
    	char ten[30],gioitinh[5],diachi[50],kt[100];
    	float toan,ly,hoa,tong;
    	char ch[100];
    	int temp;
    public:
    	//void sxtt();
    
           void sv::nhap()
    	{
    		cin.ignore();
    		cout<<"\tNhap Ten SV : ";
    		cin.get(ten,50);
    		
    		cout<<"\tNhap Tuoi SV : ";
    		cin>>tuoi;
    
    		cin.ignore();
    		cout<<"\tNhap Gioi Tinh : ";
    		cin.get(gioitinh,5);
    
    		cin.ignore();
    		cout<<"\tNhap Dia Chi Thuong Tru : ";
    		cin.get(diachi,50);		
    
    		cout<<"\tNhap Diem Mon Toan : ";
    		cin>>toan;
    		cout<<"\tNhap Diem Mon Ly : ";
    		cin>>ly;
    		cout<<"\tNhap Diem Mon Hoa : ";
    		cin>>hoa;
    		cout<<endl;
    	}
    	void sv::xuat()
    	{
    		cout<<"\n\tXuat Ho-Ten : "<<ten;
    		cout<<"\n\tXuat Tuoi SV : "<<tuoi;
    		cout<<"\n\tXuat Gioi Tinh : "<<gioitinh;
    		cout<<"\n\tXuat Dia Chi SV: "<<diachi;
    		cout<<"\n\tXuat Diem Mon Toan : "<<toan;
    		cout<<"\n\tXuat Diem Mon Ly : "<<ly;
    		cout<<"\n\tXuat Diem Mon Hoa : "<<hoa;
    		cout<<"\n\tXuat Diem Trung Binh : "<<dtb();
    		cout<<"\n\n";
    	}
    };
    
    class ds_sv
    {
    private:
    	sv slsv[10],sv1;
    	sv chuoi[30],temp;
    	int n;
    public:
    	sv ch[100];
    	void nhap_slsv();
    	void xuat_slsv();
            void sxtt();
    	void trungtuyen();
    };
    void ds_sv::nhap_slsv()
    {
    	cout<<"Nhap So Luong SV : ";
    	cin>>n;
    	cout<<endl;
    	for(int i=1;i<=n;i++)
    	{
    		slsv[i].nhap();
    	}
    	cout<<"\a";
    }
    void ds_sv::xuat_slsv()
    {
    	for(int i=1;i<=n;i++)
    	{	
    		slsv[i].xuat();
    	}
    }
    void sv::sxtt()
    {
    	for(int i=1;i<=n-1;i++)
    	{
    		for(int j=i+1;j<=n;j++)
    		{
    			if(strcmp(chuoi[i].ten,chuoi[j].ten)>0) // no bao lỗi chỗ này hoài , minh khong hiểu sao nữa hic
    			{
    				temp=chuoi[i];
    				chuoi[i]=chuoi[j];
    				chuoi[j]=temp;
    			}
    		}
    	}
    }
    void ds_sv::trungtuyen()
    {
    	int dem=0;
    	for(int i=1;i<=n;i++)
    	{
    		if(slsv[i].dtb()>=15)
    		{
    			slsv[i].ghifile();	
    			dem++;
    		}
    	}
    	sv1.infile();
    	if(dem==0)
    	{
    		cout<<"\n\tKhong Co SV Nao Trung Tuyen \n";
    	}
    }
    void main()
    {
    	ds_sv ds;
    	sv sv;
    	ds.nhap_slsv();
    	cout<<"\n\nDS Diem TB - SV Sap Xep Tang Dan : \n";
    	ds.sapxep();
    	ds.xuat_slsv();
    
    	cout<<"\n\nDS SV Duoc Trung Tuyen : \n";
    	ds.trungtuyen();
    
           cout<<"\n\nDS SV Duoc xep theo ten abc : \n";
           ds.sxtt();
           ds.xuat_slsv();
    }
    code của mình , nếu sai gi các anh chị sửa lại dùm mình , hàm sắp xếp theo ten abc mình làm không dược bi báo lỗi hoài hic .
    đề là viết code nhập vào n sinh viên và xuất ra thong tin sinh viên trung tuyển 15đ , và sap xếp theo tên abc nếu trùng thì xếp theo họ ,minh botay.com lun

    code mình đã bỏ sung đầy đủ pro nào xem hàm sap xep theo tên của mình bi lỗi , nen sx không dc ,

  4. #4
    Ngày gia nhập
    11 2012
    Bài viết
    136

    Trích dẫn Nguyên bản được gửi bởi hieurain Xem bài viết
    đề là viết code nhập vào n sinh viên và xuất ra thong tin sinh viên trung tuyển 15đ , và sap xếp theo tên abc nếu trùng thì xếp theo họ ,minh botay.com lun

    code mình đã bỏ sung đầy đủ pro nào xem hàm sap xep theo tên của mình bi lỗi , nen sx không dc ,
    Code bạn sai nhiều lắm nhiều biến đã khai báo đâu mà cứ tương vào bài, Theo ý kiến tồi của mình thì bạn cứ làm một class với bài này là đủ, khai báo một mảng các danh sách SV là được chứ ko cần phải đưa nó vào một class DS_SV cuối cùng lại là khai báo lại các phương thức của SV chả thấy hay lắm kế thừa thì ko phải, Với phần nhập tên ý bạn tách ra nhập hoten bình thường nhưng trong class sv mình có thể tách riêng là char ho[20], ten[10] chẳng hạn nhưng khi nhập thì mình vẫn nhập bình thường nhưng cut cái họ tên vừa nhập thành 2 phần ho và ten rồi copy vào 2 xâu ho ten trong class(ở đây cần một xâu trung gian hoten[30] nhập hoten cut ra và copy từng phần vào), như vậy không phải bắt người dùng nhập ho và ten riêng lẻ về sau cũng dễ so sánh hơn như yêu cầu của đề. Với điểu kiện này thì bạn phải chuẩn hóa xâu họ tên vừa nhập cut bỏ khoảng trắng thừa đầu và cuối và giữa là ok, Tham khảo mấy bài trên diễn đàn có chuẩn hóa xâu đấy rất ngon rồi, mình giờ chịu chả làm lại được có thì cũng ko hay bằng.
    Giao lưu và học hỏi
    https://www.facebook.com/kimcy1992

  5. #5
    Ngày gia nhập
    03 2012
    Bài viết
    27

    Bài làm chưa được hoàn chỉnh, mình sẽ cố gắng sửa lại sau.
    C++ Code:
    1. #include <iostream>
    2.  
    3. using namespace std;
    4.  
    5. class sv
    6. {
    7.     private:
    8.         string hoten;
    9.         string ten;
    10.     public:
    11.         void nhap();
    12.         void in();
    13.     string getten();
    14.     string getho();
    15. };
    16.  
    17. void sv::nhap()
    18. {
    19.     getline(cin,hoten);
    20.     int i;
    21.     for( i= hoten.length()-1;i>=0;i--)
    22.         if(hoten[i]==' ') break;
    23.     for(int j=i+1;j<hoten.length();j++)
    24.         ten+=hoten[j];
    25.    
    26. }
    27. void sv::in()
    28. {
    29.     cout<<hoten<<endl;
    30. }
    31. string sv::getten()
    32. {
    33.     return ten;
    34. }
    35. string sv::getho()
    36. {
    37.     return hoten;
    38. }
    39.  
    40. int main()
    41. {
    42.     int n;
    43.     sv *sinhvien;
    44.     cout<<"Nhap so sinh vien:";
    45.     cin>>n;
    46.     sinhvien= new sv[n];
    47.     for(int i=0;i<n;i++)   
    48.     {
    49.         cin.ignore();
    50.         cout<<"Sinh vien "<<i+1<<": ";
    51.         sinhvien[i].nhap();
    52.     }
    53.     for(int i=0;i<n;i++)
    54.     {
    55.         for(int j=i+1;j<n;j++)
    56.         {
    57.             if(sinhvien[i].getten()>sinhvien[j].getten())
    58.             {
    59.                 sv tmp=sinhvien[i];
    60.                 sinhvien[i]=sinhvien[j];
    61.                 sinhvien[j]=tmp;
    62.             }
    63.             else
    64.             {
    65.                 if(sinhvien[i].getten()==sinhvien[j].getten())
    66.                 {
    67.                     if(sinhvien[i].getho()>sinhvien[j].getho())
    68.                     {
    69.                         sv tmp=sinhvien[i];
    70.                         sinhvien[i]=sinhvien[j];
    71.                         sinhvien[j]=tmp;
    72.                     }
    73.                 }
    74.             }
    75.         }
    76.     }
    77.     for(int i=0;i<n;i++)
    78.         sinhvien[i].in();
    79. }

    Y!M: doxuanthangvn
    Skype: doxuanthangvnn
    Email: doxuanthang@hotmail.com

  6. #6
    Ngày gia nhập
    01 2013
    Bài viết
    1

    Mặc định Hàm "sắp xếp theo tên abc , nếu trùng nhau thi xếp theo họ" bị lỗi

    Trích dẫn Nguyên bản được gửi bởi doxuanthang Xem bài viết
    Bài làm chưa được hoàn chỉnh, mình sẽ cố gắng sửa lại sau.
    C++ Code:
    1. #include <iostream>
    2.  
    3. using namespace std;
    4.  
    5. class sv
    6. {
    7.     private:
    8.         string hoten;
    9.         string ten;
    10.     public:
    11.         void nhap();
    12.         void in();
    13.     string getten();     // tai sao khai bao 1 lan nửa ???
    14.     string getho();
    15. };
    16.  
    17. void sv::nhap()
    18. {
    19.     getline(cin,hoten);
    20.     int i;
    21.     for( i= hoten.length()-1;i>=0;i--)
    22.         if(hoten[i]==' ') break;
    23.     for(int j=i+1;j<hoten.length();j++)
    24.         ten+=hoten[j];
    25.    
    26. }
    27. void sv::in()
    28. {
    29.     cout<<hoten<<endl;
    30. }
    31. string sv::getten()        // tai sao return no
    32. {
    33.     return ten;
    34. }
    35. string sv::getho()            // day cung thế
    36. {
    37.     return hoten;
    38. }
    39.  
    40. int main()
    41. {
    42.     int n;
    43.     sv *sinhvien;
    44.     cout<<"Nhap so sinh vien:";
    45.     cin>>n;
    46.     sinhvien= new sv[n];
    47.     for(int i=0;i<n;i++)   
    48.     {
    49.         cin.ignore();
    50.         cout<<"Sinh vien "<<i+1<<": ";
    51.         sinhvien[i].nhap();
    52.     }
    53.     for(int i=0;i<n;i++)
    54.     {
    55.         for(int j=i+1;j<n;j++)
    56.         {
    57.             if(sinhvien[i].getten()>sinhvien[j].getten())
    58.             {
    59.                 sv tmp=sinhvien[i];
    60.                 sinhvien[i]=sinhvien[j];
    61.                 sinhvien[j]=tmp;
    62.             }
    63.             else
    64.             {
    65.                 if(sinhvien[i].getten()==sinhvien[j].getten())
    66.                 {
    67.                     if(sinhvien[i].getho()>sinhvien[j].getho())
    68.                     {
    69.                         sv tmp=sinhvien[i];
    70.                         sinhvien[i]=sinhvien[j];
    71.                         sinhvien[j]=tmp;
    72.                     }
    73.                 }
    74.             }
    75.         }
    76.     }
    77.     for(int i=0;i<n;i++)
    78.         sinhvien[i].in();
    79. }
    bài bạn viết dễ hiểu , nhưng còn nhiều điều mình thắc mắc quá , vd bạn dùng string , mình dùng kiểu char ten thì sao ???? bạn có thể cho mình cai y!h được không , để mình hỏi 1 vài điều còn khuất mắt chưa hiểu . tks

  7. #7
    Ngày gia nhập
    01 2013
    Bài viết
    1,477

    Trích dẫn Nguyên bản được gửi bởi hieurain Xem bài viết
    bài bạn viết dễ hiểu , nhưng còn nhiều điều mình thắc mắc quá , vd bạn dùng string , mình dùng kiểu char ten thì sao ???? bạn có thể cho mình cai y!h được không , để mình hỏi 1 vài điều còn khuất mắt chưa hiểu . tks
    char ten[].
    Dùng char* thì dùng hàm strcmp nhé.
    p/s: đã viết C++ thì dùng luôn string trong std cho thống nhất.

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

    Trích dẫn Nguyên bản được gửi bởi prog10 Xem bài viết
    char ten[].
    Dùng char* thì dùng hàm strcmp nhé.
    p/s: đã viết C++ thì dùng luôn string trong std cho thống nhất.
    quá hay , cũng như bài ở trên mình code thêm mã số sv la id , ko dc trùng nhau (nhập trùng bắt nhập lại), thì minh code thêm nhu thế nào bạn .
    Code:
    class sv
    {
    private:
    	int id;
    	char ten[30],kt[100];
    	float toan,ly,hoa,tong;
    public:
    .....
    void sv::nhap()
    	{		
    		cout<<"\tNhap ID SV : ";
    		cin>>id;
    		cout<<"\tNhap Ten SV : ";
    		cin.ignore();
    		cin.get(ten,50);
    		
    		cout<<"\tNhap Diem Mon Toan : ";
    		cin>>toan;
    		cout<<"\tNhap Diem Mon Ly : ";
    		cin>>ly;
    		cout<<"\tNhap Diem Mon Hoa : ";
    		cin>>hoa;
    		cout<<endl;
    	}
    
    
    	void sv::nhap_slsv(sv slsv[],int &n) // hàm này các bạn sửa dùm mình
    	{
    		cout<<"Nhap So Luong SV : ";
    		cin>>n;
    		cout<<endl;
    		for(int i=1;i<=n;i++)
    		{	
    			/*slsv[i].nhap();*/
    			for(int j=i+1;j<n;j++)
    			{
    				if(slsv[i].id==slsv[j].id)
    				{
    					cout<<"ban nhap trung ";
    					slsv[i].nhap();
    				}
    				else
    				{
    					slsv[i].nhap();
    				}
    			}
    		}
    		cout<<"\a";
    	}
    
    void main()
    {
    	sv a,slsv[10];
    	int n;
    	a.nhap_slsv(slsv,n);
    	a.xuat_slsv(slsv,n);
    }

  9. #9
    Ngày gia nhập
    03 2012
    Bài viết
    27

    Trích dẫn Nguyên bản được gửi bởi hieurain Xem bài viết
    bài bạn viết dễ hiểu , nhưng còn nhiều điều mình thắc mắc quá , vd bạn dùng string , mình dùng kiểu char ten thì sao ???? bạn có thể cho mình cai y!h được không , để mình hỏi 1 vài điều còn khuất mắt chưa hiểu . tks
    Y!M của mình là: doxuanthangvn

    Y!M: doxuanthangvn
    Skype: doxuanthangvnn
    Email: doxuanthang@hotmail.com

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

  1. Danh sách các địa chỉ chứa virus của tụi "sống chết theo lệnh" !
    Gửi bởi TQN trong diễn đàn Lập trình Virus & Anti-Virus
    Trả lời: 4
    Bài viết cuối: 22-04-2012, 08:41 AM
  2. Lập trình C++ "lớp dẫn xuất theo kiểu private" Giải thích giúp em
    Gửi bởi greenpeace2012 trong diễn đàn Thắc mắc lập trình C/C++/C++0x
    Trả lời: 3
    Bài viết cuối: 09-08-2011, 08:38 AM
  3. Database Làm việc với database theo phương thức "có kết nối" và "không có kết nối"
    Gửi bởi longtth trong diễn đàn Thắc mắc đại cương Database & Reporting
    Trả lời: 0
    Bài viết cuối: 05-08-2011, 02:36 AM
  4. Lập trình C++ khai báo biến "int" "float" khác nhau như thế nào? (giúp em gấp)
    Gửi bởi hacphieu trong diễn đàn Thắc mắc lập trình C/C++/C++0x
    Trả lời: 7
    Bài viết cuối: 02-04-2011, 10:57 AM
  5. chuyển xâu theo cấu trúc "ho...dem..ten" sang "ten...ho..dem"
    Gửi bởi hoangminh1190 trong diễn đàn Nhập môn lập trình C/C++
    Trả lời: 4
    Bài viết cuối: 15-01-2009, 07:16 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