
CÁC VÍ DỤ NÂ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 loại 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à phân loại. Yêu cầu danh sách được sắp thứ tự theo trật tự giảm của
điểm toán.
Ðế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(‘Nhập họ và tên của hs thứ ‘, i , ‘ : ‘);

Readln(Hoten[i]);
Write(‘Nhập điểm toán của hs thứ ‘, i , ‘ : ‘);
Readln(Dtoan[i]);
end;
{ sắp xếp giảm theo điểm toán}
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 loại }
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 mảng 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:

