<< Chapter < Page
  Cấu trúc dữ liệu     Page 8 / 15
Chapter >> Page >

TYPE

loai_cong_nhan = (bien_che,hop_dong);

VAR

Cong_Nhan : RECORD

ho_ten: String[20];

ngay_cong: Real;

luong: Real;

CASE loai: loai_cong_nhan OF

bien_che:

(he_so: Real;

nghi_bhxh:Real);

hop_dong:

(gia_cong_nhat: Real);

END;

Khai báo trên định nghĩa một mẩu tin có cấu trúc thay đổi. Mẩu tin luôn luôn có các trường Ho_Ten, Ngay_Cong, Luong và Loai. Khi giá trị của Loai = "bien_che" thì mẩu tin còn có các trường He_So và Nghi_Bhxh, trong khi đó nếu giá trị của Loai = "hop_dong" thì nó lại có trường Gia_Cong_Nhat.

Đặc tả phép toán

Phép toán lựa chọn các phần tử của mẩu tin có cấu trúc thay đổi cũng giống như mẩu tin bình thường. Chẳng hạn ta có thể sử dụng Cong_Nhan.Luong, Cong_Nhan.He_So hay Cong_Nhan.Gia_Cong_Nhat. Tuy nhiên các trường thuộc phần động chỉ tồn tại trong một thời điểm nhất định do đó khi chúng ta truy xuất tới một tên trường mà nó không tồn tại thì sẽ bị lỗi. Trường Loai trong ví dụ trên là rất quan trọng vì nó chỉ ra phần động nào của mẩu tin được sử dụng trong quá trình thực hiện chương trình. Người đọc có thể tham khảo ví dụ tương đối hoàn chỉnh viết bằng Pascal.

uses crt;

Const luong_toi_thieu = 290000;

Type

Loai_cong_nhan = (bien_che, hop_dong);

Cong_nhan = Record

ho_ten : String[20];

Ngay_cong : real;

luong : real;

Case loai: Loai_cong_nhan of

bien_che: (He_so, so_ngay_nghi_BHXH : real);

hop_dong: (don_gia: real);

end;

danh_sach_cong_nhan = Array[1..10] of cong_nhan;

Var

n : integer; ho_so : danh_sach_cong_nhan;

{Nhập danh sách công nhân, và các thông tin liên quan đến lao động}

Procedure Nhap (var ho_so: danh_sach_cong_nhan; var n: integer);

Var

i: integer;

loaicn : char;

Begin

write('So cong nhan: '); readln(n);

For i:=1 to n do with ho_so[i] do begin

Writeln('Cong nhan ',i);

Write('Ho va Ten: '); readln(ho_ten);

Write('Loai cong nhan: A la bien che, B la hop dong ');

readln(loaicn);

If Upcase(loaicn) ='A' then loai := bien_che else loai := hop_dong;

write('So ngay cong: '); readln(ngay_cong);

if loai = bien_che then begin

write('He so: '); readln(he_so);

write('So ngay nghi bao hiem: '); readln(so_ngay_nghi_BHXH);

end else begin

write('Don gia hop dong: '); readln(don_gia);

end;

end; { with Ho_so[i] }

end; {nhap}

{Tính lương cho từng công nhân, theo công thức của từng loại công nhân}

Procedure Tinh_luong (var ho_so: danh_sach_cong_nhan; n: integer);

Var

i : integer; luong_binh_quan: real;

begin

for i:=1 to n do with ho_so[i] do begin

if loai = bien_che then begin {tính lương của công nhân biên chế}

luong_binh_quan := he_so * luong_toi_thieu/20;

luong := ngay_cong * luong_binh_quan +

so_ngay_nghi_BHXH * luong_binh_quan*0.80;

end else {tính lương của công nhân hợp đồng}

luong := ngay_cong * don_gia;

end; { with Ho_so[i] }

end; {Tinh_luong }

Procedure In_luong (ho_so: danh_sach_cong_nhan; n: integer);

Var

i : integer;

begin

for i:=1 to n do with ho_so[i] do begin

Write(ho_ten:25);

If loai = bien_che then write('Bien che':10)

else write('Hop dong':10);

write(ngay_cong:5:1);

if loai = bien_che then begin

write(he_so:5:1);

write(so_ngay_nghi_BHXH:5:1);

end else

write(don_gia:10:2);

writeln(luong:10:2);

end; { with Ho_so[i] }

Get Jobilize Job Search Mobile App in your pocket Now!

Get it on Google Play Download on the App Store Now




Source:  OpenStax, Cấu trúc dữ liệu. OpenStax CNX. Jul 29, 2009 Download for free at http://cnx.org/content/col10766/1.1
Google Play and the Google Play logo are trademarks of Google Inc.

Notification Switch

Would you like to follow the 'Cấu trúc dữ liệu' conversation and receive update notifications?

Ask