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

Đề tài: bài tập khó sắp xếp mảng sinh viên

  1. #1
    Ngày gia nhập
    09 2011
    Bài viết
    0

    Mặc định bài tập khó sắp xếp mảng sinh viên

    Code:
    #include<stdio.h> 
    #include<conio.h> 
    #include<string.h> 
    #include<malloc.h> 
    //ham 
    //ham nhap 
    void read(char **s,int n) 
                { 
                    int i; 
                    for (i=0;i<n;i++) 
                        { 
                            s[i]=(char *)calloc(40,sizeof(char)); 
                            printf("\n nhap sv thu %d : ",i);fflush(stdin);gets(s[i]); 
                        } 
                     
                } 
      //ham copy 
    char *copy(char *s,int vt,int cd) 
            { 
                int i,j; 
                char *st; 
                st=(char*)calloc(40,sizeof(char)); 
                i=vt; 
                j=0; 
                if(vt>=0) 
                    { 
                        while(j<cd) 
                            { 
                                st[j++]=s[i++]; 
                            } 
                            st[cd]='\0'; 
                                           
                    } 
                    return(st);  
            } 
     //ham lay ho 
     char *ho(char *s) 
                { 
                    int i,vt,cd; 
                    char *c; 
                    c=(char *)calloc(40,sizeof(char)); 
                    for (i=0;i<strlen(s);i++) 
                        { 
                            if (s[i]==' ') 
                                { 
                                    if (i!=0) 
                                    { 
                                        c=copy(s,0,i); 
                                    return c; 
                                   } 
                                }   
                        } 
                        
                } 
     //ham lay ten 
     char *ten(char *s) 
                { 
                    int n=strlen(s); 
                    int j,vt,cd; 
                    char *c; 
                    c=(char *)calloc(40,sizeof(char)); 
                    for (j=n-1;j>=0;j--) 
                        { 
                            if (s[j]==' ') 
                                { 
                                    cd=n-j; 
                                    c=copy(s,j+1,cd); 
                                    return c; 
                                } 
                        } 
                } 
      //ham dem 
      char *dem(char *s)  
                { 
                    char *c; 
                    c=(char *)calloc(40,sizeof(char)); 
                    int a=strlen(ho(s)); 
                    int b=strlen(ten(s)); 
                    int cd=strlen(s)-b-a-2;//chieu dai cua giua = chieu dai chuoi-cd dau-cd duoi-2 khoang trang 
                    c=copy(s,a+1,cd); 
                    return c; 
                } 
     //xuat ra man hinh 
    void write(char **s,int n) 
                { 
                    int i; 
                    for (i=0;i<n;i++) 
                        { 
                            puts(s[i]);     
                        }         
                }                             
    //ham sx 
    void sx(char **s,int n) 
            { 
                int i,j; 
                int a,b; 
                int c,d; 
                char *t; 
                t=(char *)calloc(40,sizeof(char)); 
                for (i=0;i<n-1;i++) 
                for (j=i+1;j<n;j++) 
                    { 
                        if(strcmp(ten(s[i]),ten(s[j]))>0) 
                            { 
                                strcpy(t,s[i]); 
                                strcpy(s[i],s[j]); 
                                strcpy(s[j],t); 
                            } 
                          if(strcmp(ten(s[i]),ten(s[j]))==0) 
                            { 
                            
                                    if(strcmp(ho(s[i]),ho(s[j]))>0) 
                                        { 
                                        strcpy(t,s[i]); 
                                        strcpy(s[i],s[j]); 
                                        strcpy(s[j],t); 
                                        } 
                                   
                             } 
                           if(strcmp(ten(s[i]),ten(s[j]))==0 && strcmp(ho(s[i]),ho(s[j]))==0) 
                            { 
                            
                                    if(strcmp(dem(s[i]),dem(s[j]))>0) 
                                        { 
                                        strcpy(t,s[i]); 
                                        strcpy(s[i],s[j]); 
                                        strcpy(s[j],t); 
                                        } 
                                   
                             }         
                    }              
                                
                   
        }         
    //ham xuat 
    //ct chinh 
    int main() 
            { 
                char **s; 
                s=(char **)calloc(100,sizeof(char *)); 
                int n; 
                printf("nhap so sinh vien :  ");scanf("%d",&n); 
                read(s,n); 
                sx(s,n); 
                printf("\n day sau khi sx : "); 
                write(s,n); 
                getch(); 
                return 0; 
            }
    đề là sắp xếp 1 danh sách sinh viên theo tên,nếu tên trùng thì đến chữ lót nếu chữ lót trùng thì đến họ,sắp xếp theo bảng chữ cái a,b,c

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

    Thế này nhé
    C++ Code:
    1. int FullnameCompare(char *name1,char *name2)
    2. {
    3.     if (int first=strcmpi(ten(name1),ten(name2)) )//Nếu tên khác nhau
    4.        return first;  // return kết quả đấy
    5.     else if (int last=strcmpi(ho(name1),ho(name2))) // Đối xử họ tương tự như tên
    6.        return last;
    7.     else
    8.        return strcmpi(dem(name1),dem(name2));
    9. // Kết quả : Hàm nay trả về <0 , tức name1 < name2
    10. // >0 thì name1 >name2
    11. // =0 thì 2 name =nhau
    12. }
    Đã được chỉnh sửa lần cuối bởi clchicken : 16-11-2011 lúc 12:05 PM.

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. Hà Nội.Sao mai soft -Tuyển sinh viên thực tập C#,C++,JAVA - nhóm sinh viên tiềm năng
    Gửi bởi kimbap trong diễn đàn Tuyển dụng - Việc làm CNTT
    Trả lời: 1
    Bài viết cuối: 26-09-2011, 09:49 AM
  3. Quản lí sinh viên bằng stack dùng danh sách liên kết. Làm sao để nhập nhiều sinh viên?
    Gửi bởi hoainamken 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: 24-08-2011, 10:34 AM
  4. 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
  5. Chương trình quản lý sinh viên viết bằng C. Làm sao tìm kiếm sinh viên theo tên và sắp xếp?
    Gửi bởi linhdong24 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: 24-06-2009, 12:53 AM

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