Trường Đại học Điện lực Tập đoàn Điện lực Việt Nam



tải về 1.67 Mb.
trang37/48
Chuyển đổi dữ liệu18.07.2016
Kích1.67 Mb.
#1821
1   ...   33   34   35   36   37   38   39   40   ...   48

7.3.4 Câu lệnh WITH


Khi làm việc với nhiều trường của một biến bản ghi thì cách thâm nhập ở trên tỏ ra rườm rà vì phải viết nhiều lần tên biến trước tên trường.

Để đơn giản cách viết, Pascal đưa ra câu lệnh :



WITH Tên_biến DO LệnhP;

Trong đó Tên_biến thuộc kiểu bản ghi.

Nếu LệnhP có truy xuất đến các trường của Tên biến thì không cần phải viết Tên biến và dấu chấm trước các tên trường.
Ví dụ 7.50: thay vì viết:

X.Hoten:= ‘Nguyen Van A’;

ta có thể viết :

WITH X DO

Hoten:= ‘Nguyen Van A’;

Để in các trường của biến X lên màn hình, ta viết:

WITH X DO

Begin


Writeln(‘ Ho va ten :’ , Hoten);

Writeln(‘ Ma so :’ , Maso);

Writeln(‘ Diem Toan :’ , Toan: 4:1);

Writeln(‘ Diem Ly :’ , Ly: 4:1);

Writeln(‘ Diem TB : ‘ , DTB :4:1);

End;


Tất cả các tên trường nằm trong khối begin và end được hiểu là các trường của biến X (nếu không ghi rõ tên biến nào khác).

Các lệnh sau gán các giá trị cho các trường của biến S kiểu KSACH là một bản ghi lồng nhau:

WITH S DO

begin


Ma_so_sach:=‘TH-435’;

Ten_doc_gia:=‘Nguyen van Mai’;

Nam_xban :=1999;

Gia_tien:= 15000;

WITH Ngay_muon DO

begin


Ngay:=2;

Thang:=9;

Nam:=1999;

end;


end;

7.3.5 Mảng các bản ghi


Trong thực tế, ta thường phải quản lý một danh sách sinh viên của một lớp, một danh sách các quyển sách trong thư viện. Vì thế mảng các bản ghi được dùng rất phổ biến.

Ví dụ 7.51: Khi khai báo :

VAR DS : Array[1..50] of KSVIEN;

Hoặc :

TYPE KMang = Array[1..50] of KSVIEN;



VAR DS: KMang;

thì ta có một mảng DS gồm 50 phần tử DS[1],..., DS[50] cùng kiểu bản ghi KSVIEN. Mỗi DS[i], i=1,..., 50 là một bản ghi có 5 trường Hoten, Maso, Toan, Ly, DTB lưu trữ các thông tin về sinh viên thứ i trong danh sách.


Để nhập dữ liệu ( Hoten, Maso, Toan, Ly ) rồi tính Điểm trung bình cho 50 sinh viên này, ta dùng vòng lặp For phối hợp với câu lệnh WITH :
For i:=1 to 50 do

WITH DS[i] DO

begin

Write(‘Nhap ho ten sinh vien thu ‘,i,’ : ‘); Readln(Hoten);



Write(‘Nhap ma so sinh vien thu ‘,i,’ : ‘); Readln(Maso);

Write(‘Nhap điểm Toan, Ly sinh vien thu ‘,i,’ : ‘);

Readln(Toan, Ly);

DTB:=(Toan + Ly)/2;

end;
Để sắp xếp danh sách sinh viên theo trật tự giảm của DTB sao cho người có DTB cao thì đứng trước, người có DTB thấp thì đứng sau, ta có thể áp dụng phương pháp sắp xếp mảng, song chỉ lấy trường DTB làm tiêu chuẩn so sánh:
For i:=1 to 49 do

For j:=i+1 to 50 do

If DS[i].DTB < DS[j].DTB then

begin { Đổi chỗ DS[i] và DS[j] }

Z:=DS[i];

DS[i]:=DS[j];

DS[j]:=Z;

end;
Ởở đây Z là biến bản ghi cùng kiểu với các phần tử DS[i].

Khi sắp xếp theo DTB tăng hoặc giảm thì trường DTB được gọi là "khóa" ( key) sắp xếp.

Một cách tương tự, có thể sắp xếp danh sách sinh viên theo khóa là điểm Toan, hoặc điểm Ly, hoặc Maso, hoặc theo Hoten.



Để in danh sách đã sắp xếp lên màn hình, ta dùng lệnh :

For i:=1 to 50 do

WITH DS[i] DO

Writeln(i:2, Hoten:25, Maso:9 , Toan:5:1, Ly:5:1, DTB:5:1);


7.3.6 Ví dụ về bản ghi


Ví dụ 7.52: Nhập một danh sách N (1<= N<= 50) sinh viên gồm các trường: Họ tên, Mã số, các điểm Toán, Lý.
Đối với mỗi sinh viên, hãy tính điểm trung bình :

DTB=(Toan + Ly)/2 , và phân loại như sau:

Loại= Giỏi nếu DTB <= 9,

Khá nếu 7<= DTB < 9,

Bình nếu 5<= DTB < 7,

Kém nếu DTB < 5.


Sắp xếp danh sách theo trật tự giảm của DTB, in danh sách lên màn hình, mỗi người trên một dòng gồm các mục: Số thứ tự, Họ tên, Mã số, điểm Toán, Lý, DTB và phân loại.

Cho biết điểm Toán cao nhất là mấy ?. Có bao nhiêu người được điểm cao nhất đó?

Điểm trung bình môn Toán cho cả danh sách là bao nhiêu ?.

Bài giải :

Trong chương trình dưới đây, chỗ nào có ký hiệu ' ' thì hãy thay bằng một ký tự trắng.


PROGRAM VIDU_7_52;

Uses CRT;

Type KSVIEN = RECORD

Hoten:String[18];

Maso, Loai : String[8];

Toan, Ly, DTB : Real;

End;

Var DS : Array[1..50] of KSVIEN;



Z : KSVIEN;

N, i, j, Dem : Integer;

Max, TBToan: Real;

BEGIN


CLRSCR;

Repeat


Write(‘ Nhập số sinh viên N= ‘) ;

Readln(N);

Until ( N>0) and ( N < 51);

{ Nhập danh sach, tính DTB va phân loại }

For i:=1 to N do WITH DS[i] DO

begin

Write(‘Nhap ho ten sinh vien thu ‘,i,’ : ‘);



Readln(Hoten);

Write(‘Nhap ma so sinh vien thu ‘,i,’ : ‘);

Readln(Maso);

Write(‘Nhap điểm Toan, Ly sinh vien thu ‘,i,’ : ‘);

Readln(Toan, Ly);

DTB:=( Toan + Ly)/2;


If DTB >=9 then Loai:=‘Gioi’

else


if DTB >=7 then Loai:=‘Kha’

else


if DTB >=5 then Loai:=‘Binh’

else


Loai:=‘Kem’;

end;


{ Sắp xếp giảm theo DTB }

For i:=1 to N-1 do

For j:=i+1 to N do

If DS[i].DTB < DS[j].DTB then

begin

Z:=DS[i]; DS[i]:=DS[j]; DS[j]:=Z;



end;

Writeln(‘ In danh sach len man hinh ‘ );

Writeln(‘STT HO VA TEN MA SO TOAN LY DTB LOAI’);

For i:=1 to N do

WITH DS[i] DO

Writeln(i:2,#32,Hoten,#32:19-Length(Hoten), Maso:8,Toan:4:1,Ly:4:1,DTB:4:1,Loai:5);



{ Tìm điểm Toán cao nhất }

Max:=DS[1].Toan;

For i:=1 to N do

if Max< DS[i].Toan then

Max:=DS[i].Toan;

Writeln(‘Diem Toan cao nhat = ‘, Max:4:1);



{ Đếm số em có điểm Toán =Max}

Dem:=0;


For i:=1 to N do

if DS[i].Toan =Max then

Dem:=Dem+1;

Writeln(‘ Có ‘, Dem, ‘ em có điểm Toán= ‘, Max:4:1);



{ Tính điểm trung bình môn Toán cho cả danh sach }

TBToan:=0; { Lấy tổng điểm môn Toán}

For i:=1 to N do

TBToan := TBToan + DS[i].Toan;

TBToan:=TBToan/N ;

Writeln(‘Diem trung binh mon Toan= ‘ , TBToan:6:2);

Readln;

END.
Ví dụ 7.53 Nhập một danh sách N (1<= N<= 50) đầu sách gồm các thông tin về Tên sách, Số lượng (SL) và Đơn giá (DG).



Với mỗi đầu sách, tính Giá tiền như sau:

GT = SL * DG nếu SL<10

= SL*DG - 5%*SL*DG nếu 10 Ê SL<30

= SL*DG - 8%* SL*DG nếu 30 Ê SL <50

= SL*DG - 10%* SL*DG nếu SL ³ 50

(Tức là nếu mua từ 10 đến 29 cuốn thì được giảm 5% đơn giá, mua từ 30 đến 49 cuốn thì được giảm 8% đơn giá, mua từ 50 cuốn trở lên thì được giảm 10% đơn giá).

Tính Tổng số tiền phải chi cho việc mua sách, kể cả 10% thuế giá trị gia tăng đánh vào tổng giá tiền.

Tìm xem trong danh sách đó có cuốn "TIN HOC DAI CUONG" không. Nếu có thì cho biết có bao nhiêu cuốn và đơn giá của nó.


Bài giải:
PROGRAM VIDU_7_53;

Uses CRT;

Type KSACH = RECORD

Tensach : String[20];

SL : Integer;

DG, GT: Real;

End;

Mang = Array[1..50] of KSACH;



Var S : Mang;

Z : KSACH;

N, i : Integer;

Tongtien : Real;

BEGIN

Repeat


Write(‘ Nhập N: ‘); Readln( N );

Until (N>0) and ( N<51);



{ Nhập N sách và tính tiền}

For i:=1 to N do

With S[i] do

begin


Write(‘Nhap ten sach thu: ‘,i,’:‘); Readln(Tensach);

Repeat


Write(‘Nhập Số lượng : ‘); Readln(SL);

Until SL>0;

Write(‘Nhập đơn giá : ‘); Readln(DG);

Case SL of

1..9 : GT:=SL*DG;

10..29 : GT:=SL*DG*(1-0.05);

30..49 : GT:=SL*DG*(1-0.08);

else GT:=SL*DG*(1-0.1);

end; { Hết Case}

end; { Hết For}


{Tính tổng giá thành các đầu sách}

Tongtien:=0;

For i:=1 to N do

Tongtien:=Tongtien+S[i].GT;


{Cộng thêm thuế 10% giá tri gia tăng}

Tongtien:=Tongtien + 0.1*Tongtien ;

Writeln(‘Tổng tiền phải chi là: ‘, Tongtien :6:2);
{Tìm cuốn ‘TIN HOC DAI CUONG’}

i:=1;


While (i<=N) and (S[i].Tensach<> ‘TIN HOC DAI CUONG’) do

i:=i+1;


If i> N then

writeln (‘ Không có cuốn TIN HOC DAI CUONG!‘)

else

WITH S[i] DO



writeln(‘ Co ‘, SL:4,‘ cuon, don gia= ‘,DG:6:2);

Readln;


END.

Каталог: images
images -> Hướng dẫn sử dụng Dropbox Để sử dụng được Dropbox
images -> BÀi thuyết trình cách xáC ĐỊnh và chế ĐỘ pháp lý CỦa các vùng biển theo công ưỚc của liên hiệp quốc về luật biển năM 19821
images -> Céng hßa x· héi chñ nghÜa viÖt nam Độc lập tự do hạnh phúc
images -> Lúa gạo Việt Nam Giới thiệu
images -> Trung Tâm kt tc-đl-cl
images -> Số: 105/2008/QĐ-ttg CỘng hòa xã HỘi chủ nghĩa việt nam độc lập Tự do Hạnh phúc
images -> ChuyêN ĐỀ ĐẠi số TỔ HỢP, XÁc suất kiến thức cơ bản Đại số tổ hợp
images -> BỘ giáo dục và ĐÀo tạo trưỜng đẠi học luật tp. HỒ chí minh dưƠng kim thế nguyên thủ TỤc phá SẢn các tổ chức tín dụng theo pháp luật việt nam
images -> Review of Condor, Sun Grid Engine and pbs

tải về 1.67 Mb.

Chia sẻ với bạn bè của bạn:
1   ...   33   34   35   36   37   38   39   40   ...   48




Cơ sở dữ liệu được bảo vệ bởi bản quyền ©hocday.com 2024
được sử dụng cho việc quản lý

    Quê hương