#include<iostream>
using namespace std;
struct hs
{
char ten[100];
float toan,van;
};
void nhap(hs &x);
float dtb(hs x);
void main()
{
hs x;
nhap(x);
cout<<"\ndiem trung binh la: "<<dtb(x);
system("pause");
}
void nhap(hs &x)
{
int kt;
cout<<"\nnhap ten: ";
fflush(stdin);gets(x.ten);
do{
kt=0;
cout<<"\ndiem toan: ";cin>>x.toan;
if(x.toan<0 || x.toan>10)
{
kt=1;cout<<"\nkhong hop le!";
}
}while(kt);
do{
kt=0;
cout<<"\ndiem van: ";cin>>x.van;
if(x.van<0 || x.van>10)
{
kt=1;cout<<"\nkhong hop le!";
}
}while(kt);
}
float dtb(hs x)
{
return (x.toan+x.van)/2;
}
Tìm hiểu các giải thuật sắp xếp cơ bản trên cấu trúc dữ liệu mảng Tìm hiểu các giải thuật tìm kiếm cơ bản trên cấu trúc dữ liệu mảng Đánh giá ...GiaiThuat.Com
Thứ Tư, 11 tháng 3, 2015
4. Viết chương trình nhập vào một ngày. Tìm ngày kế tiếp và xuất kết quả.
#include<iostream>
using namespace std;
struct day
{
int d,m,y;
};
void nhap(day &x);
void nextday(day x);
void main()
{
day x;
cout<<"\nNHAP NGAY, THANG, NAM:\n";
nhap(x);
cout<<"\nngay tiep theo la: ";
nextday(x);
system("pause");
}
void nextday(day x)
{
int k=0;
x.d++;
switch(x.m)
{
case 1:case 3: case 5: case 7: case 8: case 10:
if(x.d>31)
{
x.d=1;x.m++;
}
break;
case 4: case 6: case 9: case 11:
if(x.d>30)
{
x.d=1;x.m++;
}
break;
case 12:
if(x.d>31)
{
x.d=1;x.m=1;x.y++;
}
break;
case 2:
if(x.y%400==0 || (x.y%4==0 && x.y%100!=0)) k=1;
if(k==1 && x.d>29)
{
x.d=1;x.m++;
}
if(k==0 && x.d>28)
{
x.d=1;x.m++;
}
}
cout<<x.d<<"/"<<x.m<<"/"<<x.y;
}
void nhap(day &x)
{
int kt,k=0;
do{
kt=0;
cout<<"\nngay:";cin>>x.d;
cout<<"\nthang: ";cin>>x.m;
cout<<"\nnam: ";cin>>x.y;
switch(x.m)
{
case 1: case 3: case 5: case 7: case 8: case 10: case 12:
if(x.d<=0 || x.d>31) kt=1;
break;
case 4: case 6: case 9: case 11:
if(x.d<=0 || x.d>30) kt=1;
break;
case 2:
if(x.y%400==0 || (x.y%4==0 && x.y%100!=0)) k=1;
if(k==1 && (x.d<=0 || x.d>29)) kt=1;
if(k==0 && (x.d<=0 || x.d>28)) kt=1;
break;
default: kt=1; break;
}
if(kt==1) cout<<"\nkhong hop le!";
}while(kt);
}
using namespace std;
struct day
{
int d,m,y;
};
void nhap(day &x);
void nextday(day x);
void main()
{
day x;
cout<<"\nNHAP NGAY, THANG, NAM:\n";
nhap(x);
cout<<"\nngay tiep theo la: ";
nextday(x);
system("pause");
}
void nextday(day x)
{
int k=0;
x.d++;
switch(x.m)
{
case 1:case 3: case 5: case 7: case 8: case 10:
if(x.d>31)
{
x.d=1;x.m++;
}
break;
case 4: case 6: case 9: case 11:
if(x.d>30)
{
x.d=1;x.m++;
}
break;
case 12:
if(x.d>31)
{
x.d=1;x.m=1;x.y++;
}
break;
case 2:
if(x.y%400==0 || (x.y%4==0 && x.y%100!=0)) k=1;
if(k==1 && x.d>29)
{
x.d=1;x.m++;
}
if(k==0 && x.d>28)
{
x.d=1;x.m++;
}
}
cout<<x.d<<"/"<<x.m<<"/"<<x.y;
}
void nhap(day &x)
{
int kt,k=0;
do{
kt=0;
cout<<"\nngay:";cin>>x.d;
cout<<"\nthang: ";cin>>x.m;
cout<<"\nnam: ";cin>>x.y;
switch(x.m)
{
case 1: case 3: case 5: case 7: case 8: case 10: case 12:
if(x.d<=0 || x.d>31) kt=1;
break;
case 4: case 6: case 9: case 11:
if(x.d<=0 || x.d>30) kt=1;
break;
case 2:
if(x.y%400==0 || (x.y%4==0 && x.y%100!=0)) k=1;
if(k==1 && (x.d<=0 || x.d>29)) kt=1;
if(k==0 && (x.d<=0 || x.d>28)) kt=1;
break;
default: kt=1; break;
}
if(kt==1) cout<<"\nkhong hop le!";
}while(kt);
}
Viết chương trình nhập vào hai phân số, tìm phân số lớn nhất và xuất kết quả.
//tìm phân số lớn nhất
#include<iostream>
using namespace std;
struct phanso
{
int tu,mau;
};
void nhap(phanso &x);
void xuat(phanso x);
phanso max(phanso x,phanso y);
void main()
{
phanso x,y,z;
cout<<"\nNHAP 2 PHAN SO:\nnhap phan so 1:";
nhap(x);
cout<<"\nnhap phan so 2:";
nhap(y);
cout<<"\nphan so lon nhat la: ";
z=max(x,y);
xuat(z);
system("pause");
}
phanso max(phanso x,phanso y)
{
int a,b;
a=x.tu*y.mau;
b=y.tu*x.mau;
if(a>b) return x;
return y;
}
void xuat(phanso x)
{
cout<<x.tu<<"/"<<x.mau;
}
void nhap(phanso &x)
{
char s[100],c[100];
int i,j,kt,d,dem;
do{
kt=0;
cout<<"\nnhap phan so dang a/b: ";
gets(s);
dem=0;d=0;
for(i=0;i<strlen(s);i++)
{
if(s[i]=='/' || (s[i]>='0' && s[i]<='9')) dem++;
if(s[i]=='/') d++;
}
if(dem!=strlen(s) || d!=1)
{
kt=1;
cout<<"\nloi dinh dang!";
continue;
}
i=0;
while(s[i]!='/') c[i]=s[i++];
c[i]='\0';
x.tu=atoi(c);
d=0;
for(j=i+1;j<strlen(s);j++) c[d++]=s[j];
c[d]='\0';
x.mau=atoi(c);
if(x.mau==0)
{
kt=1;
cout<<"\nloi toan hoc!";
}
}while(kt);
}
#include<iostream>
using namespace std;
struct phanso
{
int tu,mau;
};
void nhap(phanso &x);
void xuat(phanso x);
phanso max(phanso x,phanso y);
void main()
{
phanso x,y,z;
cout<<"\nNHAP 2 PHAN SO:\nnhap phan so 1:";
nhap(x);
cout<<"\nnhap phan so 2:";
nhap(y);
cout<<"\nphan so lon nhat la: ";
z=max(x,y);
xuat(z);
system("pause");
}
phanso max(phanso x,phanso y)
{
int a,b;
a=x.tu*y.mau;
b=y.tu*x.mau;
if(a>b) return x;
return y;
}
void xuat(phanso x)
{
cout<<x.tu<<"/"<<x.mau;
}
void nhap(phanso &x)
{
char s[100],c[100];
int i,j,kt,d,dem;
do{
kt=0;
cout<<"\nnhap phan so dang a/b: ";
gets(s);
dem=0;d=0;
for(i=0;i<strlen(s);i++)
{
if(s[i]=='/' || (s[i]>='0' && s[i]<='9')) dem++;
if(s[i]=='/') d++;
}
if(dem!=strlen(s) || d!=1)
{
kt=1;
cout<<"\nloi dinh dang!";
continue;
}
i=0;
while(s[i]!='/') c[i]=s[i++];
c[i]='\0';
x.tu=atoi(c);
d=0;
for(j=i+1;j<strlen(s);j++) c[d++]=s[j];
c[d]='\0';
x.mau=atoi(c);
if(x.mau==0)
{
kt=1;
cout<<"\nloi toan hoc!";
}
}while(kt);
}
Thứ Hai, 9 tháng 3, 2015
một số chú ý đáng nhớ trong lâp trình c về chuỗi và file
một số chú ý đáng nhớ trong lâp trình c về chuỗi và file
- fread(biến địa chỉ, bộ nhớ, số cấu trúc cần đọc, file); //trả về số cấu trúc đọc được, nếu hết file có nghĩa là trả về 0.
- fwrite(biến đại chỉ, bộ nhớ, số cấu trúc cần ghi, file);//trả về số cấu trúc ghi được, trả về 0 nếu ghi không được hay lên file thất bại.
/* các cấu trúc có thể mảng, 1 biến bình thường hay biến dữ liệu kiểu cấu trúc, thay thế được các vòng for trong việc đọ hay ghi thông thường */ - fscanf(file, kiểu, biến địa chỉ); //trả về giá trị EOF nếu quét đến cờ hiệu kết thúc file EOF (-1).
- feof(file); //trả về giá trị là vị trí của con trỏ nếu con trỏ file đang đứng ở vị trí cờ hiệu kết thúc file. chưa kết thúc file thì trả về 0.
- getc(file);//nếu quét đến cờ hiệu kết thúc file thì trả về giá trị char tương ứng là EOF hay (-1).
- fopen("tên file/ có thể là đường dẫn file","kiểu mở"); //trả về địa chỉ FILE trên bộ nhớ nếu thành công, và trả về giá trị NULL nếu thất bại.
- fgets(chuỗi nhận, số kí tự, file) trả vê địa chỉ của chuỗi s nếu get được thành công, trả về NULL hay 0 nếu không get được, địa chỉ của ô nhớ của chuỗi luôn là sô dương.
- strstr(chuỗi s1, chuỗi s2); trả về địa chỉ ô nhớ chứa chuỗi, là chuỗi con của s1 bắt đầu từ vị ví xuất hiện đầu tiên của chuỗi s2 trong chuỗi s1, nếu không có chuỗi s2 trong s1 thì chuỗi để copy không có, trả về giá trị 0 hay NULL
Thứ Tư, 4 tháng 3, 2015
rút gọn phân số trong lập trình c/c++
rút gọn phân số trong lập trình c/c++
//rút gọn phân số
#include<iostream>
using namespace std;
struct phanso
{
int tu,mau;
};
void nhap(phanso &x)
{
char s[100],c[100];
int i,j,kt,d,dem;
do{
kt=0;
cout<<"\nnhap phan so dang a/b: ";
gets(s);
dem=0;d=0;
for(i=0;i<strlen(s);i++)
{
if(s[i]=='/' || (s[i]>='0' && s[i]<='9')) dem++;
if(s[i]=='/') d++;
}
if(dem!=strlen(s) || d!=1)
{
kt=1;
cout<<"\nloi dinh dang!";
continue;
}
i=0;
while(s[i]!='/') c[i]=s[i++];
c[i]='\0';
x.tu=atoi(c);
d=0;
for(j=i+1;j<strlen(s);j++) c[d++]=s[j];
c[d]='\0';
x.mau=atoi(c);
if(x.mau==0)
{
kt=1;
cout<<"\nloi toan hoc!";
}
}while(kt);
}
void xuat(phanso x)
{
cout<<x.tu<<"/"<<x.mau;
}
void rutgon(phanso &x)
{
int a=abs(x.tu),b=abs(x.mau);
if(a==0) return;
while(a!=b)
if(a>b) a-=b;
else b-=a;
x.tu/=a;
x.mau/=a;
}
void main()
{
phanso a;
nhap(a);
xuat(a);
rutgon(a);
cout<<"=";
xuat(a);
system("pause");
}
Thứ Năm, 5 tháng 2, 2015
CÁC MỞ RỘNG CỦA C++
II.1. Các từ khóa mới của C++
Để bổ sung các tính năng mới vào C, một số từ khóa (keyword) mới đã được đưa vào C++ ngoài các từ khóa có trong C. Các chương trình bằng C nào sử dụng các tên trùng với các từ khóa cần phải thay đổi trước khi chương trình được dịch lại bằng C++. Các từ khóa mới này là : asm catch class delete friend inline new operator private protected public template this throw try virtual
II.2. Cách ghi chú thích C++
chấp nhận hai kiểu chú thích. Các lập trình viên bằng C đã quen với cách chú thích bằng /*…*/. Trình biên dịch sẽ bỏ qua mọi thứ nằm giữa /*…*/.
II.3. Dòng nhập/xuất chuẩn
Trong chương trình C, chúng ta thường sử dụng các hàm nhập/xuất dữ liệu là printf() và scanf(). Trong C++ chúng ta có thể dùng dòng nhập/xuất chuẩn (standard input/output stream) để nhập/xuất dữ liệu thông qua hai biến đối tượng của dòng (stream object) là cout và cin
II.4. Cách chuyển đổi kiểu dữ liệu
Hình thức chuyển đổi kiểu trong C tương đối tối nghĩa, vì vậy C++ trang bị thêm một cách chuyển đổi kiểu giống như một lệnh gọi hàm.
Ví dụ 2.3:
#include <iostream.h>
int main()
{
int X = 200;
long Y = (long) X; //Chuyen doi kieu theo cach cua C long
Z = long(X); //Chuyen doi kieu theo cach moi cua C++
cout<< "X = "<<X<<"\n";
cout<< "Y = "<<Y<<"\n";
cout<< "Z = "<<Z<<"\n";
return 0;
}
II.5. Vị trí khai báo biến
Trong chương trình C đòi hỏi tất cả các khai báo bên trong một phạm vi cho trước phải được đặt ở ngay đầu của phạm vi đó. Điều này có nghĩa là tất cả các khai báo toàn cục phải đặt trước tất cả các hàm và các khai báo cục bộ phải được tiến hành trước tất cả các lệnh thực hiện. Ngược lại C++ cho phép chúng ta khai báo linh hoạt bất kỳ vị trí nào trong một phạm vi cho trước (không nhất thiết phải ngay đầu của phạm vi), chúng ta xen kẽ việc khai báo dữ liệu với các câu lệnh thực hiện.
Khi khai báo một biến trong chương trình, biến đó sẽ có hiệu lực trong phạm vi của chương trình đó kể từ vị trí nó xuất hiện. Vì vậy chúng ta không thể sử dụng một biến được khai báo bên dưới nó.
II.6. Các biến const
Trong ANSI C, muốn định nghĩa một hằng có kiểu nhất định thì chúng ta dùng biến const (vì nếu dùng #define thì tạo ra các hằng không có chứa thông tin về kiểu). Trong C++, các biến const linh hoạt hơn một cách đáng kể: C++ xem const cũng như #define nếu như chúng ta muốn dùng hằng có tên trong chương trình. Chính vì vậy chúng ta có thể dùng const để quy định kích thước của một mảng như đoạn mã sau: const int ArraySize = 100; int X[ArraySize]; Khi khai báo một biến const trong C++ thì chúng ta phải khởi tạo một giá trị ban đầu nhưng đối với ANSI C thì không nhất thiết phải làm như vậy (vì trình biên dịch ANSI C tự động gán trị zero cho biến const nếu chúng ta không khởi tạo giá trị ban đầu cho nó).
Phạm vi của các biến const giữa ANSI C và C++ khác nhau. Trong ANSI C, các biến const được khai báo ở bên ngoài mọi hàm thì chúng có phạm vi toàn cục, điều này nghĩa là chúng có thể nhìn thấy cả ở bên ngoài file mà chúng được định nghĩa, trừ khi chúng được khai báo là static. Nhưng trong C++, các biến const được hiểu mặc định là static.
II.7. Về struct, union và enum
Trong C++, các struct và union thực sự các các kiểu class. Tuy nhiên có sự thay đổi đối với C++. Đó là tên của struct và union được xem luôn là tên kiểu giống như khai báo bằng lệnh typedef vậy.
Quy định này cũng áp dụng cho cả union và enum. Tuy nhiên để tương thích với C, C++ vẫn chấp nhận cú pháp cũ. Một kiểu union đặc biệt được thêm vào C++ gọi là union nặc danh (anonymous union). Nó chỉ khai báo một loạt các trường(field) dùng chung một vùng địa chỉ bộ nhớ. Một union nặc danh không có tên tag, các trường có thể được truy xuất trực tiếp bằng tên của chúng. Chẳng hạn như đoạn mã sau: union { int Num; float Value; }; Cả hai Num và Value đều dùng chung một vị trí và không gian bộ nhớ. Tuy nhiên không giống như kiểu union có tên, các trường của union nặc danh thì được truy xuất trực tiếp, chẳng hạn như sau: Num = 12; Value = 30.56;
II.8. Toán tử định phạm vi
Toán tử định phạm vi (scope resolution operator) ký hiệu là ::, nó được dùng truy xuất một phần tử bị che bởi phạm vi hiện thời.
Ví dụ 2.5 :
1: #include <iostream.h>
2: int X = 5;
3: int main()
4: {
5: int X = 16;
6: cout<< "Bien X ben trong = "<<X<<"\n";
7: cout<< "Bien X ben ngoai = "<<::X<<"\n";
8: return 0;
9: }
Toán tử định phạm vi còn được dùng trong các định nghĩa hàm của các phương thức trong các lớp, để khai báo lớp chủ của các phương thức đang được định nghĩa đó. Toán tử định phạm vi còn có thể được dùng để phân biệt các thành phần trùng tên của các lớp cơ sở khác nhau
II.9. Toán tử new và delete
Trong các chương trình C, tất cả các cấp phát động bộ nhớ đều được xử lý thông qua các hàm thư viện như malloc(), calloc() và free(). C++ định nghĩa một phương thức mới để thực hiện việc cấp phát động bộ nhớ bằng cách dùng hai toán tử new và delete. Sử dụng hai toán tử này sẽ linh hoạt hơn rất nhiều so với các hàm thư viện của C.
1: #include <iostream.h>
2: #include <time.h>
3: #include <stdlib.h>
4: int main()
5: {
6: int N;
7: cout<<"Nhap vao so phan tu cua mang:";
8: cin>>N;
9: int *P=new int[N];
10: if (P==NULL)
11: {
12: cout<<"Khong con bo nho de cap phat\n";
13: return 1;
14: }
15: srand((unsigned)time(NULL));
16: for(int I=0;I<N;++I)
17: P[I]=rand()%100; //Tạo các số ngẫu nhiên từ 0 đến 99
18: cout<<"Mang truoc khi sap xep\n";
19: for(I=0;I<N;++I)
20: cout<<P[I]<<" ";
21: for(I=0;I<N-1;++I)
22: for(int J=I+1;J<N;++J)
23: if (P[I]>P[J])
24: {
25: int Temp=P[I];
26: P[I]=P[J];
27: P[J]=Temp;
28: }
29: cout<<"\nMang sau khi sap xep\n";
30: for(I=0;I<N;++I)
31: cout<<P[I]<<" ";
32: delete []P;
33: return 0;
34: }
II.10. Hàm inline
Một chương trình có cấu trúc tốt sử dụng các hàm để chia chương trình thành các đơn vị độc lập có logic riêng. Tuy nhiên, các hàm thường phải chứa một loạt các xử lý điểm vào (entry point): tham số phải được đẩy vào stack, một lệnh gọi phải được thực hiện và sau đó việc quay trở về cũng phải được thực hiện bằng cách giải phóng các tham số ra khỏi stack. Khi các xử lý điểm vào chậm chạp thường các lập trình viên C phải sử dụng cách chép lập lại các đoạn chương trình nếu muốn tăng hiệu quả. Để tránh khỏi phải xử lý điểm vào, C++ trang bị thêm từ khóa inline để loại việc gọi hàm. Khi đó trình biên dịch sẽ không biên dịch hàm này như một đoạn chương trình riêng biệt mà nó sẽ được chèn thẳng vào các chỗ mà hàm này được gọi. Điều này làm giảm việc xử lý điểm vào mà vẫn cho phép một chương trình được tổ chức dưới dạng có cấu trúc. Cú pháp của hàm inline như sau :
inline data_type function_name ( parameters )
{
……………………………..
}
Trong đó:
data_type: Kiểu trả về của hàm.
Function_name:Tên của hàm.
Parameters: Các tham số của hàm.
Sử dụng hàm inline sẽ làm cho chương trình lớn lên vì trình biên dịch chèn đoạn chương trình vào các chỗ mà hàm này được gọi. Do đó thường các hàm inline thường là các hàm nhỏ, ít phức tạp
II.13.1. Đa năng hóa các hàm (Functions overloading)
Trong ngôn ngữ C cũng như mọi ngôn ngữ máy tính khác, mỗi hàm đều phải có một tên phân biệt. Đôi khi đây là một điều phiền toái. Chẳng hạn như trong ngôn ngữ C, có rất nhiều hàm trả về trị tuyệt đối của một tham số là số, vì cần thiết phải có tên phân biệt nên C phải có hàm riêng cho mỗi kiểu dữ liệu số, do vậy chúng ta có tới ba hàm khác nhau để trả về trị tuyệt đối của một tham số: int abs(int i); long labs(long l); double fabs(double d); Tất cả các hàm này đều cùng thực hiện một chứa năng nên chúng ta thấy điều này nghịch lý khi phải có ba tên khác nhau. C++ giải quyết điều này bằng cách cho phép chúng ta tạo ra các hàm khác nhau có cùng một tên. Đây chính là đa năng hóa hàm. Do đó trong C++ chúng ta có thể định nghĩa lại các hàm trả về trị tuyệt đối để thay thế các hàm trên như sau : int abs(int i); long abs(long l); double abs(double d);
[OOP C++] quản lý danh sách học sinh làm luận văn tốt nghiệp, thi tốt nghiệp, thi lại
[OOP C++] quản lý danh sách học sinh làm luận văn tốt nghiệp, thi tốt nghiệp, thi lại
lập trình hướng đối tượng quản lý họ tên, năm sinh, điểm chín môn học của tất cả các học viên của lớp học. Cho biết bao nhiêu học viên trong lớp được phép làm luận văn tốt nghiệp, bao nhiêu học viên thi tốt nghiệp, bao nhiêu người phải thi lại và tên môn thi lại. Tiêu chuẩn để xét: Làm luận văn phải có điểm trung bình lớn hơn 7 trong đó không có môn nào dưới 5. Thi tốt nghiệp khi điểm trung bình không lớn hơn 7 và điểm các môn không dưới 5. Thi lại có môn dưới 5
lập trình hướng đối tượng quản lý họ tên, năm sinh, điểm chín môn học của tất cả các học viên của lớp học. Cho biết bao nhiêu học viên trong lớp được phép làm luận văn tốt nghiệp, bao nhiêu học viên thi tốt nghiệp, bao nhiêu người phải thi lại và tên môn thi lại. Tiêu chuẩn để xét: Làm luận văn phải có điểm trung bình lớn hơn 7 trong đó không có môn nào dưới 5. Thi tốt nghiệp khi điểm trung bình không lớn hơn 7 và điểm các môn không dưới 5. Thi lại có môn dưới 5
hs.h
#pragma once
#include<iostream>
#include<stdlib.h>
using namespace std;
class hs
{
private:
char ten[100];
int namsinh;
float toan,ly,hoa,van,su,dia,anh,tin;
public:
void nhap();
void xuatten();
void xuatnamsinh();
void monthilai();
float dtb();
int hanhdong();
hs(void);
~hs(void);
};
hs.cpp
#include "hs.h"
void hs::nhap()
{
cout<<"\nTen: ";
fflush(stdin);
gets(ten);
do{
cout<<"\nnam sinh: ";
cin>>namsinh;
if(namsinh<1900 || namsinh >2100) cout<<"\nkhong hop le! nhap lai!!";
}while(namsinh<1900 || namsinh >2100);
cout<<"\nnhap diem cac mon:";
do{
cout<<"\nToan: ";cin>>toan;
if(toan<0 || toan>10) cout<<"\nkhong hop le! nhap lai!!";
}while(toan<0 || toan>10);
do{
cout<<"\nLy: ";cin>>ly;
if(ly<0 || ly>10) cout<<"\nkhong hop le! nhap lai!!";
}while(ly<0 || ly>10);
do{
cout<<"\nhoa: ";cin>>hoa;
if(hoa<0 || hoa>10) cout<<"\nkhong hop le! nhap lai!!";
}while(hoa<0 || hoa>10);
do{
cout<<"\nvan: ";cin>>van;
if(van<0 || van>10) cout<<"\nkhong hop le! nhap lai!!";
}while(van<0 || van>10);
do{
cout<<"\nsu: ";cin>>su;
if(su<0 || su>10) cout<<"\nkhong hop le! nhap lai!!";
}while(su<0 || su>10);
do{
cout<<"\ndia: ";cin>>dia;
if(dia<0 || dia>10) cout<<"\nkhong hop le! nhap lai!!";
}while(dia<0 || dia>10);
do{
cout<<"\nanh: ";cin>>anh;
if(anh<0 || anh>10) cout<<"\nkhong hop le! nhap lai!!";
}while(anh<0 || anh>10);
do{
cout<<"\ntin: ";cin>>tin;
if(tin<0 || tin>10) cout<<"\nkhong hop le! nhap lai!!";
}while(tin<0 || tin>10);
}
int hs::hanhdong()
{
if(toan<5 || ly<5 || hoa<5 || van<5 || su<5||dia<5||anh<5||tin<5) return -1;
if(dtb()>7) return 1;
return 0;
}
void hs::xuatten()
{
cout<<ten;
}
void hs::monthilai()
{
cout<<"\n*nhung mon thi lai:";
if(toan<5) cout<<"\n\ttoan";
if(ly<5) cout<<"\n\tly";
if(hoa<5) cout<<"\n\thoa";
if(van<5) cout<<"\n\tvan";
if(su<5) cout<<"\n\tsu";
if(dia<5) cout<<"\n\tdia";
if(anh<5) cout<<"\n\tanh";
if(tin<5) cout<<"\n\ttin";
}
void hs::xuatnamsinh()
{
cout<<namsinh;
}
float hs::dtb()
{
return (toan+ly+hoa+van+su+dia+anh+tin)/8;
}
hs::hs(void)
{
}
hs::~hs(void)
{
}
danhsachhs.h
#pragma once
#include"hs.h"
class danhsachhs
{
private:
hs x[1000];
int n;
public:
void nhap();
void xuatthilai();
void xuatthitotnghiep();
void xuatluanvan();
danhsachhs(void);
~danhsachhs(void);
};
danhsachhs.cpp
#include "danhsachhs.h"
void danhsachhs::nhap()
{
int k,i=1;
cout<<"\n*nhap hoc sinh 1";
x[0].nhap();
do{
cout<<"\n------menu-----";
cout<<"\n| 1.nhap tiep.|";
cout<<"\n| 0.ket thuc. |";
cout<<"\n---------------";
do{
cout<<"\nlua chon cua ban: ";
cin>>k;
}while(k!=1 && k!=0);
if(k==1)
{
cout<<"\n\t* nhap hoc sinh "<<i+1;
x[i++].nhap();
}
}while(k==1);
n=i;
}
void danhsachhs::xuatthilai()
{
cout<<"\n\t* DANH SACH THI LAI *\n";
int i,j=0;
for(i=0;i<n;i++)
if(x[i].hanhdong()==-1)
{
j++;
cout<<"\n"<<j<<". ";x[i].xuatten();cout<<" - ";x[i].xuatnamsinh();cout<<"\n";
x[i].monthilai();
}
if(j==0) cout<<"\n\tkhong co!";
}
void danhsachhs::xuatthitotnghiep()
{
cout<<"\n\t* DANH SACH THI TOT NGHIEP *\n";
int i,j=0;
for(i=0;i<n;i++)
if(x[i].hanhdong()==0)
{
j++;
cout<<"\n"<<j<<". ";x[i].xuatten();cout<<" - ";x[i].xuatnamsinh();cout<<"\n";
}
if(j==0) cout<<"\n\tkhong co!\n";
}
void danhsachhs::xuatluanvan()
{
cout<<"\n\t* DANH SACH LAM LUAN VAN TOT NGHIEP *\n";
int i,j=0;
for(i=0;i<n;i++)
if(x[i].hanhdong()==1)
{
j++;
cout<<"\n"<<j<<". ";x[i].xuatten();cout<<" - ";x[i].xuatnamsinh();cout<<"\n";
}
if(j==0) cout<<"\n\tkhong co!\n";
}
danhsachhs::danhsachhs(void)
{
}
danhsachhs::~danhsachhs(void)
{
}
source.cpp
#include"danhsachhs.h"
void main()
{
danhsachhs x;
x.nhap();
cout<<"\n-------------------------------------------------------\n";
x.xuatluanvan();
cout<<"\n-------------------------------------------------------\n";
x.xuatthitotnghiep();
cout<<"\n-------------------------------------------------------\n";
x.xuatthilai();
system("pause");
}
Đăng ký:
Bài đăng (Atom)
Bài đăng phổ biến
-
Cách Boot USB đối với Main Gigabyte Để boot từ main gigabye bạn xem main của bạn có hỗ trợ không: nhấn ESC, DEL, F12...tùy từng máy bạn nên ...
-
Ugandatravel.Xyz Ukattorney.Xyz Ukhotel.Xyz Uklawyers.Xyz Uklawyer.Xyz Ukonline.Xyz Ukrainehome.Xyz Ukrainehotel.Xyz Ukraineinsurance.Xyz U...
-
Walmartscholarship.Xyz Wapnews.Xyz Waponline.Xyz Wapworld.Xyz Washingtonattorney.Xyz Washingtonhome.Xyz Washingtoninsurance.Xyz Washingtonl...
-
Hướng dẫn mở UEFI cho Dell N4110 và Vostro 3750 Tình cờ hôm nay ghé sang 1 số diễn đàn của Nga và Bios Mod mình đã tìm được cách Unlocked UE...
-
BritainTourist .Com PhumyGroup.com SonhaiGroup.com LiaoningGroup .Com S haanxiGroup .com EchinaTourist.com T echnologyJewelry ....
-
Vacationnews.Xyz Vacationsnews.Xyz Vacationsworld.Xyz Vantagecreditunion.Xyz Venturenews.Xyz Ventureworld.Xyz Vermontattorney.Xyz Vermontho...
-
Sachmoi.Xyz Salenews.Xyz Salesnews.Xyz Salesworld.Xyz Saleworld.Xyz Samsungcomputers.Xyz Sanantonioattorney.Xyz Sanantoniohome.Xyz Sananton...
-
Tagfacepaint.Xyz Taiwanonline.Xyz Taiwanworld.Xyz Tamnhin.Xyz Tamthan.Xyz Tangtruong.Xyz Tapchidulich.Xyz Tapdoan.Xyz Taphuan.Xyz Tappham.X...
-
SacomGold.com mnTourist.com Anbaoco.com SacomFinance.com VinaElectronics.com LatviaNet.com NationalAirway.com SacomInsurance.com SacomHome.c...
-
Cách Sửa lỗi Font AOE khó chịu bằng một số thủ thuật khá đơn giản Copy Font vào mục Font của Windows : http://www.mediafire.com/download/mdd...
.png)
.png)