Bài tập ngôn ngữ lập trình C/C++ Điện tử viễn thông ĐH Bách Khoa Hà Nội
Trang 2case 0: cout<<"thuong"; break;
case 7: cout<<"deu"; break;
Trang 3case 2: days=(year&3 ?28:29); break;
case 4: case 6: case 9: case 11: days=30;
Trang 4switch(FindRoot( a, b, c, &x1, &x2)){
case 0: cout<<"Vo nghiem"<<endl; break;case 1: cout<<"Pt co nghiem kep x= "<<x1; break;default:
cout<<"Pt co 2 nghiem phan biet "<<"x1=
"<<x1<<endl<<"x2= "<<x2;
}cout<<endl;
//hàm tao thiet lap tu hai tham so
complex(double r=0, double i=0) : re(r), im(i) {}
//hàm tao copy tu mot so phuc
complex(const complex &c) : re(c.re), im(c.im) {}
public:
complex operator+ (complex c);
complex operator- (complex c);
complex operator* (complex c);
complex operator/ (complex c);
public:
//Ham dinh nghia toan tu luong ra
friend ostream& operator<<(ostream &out, complex c)
Trang 5return complex((this->re*c.re)-(this->im*c.im),(this
->re*c.im)+(c.re*this->im));
phanso operator + (phanso p);
phanso operator - (phanso p);
phanso operator * (phanso p);
phanso operator / (phanso p);
public:
friend ostream& operator(ostream &out,phan so p)
Trang 6cout<<x<<"-"<<y<<"="<<x-y<<endl;
cout<<x<<"*"<<y<<"="<<x*y<<endl;
cout<<x<<"/"<<y<<"="<<x/y<<endl;
Matrix(int m, int n=0);
Matrix(int m, int n, const _T*);
Matrix(const Matrix& M);
~Matrix(){deleteData();}
public:
Trang 7_T& operator()(int i, int j){return data[i][j];}
Matrix operator+(const Matrix& M);
Matrix& operator=(const Matrix& M);
friend ostream& operator<<(ostream& left, Matrix& right){
for(int i=0; i<right.rows; i++)
for(int j=0; j<right.cols; j++){
left<<right.data[i][j]<<"\t";
if((j+1)%right.cols==0)
left<<endl;
}return left;
data = new _T* [rows];
for(int i=0; i<rows; i++)
data[i] = new _T [cols];
for(int i=0; i<rows; i++)
for(int j=0; j<cols; j++)
Trang 8for(int i=0;i<rows;i++)
for(int j=0;j<cols;j++)
for(int i=0; i<rows; i++)
for(int j=0; j<cols; j++){
temp.data[i][j]=data[i][j]+M.data[i][j];}
for(int i=0; i<rows; i++)
for(int j=0; j<cols; j++)
void DFT(int v, int *mark);
};
Trang 9void Graphic DFT(int v)
{
int mark=new int[size];
for(int i=0; i<size; i++)
Trang 10PROGRAM 1: Tạo lớp Phân số có các thành phần sau:
Trang 12-PROGRAM 2: Tạo lớp complex (real + image *i ) có các thành phần sau:
- Các thuộc tính : real , image;
friend complex operator+(float x,complex c);
friend ostream& operator<<(ostream &out,complex c);
friend istream& operator>>(istream &inp,complex& c);
};
complex::complex(float r,float i)
Trang 13cout<<" Tru hai so phuc :"<<c3;
cout<<" Nhap vao x :";
cin>>x;
Trang 14-PROGRAM 3: Xây dựng lớp xaukytu có các thành phần sau :
- Các thuộc tính : char * str, int length
- Hàm tạo không tham số
- Hàm tạo một tham số ( char * s)
- Hàm hiển thị xâu và độ dài xâu
- Hàm nối xâu để cộng hai xâu (xaukytu s)
Trang 15strcpy(str,temp); //copy xau temp vao xau str
strcat(str,s.str);//noi hai xau s.str va str
xaukytu s1(" Truong Dai Hoc ");
xaukytu s2(" Dien Luc ");
-PROGRAM 4: Tạo một lớp vector gồm có các thành phần sau:
- Các thuộc tính : float * v; int n
Trang 16- Hàm thiết lập không tham số
vector();//ham thiet lap khong tham so
vector(int size);//ham thiet lap mot tham so
vector(int size,float * a);//ham thiet lap hai tham so
cout<<" Su dung ham thiet lap khong tham so :"<<endl;
cout<<" Tao mot doi tuong lop vecto co dia chi tai:"<<this<<endl;
cout<<" Nhap vao so toa do :";
{ cout<<" Su dung ham thiet lap mot tham so :"<<endl;
cout<<" Tao mot doi tuong lop vecto co dia chi tai:"<<this<<endl;
n=size;
v=new float[n];
cout<<" Xin cap phat mot vung bo nho cho "<<n<<"so thuc"<<" tai dia chi
Trang 17cout<<" Su dung ham thiet lap hai tham so :"<<endl;
cout<<" Tao mot doi tuong lop vecto co dia chi tai:"<<this<<endl;
Trang 18+ Hàm tính diện tích tam giác
+ Hàm kiểm tra tam giác(đều, vuông cân, cân, vuông, thường)
+ Hàm hiển thị thông tin( diện tích, tính chất tam giác)
Viết một chương trình kiểm tra
cout<<"Nhap canh a:";cin>>a;
cout<<"Nhap canh b:";cin>>b;
cout<<"Nhap canh c:";cin>>c;
Trang 19else
return 3;
else
if(a*a==b*b+c*c||b*b==a*a+c*c||c*c==a*a+b*b) return 4;
Trang 20-PROGRAM 6: Xây dựng một lớp Time mô tả các thông tin vê giờ, phút,
giây.Lớp Time có các thành phần sau:
- Các thuộc tính mô tả giờ, phút, giây;
- Các hàm thành phần dùng để xác lập giá trị cho từng thành phần giờ, phút, giây(Có kiểm tra điều kiện giờ (0->23), phút(0->59), giây(0-
>59);
- Hàm thành phần setTime(int,int,int) để xác lập thời gian
- Hàm hiển thị giờ theo định dạng 24 tiếng (vd : 23:54:40);
- Hàm hiển thị giờ theo định dạng 12 tiếng( vd : 11:54:40 PM);
- Hàm tăngGiây()để tăng thời gian mỗi lần lên một giây Chú ý cáctrường hợp tăng sang phút tiếp theo, tăng sang giờ tiếp theo,tăng sang ngày tiếp theo
Viết chương trình chính khai báo một đối tượng thời gian là 23:59:58 và thực hiện tăng thời gian 5 giây đồng thời hiển thị thời gian cho mỗi lần tăng
Trang 22-PROGRAM 7: Viết một chương trình xây dựng hai lớp: một lớp thí sinh và một
lớp danh sách thí sinh Trong đó lớp thí sinh có dữ liệu bao gồm các thông tin: số báo danh, điểm toán, điểm hoá, điểm lý Lớp danh sách thí sinh có dữ liệu một mảng các thí sinh và số lượng phần tử thuộc mảng đó Viết chương trình thực hiện các công việc sau:
1 Nhập và hiển thị một danh sách các thí sinh từ bàn phím
2 Sắp xếp danh sách các thí sinh theo thứ tự tăng dần về điểm số
3 Hiển thị thông tin của các sinh viên có tổng điểm trên 18
Trang 23cout<<"So bao danh "<<sbd;
cout<<" Diem toan:"<<dtoan<<" Diem ly:"<<dly<<" Diem hoa:"<<dhoa; cout<<" Tong diem: "<<tdiem()<<endl;
Trang 24-PROGRAM 8: Chương trình dưới đây xây dựng một lớp hình tròn đơn giản có thành
phần dữ liệu là bán kính r và có các phương thức như: nhập dữ liệu cho r,tính toán và hiển thị chu vi, diện tích của hình tròn đó
Trang 25cout<<"Chu vi hinh tron la:"<<chuvi()<<endl;
cout<<"Dien tich hinh tron la:"<<dientich()<<endl;
-PROGRAM 9: Viết một chương trình nhập vào hai danh sách sinh viên vào 2 mảng
một chiều,sắp xếp hai mảng giảm dần theo điểm số của sinh viên và trộn 2 mảng trên thành một mảng giảm dần.Trong chương trình sử dụng các chương trình con sau:NHAP(sinhvien *sv, int n );HIENTHI(sinhvien *sv, int n );SAPXEP(sinhvien
Trang 26*sv, int n);SWAP(sinhvien *x,sinhvien *y);sinhvien *TRON_DS(sinhvien * sv1,sinhvien * sv2,int n1,int n2);
Lưu ý : Việc trộn mảng thì luôn có một mảng kết thúc trước do vậy phải biết mảng nào chưa hết phải thêm vào
void nhap(sinhvien *sv, int n );
void hienthi(sinhvien *sv, int n );
void sapxep(sinhvien *sv, int n);
void swap(sinhvien *x,sinhvien *y);
sinhvien * tron_ds(sinhvien * sv1,sinhvien * sv2,int n1,int n2);
void main()
{
int n1,n2;
sinhvien sv1[20],sv2[20];
printf("\n Ban hay nhap danh sach sinh vien vao 2 mang!");
printf("\n Nhap so luong sinh vien vao danh sach thu nhat n1:");
Trang 27void sapxep(sinhvien *sv, int n)
Trang 28Xây dựng lớp date1 có các thành phần sau:
- Các thuộc tính: day, month, year
Trang 29cout<<"Thang "<<mn<<" khong hop le:"<<endl;
Xây dựng lớp date1 có các thành phần sau:
- Các thuộc tính : day, month, year
- Hàm thiết lập có tham số mặc định
- Hàm kiểm tra năm nhuận
- Hàm kiểm tra ngày cuối tháng
Trang 30date1(int d=1,int m=1,int y=1900);
void setdate(int d,int m,int y);
date1 &operator++();
date1 &operator+=(int addday);
bool leapyear(int y);//kiem tra nam nhuan
bool endofmonth(int d);//kiem tra ngay cuoi thang
friend ostream & operator<<(ostream & out,date1 &date);};
const int date1::days[]={0,31,28,31,30,31,30,31,31,30,31,30,31};
date1::date1(int d,int m,int y)
year=(y>=1900 && y<=2100)?y:1900;
if( month==2 && leapyear(y))
Trang 31if(month==2 && leapyear(year))
Trang 32out<< date.day <<"/"<<monthname[date.month]<<" / " <<date.year<<endl; return out;
Tạo lớp điểm (point) có thuộc tính là các toạ độ x, y
Xây dựng các hàm cần thiết như nhập và hiển thị các toạ độ, tính khoảng cách giữa hai điểm
Viết chương trình nhập vào n điểm từ bàn phím.Tìm và hiển thị khoảng cách lớnnhất giữa hai điểm trong n điểm đó
Trang 33Xây dựng lớp nhanvien có các thành phần sau:
- Các thuộc tính: tendem, ho, ngaysinh, ngayvaolam Chú ý : sử
dụng con trỏ char cho tendem, ho và ngaysinh, ngayvaolam có kiểu lớp date1vừa xây dựng ở bài tập trước
Trang 35cout << " Ho va ten la:"<<lastname<<" " << firstname <<endl;
cout<<" Ngay sinh la:";
Trang 36Xây dựng các lớp theo cây thừa kế sau:Lớp hình tròn, hình vuông, tam giác đều là thừa kế từ lớp hai chiều, lớp lập phương, lớp hình cầu là thừa kế từ lớp ba chiều.Lớp hai chiều, lớp ba chiều là thừa kế từ lớp hình vẽ
virtual void in()=0;
virtual char *ten()=0;
virtual float dientich()=0;
Trang 39class lapphuong:public bachieu
Chương trình sử dụng khuôn hình (template) để thực hiện việc tìm phân
số nhỏ nhất, sau đó đưa kết quả lên màn hình
Trang 40Sử dụng khuôn hình lớp xây dựng lớp List có các tính chất sau:
- Các thuộc tính :T a[max], int size;
- Các phương thức : Chèn, xoá , tìm kiếm, sắp xếp các phần
Trang 41bool is_empty();
void insert(int index, T &itemp);
void remove(int index);
T retrieve(int index);
int find_max(int start,int end);
int search(T & itemp);
void append(T &itemp);
void sort(int start,int end);
template<class T,int max>
void list<T,max>::append(T &itemp)
{
a[size]=itemp;
size++;
}
template<class T,int max>
void list<T,max>::insert(int index,T & itemp){
Trang 42void list<T,max>::remove(int index)
template<class T,int max>
int list<T,max>::find_max(int start,int end){
template <class T,int max>
int list<T,max>::search(T& itemp)
{
Trang 43template<class T,int max>
void list<T,max>::sort(int start,int end){
Trang 44Sử dụng khuôn hình lớp xây dựng lớp stack có các thành phần sau:
- Các thuộc tính: T a[max]; int top;
Trang 45template<class T,int max>
void stack<T,max>::push(T itemp){
Trang 47public:
phanso();
phanso(phanso & p);
bool operator<(phanso & p);
friend ostream& operator<<(ostream &mh,phanso &p); friend istream& operator>>(istream &bp,phanso &p);};
Trang 51-PROGRAM 20:
Xây dựng lớp vector sử dụng hàm tạo và hàm huỷ(C++9) (14/09/2006)
Tạo một lớp vector gồm có các thành phần sau:
- Các thuộc tính : float * v; int n
- Hàm thiết lập không tham số
vector();//ham thiet lap khong tham so
vector(int size);//ham thiet lap mot tham so
vector(int size,float * a);//ham thiet lap hai tham so
cout<<" Su dung ham thiet lap khong tham so :"<<endl;
cout<<" Tao mot doi tuong lop vecto co dia chi tai:"<<this<<endl; cout<<" Nhap vao so toa do :";
Trang 52cin>>v[i];
}
}
vector::vector(int size)
{ cout<<" Su dung ham thiet lap mot tham so :"<<endl;
cout<<" Tao mot doi tuong lop vecto co dia chi tai:"<<this<<endl; n=size;
cout<<" Su dung ham thiet lap hai tham so :"<<endl;
cout<<" Tao mot doi tuong lop vecto co dia chi tai:"<<this<<endl; n=size;
Trang 531 Viết hàm tìm giá trị lớn nhất của 1 mảng
2 Viết hàm trả về địa chỉ của phần tử lớn nhất trong 1 mảng
Viết chương trình ứng dụng các hàm trên
3 Viết một hàm đồng thời tìm giá trị lớn nhất và giá trị nhỏ nhất của 1 mảng.Viết 1 chương trình ứng dụng hàm đó
void nhap (int *a, int n);
int gtln (int *a,int n);
int _tmain(int argc, _TCHAR* argv[])
Trang 55int diachi (int *a,int n)
if (*q>max) max=int(&q);
void nhap (int *a, int n);
int diachi (int *a,int n);
Trang 57// Assign the string passed
String(char* s){ length=strlen(s); l=length+1;
str=new char[l]; strcpy(str,s);
*(str+length)='\0'; tmp=new char[1];}
//Destructor
~String() { delete str; delete tmp; }
//Length of the string
long Length(){length=strlen(str);return length;}
//like in Java, toString returns the entire string
char* toString(){ return str;};
//Get the substring providing start and length parameters
char* subString(long stt,long len);
//Get the wordcount "default delimiter is spaces and CRLF
long WordCount();
Trang 58//Get the location of a particular string or character inside the actual string
str=new char[l]; strcpy(str,s);
*(str+length)='\0'; tmp=new char[1];
Trang 60if ((*(str+a)== ' ' || a==length || *(str+a)=='\n') && !
(*(str+a)==' ' && 1)==' ') && !(*(str+a)=='\n' && 1)=='\n') && !(*(str+a-1)==' ' && *(str+a)=='\n') && !(*(str+a-1)=='\n' && *(str+a)==' ') && !(*(str+a-1)=='\n' && a==length) && !(*(str+a-1)==' ' && a==length))
//Define default string
String x("Hello world This is new C++");
//show the string to check
cout<<x.toString()<<endl;
//get its length
cout <<endl<<"The string length is " <<x.Length()<<endl;
//Get the location of the word "world"
cout<<"\n'world' is found at " <<x.getCharLoc("world",1)<<endl; //Get the loc of 'new'
cout<<"'new' is found at "<<x.getCharLoc("new",1) <<endl;
Trang 61//Change the string
x.setString("Bull ****");
//show the string to check
cout<<x.toString()<<endl;
//get its length
cout <<endl<<"The new string length is " <<x.Length()<<endl; system("pause");
}
Chạy trương trình:
Hello world This is new C++
The string length is 27'world' is found at 7'new' is found at 21Bull ****
The new string length is 9
Trang 62#include <assert.h>
class String
{
private:
char *Ptr; //Con tro tro den diem bat dau cua chuoi
int Length; //Chieu dai chuoi
public:
String(const char * = ""); //Constructor chuyen doi
String(const String &); //Constructor sao chep
~String(); //Destructor
const String &operator=(const String &);
//Phep gan
String &operator+=(const String &);
int operator!() const;
int operator==(const String &) const; //So sanh bang` int operator!=(const String &) const; //So sanh khong bang int operator<(const String &) const; //So sanh nho hon int operator>(const String &) const; //So sanh lon hon int operator>=(const String &) const; //So sanh >=
int operator<=(const String &) const; //So sanh <=
char & operator[](int); //Tra ve ky tu tham chieu
String &operator()(int, int); //Tra vemot chuoi con
int GetLength() const; //Lay do dai
friend ostream &operator<<(ostream &, const String &);
friend istream &operator>>(istream &, String &);