Yêu cầu mọi thông tin sao chép từ blog này phải được ghi rõ đầy đủ: Thông tin được sao chép từ "http://www.dangngochoangthanh.blogspot.com".

Cool wallpaper http://www.fancymessage.com

EMOJI KEYBOARD PRO http://emojiselector.com

THƯ VIỆN HÌNH ĐỘNG FLASH ANIMATION: http://flashanimationlibrary.blogspot.ru/

Hệ thống học trực tuyến đang được phát triển và sẽ đưa vào sử dụng vào cuối năm nay. Hãy xem qua một số demo của Học Trực Tuyến.


HỌC TRỰC TUYẾN ĐÃ CUNG CẤP PHIÊN BẢN TRUY CẬP QUA MOBILE http://dangngochoangthanh.blogspot.com/?m=1

XEM KÊNH HỌC TRỰC TUYẾN TRÊN YOUTUBE



Search on This Blog

Saturday, September 11, 2010

Struct

Kiểu dữ liệu mảng mà chúng ta đã thảo luận ở trên chỉ giúp chúng ta lưu một tập dữ liệu cùng loại. Nếu chúng ta không đơn thuần lưu trữ cùng loại dữ liệu, mà có thể là nhiều kiểu dữ liệu khác nhau. Khi đó, mảng không thể giải quyết được vấn đề. Trong C++ (thậm chí cả C) cung cấp cho chúng ta một kiểu dữ liệu giúp ta giải quyết vấn đề này, đó là struct.

Struct

Một dữ liệu struct là một nhóm các phần tử có thể có kiểu dữ liệu khác nhau được đặt cùng một tên. Các phần tử dữ liệu này được gọi là các thành viên của struct. Cấu trúc khai báo struct trong C++ như sau
struct tên_struct{ type    thành_viên_1;
type    thành_viên_2;

} tên_đối_tượng_struct;
Trong đó:
struct là một từ khóa.
tên_struct là tên kiểu dữ liệu struct mà ta định nghĩa.
thành_viên_1, … là các phân tử thành viên của struct.
tên_đối_tượng_struct: là tên biến thuộc kiểu tên_struct.
Hai cách khai báo sau đây là tương đương.

Ví dụ 1 Ví dụ 2
struct product{ int weight;
float price;
}
product apple;
product banana, melon;
struct product{ int weight;
float price;
}apple, banana, melon;
Giải thích: trong hai ví dụ trên product là kiểu dữ liệu struct mà ta tạo ra. Nó gồm có hai thành viên là weight và price. Tương ứng với kiểu dữ liệu này, ta có các biến apple, banana, melon. Để khai báo nó, ta có thể sử dụng một trong hai cách theo như hai ví dụ này. Bạn cần lưu ý rằng, các biến apple, banana, melon là các biến thuộc kiểu dữ liệu product.
Để truy cập đến các thành viên của biến struct, ta sử dụng dấu chấm (.).
apple.weight = 200; apple.price = 2;
banana.weight = 150;
banana.price = 1;
Chúng ta có thể hiểu apple.weight là khối lượng của táo, apple.price là giá tiền của táo… Bạn có thể xem mỗi thành viên của một biến struct như là một biến độc lập mà bạn có thể truy cập bằng cách tên_biến.phần_tử_thành_viên. Bạn hoàn toàn có thể thực hiện các phép toán tương ứng với mỗi dữ liệu thành viên này (nghĩa là các phép toán đó tương ứng với các phép toán trên kiểu dữ liệu của các phần tử thành viên đó: nếu phần tử thành viên là kiểu nguyên thì bạn có thể thực hiện các phép toán số nguyên với thành viên này, nếu phần tử thành viên là kiểu xâu thì bạn có thể thực thi các phép toán với xâu cho biến thành viên này,…).
Ví dụ, tôi mua 400gam táo, và 300g chuối. Giá của mỗi 100g táo là 1$, và 100g chuối là 0.7$. Tôi cần tính toán số tiền mà tôi cần trả
Ví dụ
apple.weight = 400; apple.price = (float)apple.weight*1/100;
banana.weight = 300;
banana.price = banana.weight*0.7/100;
float money = apple.price+banana.price;
Như bạn thấy, tôi có thể thực hiện các phép toán số học với các phần tử thành viên là kiểu số như các biến số bình thường.
Struct là một kiểu dữ liệu do người dùng định nghĩa (nhờ vào từ khóa struct – từ khóa struct viết thường). Ta cũng có thể khai báo một mảng các phần tử thuộc kiểu struct. Ví dụ sau đây minh họa cho việc mua bán của bạn khi bạn đi siêu thị.
Bài toán: Trong siêu thị, giá táo và chuối được ấn định trên từng sản phẩm tùy thuộc chất lượng của sản phẩm,không phụ thuộc vào khối lượng của nó.
  1. a. Tính khối lượng hàng hóa (kg) mà người tiêu dùng mua.
  2. b. Nếu khách hàng mua hàng trị giá trên 10$, thì người tiêu dùng sẽ được khuyến mãi. Hãy kiểm tra xem người tiêu dùng có được khuyến mãi hay không.
Biết rằng số lượng táo và chuối do người tiêu dùng lựa chọn.
Chương trình Kết quả
#include using namespace std;
#define MAX 10
struct product{
int weight;
float price;
}apples[MAX], bananas[MAX];
/*
Khai báo hàm
*/
void buyProducts(product pd, string name, int &weight, float &price)
{
int i = 0;
cout<<”Buy “<<
while (true){
cout<<”weight and price: <
cin>>pd[i].weight;
cin>>pd[i].price;
weight += pd[i].weight;
price += pd[i].price;
cout<<”Continue to buy “<<<” (y/n) ?”;
char yn;
cin>>yn;
if((yn==’n’)||(yn==’N’)) break;
else i++;
}
}
int main()
{
int weight = 0;
float price = 0;
buyProducts(apples, “apples”, weight, price);
buyProducts(bananas, “bananas”, weight, price);
cout<<”Total weight: “<<(float)weight/1000<
if(price>10)
cout<<”Promotion”;
else
cout<<”No Promotion”;
return 0;
}
Buy apples weight and price
100
2
Continue to buy apples (y/n) ?y
weight and price
200
3
Continue to buy apples (y/n) ?n
Buy bananas
weight and price
150
1
Continue to buy bananas (y/n) ?y
weight and price
250
3
Continue to buy bananas (y/n) ?n
Total weight: 0.7
No Promotion
Giải thích:
Mảng apples và bananas thuộc kiểu dữ liệu product. Hàm buyProducts dùng để tính toán khối lượng và tổng giá  hàng hóa mỗi loại mua được. Nếu tham số products trong hàm là apples, thì nó sẽ tính tương ứng với khối lượng tổng cộng và tổng đơn giá của apples. Tương tự cho bananas. Ta sử dụng vòng lặp while vì ta không biết chính xác số lượng hàng hóa mà người dùng lựa chọn. Tuy nhiên, con số tổng không thể vượt hằng số MAX mà ta đã định nghĩa. Biến weight và price được truyền theo tham biến, do đó, trước phép cộng dồn (toán tử cộng đồng nhất +=), ta không cần khởi tạo giá trị 0 cho chúng, ta có thể khởi tạo cho chúng ngay đầu hàm main. Nếu bạn khởi tạo đầu hàm buyProducts, thì bạn chỉ có thể tính được khối lượng và giá của từng loại một mà thôi (khi đó, nếu muốn tính toán cho cả hai sản phẩm, bạn bổ sung thêm biến để lưu lại các giá trị này). Sau khi gọi hàm này hai lần, tương ứng với apples và bananas, thì biến weight lưu lại tổng khối lượng của cả hai sản phẩm, biến price lưu lại giá của cả hai sản phẩm. Khối lượng được quy đổi sang kg, nên ta sẽ chia cho 1000. Nếu bạn nhập vào là đ.v. kg, thì không cần thiết.
Trong phần thực thi chương trình, người tiêu dùng đã mua hai quả táo và hai quả chuối. Quả táo thứ nhất có khối lượng 100g và giá 2$, quả táo thứ hai – 200g và 3$. Quả chuối thứ nhất có khối lượng 150g và giá 1$, quả chuối thứ hai – 250g và 3$.

No comments:

Post a Comment