| Gửi lên: 28/02/2008 7:05am | IP Logged
|
|
|
Chào em.
Bài này "rối loạn" khi sắp xếp là do tổ chức dữ liệu ..."rối loạn" , phức tạp và không hiệu quả. Các bạn cần chú ư những điểm sau:
-
Trong một biểu thức (Expression), nếu có một toán hạng (Operand) mang kiểu số thực th́ tất cả đều phải chuyển qua kiểu số thực, ở dây bạn dùng Integer và Real lẫn lộn sẽ cho kết quả không chính xác.
-
Trong Pascal có toán tử "&" dùng với con trỏ (Pointer), phần này các bạn không học v́ không cần thiết (học con trỏ trên C là đủ).
-
Hàm (Function) để xử lư một thuộc tính (Property) của đối tượng (Object) như: xếp loại, tính ĐTB, tính thuế,... ở đây băn đă dùng hàm để xử lư cả một phần tử (Element).
-
Do đang công tác ở nước ngoài, không có th́ giờ nhiều nên tôi Post bài sau, các bạn theo đó mà tham khảo và sửa lại.
Program Tinh_diem; Uses CRT; Const Max = 50; HSP = 4 ; HSTHCB = 3 ; HSTCC = 4; Type String30 = String[30]; Sinhvien = Record Masv : String[5]; Hoten,LoaiHT : String[30]; Pascal,THCB,TCC,DTB : Real; End; MangSV = Array[1..Max] Of Sinhvien; Var SV : MangSV; SoSV : Byte; Tiep : Char; {Thu tuc dinh vi Cursor} Procedure WriteXY(X,Y:Byte;Chuoi:String); Begin GotoXY(X,Y); Write(Chuoi); End;
{Thu tuc in tieu de} Procedure Tieude; Begin Clrscr; TextColor(LightCyan); WriteXY(20,1,' TRUONG DAI HOC MARKETING'); WriteXY(20,2,' KHOA TIN HOC QUAN LY'); TextColor(White); WriteXY(20,3,' &nbs p; ********'); TextColor(LightGreen); WriteXY(20,4,'CHUONG TRINH TINH DIEM HOC KY'); TextColor(White); End;
{Ham tinh diem trung binh} Function Tinhdiem(D1,D2,D3,HS1,HS2,HS3:Real):Real; Var Tongdiem,Tongheso : Real; Begin Tongdiem := (D1*HS1)+(D2*HS2)+(D3*HS3); Tongheso := HS1 + HS2 + HS3; Tinhdiem := Tongdiem / Tongheso; End;
{Ham xep loai hoc tap} Function Xeploai(Diem : Real):String30; Var Loai : String30; Begin If Diem>=9 Then Loai :='Gioi' Else If Diem>=7 Then Loai := 'Kha' Else If Diem >=6 Then Loai :='TB kha' Else If Diem>=5 Then Loai := 'Trung binh' Else If Diem>=4 Then Loai := 'Yeu' Else Loai :='Kem'; Xeploai := Loai; End;
{Thu tuc hoan vi 2 Records} Procedure Hoanvi(Var A,B:Sinhvien); Var Temp : Sinhvien; Begin Temp := A; A := B; B := Temp; End;
{Thu tuc Sap xep thu tu theo diem trung binh} Procedure BubbleSort(Var A:MangSV;N:Byte); Var i,j:Byte; Begin For i:=2 To N Do For j:=N Downto i Do If A[j-1].DTB>A.DTB Then Hoanvi(A[j-1],A[j]); End;
{Thu tuc nhap so lieu cho tung sinh vien} Procedure Nhap(Var A:Sinhvien); Begin With A Do Begin GotoXY(10,10); Write('Ma sinh vien : ');Readln(Masv); GotoXY(10,11); Write('Ho ten sinh vien : ');Readln(Hoten); GotoXY(10,12); Write('Diem Pascal : ');Readln(Pascal); GotoXY(10,13); Write('Diem Tin hoc can ban : ');Readln(THCB); GotoXY(10,14); Write('Diem Toan cao cap : ');Readln(TCC); {Xu ly diem va xep loai hoc tap} DTB := Tinhdiem(Pascal,THCB,TCC,HSP,HSTHCB,HSTCC); LoaiHT := Xeploai(DTB); End; End;
{Thu tuc nhap du lieu} Procedure NhapDL(Var A:MangSV;Var N:Byte); Var i : Byte; Begin Tieude; WriteXY(10,6,'Nhap bao nhieu sinh vien ? ');Readln(N); For i:=1 To N Do Begin Tieude; GotoXY(10,6); Write('Nhap so lieu cho sinh vien thu : ',i:2); Nhap(A); End; End;
{Thu tuc xuat ket qua} Procedure XuatKQ(A:MangSV;N:Byte); Var i,Hang:Byte; Begin Tieude; TextColor(Yellow); WriteXY(5,6,'=============================================== ====================='); WriteXY(5,7,' STT MASV HO TEN SV PASCAL THCB TCC DTB XEPLOAI'); WriteXY(5,8,'=============================================== ====================='); TextColor(White); {56789012345678901234567890123456789012345678901234567890123 456789012345678 1 2 3 4 5 6 7 } Hang := 9; For i:=1 To N Do Begin GotoXY(07,Hang); Write(i:2); GotoXY(11,Hang); Write(A.Masv); GotoXY(18,Hang); Write(A.Hoten); GotoXY(34,Hang); Write(A.Pascal:5:2); GotoXY(44,Hang); Write(A.THCB:5:2); GotoXY(50,Hang); Write(A.TCC:5:2); GotoXY(57,Hang); Write(A.DTB:5:2); GotoXY(63,Hang); Write(A.LoaiHT); Inc(Hang); End; Readln; End; {Chuong trinh chinh} BEGIN NhapDL(SV,SoSV); BubbleSort(SV,SoSV); XuatKQ(SV,SoSV); END.
Chúc các bạn đạt kết quả tốt.
|