Bài tập Cấu trúc dữ liệu và Giải thuật (C++)

/********************************************************************************
Bài tập (quản lý sinh viên, sử dụng MẢNG cấu trúc): Viết các hàm thực hiện
- Nhập vào danh sách có n sinh viên (2<n<20), thông tin sinh viên gồm:
  + Họ tên
  + Địa chỉ
  + Năm sinh
  + Giới tính
  + Lớp
  + Điểm: TCC(hs 3), TA(hs 4), TDC(hs 5)
- Tính điểm trung bình
- Đếm số sinh viên có điểm trung bình >= 8
- Đếm số sinh viên có điểm trung bình  < 5
- In tên sinh viên có điểm trung bình cao nhất
- Xếp loại cho sinh viên
- In danh sách sinh viên đã xếp loại
- Sắp xếp danh sách sinh viên theo thứ tự tăng dần của điểm tb
******************************************************************/




[Code Turbo C++]
/**********************************
  http://www.tailieucntt.org
**********************************/
#include<iostream.h>
#include<conio.h>
#include<stdio.h>
#include<string.h>
#include<stdlib.h>
#include<math.h>


// khai bao
struct SV{
 char ht[30], dc[50],gioitinh[3],lop[10],xepLoai[10];
 int namSinh;
  float dTCC, dTA,dTDC,dTB;
};

SV a[20];
int n;// so sinh vien

// Nhap thong tin sinh vien
void Nhap(){

 // nhap so sinh vien
 do{
  cout<<"\n Nhap so sinh vien: "; cin>>n;
  if(n<2||n>20) cout<<"\n Nhap lai so sinh vien";
 }while(n<2||n>20);
 // Nhap thong tin sinh vien

 cout<<"\n Nhap thong tin sinh vien: ";
 for(int i=0;i<n;i++)
  {
   fflush(stdin);
   cout<<"\n + Nhap thong tin co sinh vien thu "<<i+1<<": ";
   cout<<"\n - Ho ten: "; gets(a[i].ht);
   cout<<"\n - Dia chi: "; gets(a[i].dc);
  cout<<"\n - Gioi tinh: "; gets(a[i].gioitinh);
   cout<<"\n - Lop: "; gets(a[i].lop);
   cout<<"\n - Nam sinh: "; cin>>a[i].namSinh;
   cout<<"\n - Diem toan cao cap: "; cin>>a[i].dTCC;
   cout<<"\n - Diem toan tieng anh: "; cin>>a[i].dTA;
   cout<<"\n - Diem tin dai cuong: "; cin>>a[i].dTDC;
  }
}

// Tinh diem tong ket
void TinhDiem(){

 for(int i=0;i<n;i++)
  a[i].dTB=((a[i].dTCC)*3+(a[i].dTA)*4+(a[i].dTDC)*5)/12;
}

// Dem so sinh vien co diem tb>=8
void DemDTB_LonHon8(){

 int dem=0;
 for(int i=0;i<n;i++)
  if(a[i].dTB>=8) dem++;
 cout<<"\n * So sinh vien co diem trung binh >= 8: "<<dem;
}

// Dem so sinh vien co diem tb<5
void DemDTB_NhoHon5(){
 int dem=0;
 for(int i=0;i<n;i++)
  if(a[i].dTB<5) dem++;
 cout<<"\n * So sinh vien co diem trung binh < 5: "<<dem;
}

// Tim sinh vien co diem cao nhat
void InSV_max(){
 float max=a[0].dTB;
 for(int i=0;i<n;i++)
  if (max<a[i].dTB) { max=a[i].dTB;
 // in sinh vien max
 cout<<"\n * Ten sinh vien co diem cao nhat: ";
 for(i=0;i<n;i++)
  if(max==a[i].dTB) cout<<"\n +"<<a[i].ht;
}

// Xep loai cho sinh vien
void XepLoai(){
 for(int i=0;i<n;i++)
  {
 if (a[i].dTB<4) strcpy(a[i].xepLoai,"Truot");
 else  if (a[i].dTB<5.5) strcpy(a[i].xepLoai,"Trung binh");
  else  if (a[i].dTB<7) strcpy(a[i].xepLoai,"Trung binh kha");
   else  if (a[i].dTB<8.5) strcpy(a[i].xepLoai,"Kha");
    else  strcpy(a[i].xepLoai,"Gioi");
  }
}
// In danh sach sinh vien
void InDS(){
 cout<<"\n * In danh sach sinh vien da xep loai:";
 for(int i=0;i<n;i++)
  cout<<"\n - "<<a[i].ht<<"\t - "<<a[i].xepLoai;
}


// doi cho
void DoiCho(SV &a, SV &b){
 char tht[30],tdc[50],tgioitinh[5],tlop[10],dxl[10];
 int tns;
 float tdtcc,tdta,tdtdc,tdtb;
 strcpy(tht,a.ht);
 strcpy(a.ht,b.ht);
 strcpy(b.ht,tht);

 strcpy(tdc,a.dc);
 strcpy(a.dc,b.dc);
 strcpy(b.dc,tdc);

 strcpy(tgioitinh,a.gioitinh);
 strcpy(a.gioitinh,b.gioitinh);
 strcpy(b.gioitinh,tgioitinh);

 strcpy(tlop,a.lop);
 strcpy(a.lop,b.lop);
 strcpy(b.lop,tlop);

 strcpy(dxl,a.xepLoai);
 strcpy(a.xepLoai,b.xepLoai);
 strcpy(b.xepLoai,dxl);

 tns=a.namSinh;
 a.namSinh=b.namSinh;
 b.namSinh=tns;

 tdtcc=a.dTCC;
 a.dTCC=b.dTCC;
 b.dTCC=tdtcc;

 tdta=a.dTA;
 a.dTA=b.dTA;
 b.dTA=tdta;

 tdtdc=a.dTDC;
 a.dTDC=b.dTDC;
 b.dTDC=tdtdc;

 tdtb=a.dTB;
 a.dTB=b.dTB;
 b.dTB=tdtb;
}

// sap xep danh sach sinh vien
void SapXep(){
 for(int i=0;i<n-1;i++)
  for(int j=i+1;j<n;j++)
 {
   if (a[i].dTB>a[j].dTB)
  {
   DoiCho(a[i],a[j]);
  }
 }
 cout<<"\n * Danh sach sinh vien da xep loai: ";
 for(i=0;i<n;i++)
   cout<<"\n - "<<a[i].ht<<"\t - "<<a[i].dTB;
}

// ham chinh
void main(){
 clrscr();
 Nhap();
 TinhDiem();
 DemDTB_LonHon8();
 DemDTB_NhoHon5();
 InSV_max();
 XepLoai();
 InDS();
 SapXep();
 getch();

}


/********************************************************************************
Bài tập (quản lý sinh viên, sử dụng CON TRỎ cấu trúc): Viết các hàm thực hiện
- Nhập vào danh sách có n sinh viên (2<n<20), thông tin sinh viên gồm:
  + Họ tên
  + Địa chỉ
  + Năm sinh
  + Giới tính
  + Lớp
  + Điểm: TCC(hs 3), TA(hs 4), TDC(hs 5)
- Tính điểm trung bình
- Đếm số sinh viên có điểm trung bình >= 8
- Đếm số sinh viên có điểm trung bình  < 5
- In tên sinh viên có điểm trung bình cao nhất
- Xếp loại cho sinh viên
- In danh sách sinh viên đã xếp loại
- Sắp xếp danh sách sinh viên theo thứ tự tăng dần của điểm tb
******************************************************************/



[Code Turbo C++]
/**********************************
  http://www.tailieucntt.org
**********************************/
#include<iostream.h>
#include<conio.h>
#include<stdio.h>
#include<string.h>
#include<stdlib.h>
#include<math.h>

// khai bao
struct SV{
char ht[30], dc[50],gioitinh[3],lop[10],xepLoai[10];
int namSinh;
  float dTCC, dTA,dTDC,dTB;
};

SV a[20],*p;
int n;// so sinh vien

// Nhap thong tin sinh vien
void Nhap(){
p=a;
// nhap so sinh vien
do{
cout<<"\n Nhap so sinh vien: "; cin>>n;
if(n<2||n>20) cout<<"\n Nhap lai so sinh vien";
}while(n<2||n>20);
// Nhap thong tin sinh vien

cout<<"\n Nhap thong tin sinh vien: ";
for(int i=0;i<n;i++)
 {
  fflush(stdin);
  cout<<"\n + Nhap thong tin co sinh vien thu "<<i+1<<": ";
  cout<<"\n - Ho ten: "; gets((p+i)->ht);
  cout<<"\n - Dia chi: "; gets((p+i)->dc);
  cout<<"\n - Gioi tinh: "; gets((p+i)->gioitinh);
  cout<<"\n - Lop: "; gets((p+i)->lop);
  cout<<"\n - Nam sinh: "; cin>>(p+i)->namSinh;
  cout<<"\n - Diem toan cao cap: "; cin>>(p+i)->dTCC;
  cout<<"\n - Diem toan tieng anh: "; cin>>(p+i)->dTA;
  cout<<"\n - Diem tin dai cuong: "; cin>>(p+i)->dTDC;
 }
}
// Tinh diem tong ket
void TinhDiem(){
 p=a;
 for(int i=0;i<n;i++)
  (p+i)->dTB=(((p+i)->dTCC)*3+((p+i)->dTA)*4+((p+i)->dTDC)*5)/12;
}
// Dem so sinh vien co diem tb>=8
void DemDTB_LonHon8(){
 p=a;
 int dem=0;
 for(int i=0;i<n;i++)
  if((p+i)->dTB>=8) dem++;
 cout<<"\n * So sinh vien co diem trung binh >= 8: "<<dem;
}
// Dem so sinh vien co diem tb<5
void DemDTB_NhoHon5(){
 p=a;

 int dem=0;
 for(int i=0;i<n;i++)
  if((p+i)->dTB<5) dem++;
 cout<<"\n * So sinh vien co diem trung binh < 5: "<<dem;
}
// Tim sinh vien co diem cao nhat
void InSV_max(){
 p=a;

 float max=p->dTB;
 for(int i=0;i<n;i++)
  if (max<(p+i)->dTB) { max=(p+i)->dTB;}
 // in sinh vien max
 cout<<"\n * Ten sinh vien co diem cao nhat: ";
 for(i=0;i<n;i++)
  if(max==(p+i)->dTB) cout<<"\n +"<<(p+i)->ht;
}

// Xep loai cho sinh vien
void XepLoai(){
 p=a;
 for(int i=0;i<n;i++)
  {
if ((p+i)->dTB<5) strcpy((p+i)->xepLoai,"Truot");
else  if ((p+i)->dTB<6) strcpy((p+i)->xepLoai,"Trung binh");
else  if ((p+i)->dTB<7) strcpy((p+i)->xepLoai,"Trung binh kha");
else  if ((p+i)->dTB<8) strcpy((p+i)->xepLoai,"Kha");
else  if ((p+i)->dTB<9) strcpy((p+i)->xepLoai,"Gioi");
else  if ((p+i)->dTB<=10) strcpy((p+i)->xepLoai,"Xuat sac");
  }
}
// In danh sach sinh vien
void InDS(){
 p=a;
 cout<<"\n * In danh sach sinh vien da xep loai:";
 for(int i=0;i<n;i++)
  cout<<"\n - "<<(p+i)->ht<<"\t - "<<(p+i)->xepLoai;
}


// doi cho
void DoiCho(SV *a, SV *b){
 char tht[30],tdc[50],tgioitinh[5],tlop[10],dxl[10];
 int tns;
 float tdtcc,tdta,tdtdc,tdtb;
 strcpy(tht,a->ht);
 strcpy(a->ht,b->ht);
 strcpy(b->ht,tht);

 strcpy(tdc,a->dc);
 strcpy(a->dc,b->dc);
 strcpy(b->dc,tdc);

 strcpy(tgioitinh,a->gioitinh);
 strcpy(a->gioitinh,b->gioitinh);
 strcpy(b->gioitinh,tgioitinh);

 strcpy(tlop,a->lop);
 strcpy(a->lop,b->lop);
 strcpy(b->lop,tlop);

 strcpy(dxl,a->xepLoai);
 strcpy(a->xepLoai,b->xepLoai);
 strcpy(b->xepLoai,dxl);

 tns=a->namSinh;
 a->namSinh=b->namSinh;
 b->namSinh=tns;

 tdtcc=a->dTCC;
 a->dTCC=b->dTCC;
 b->dTCC=tdtcc;

 tdta=a->dTA;
 a->dTA=b->dTA;
 b->dTA=tdta;

 tdtdc=a->dTDC;
 a->dTDC=b->dTDC;
 b->dTDC=tdtdc;

 tdtb=a->dTB;
 a->dTB=b->dTB;
 b->dTB=tdtb;
}

// sap xep danh sach sinh vien
void SapXep(){
 p=a;
 for(int i=0;i<n-1;i++)
  for(int j=i+1;j<n;j++)
{
  if ((p+i)->dTB>(p+j)->dTB)
{
 DoiCho((p+i),(p+j));
}
}
cout<<"\n * Danh sach sinh vien da xep loai: ";
for(i=0;i<n;i++)
  cout<<"\n - "<<(p+i)->ht<<"\t - "<<(p+i)->dTB;
}
// ham chinh

void main(){
 clrscr();
 Nhap();
 TinhDiem();
 DemDTB_LonHon8();
 DemDTB_NhoHon5();
 InSV_max();
 XepLoai();
 InDS();
 SapXep();
 getch();

}
--------------

0 nhận xét:

Cảm ơn bạn đã quan tâm tới bài viết này!

Danh mục bài viết