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

Đề tài: lỗi code sắp xếp phân đoạn cho dãy sinh viên theo chiều giảm dần của điểm tổng kết

  1. #1
    Ngày gia nhập
    05 2011
    Nơi ở
    Hanoi, Vietnam, Vietnam
    Bài viết
    114

    Mặc định lỗi code sắp xếp phân đoạn cho dãy sinh viên theo chiều giảm dần của điểm tổng kết

    Mọi người có thể sửa cho mình code này đc ko?
    sắp xếp sinh vien theo chiều giảm dần của điểm trung bình bằng pp săp xếp phân đoạn
    chỉ luôn cho mình cách sắp xếp bằng pp vun đống và pp trộn
    tks.
    Code:
    #include<conio.h>
    #include<stdio.h>
    #include<iostream.h>
    #include<iomanip.h>
    #define max 100
    struct sinhvien
    {
    	char masv[10];
    	char hodem[20];
    	char ten[10];
    	int namsinh;
    	char gioitinh[10];
    	float dtk;
    };
    struct List{
    	int count;
    	sinhvien E[max];
    };
    List L;
    void creat(List &L)
    {
    	L.count=-1;
    }
    int empty (List L)
    {
    	return(L.count==-1);
    }
    int full(List L)
    {
    	return(L.count==max-1);
    }
    int add(List &L, sinhvien x)
    {
    	if(full(L))
    	return 0;
    	else
    	{
    		L.count++;
    		L.E[L.count]=x;
    		return 1;
    	}
    }
    void nhapsv(sinhvien &sv)
    {
    	cout<<"Ma sinh vien:";fflush(stdin);gets(sv.masv);
    	cout<<"Ho dem:";fflush(stdin);gets(sv.hodem);
    	cout<<"Ten:";fflush(stdin);gets(sv.ten);
    	cout<<"Gioi tinh:";fflush(stdin);gets(sv.gioitinh);
    	cout<<"Nam sinh:";cin>>sv.namsinh;
    	cout<<"Diem tong ket:";cin>>sv.dtk;
    }
    void nhapmoi(List &L)
    {
    	creat(L);
    	sinhvien x;
    	int n;
    	cout<<"Nhap so luong sinh vien:";cin>>n;
    	for(int i=0;i<n;i++)
    	{
    	cout<<"Nhap sinh vien thu "<<(i+1)<<endl;
    	nhapsv(x);
    	add(L,x);
    	}	
    }
    void hienthi(List L)
    {
    	cout<<setw(5)<<"STT";
    	cout<<setw(10)<<"Ma SV";
    	cout<<setw(15)<<"Ho Dem";
    	cout<<setw(15)<<"Ten";
    	cout<<setw(10)<<"Nam sinh";
    	cout<<setw(10)<<"GIoi tinh";
    	cout<<setw(10)<<"DTK"<<endl;
    	for(int i=0;i<=L.count;i++)
    	{
    	cout<<setw(5)<<(i+1);
    	cout<<setw(10)<<L.E[i].masv;
    	cout<<setw(15)<<L.E[i].hodem;
    	cout<<setw(15)<<L.E[i].ten;
    	cout<<setw(10)<<L.E[i].namsinh;
    	cout<<setw(10)<<L.E[i].gioitinh;
    	cout<<setw(10)<<L.E[i].dtk<<endl;
    	}
    }
    void quick_soft(int L,int left ,int right)
    {
    	if(left<right)
    	{
    		int i=left;
    		int j=right;
    		int k=(left+right)/2;
    		int t=L.E[k];
    		while(i<=j);
    		{
    			while(L.E[i]<t)i++;
    			while(L.E[i]>t)j--;
    			if(i<=j)
    			{
    				int tg=L.E[i];
    				L.E[i]=L.E[j];
    				L.E[j]=tg;
    				i++;
    				j--;
    			}
    		}
    		quick_sort(L,left,j);
    		quick_sort(L,i,right);
    	}
    }
    void main()
    {
    	List L;
    	nhapmoi(L);
    	sinhvien (x);
    	hienthi(L);
    	quick_soft(L,right,left);
    	hienthi(L);	
    	getch();
    }
    Đã được chỉnh sửa lần cuối bởi snoit : 14-11-2011 lúc 09:27 PM.

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

    Hàm quick_soft (quick_sort chứ nhỉ @@) của bạn, tham số đầu tiên là kiểu int, trong khi trong hàm main, tham số đầu tiên của bạn lại có kiểu dữ liệu List nên không chạy được.
    Để giải bài toán này, có thể sử dụng hàm thư viên qsort trong thư viện STL của C++ (tham khảo thêm http://www.cplusplus.com/reference/clibrary/cstdlib/qsort/)
    Đương nhiên sử dụng hàm qsort của STL, bạn cần có kiến thức về con trỏ hàm cũng như cách viết lại hàm comp trong tham số thứ 4 của hàm thư viên qsort.
    Một cách giải quyết khác, hãy cố gắng trừu tượng hoá (sử dụng template để cài đặt) hàm quick_sort để sắp xếp được đối với mọi kiểu dữ liệu.
    Code của bạn thì có thể sửa lại như sau:

    void quick_soft(List L,int left ,int right)
    {
    if(left<right)
    {
    int i=left;
    int j=right;
    int k=(left+right)/2;
    int t=L.E[k].dtk;
    while(i<=j);
    {
    while(L.E[i].dtk<t)i++;
    while(L.E[i].dtk>t)j--;
    if(i<=j)
    {
    int tg=L.E[i];
    L.E[i]=L.E[j];
    L.E[j]=tg;
    i++;
    j--;
    }
    }
    quick_sort(L,left,j);
    quick_sort(L,i,right);
    }
    }
    Mình chưa test thử, bạn chạy thử xem

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

  1. làm sao để select sinh viên theo mã sinh viên trong 1 chuỗi mã sinh viên
    Gửi bởi thuan trong diễn đàn Thắc mắc Microsoft SQL Server & Microsoft Access
    Trả lời: 11
    Bài viết cuối: 14-12-2012, 08:37 PM
  2. Chương trình quản lí sinh viên viết trong visual c++ 2010. Lỗi không chạy khi in danh sách sinh viên theo năm
    Gửi bởi hikaru1015 trong diễn đàn Thảo luận, góp ý code C/C++ của bạn
    Trả lời: 9
    Bài viết cuối: 03-06-2011, 09:31 AM
  3. Code sắp xếp thứ tự sinh viên theo vần ABC trong SQL?
    Gửi bởi hoangmanhtung23 trong diễn đàn Thắc mắc Microsoft SQL Server & Microsoft Access
    Trả lời: 4
    Bài viết cuối: 01-05-2011, 03:46 PM
  4. Ý tưởng và giải thuật in sinh viên theo MSSV nằm trong file nhi phân?
    Gửi bởi mysoul trong diễn đàn Nhập môn lập trình C/C++
    Trả lời: 3
    Bài viết cuối: 03-04-2011, 11:02 AM
  5. Sắp xếp theo thứ tự giảm dần của điểm thi trong bài toán Quản lý sinh viên
    Gửi bởi chjecla_ 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: 23-09-2010, 06:55 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