Công cụ bảo vệ mã nguồn .NET mạnh nhất, không thể unpack, miễn phí cho các khách hàng đầu tiên đăng ký.
Từ 1 tới 7 trên tổng số 7 kết quả

Đề tài: Nhập Danh sách sinh viên, sắp xếp theo điểm của SV và in danh sách.

  1. #1
    Ngày gia nhập
    03 2013
    Nơi ở
    Quy Nhơn
    Bài viết
    4

    Wink Nhập Danh sách sinh viên, sắp xếp theo điểm của SV và in danh sách.

    Đề bài : Nhập vào danh sách n sinh viên , gồm Mã SV, Điểm Toán , Điểm Lý , Điểm Tin. Tính Điểm Trung Bình của mỗi sv. Sắp xếp danh sách sv theo thứ tự tăng của điểm Tin .In danh sách sắp xếp .
    Code:
    #include <stdio.h>
    #include <conio.h>
    #include <string.h>
    
    struct sinhvien 
    { 
           char masv[4];
           float dtoan,dly,dtin,dtb;
           
           
    };
    
    struct dssv
    {
           struct sinhvien pt[100];
           int sosv;
    };
    
    
    void nhapsv (struct sinhvien *t)
    {    
          fflush(stdin);
          printf("Nhap ma sv:");
          scanf("%s",&t->masv);
          printf("Nhap diem toan:");
          scanf("%f",&t->dtoan);
          printf("Nhap diem ly:");
          scanf("%f",&t->dly);
          printf("Nhap diem tin:");
          scanf("%f",&t->dtin);    
          t->dtb=(t->dtoan+t->dly+t->dtin)/3;
          
    } 
    
    void nhapds (struct dssv *l)
    {int i;
          printf("so sv:");
          scanf("%d",&l->sosv);
          for (i=0;i<l->sosv;i++)
          nhapsv(&l->pt[i]);
    }
    
    void xuatds (struct dssv l)
    {int i; 
         printf("%-6s%-10s%-10s%-10s%-10s\n","MSV","DIEM TOAN","DIEM LY","DIEM TIN","DIEM TB");
         for(i=0;i<l.sosv;i++)
         printf("%-6s%-10f%-10f%-10f%-10f\n",l.pt[i].masv,l.pt[i].dtoan,l.pt[i].dly,l.pt[i].dtin,l.pt[i].dtb);
    }     
    
    void sxtang(struct dssv l)
    {int i,j,tg;
         for (i=0;i<l.sosv-1;i++) {
             for (j=i+1;j<l.sosv;j++)
              if (l.pt[i].dtin>l.pt[j].dtin)
               { tg=l.pt[i].dtin;
                 l.pt[i].dtin=l.pt[j].dtin;
                 l.pt[j].dtin=tg;}
             }   
          printf("%-6s%-6s%-10s\n","STT","MSV","DTIN");   
          for (i=0;i<l.sosv;i++)
          printf ("%-6d%-6s%-10f\n" ,i+1,l.pt[i].masv,l.pt[i].dtin);    
    }
                       
      
           
    int main()
    { struct dssv a; int i;
      char s[40];
      nhapds (&a);
      xuatds(a);
      sxtang(a);
    getch();
    return 0;
    }
    Thuật toán mình sắp xếp đúng , mà khi in Mã SV ra bị sai , nó ko khớp với điểm của SV đó sau khi sắp xếp.
    Các bạn test và sửa giúp mình với ^^
    Công cụ bảo vệ mã nguồn .NET mạnh nhất hiện tại, miễn phí cho các khách hàng đầu tiên đăng ký.

  2. #2
    Ngày gia nhập
    02 2013
    Bài viết
    15

    Trích dẫn Nguyên bản được gửi bởi ltqqn93 Xem bài viết
    Đề bài : Nhập vào danh sách n sinh viên , gồm Mã SV, Điểm Toán , Điểm Lý , Điểm Tin. Tính Điểm Trung Bình của mỗi sv. Sắp xếp danh sách sv theo thứ tự tăng của điểm Tin .In danh sách sắp xếp .
    Code:
    #include <stdio.h>
    #include <conio.h>
    #include <string.h>
    
    struct sinhvien 
    { 
           char masv[4];
           float dtoan,dly,dtin,dtb;
           
           
    };
    
    struct dssv
    {
           struct sinhvien pt[100];
           int sosv;
    };
    
    
    void nhapsv (struct sinhvien *t)
    {    
          fflush(stdin);
          printf("Nhap ma sv:");
          scanf("%s",&t->masv);
          printf("Nhap diem toan:");
          scanf("%f",&t->dtoan);
          printf("Nhap diem ly:");
          scanf("%f",&t->dly);
          printf("Nhap diem tin:");
          scanf("%f",&t->dtin);    
          t->dtb=(t->dtoan+t->dly+t->dtin)/3;
          
    } 
    
    void nhapds (struct dssv *l)
    {int i;
          printf("so sv:");
          scanf("%d",&l->sosv);
          for (i=0;i<l->sosv;i++)
          nhapsv(&l->pt[i]);
    }
    
    void xuatds (struct dssv l)
    {int i; 
         printf("%-6s%-10s%-10s%-10s%-10s\n","MSV","DIEM TOAN","DIEM LY","DIEM TIN","DIEM TB");
         for(i=0;i<l.sosv;i++)
         printf("%-6s%-10f%-10f%-10f%-10f\n",l.pt[i].masv,l.pt[i].dtoan,l.pt[i].dly,l.pt[i].dtin,l.pt[i].dtb);
    }     
    
    void sxtang(struct dssv l)
    {int i,j,tg;
         for (i=0;i<l.sosv-1;i++) {
             for (j=i+1;j<l.sosv;j++)
              if (l.pt[i].dtin>l.pt[j].dtin)
               { tg=l.pt[i].dtin;
                 l.pt[i].dtin=l.pt[j].dtin;
                 l.pt[j].dtin=tg;}
             }   
          printf("%-6s%-6s%-10s\n","STT","MSV","DTIN");   
          for (i=0;i<l.sosv;i++)
          printf ("%-6d%-6s%-10f\n" ,i+1,l.pt[i].masv,l.pt[i].dtin);    
    }
                       
      
           
    int main()
    { struct dssv a; int i;
      char s[40];
      nhapds (&a);
      xuatds(a);
      sxtang(a);
    getch();
    return 0;
    }
    Thuật toán mình sắp xếp đúng , mà khi in Mã SV ra bị sai , nó ko khớp với điểm của SV đó sau khi sắp xếp.
    Các bạn test và sửa giúp mình với ^^
    trong hàm sắp xếp bạn chưa hoán vị mã số bạn mới chỉ hoán vị điểm tin->thêm hoán vị mssv nữa

  3. #3
    Ngày gia nhập
    03 2013
    Nơi ở
    Quy Nhơn
    Bài viết
    4

    cụ thế là thêm 1 biến để hoán vị masv nữa hả bạn .

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

    Tại sao không swap 2 struct với nhau nhỉ?

  5. #5
    Ngày gia nhập
    02 2013
    Bài viết
    15

    Trích dẫn Nguyên bản được gửi bởi ltqqn93 Xem bài viết
    cụ thế là thêm 1 biến để hoán vị masv nữa hả bạn .
    uh bạn phải swap masv nữa

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

    Mặc định Nhập Danh sách sinh viên, sắp xếp theo điểm của SV và in danh sách.

    Trích dẫn Nguyên bản được gửi bởi prog10 Xem bài viết
    Tại sao không swap 2 struct với nhau nhỉ?
    đồng ý với ý kiến của bạn :
    vd :
    C++ Code:
    1.       sinhvien temp;
    2.       temp = a[i];
    3.       a[i] = a[j];
    4.       a[j] = temp;
    còn code của bạn chỉ hoán vị điểm tin với nhau thôi, cách của bạn cũng được nhưng dài dòng và phải hoán vị tất cả các dữ liệu cho nhau bạn ạ

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

    Trích dẫn Nguyên bản được gửi bởi vipnho0209 Xem bài viết
    đồng ý với ý kiến của bạn :
    vd :
    C++ Code:
    1.       sinhvien temp;
    2.       temp = a[i];
    3.       a[i] = a[j];
    4.       a[j] = temp;
    còn code của bạn chỉ hoán vị điểm tin với nhau thôi, cách của bạn cũng được nhưng dài dòng và phải hoán vị tất cả các dữ liệu cho nhau bạn ạ
    Chỉ swap đc struct thôi, còn class hình như phải tự định nghĩa lại phép gán nó mới hiểu
    Công cụ bảo vệ mã nguồn .NET mạnh nhất hiện tại, miễn phí cho các khách hàng đầu tiên đăng ký.

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

  1. Bài tập C nhập vào tên sinh viên gồm.và sắp xếp tên sinh viên tăng dần theo danh sách đả nhập
    Gửi bởi nghiapro2589 trong diễn đàn Nhập môn lập trình C/C++
    Trả lời: 1
    Bài viết cuối: 26-05-2013, 08:23 AM
  2. Mã nguồn C Lỗi Nhập và in ra danh sách sinh viên theo kiểu Việt Nam.
    Gửi bởi ducbka02 trong diễn đàn Nhập môn lập trình C/C++
    Trả lời: 0
    Bài viết cuối: 28-02-2013, 09:10 PM
  3. Lập trình C++ Cấu trúc sinh viên theo danh sách liên kết --Phần nhập dữ liệu bị treo?
    Gửi bởi bulubuloa 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: 03-11-2011, 10:27 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. Danh sách liên kết, code nhập danh sách sinh viên có lỗi làm sao sửa?
    Gửi bởi acmilan trong diễn đàn Thắc mắc lập trình C/C++/C++0x
    Trả lời: 1
    Bài viết cuối: 10-04-2009, 08:24 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