Trang 1 trên tổng số 2 12 Cuối cùngCuối cùng
Từ 1 tới 10 trên tổng số 14 kết quả

Đề tài: [c] Sắp xếp theo điểm sinh viên

  1. #1
    Ngày gia nhập
    03 2007
    Bài viết
    10

    Mặc định [c] Sắp xếp theo điểm sinh viên

    các bạn có thể chỉ giúp cho mình cái hàm để sắp xếp sinh viên theo điểm và xếp hạng(từ cao đến thấp) được ko.xim cám ơn.

  2. #2
    Ngày gia nhập
    01 2007
    Bài viết
    412

    Trích dẫn Nguyên bản được gửi bởi dragoncl12 Xem bài viết
    các bạn có thể chỉ giúp cho mình cái hàm để sắp xếp sinh viên theo điểm và xếp hạng(từ cao đến thấp) được ko.xim cám ơn.
    Bạn nói chung chung quá, bạn có thể nói rõ đề bài hơn 1 chút được không, điểm thì cũng phải có điểm toán,lý,hóa,gì gì đó, xếp hạng thì gồm những hạng nào.
    Về vấn đề sắp xếp, có rất nhiều giải thuật, và những cái này đã được đề cập rất nhiều trong diễn đàn. Bạn nên search để biết thêm chi tiết.

  3. #3
    Ngày gia nhập
    03 2007
    Bài viết
    10

    à là như vầy: nhập vào danh sách n sinhviên: tên,họ,ngàysinh,điểm,giới tính và in ra danh sách sinhviên,sau đó in ra sinh viên nào có số điểm(vidụ: 9) cao nhất và xếp hạng sinh viên đứng 1,2,3...

  4. #4
    Ngày gia nhập
    10 2006
    Nơi ở
    In Your Bugs
    Bài viết
    823

    Uhm Hàm nhập và xuất chắc dragon làm được rồi nhỉ ?
    Còn xuất ra sinh viên cao nhất thì kidkid có nghĩ thế này :

    Đầu tiên U kiếm thằng có số điểm cao nhất , cái này thì dễ rồi .
    Sau đó duyệt qua tất cả các phần tử thằng nào có số điểm bằng thằng cao nhất thì in ra , như vậy là in được các sinh viên có số điểm cao nhất rồi .

    Còn về việc xếp hạng kidkid tạm thời chưa nghĩ ra được cách nào hay , còn cách dở thì thế này . Những thằng cao nhất thì gán là 1 , rồi loại nó ra , tiếp tục tìm những thằng tiếp theo và gán là 2 , như thế là duyệt đến cuối , cách này thì chắc chắn được chỉ có điều dở quá , chú ráng nghĩ cách mô hay hơn nhé

  5. #5
    No Avatar
    phamtuananh Khách

    Chắc ý của bạn là tìm kiếm sau đó in ra rồi có phải không?
    Dùng thuật toán tìm kiếm tuyến tính đi cho đơn giản.
    còn nếu bạn giỏi hơn thì bạn dùng tìm kiếm nhị phân(phải sắp xếp theo thứ tự trước rồi mới dùng thuật toán này dc).
    Trong cuốn cấu trúc dữ liệu tập 1 có hướng dẫn hai thuật toán này chi tiết lắm!

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

    Mặc định [c] Sắp xếp theo điểm sinh viên

    Trích dẫn Nguyên bản được gửi bởi dragoncl12 Xem bài viết
    à là như vầy: nhập vào danh sách n sinhviên: tên,họ,ngàysinh,điểm,giới tính và in ra danh sách sinhviên,sau đó in ra sinh viên nào có số điểm(vidụ: 9) cao nhất và xếp hạng sinh viên đứng 1,2,3...
    Hi, có lẽ bài này bạn dùng mảng có kiểu cấu trúc, theo như đề bài thì bạn có cấu trúc sau:
    Code:
    struct HoSo
    {
       char ten[15];
       char ho[10];
       NgayThang ngaysinh; //ngaysinh có kiểu cấu trúc ngày,tháng,năm
       float diem;
       int gioitinh; //1 là nam,0 là nữ
    }
    Nhưng vì bạn cần xếp hạng học sinh,nên mình nghĩ bạn nên thêm 1 thuộc tính hang (kiểu int) trong cấu trúc nêu trên. Lưu ý: lúc cho nhập hồ sơ của n sinh viên, bạn không cần phải nhập hạng.
    Sau khi đã nhập đầy đủ hồ sơ rồi, bạn tiến hành sắp xếp lại mảng cấu trúc theo thứ tự giảm dần (hoặc tăng dần tùy bạn).
    Giả sử mình có mảng cấu trúc: HoSo hs[100]; và dùng Bubble Sort để sắp xếp mảng này theo thứ tự tăng dựa trên chỉ số so sánh là thuộc tính diem
    Code:
    for(int i=0;i<n-1;i++)
      for (int j=i+1;j<n;j++)
            if (hs[i].diem<hs[j].diem) HoanVi(hs[i].diem,hs[j].diem);
    Hê, bây giờ bạn thừa biết như thế nào rồi đó, phần tử đầu tiên của mảng chứa học sinh có điểm số cao nhất ^ ^
    Ok,xong bước 1,bây giờ tới vụ xếp hạng, bạn chỉ cần dùng vòng lặp là ra được hạng của học sinh
    Code:
    for(int i=0;i<n;i++)
         hs[i].hang=i+1;
    Bây giờ, công việc còn lại của bạn là in ra màn hình thôi, cái này thì bạn tự lo nhé, tất nhiên là bạn có thể cải tiến chương trình của bạn hơn những gì mình đã nói.

  7. #7
    Ngày gia nhập
    01 2007
    Bài viết
    412

    Ấy chết, ở trên mình ghi lộn hàm Bubble Sort, mình sửa lại nhé
    Code:
    for(int i=0;i<n-1;i++)
      for (int j=i+1;j<n;j++)
            if (hs[i].diem<hs[j].diem) HoanVi(hs[i],hs[j]);

  8. #8
    Ngày gia nhập
    03 2007
    Bài viết
    10

    mình làm theo ý tưởng mà các bạn đã viết,nhưng lúc làm xong thì nó in ra lại không khớp với tên ,như nó chỉ có sắp xếp số điểm từ cao đến thấp mà thôi,tên nó không theo cùng.
    vi dụ:
    inds :tên điểm saukhisapxếp: tên điểm

    Bao 8.00 Bao 9.00
    Doan 7.00 Doan 8.00
    Dung 6.00 Dung 7.00
    Minh 9.00 Minh 6.00

    các bạn giúp sữa lại lỗi này nhé.

  9. #9
    Ngày gia nhập
    01 2007
    Bài viết
    412

    Hey, bạn thử post code bài đó lên lại coi nào, chứ ghi kết quả không thì khó mà debug lắm.

  10. #10
    Ngày gia nhập
    03 2007
    Bài viết
    10

    C Code:
    1. #include <stdio.h>
    2. #include <conio.h>
    3. #include <string.h>
    4.  
    5. typedef struct
    6. {
    7.     char ho[20];
    8.     char ten[20];
    9.     char ngsinh[20];
    10.     int gt;
    11.     float diem;
    12. }sv;
    13.    void nhap(sv &x);
    14. void in(sv x);
    15. void nhapds(int &n,sv a[]);
    16. void inds(int n,sv a[]);
    17. char *laythang(char *x);
    18. void indst4(int n,sv a[]);
    19.  
    20. void xephang(int n,sv a[]);
    21.  
    22. void main()
    23. {
    24.     clrscr();
    25.     sv x;
    26.     sv u[20];
    27.     int n;
    28.      // nhap(x);
    29.      // in(x);
    30.     nhapds(n,u);
    31.    inds(n,u);
    32.   //   printf ("\n sv sinh ngay 26/3");
    33.   //   indst4(n,u);
    34.    printf ("\n sv duoc sap xep diem cao nhat la");
    35.      xephang(n,u);
    36.      inds(n,u);
    37. getch();
    38. }
    39. void nhap(sv &x)
    40. {
    41.     fflush(stdin);
    42.     printf ("\n nhap ho:");
    43.     gets(x.ho);
    44.     printf ("\n nhap ten:");
    45.     gets(x.ten);
    46.     fflush(stdin);
    47.     printf ("\n nhap ngsinh");
    48.     gets(x.ngsinh);
    49.  
    50.     float t;
    51.     printf ("\n nhap diem:");
    52.     scanf ("%f",&t);
    53.     x.diem=t;
    54.     printf ("\n nhap gioi tinh 1/0(nam/nu):");
    55.     scanf ("%d",&x.gt);
    56. }
    57. void in(sv x)
    58. {
    59.     printf ("\n  %s %5s %10s  %5.2f ",x.ho,x.ten,x.ngsinh,x.diem);
    60.     (x.gt==1)? printf (" nam") : printf (" nu");
    61. }
    62. void nhapds(int &n,sv a[])
    63. {
    64.     int i;
    65.     printf ("\n nhap siso sinh vien:");
    66.     scanf ("%d",&n);
    67.     for (i=0;i<n;i++)
    68.     nhap(a[i]);
    69.  
    70. }
    71. void inds(int n,sv a[])
    72. {
    73.     int i;
    74.     for (i=0;i<n;i++)
    75.     in(a[i]);
    76. }
    77. char *laythang(char *x)
    78. {
    79.     char *t;
    80.     t[0]=x[0];
    81.     t[1]=x[1];
    82.     t[2]=x[3];
    83.     t[3]=x[4];
    84.  
    85.     t[4]='\0';
    86.     return t;
    87. }
    88. void indst4(int n,sv a[])
    89. {
    90.     char t[9];
    91.     t[0]='2';
    92.     t[1]='6';
    93.     t[2]='0';
    94.     t[3]='3';
    95.     t[4]='\0';
    96.     int p;
    97.     for (int i=0;i<n;i++)
    98.     {
    99.        p=strcmp(laythang(a[i].ngsinh),t);
    100.      if (p==0)
    101.      in(a[i]);
    102.      }
    103.      }
    104.  
    105.  
    106. void xephang(int n,sv a[])
    107. {
    108.     int i,j,hoandoi;
    109.     for (i=0;i<n-1;i++)
    110.     for (j=i+1;j<n;j++)
    111.         if (a[i].diem<a[j].diem)
    112.     {
    113.        hoandoi=a[i].diem,a[i].diem=a[j].diem,a[j].diem=hoandoi;
    114.        }
    115.        
    116. }

    mình ko bít gửi code,mình gửi bài lên rồi các bạn thử chạy xem sao nhé.
    Đã được chỉnh sửa lần cuối bởi dragoncl12 : 15-04-2007 lúc 09:12 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. Bài tập C Hàm struct , tìm kiếm sinh viên theo mã sinh viên
    Gửi bởi doxuanly trong diễn đàn Nhập môn lập trình C/C++
    Trả lời: 5
    Bài viết cuối: 12-11-2012, 05:15 PM
  3. 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
  4. Sắp xếp sinh viên theo tổng diểm bằng C++
    Gửi bởi nguyenthanhhai90vp trong diễn đàn Nhập môn lập trình C/C++
    Trả lời: 1
    Bài viết cuối: 10-09-2010, 04:27 PM
  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