CÁC DNÂNG CAO VỀ MẢNG
Ví dụ 11.5:
Nhập một danh sách N (N<50) học sinh gồm họ tên và điểm thi môn toán.
Hãy phân loi các học sinh như sau : loại giỏi nếu điểm toán ฀ 9, loại khá
nếu 7 ฀ điểm toán< 9, loại trung bình nếu 5 ฀ điểm toán< 7, và loại kém
nếu điểm toán< 5.
In danh sách lên màn hình, mỗi người trên một dòng, gồm họ tên, điểm
toán và pn loại. u cu danh sách được sắp thứ tự theo trật tự gim của
điểm tn.
Ðếm xem có bao nhiêu em có điểm toán bằng 10 ?.
PROGRAM VIDU11_5;
Uses CRT;
Type
Kmang1 = Array[1..50] of String[18];
Kmang2 = Array[1..50] of Real;
Var
i, j, N, Dem10 : Integer;
Hoten, Loai: Kmang1;
Dtoan : Kmang2;
St: String[18];
z: Real;
Begin
Clrscr;
Repeat
Write(‘ Nhập số lượng học sinh : ‘);
Readln(N);
Until (N>0) and ( N<51);
For i:=1 to N do { nhập danh sách hs }
begin
Write(‘Nhp họ và tên của hs thứ ‘, i , ‘ : ‘);
Readln(Hoten[i]);
Write(‘Nhp điểm tn của hs thứ ‘, i , ‘ : ‘);
Readln(Dtoan[i]);
end;
{ sắp xếp giảm theo điểm tn}
For i:=1 to N-1 do
For j:=i+1 to N do
If Dtoan[i]<Dtoan[j] then
begin { hoán đổi Dtoan và họ tên }
z:=Dtoan[i];
Dtoan[i]:=Dtoan[j];
Dtoan[j]:=z;
St:=Hoten[i];
Hoten[i]:=Hoten[j];
Hoten[j]:=St;
end;
{ Phân loi }
For i:=1 to N do
If Dtoan[i] >= 9 then Loai[i]:=‘Gioi’
else
If Dtoan[i] >=7 then Loai[i]:=‘Kha
else
If Dtoan[i]>=5 then Loai[i]:=‘Trung binh’
else
Loai[i] :=‘Kem’;
Writeln(‘ Danh sách hs đã sắp giảm theo Ðtoán là: ‘);
For i:=1 to N do
Writeln(Hoten[i]: 18, #32, Dtoan[i]:5:1, #32, Loai[i]) ;
{ Ðếm số em được điểm 10}
Dem10 := 0;
For i:=1 to N do
if Dtoan[i]=10 then Dem10 :=Dem10 +1;
Writeln(‘ Số em được điểm 10 là :’ , Dem10);
Readln;
End.
Chạy <VD11_5.EXE>
Chép tập tin nguồn <VD11_5.PAS>
Trong chương trình, ta sử dụng ba mảng: Hoten, Loai và Dtoan với quy
ước phần tử thứ i của các mng này chứa các thông tin về cùng một người:
đó là học sinh thứ i trong danh sách. Vì thế, khi sắp xếp mảng Dtoan giảm
dần, mỗi khi có sự đổi chỗ Dtoan[i] với Dtoan[j] thì tương ứng cũng phải đổi
chỗ Hoten[i] với Hoten]j].
Ví dụ 11.6: