Thứ Hai, 1 tháng 10, 2012

Bắt đầu với bộ môn điện tử – Chất bán dẫn

Giới thiệu
Chào bạn mình là Nguyễn Văn Thắng, hiện đang là sinh viên khoa điện tử của trường ĐHCN Hà Nội, trong quá trình học tập và tìm kiếm tài liệu trên mạng mình kiếm được rất nhiều tài liệu muốn chia sẻ, muốn lưu trữ, và mình cũng lưu trữ được khá nhiều, tuy nhiên bạn biết đấy, máy tính rồi cũng có lúc hỏng, kiến thức đôi khi mình cũng sao nhãng....
Thế rồi tình cờ tôi vào một trang web , hỏi ra mới biết họ làm trên nền blogger và ý tưởng lưu trữ tài liệu, kiến thức được nhen nhóm, và hôm nay sau khi đã tìm hiểu được cơ bản về blogger mình quyết định tập trung sưu tầm và post tài liệu cho những ai đang học cần, chắc chắn ít nhất hữu ích tối thiểu với lớp của tôi, còn bạn thì sao? nếu tài liệu mình của mình có ích thì hãy ủng hộ trang web của mình nhá




Bắt đầu nào!


Mình mới học nên sưu tầm tạm những cái gọi là cơ bản đã,


1 – Chất bán dẫn
1.1 - Chất bán dẫn là gì ?Chất
bán dẫn là nguyên liệu để sản xuất ra các loại linh kiện bán dẫn như
Diode, Transistor, IC mà ta đã thấy trong các thiết bị điện tử ngày
nay.
Chất bán dẫn là những chất có đặc điểm trung gian giữa
chất dẫn điện và chất cách điện, về phương diện hoá học thì bán dẫn là
những chất có 4 điện tử ở lớp ngoài cùng của nguyên tử. đó là các chất
Germanium ( Ge) và Silicium (Si)
Từ các chất bán dẫn ban đầu ( tinh khiết) người ta phải
tạo ra hai loại bán dẫn là bán dẫn loại N và bán dẫn loại P, sau đó
ghép các miếng bán dẫn loại N và P lại ta thu được Diode hay Transistor.
Si và Ge đều có hoá trị 4, tức là lớp ngoài cùng có 4
điện tử, ở thể tinh khiết các nguyên tử Si (Ge) liên kết với nhau theo
liên kết cộng hoá trị như hình dưới.

Chất bán dẫn tinh khiết .
1.2 - Chất bán dẫn loại N
* Khi ta pha một lượng nhỏ chất có hoá trị 5 như Phospho (P) vào chất
bán dẫn Si thì một nguyên tử P liên kết với 4 nguyên tử Si theo liên
kết cộng hoá trị, nguyên tử Phospho chỉ có 4 điện tử tham gia liên kết
và còn dư một điện tử và trở thành điện tử tự do => Chất bán dẫn lúc
này trở thành thừa điện tử ( mang điện âm) và được gọi là bán dẫn N (
Negative : âm ).

Chất bán dẫn N
1.3 - Chất bán dẫn loại P
Ngược lại khi ta pha thêm một lượng nhỏ chất có hoá trị 3 như Indium
(In) vào chất bán dẫn Si thì 1 nguyên tử Indium sẽ liên kết
với 4 nguyên tử Si theo liên kết cộng hoá trị và liên kết bị thiếu một
điện tử => trở thành lỗ trống ( mang điện dương) và được
gọi là chất bán dẫn P.

Chất bán dẫn P
2 – Diode (Đi ốt) Bán dẫn
2.1 – Tiếp giáp P – N và Cấu tạo của Diode bán dẫn.Khi
đã có được hai chất bán dẫn là P và N , nếu ghép hai chất bán dẫn theo
một tiếp giáp P – N ta được một Diode, tiếp giáp P -N có đặc điểm
: Tại bề mặt tiếp xúc, các điện tử dư thừa trong bán dẫn N khuyếch tán
sang vùng bán dẫn P để lấp vào các lỗ trống => tạo thành một lớp Ion
trung hoà về điện => lớp Ion này tạo thành miền cách điện giữa
hai chất bán dẫn.

Mối tiếp xúc P – N => Cấu tạo của Diode .
* Ở hình trên là mối tiếp xúc P – N và cũng chính là cấu tạo của Diode bán dẫn.


Ký hiệu và hình dáng của Diode bán dẫn.
2.2 - Phân cực thuận cho Diode.Khi
ta cấp điện áp dương (+) vào Anôt ( vùng bán dẫn P ) và điện áp âm (-)
vào Katôt ( vùng bán dẫn N ) , khi đó dưới tác dụng tương tác của điện
áp, miền cách điện thu hẹp lại, khi điện áp chênh lệch giữ hai cực đạt
0,6V ( với Diode loại Si ) hoặc 0,2V ( với Diode loại Ge ) thì diện
tích miền cách điện giảm bằng không => Diode bắt đầu dẫn điện. Nếu
tiếp tục tăng điện áp nguồn thì dòng qua Diode tăng nhanh nhưng chênh
lệch điện áp giữa hai cực của Diode không tăng (vẫn giữ ở mức 0,6V )

Diode (Si) phân cực thuận – Khi Dode dẫn
điện áp thuận đựơc gim ở mức 0,6V

Đường đặc tuyến của điện áp thuận qua Diode
* Kết luận : Khi Diode (loại Si)
được phân cực thuận, nếu điện áp phân cực thuận < 0,6V thì chưa có
dòng đi qua Diode, Nếu áp phân cực thuận đạt = 0,6V thì có dòng đi qua
Diode sau đó dòng điện qua Diode tăng nhanh nhưng sụt áp thuận vẫn giữ
ở giá trị 0,6V .
2.3 – Phân cực ngược cho Diode.
Khi phân cực ngược cho Diode tức là cấp nguồn (+) vào Katôt (bán
dẫn N), nguồn (-) vào Anôt (bán dẫn P), dưới sự tương tác của điện áp
ngược, miền cách điện càng rộng ra và ngăn cản dòng điện đi qua
mối tiếp giáp, Diode có thể chiu được điện áp ngược rất lớn
khoảng 1000V thì diode mới bị đánh thủng.

Diode chỉ bị cháy khi áp phân cực ngựơc tăng > = 1000V
2.4 – Phương pháp đo kiểm tra Diode

Đo kiểm tra Diode
Đặt đồng hồ ở thang x 1Ω , đặt hai que đo vào hai đầu Diode, nếu :
Đo chiều thuận que đen vào Anôt, que đỏ vào Katôt => kim lên, đảo chiều đo kim không lên là => Diode tốt
Nếu đo cả hai chiều kim lên = 0Ω => là Diode bị chập.
Nếu đo thuận chiều mà kim không lên => là Diode bị đứt.
Ở phép đo trên thì Diode D1 tốt , Diode D2 bị chập và D3 bị đứt
Nếu để thang 1KΩ mà đo ngược vào Diode kim vẫn lên một chút là Diode bị dò.
2.5 – Ứng dụng của Diode bán dẫn .
* Do tính chất dẫn điện một chiều nên Diode
thường được sử dụng trong các mạch chỉnh lưu nguồn xoay chiều thành một
chiều, các mạch tách sóng, mạch gim áp phân cực cho transistor hoạt
động . trong mạch chỉnh lưu Diode có thể được tích hợp thành Diode cầu
có dạng .

Diode cầu trong mạch chỉnh lưu điện xoay chiều .
3 – Các loại Diode
3.1 - Diode Zener
* Cấu tạo :
Diode Zener có cấu tạo tương tự Diode thường nhưng có hai lớp bán dẫn P
- N ghép với nhau, Diode Zener được ứng dụng trong chế độ phân cực
ngược, khi phân cực thuận Diode zener như diode thường nhưng khi phân
cực ngược Diode zener sẽ gim lại một mức điện áp cố định bằng giá trị
ghi trên diode.

Hình dáng Diode Zener ( Dz )

Ký hiệu và ứng dụng của Diode zener trong mạch.
Sơ đồ trên minh hoạ ứng dụng của Dz, nguồn U1 là nguồn có điện áp thay đổi, Dz là diode ổn áp, R1 là trở hạn dòng.
Ta thấy rằng khi nguồn U1 > Dz thì áp trên Dz luôn luôn cố định cho dù nguồn U1 thay đổi.
Khi nguồn U1 thay đổi thì dòng ngược qua Dz thay đổi, dòng ngược qua Dz có giá trị giới hạn khoảng 30mA.
Thông thường người ta sử dụng nguồn U1 > 1,5 => 2
lần Dz và lắp trở hạn dòng R1 sao cho dòng ngược lớn nhất qua Dz
< 30mA.

Nếu U1 < Dz thì khi U1 thay đổi áp trên Dz cũng thay đổi
Nếu U1 > Dz thì khi U1 thay đổi => áp trên Dz không đổi.
3.2 - Diode Thu quang. ( Photo Diode )Diode
thu quang hoạt động ở chế độ phân cực nghịch, vỏ diode có một miếng
thuỷ tinh để ánh sáng chiếu vào mối P – N , dòng điện ngược qua diode
tỷ lệ thuận với cường độ ánh sáng chiếu vào diode.

Ký hiệu của Photo Diode

Minh hoạ sự hoạt động của Photo Diode
3.3 - Diode Phát quang ( Light Emiting Diode : LED )Diode
phát phang là Diode phát ra ánh sáng khi được phân cực thuận, điện áp
làm việc của LED khoảng 1,7 => 2,2V dòng qua Led khoảng từ 5mA đến
20mA
Led được sử dụng để làm đèn báo nguồn, đèn nháy trang trí, báo trạng thái có điện . vv…

Diode phát quang LED
3.4 – Diode Varicap ( Diode biến dung )Diode biến dung là Diode có điện dung như tụ điện, và điện dung biến đổi khi ta thay đổi điện áp ngược đặt vào Diode.

Ứn dụng của Diode biến dung Varicap ( VD )
trong mạch cộng hưởng
Ở hình trên khi ta chỉnh triết áp VR, điện áp
ngược đặt vào Diode Varicap thay đổi , điện dung của diode thay đổi
=> làm thay đổi tần số công hưởng của mạch.
Diode biến dung được sử dụng trong các bộ kênh Ti vi mầu, trong các mạch điều chỉnh tần số cộng hưởng bằng điện áp.
3.5 - Diode xungTrong
các bộ nguồn xung thì ở đầu ra của biến áp xung , ta phải dùng Diode
xung để chỉnh lưu. diode xung là diode làm việc ở tần số cao khoảng vài
chục KHz , diode nắn điện thông thường không thể thay thế vào vị trí
diode xung được, nhưng ngựơc lại diode xung có thể thay thế cho vị trí
diode thường, diode xung có giá thành cao hơn diode thường nhiều lần.
Về đặc điểm , hình dáng thì Diode xung không có gì khác biệt với Diode
thường, tuy nhiên Diode xung thường có vòng dánh dấu đứt nét hoặc
đánh dấu bằng hai vòng

Ký hiệu của Diode xung
3.6 – Diode tách sóng.
Là loại Diode nhỏ vở bằng thuỷ tinh và còn gọi là diode tiếp điểm vì
mặt tiếp xúc giữa hai chất bán dẫn P – N tại một điểm để tránh điện
dung ký sinh, diode tách sóng thường dùng trong các mạch cao tần dùng
để tách sóng tín hiệu.
3.7 – Diode nắn điện.
Là Diode tiếp mặt dùng để nắn điện trong các bộ chỉnh lưu nguồn AC 50Hz
, Diode này thường có 3 loại là 1A, 2A và 5A.

Diode nắn điện 5A
Nguồn: hocnghe.com.vn



Nhận xét của mình muốn bổ sung:
Các bạn lưu ý: Khi tính toán giá trị sụt áp trên Điôt không phải là giá trị cố định 0.6 với Si và 0.2 với Ge mà giá trị này chỉ là tương đối, giá trị thực tế được quye định trên điốt, còn với tính toàn thì nó phụ thuộc vào người ra đề
Còn với Điốt phân cực ngược thực tế vẫn có dòng đi qua nhưng nó có giá trị rất nhỏ, đôi khi tính toán người ta vẫn tính toán đến giá trị của nó

Đọc thêm : Bắt đầu với bộ môn điện tử – Chất bán dẫn - blog điện tử viễn thông http://blogdientuvienthong.blogspot.com/2012/01/bat-au-voi-bo-mon-ien-tu-chat-ban-dan.html#ixzz27YxgDmHe

Unlock Nokia and more

On the main screen type in:
*#06# for checking the IMEI (International Mobile Equipment Identity).
*#7780# reset to factory settings.
*#67705646# This will clear the LCD display(operator logo).
*#0000# To view software version.
*#2820# Bluetooth device address.
*#746025625# Sim clock allowed status.
#pw+1234567890+1# Shows if sim have restrictions.
*#92702689# - takes you to a secret menu where you may find some of the information below:
1. Displays Serial Number.
2. Displays the Month and Year of Manufacture
3. Displays (if there) the date where the phone was purchased (MMYY)
4. Displays the date of the last repair - if found (0000)
5. Shows life timer of phone (time passes since last start)
*#3370# - Enhanced Full Rate Codec (EFR) activation. Increase signal strength, better signal reception. It also help if u want to use GPRS and the service is not responding or too slow. Phone battery will drain faster though.
*#3370* - (EFR) deactivation. Phone will automatically restart. Increase battery life by 30% because phone receives less signal from network.
*#4720# - Half Rate Codec activation.
*#4720* - Half Rate Codec deactivation. The phone will automatically restart
If you forgot wallet code for Nokia S60 phone, use this code reset: *#7370925538#
Note, your data in the wallet will be erased. Phone will ask you the lock code. Default lock code is: 12345
Press *#3925538# to delete the contents and code of wallet.
Unlock service provider: Insert sim, turn phone on and press vol up(arrow keys) for 3 seconds, should say pin code. Press C,then press * message should flash, press * again and 04*pin*pin*pin# \
*#7328748263373738# resets security code.
Default security code is 12345
Change closed caller group (settings >security settings>user groups) to 00000 and ure phone will sound the message tone when you are near a radar speed trap. Setting it to 500 will cause your phone 2 set off security alarms at shop exits, gr8 for practical jokes! (works with some of the Nokia phones.) Press and hold "0" on the main screen to open wap browser.
Thanks. link website: gleez.com/articles/did-you-know/nokia-secret-codes
Master nokia unlock Website: mastercode.nokiafree.org or nokiamastercode.com

when delete file not display window answer


Khi xóa file hay Folder, window sẽ hỏi yes/no. Để thay đổi thuộc tính này, muốn thay đổi làm như sau:
1. Start + Run: Gpedit.msc
2. Làm như hình:

Bài 11: Các Kiểu Dữ Liệu Do Người Dùng Định Nghĩa Đọc thêm : Bài 11: Các Kiểu Dữ Liệu Do Người Dùng Định Nghĩa - blog điện tử viễn thông

Trong bài trước chúng ta đã xem xét một loại dữ liệu được định nghĩa bởi người dùng (người lập trình): cấu trúc. Nhưng có còn nhiều kiểu dữ liệu tự định nghĩa khác:

Tự định nghĩa các kiểu dữ liệu (typedef).C++ cho phép chúng ta định nghĩa các kiểu dữ liệu của riêng mình dựa trên các kiểu dữ liệu đã có. Để có thể làm việc đó chúng ta sẽ sử dụng từ khoá typedef, dạng thức như sau:

typedef existing_type new_type_name ;trong đó existing_type là một kiểu dữ liệu cơ bản hay bất kì một kiểu dữ liệu đã định nghĩa và new_type_name là tên của kiểu dữ liệu mới. Ví dụ

typedef char C;
typedef unsigned int WORD;
typedef char * string_t;
typedef char field [50];Trong trường hợp này chúng ta đã định nghĩa bốn kiểu dữ liệu mới: C, WORD, string_t và field kiểu char, unsigned int, char* kiểu char[50], chúng ta hoàn toàn có thể sử dụng chúng như là các kiểu dữ liệu hợp lệ:

C achar, anotherchar, *ptchar1;
WORD myword;
string_t ptchar2;
field name;typedef có thể hữu dụng khi bạn muốn định nghĩa một kiểu dữ liệu được dùng lặp đi lặp lại trong chương trình hoặc kiểu dữ liệu bạn muốn dùng có tên quá dài và bạn muốn nó có tên ngắn hơn.

UnionUnion cho phép một phần bộ nhớ có thể được truy xuất dưới dạng nhiều kiểu dữ liệu khác nhau mặc dù tất cả chúng đều nằm cùng một vị trí trong bộ nhớ. Phần khai báo và sử dụng nó tương tự với cấu trúc nhưng chức năng thì khác hoàn toàn:
union model_name {
type1 element1;
type2 element2;
type3 element3;
.
.
} object_name;
Tất cả các phần tử của union đều chiếm cùng một chỗ trong bộ nhớ. Kích thước của nó là kích thước của phần tử lớn nhất. Ví dụ:
union mytypes_t {
char c;
int i;
float f;
} mytypes;
định nghĩa ba phần tử

mytypes.c
mytypes.i
mytypes.fmỗi phần tử có một kiểu dữ liệu khác nhau. Nhưng vì tất cả chúng đều nằm cùng một chỗ trong bộ nhớ nên bất kì sự thay đổi nào đối với một phần tử sẽ ảnh hưởng tới tất cả các thành phần còn lại.
Một trong những công dụng của union là dùng để kết hợp một kiểu dữ liêu cơ bản với một mảng hay các cấu trúc gồm các phần tử nhỏ hơn. Ví dụ:
union mix_t{
long l;
struct {
short hi;
short lo;
} s;
char c[4];
} mix;
định nghĩa ba phần tử cho phép chúng ta truy xuất đến cùng một nhóm 4 byte: mix.l, mix.s và mix.c mà chúng ta có thể sử dụng tuỳ theo việc chúng ta muốn truy xuất đến nhóm 4 byte này như thế nào. Tôi dùng nhiều kiểu dữ liệu khác nhau, mảng và cấu trúc trong union để bạn có thể thấy các cách khác nhau mà chúng ta có thể truy xuất dữ liệu.



Các unions vô danhTrong C++ chúng ta có thể sử dụng các unions vô danh. Nếu chúng ta đặt một union trong một cấu trúc mà không đề tên (phần đi sau cặp ngoặc nhọn { }) union sẽ trở thành vô danh và chúng ta có thể truy xuất trực tiếp đến các phần tử của nó mà không cần đến tên của union (có cần cũng không được). Ví dụ, hãy xem xét sự khác biệt giữa hai phần khai báo sau đây:



union
union vô danh
struct {
char title[50];
char author[50];
union {
float dollars;
int yens;
} price;
} book;
struct {
char title[50];
char author[50];
union {
float dollars;
int yens;
};
} book;

Sự khác biệt duy nhất giữa hai đoạn mã này là trong đoạn mã đầu tiên chúng ta đặt tên cho union (price) còn trong cái thứ hai thì không. Khi truy nhập vào các phần tử dollars và yens, trong trường hợp thứ nhất chúng ta viết:

book.price.dollars
book.price.yenscòn trong trường hợp thứ hai:

book.dollars
book.yensMột lần nữa tôi nhắc lại rằng vì nó là một union, hai trường dollars và yens đều chiếm cùng một chỗ trong bộ nhớ nên chúng không thể giữ hai giá trị khác nhau.

Kiểu liệt kê (enum)Kiểu dữ liệu liệt kê dùng để tạo ra các kiểu dữ liệu chứa một cái gì đó hơi đặc biệt một chút, không phải kiểu số hay kiểu kí tự hoặc các hằng true và false. Dạng thức của nó như sau:
enum model_name {
value1,
value2,
value3,
.
.
} object_name;
Ví dụ, chúng ta có thể tạo ra một kiểu dữ liệu mới có tên color để lưu trữ các màu với phần khai báo như sau:

enum colors_t {black, blue, green, cyan, red, purple, yellow, white};Chú ý rằng chúng ta không sử dụng bất kì một kiểu dữ liệu cơ bản nào trong phần khai báo. Chúng ta đã tạo ra một kiểu dữ liệu mới mà không dựa trên bất kì kiểu dữ liệu nào có sẵn: kiểu color_t, những giá trị có thể của kiểu color_t được viết trong cặp ngoặc nhọn {}. Ví dụ, sau khi khai báo kiểu liệt kê, biểu thức sau sẽ là hợp lệ:

colors_t mycolor;

mycolor = blue;
if (mycolor == green) mycolor = red;Trên thực tế kiểu dữ liệu liệt kê được dịch là một số nguyên và các giá trị của nó là các hằng số nguyên được chỉ định. Nếu điều này không đựoc chỉ định, giá trị nguyên tương đương với phần tử đầu tiên là 0 và các giá trị tiếp theo cứ thế tăng lên 1, Vì vậy, trong kiểu dữ liệu colors_t mà chúng ta định nghĩa ở trên, white tương đương với 0, blue tương đương với 1, green tương đương với 2 và cứ tiếp tục như thế.
Nếu chúng ta chỉ định một giá trị nguyên cho một giá trị nào đó của kiểu dữ liệu liệt kê (trong ví dụ này là phần tử đầu tiên) các giá trị tiếp theo sẽ là các giá trị nguyên tiếp theo, ví dụ:
enum months_t { january=1, february, march, april,
may, june, july, august,
september, october, november, december} y2k;
trong trường hợp này, biến y2k có kiểu dữ liệu liệt kê months_t có thể chứa một trong 12 giá trị từ january đến december và tương đương với các giá trị nguyên từ 1 đến 12, không phải 0 đến 11 vì chúng ta đã đặt january bằng 1

Đọc thêm : Bài 11: Các Kiểu Dữ Liệu Do Người Dùng Định Nghĩa - blog điện tử viễn thông http://blogdientuvienthong.blogspot.com/2009/08/bai-11-cac-kieu-du-lieu-do-nguoi-dung.html#ixzz27YxAimOa

Bài 10 : Các Cấu Trúc


Các cấu trúc dữ liệu.Một cấu trúc dữ liệu là một tập hợp của những kiểu dữ liệu khác nhau được gộp lại với một cái tên duy nhất. Dạng thức của nó như sau:
struct model_name {
type1 element1;
type2 element2;
type3 element3;
.
.
} object_name;
trong đó model_name là tên của mẫu kiểu dữ liệu và tham số tùy chọn object_name một tên hợp lệ cho đối tượng. Bên trong cặp ngoặc nhọn là tên các phần tử của cấu trúc và kiểu của chúng.
Nếu định nghĩa của cấu trúc bao gồm tham số model_name (tuỳ chọn), tham số này trở thành một tên kiểu hợp lệ tương đương với cấu trúc. Ví dụ:
struct products {
char name [30];
float price;
} ;

products apple;
products orange, melon;
Chúng ta đã định nghĩa cấu trúc products với hai trường: name và price, mỗi trường có một kiểu khác nhau. Chúng ta cũng đã sử dụng tên của kiểu cấu trúc (products) để khai báo ba đối tượng có kiểu đó : apple, orange và melon.
Sau khi được khai báo, products trở thành một tên kiểu hợp lệ giống các kiểu cơ bản như int, char hay short.
Trường tuỳ chọn object_name có thể nằm ở cuối của phần khai báo cấu trúc dùng để khai báo trực tiếp đối tượng có kiểu cấu trúc. Ví dụ, để khai báo các đối tượng apple, orange và melon như đã làm ở phần trước chúng ta cũng có thể làm theo cách sau:
struct products {
char name [30];
float price;
} apple, orange, melon;
Hơn nữa, trong trường hợp này tham số model_name trở thành tuỳ chọn. Mặc dù nếu model_name không được sử dụng thì chúng ta sẽ không thể khai báo thêm các đối tượng có kiểu mẫu này.
Một điều quan trọng là cần phân biệt rõ ràng đâu là kiểu mẫu cấu trúc, đâu là đối tượng cấu trúc. Nếu dùng các thuật ngữ chúng ta đã sử dụng với các biến, kiểu mẫu là tên kiểu dữ liệu còn đối tượng là các biến.
Sau khi đã khai báo ba đối tượng có kiểu là một mẫu cấu trúc xác định (apple, orange and melon) chúng ta có thể thao tác với các trường tạo nên chúng. Để làm việc này chúng ta sử dụng một dấu chấm (.) chèn ở giữa tên đối tượng và tên trường. Ví dụ, chúng ta có thể thao tác với bất kì phần tử nào của cấu trúc như là đối với các biến chuẩn :

apple.name
apple.price
orange.name
orange.price
melon.name
melon.pricemỗi trường có kiểu dữ liệu tương ứng: apple.name, orange.name và melon.name có kiểu char[30], và apple.price, orange.price và melon.price có kiểu float.
Chúng ta tạm biệt apples, oranges và melons để đến với một ví dụ về các bộ phim:


// example about structures
#include
#include
#include

struct movies_t {
char title [50];
int year;
} mine, yours;

void printmovie (movies_t movie);

int main ()
{
char buffer [50];

strcpy (mine.title, "2001 A Space Odyssey");
mine.year = 1968;

cout << "Enter title: ";
cin.getline (yours.title,50);
cout << "Enter year: ";
cin.getline (buffer,50);
yours.year = atoi (buffer);

cout << "My favourite movie is:\n ";
printmovie (mine);
cout << "And yours:\n ";
printmovie (yours);
return 0;
}

void printmovie (movies_t movie)
{
cout << movie.title;
cout << " (" << movie.year << ")\n";
}


Enter title: Alien
Enter year: 1979

My favourite movie is:
2001 A Space Odyssey (1968)
And yours:
Alien (1979)
Ví dụ này cho chúng ta thấy cách sử dụng các phần tử của một cấu trúc và bản thân cấu trúc như là các biến thông thường. Ví dụ, yours.year là một biến hợp lệ có kiểu int cũng như mine.title là một mảng hợp lệ với 50 phần tử kiểu chars.
Chú ý rằng cả mine and yours đều được coi là các biến hợp lệ kiểu movie_t khi được truyền cho hàm printmovie().Hơn nữa một lợi thế quan trọng của cấu trúc là chúng ta có thể xét các phần tử của chúng một cách riêng biệt hoặc toàn bộ cấu trúc như là một khối.
Các cấu trúc được sử dụng rất nhiều để xây dựng cơ sở dữ liệu đặc biệt nếu chúng ta xét đến khả năng xây dựng các mảng của chúng.


// array of structures
#include
#include

#define N_MOVIES 5

struct movies_t {
char title [50];
int year;
} films [N_MOVIES];

void printmovie (movies_t movie);

int main ()
{
char buffer [50];
int n;
for (n=0; n
{
cout << "Enter title: ";
cin.getline (films[n].title,50);
cout << "Enter year: ";
cin.getline (buffer,50);
films[n].year = atoi (buffer);
}
cout << "\nYou have entered these movies:\n";
for (n=0; n
printmovie (films[n]);
return 0;
}

void printmovie (movies_t movie)
{
cout << movie.title;
cout << " (" << movie.year << ")\n";
}


Enter title: Alien
Enter year: 1979
Enter title: Blade Runner
Enter year: 1982
Enter title: Matrix
Enter year: 1999
Enter title: Rear Window
Enter year: 1954
Enter title: Taxi Driver
Enter year: 1975

You have entered these movies:
Alien (1979)
Blade Runner (1982)
Matrix (1999)
Rear Window (1954)
Taxi Driver (1975)

Con trỏ trỏ đến cấu trúcNhư bất kì các kiểu dữ liệu nào khác, các cấu trúc có thể được trỏ đến bởi con trỏ. Quy tắc hoàn toàn giống như đối với bất kì kiểu dữ liệu cơ bản nào:
struct movies_t {
char title [50];
int year;
};

movies_t amovie;
movies_t * pmovie;
Ở đây amovie là một đối tượng có kiểu movies_t và pmovie là một con trỏ trỏ tới đối tượng movies_t. OK, bây giờ chúng ta sẽ đến với một ví dụ khác, nó sẽ giới thiệu một toán tử mới:


// pointers to structures
#include
#include

struct movies_t {
char title [50];
int year;
};


int main ()
{
char buffer[50];

movies_t amovie;
movies_t * pmovie;
pmovie = & amovie;

cout << "Enter title: ";
cin.getline (pmovie->title,50);
cout << "Enter year: ";
cin.getline (buffer,50);
pmovie->year = atoi (buffer);

cout << "\nYou have entered:\n";
cout << pmovie->title;
cout << " (" << pmovie->year << ")\n";

return 0;
}



Enter title: Matrix
Enter year: 1999

You have entered:
Matrix (1999)
Đoạn mã trên giới thiệu một điều quan trọng: toán tử ->. Đây là một toán tử tham chiếu chỉ dùng để trỏ tới các cấu trúc và các lớp (class). Nó cho phép chúng ta không phải dùng ngoặc mỗi khi tham chiếu đến một phần tử của cấu trúc. Trong ví dụ này chúng ta sử dụng:

movies->titlenó có thể được dịch thành:

(*movies).titlecả hai biểu thức movies->title và (*movies).title đều hợp lệ và chúng đều dùng để tham chiếu đến phần tử title của cấu trúc được trỏ bởi movies. Bạn cần phân biệt rõ ràng với:

*movies.titlenó tương đương với

*(movies.title)lệnh này dùng để tính toán giá trị được trỏ bởi phần tử title của cấu trúc movies, trong trường hợp này (title không phải là một con trỏ) nó chẳng có ý nghĩa gì nhiều. Bản dưới đây tổng kết tất cả các kết hợp có thể được giữa con trỏ và cấu trúc:


Biểu thức
Mô tả
Tương đương với

movies.title
Phần tử title của cấu trúc movies


movies->title
Phần tử title của cấu trúc được trỏ bởi movies
(*movies).title

*movies.title
Giá trị được trỏ bởi phần tử title của cấu trúc movies
*(movies.title)

Các cấu trúc lồng nhauCác cấu trúc có thể được đặt lồng nhau vì vậy một phần tử hợp lệ của một cấu trúc có thể là một cấu trúc khác.
struct movies_t {
char title [50];
int year;
}

struct friends_t {
char name [50];
char email [50];
movies_t favourite_movie;
} charlie, maria;

friends_t * pfriends = &charlie;
Vì vậy, sau phần khai báo trên chúng ta có thể sử dụng các biểu thức sau:

charlie.name
maria.favourite_movie.title
charlie.favourite_movie.year
pfriends->favourite_movie.year(trong đó hai biểu thức cuối cùng là tương đương).
Các khái niệm cơ bản về cấu trúc được đề cập đến trong phần này là hoàn toàn giống với ngôn ngữ C, tuy nhiên trong C++, cấu trúc đã được mở rộng thêm các chức năng của một lớp với tính chất đặc trưng là tất cả các phần tử của nó đều là công cộng (public).

Đọc thêm : Bài 10 : Các Cấu Trúc - blog điện tử viễn thông http://blogdientuvienthong.blogspot.com/2009/08/bai-10-cac-cau-truc.html#ixzz27YwyTVbt
DBS M05479
Quang Cao