Lập trình hướng đối tượng - 4

Hienthi(z); getch();

}

Ví dụ 1.15: viết chương trình khai báo cấu trúc đa thức bậc n, viết các hàm và hàm toán tử thực hiện các công việc sau:

a. Nhập vào bậc và các hệ số cđa đa thức

b. Hiển thị đa thức ra màn hình

c. Tính giá trị cđa đa thức tại x = a, a là một số thực nhập từ bàn phím

d. Tính tổng hai đa thức

e. Tính hiệu hai đa thức

f. Tính tích hai đa thức

#include<iostream.h>

Có thể bạn quan tâm!

Xem toàn bộ 256 trang tài liệu này.

#include<conio.h>

#include<math.h>

Lập trình hướng đối tượng - 4

#define max 100 struct dathuc

{

int bac;

float heso[max];

};

void nhap(dathuc &p)

{

cout<<"Bac cua da thuc:"; cin>>p.bac;

for(int i=0;i<=p.bac;i++)

{

cout<<"he so thu "<<i<<":"; cin>>p.heso[i];

}

}

void hienthi(dathuc p)

{

for(int i=p.bac;i>0;i--)

{

cout<<p.heso[i]<<"x^"<<i;

if(p.heso[i-1]>=0) cout<<"+";

}

cout<<p.heso[0];

}

float giatri(dathuc p,float a)

{

float t=0;

for(int i=0;i<=p.bac;i++) t = t + p.heso[i]*pow(a,i); return t;

}

dathuc operator+(dathuc p, dathuc q)

{

dathuc kq; if(p.bac > q.bac)

{


}

else

{


}

kq.bac = p.bac;

for(int i=0;i<=q.bac;i++) kq.heso[i]= p.heso[i]+q.heso[i]; for(int j=q.bac+1;j<=p.bac;j++) kq.heso[j]=p.heso[j];


kq.bac = q.bac;

for(int i=0;i<=p.bac;i++) kq.heso[i]= q.heso[i]+p.heso[i]; for(int j=p.bac+1;j<=q.bac;j++) kq.heso[j]=q.heso[j];

while((kq.heso[kq.bac]==0) && (kq.bac>=0)) kq.bac=kq.bac-1;

return kq;

}

dathuc operator-(dathuc p, dathuc q)

{

dathuc kq; if(p.bac > q.bac)

{


}

else

{


}

kq.bac = p.bac;

for(int i=0;i<=q.bac;i++) kq.heso[i]= p.heso[i]-q.heso[i]; for(int j=q.bac+1;j<=p.bac;j++) kq.heso[j]=p.heso[j];


kq.bac = q.bac;//xac dinh bac cua kq for(int i=0;i<=p.bac;i++) kq.heso[i]= q.heso[i]-p.heso[i]; for(int j=p.bac+1;j<=q.bac;j++) kq.heso[j]=-q.heso[j];

while((kq.heso[kq.bac]==0) && (kq.bac>=0)) kq.bac=kq.bac-1;

return kq;

}

dathuc operator*(dathuc p,dathuc q)

{

dathuc kq; kq.bac=p.bac+q.bac;

for(int i=0;i<=kq.bac;i++) kq.heso[i]=0; for(i=0;i<=p.bac;i++)

for(int j=0;j<=q.bac;j++) kq.heso[i+j]+=p.heso[i]*q.heso[j];

return kq;

}

void main()

{

dathuc p,q,r;

nhap(p);

cout<<"Da thuc vua nhap:"; hienthi(p);

cout<<"n"; nhap(q);

cout<<"Da thuc vua nhap:"; hienthi(q);

r=p+q;

cout<<"nTong hai da thuc:"; hienthi(r);

r=p-q;

cout<<"nHieu hai da thuc:"; hienthi(r);


r=p*q;

cout<<"nTich hai da thuc:"; hienthi(r);

getch();

}

Các toán tử nhập/xuất (>>/<<) đã được định nghĩa sẵn trong các lớp đối tượng

istream và ostream trong thư viện iostream.h. Tuy nhiên, mặc định chúng được sử dụng để nhập/xuất dữ liệu kiểu chuẩn. C++ cho phép ta định nghĩa chồng các toán tử >> và << trên các kiểu dữ liệu do người lập trình tự định nghĩa. Giả sử ta khai báo kiểu cấu trúc ts- thí sinh gồm 3 trường: sbd- số báo danh, ten- họ và tên cđa thí sinh, diem- tổng điểm thi cđa thí sinh, ta có thể sử dụng toán tử >> để nhập thông tin một thí sinh và toán tử << để hiển thị thông tin về một thí sinh, như trong ví dụ sau:

Ví dụ 1.16:

#include<iostream.h>

#include<conio.h>

#include<string.h> struct ts

{

char sbd[5]; char ten[30];

unsigned int diem;

};

ostream &operator<<(ostream &os, const ts &t)

{

cout<<"nSo bao danh:"<<t.sbd; cout<<"nHo va ten:"<<t.ten; cout<<"nTong diem:"<<t.diem; return os;

}

istream &operator>>(istream &is, ts &t)

{

cout<<"So bao danh:";

is.getline(t.sbd,5);//phương thức dùng để nhập xâu ký tự cout<<"Ho va ten:";

is.getline(t.ten,30); cout<<"Tong diem:"; is>>t.diem; is.ignore();

return is;

}

void main()

{

ts ds[100]; int n,i;

cout<<"Nhap so thi sinh:"; cin>>n;

cin.ignore(1);//xoá bộ nhớ đệm bàn phím for(i=1;i<=n;i++)

{

cout<<"Nhap thong tin ve thi sinh thu "<<i<<":n"; cin>>ds[i];

}

cout<<"nDanh sach thi sinhn"; for(i=1;i<=n;i++) cout<<ds[i]<<"n"; getch();

}


Câu hỏi và Bài tập

1. Trong các khai báo con trỏ sau, những khai báo nào là đúng:

a. int A*;

b. *int A;

c. int* A, B;

d. int* A, *B;

e. int *A, *B;

2. Với khai báo: int a = 12; int *pa;

các phép gán nào sau đây là hợp lệ:

a. pa = &a;

b. pa = a;

c. *pa = &a;

d. *pa = a;

3. Với khai báo:

int A[5] = {10, 20, 30, 40, 50};

int *pa = A+2; khi đó, *pa = ?

a. 10

b. 20

c. 30

d. 40

e. 50

4. Với đoạn chương trình:

int A[5] = {10, 20, 30, 40, 50};

int *pa = A;

*pa += 2; khi đó, *pa = ?

a. 10

b. 12

c. 30

d. 32

5. Với đoạn chương trình:

int A[5] = {10, 20, 30, 40, 50};

int *pa = A; pa += 2;

khi đó, *pa = ?

a. 10

b. 12

c. 30

d. 32

6. Với đoạn chương trình:

int A[5] = {10, 20, 30, 40, 50};

int *pa = A; pa += 2;

khi đó, pa = ? a. &A[0]

b. A[2] c. &A[2]

d. Không xác định

7. Với đoạn chương trình:

int A[5] = {10, 20, 30, 40, 50};

int *pa = A; pa -= 2;

khi đó, pa = ? a. &A[0]

b. &A[2]

c. &A[4]

d. Không xác định

8. Với đoạn chương trình: int A[3][3] = {

{10, 20, 30},

{40, 50, 60},

{70, 80, 90}

};

int *pa;

khi đó, để có được kết quả *pa = 50, các lệnh nào sau đây là đúng?

a. pa = A + 4;

..... Xem trang tiếp theo?
⇦ Trang trước - Trang tiếp theo ⇨

Ngày đăng: 03/07/2022