Các bài tập và bài giải về biến cấu trúc (Record) trong Pascal Bài tập 01 – Tìm độ dài của một đoạn thẳng AB: Bài tập 02 – Tìm toạ độ trung điểm của một đoạn thẳng AB: Bài tập 03 – Danh sách học sinh:
Trang 1Biến có cấu trúc - Records
TD: Mỗi ñiểm trong hình học 2 chiều có toạ ñộ ( x, y )
Khai báo biến trong Pascal như sau:
Type Diem = Record
x, y: Integer;
End;
Var
A, B: Diem;
Bài tập 01 – Tìm ñộ dài của một ñoạn thẳng AB:
Độ dài của ñoạn thẳng AB với ñiểm A có toạ ñộ xA, yA và ñiểm B có toạ ñộ xB, yB ñược tính như sau:
=
Chương trình tìm ñộ dài của ñoạn thẳng AB ñược viết như sau:
Type Diem = Record
x, y: Integer; {Nếu các toạ ñộ chỉ là số nguyên}
End;
Var
A, B: Diem;
DoDai: Real;
Begin
WriteLn('Ban hay nhap toa do cua diem thu nhat');
ReadLn(A.x, A.y);
WriteLn('Ban hay nhap toa do cua diem thu hai');
ReadLn(B.x, B.y);
DoDai := SQRT(SQR(A.x - B.x) + SQR(A.y - B.y));
{SQRT = Căn bậc 2, SQR = Bình phương}
WriteLn('Do dai doan thang AB la ', DoDai:5:2);
ReadLn;
End
Bài tập 02 – Tìm toạ ñộ trung ñiểm của một ñoạn thẳng AB:
Toạ ñộ trung ñiểm I của ñoạn thẳng AB là xI, yI ñược tính như sau:
xI =
và yI =
Type Diem = Record
x, y: Real; {Toạ ñộ trung ñiểm là kết quả phép /2 nên có thể là số thực} End;
Var
Trang 2A, B, I: Diem;
Begin
WriteLn('Ban hay nhap toa do cua diem thu nhat');
ReadLn(A.x, A.y);
WriteLn('Ban hay nhap toa do cua diem thu hai');
ReadLn(B.x, B.y);
I.x := (A.x + B.x) / 2;
I.y := (A.y + B.y) / 2;
WriteLn('Toa do trung diem doan AB la (', I.x:5:2, ', ', I.y:5:2, ')');
ReadLn;
End
Bài tập 03 – Danh sách học sinh:
Nhập vào danh sách học sinh gồm có Họ, Tên, Điểm TB
* Sắp thứ tự danh sách theo ñiểm TB của học sinh
* In ra danh sách các học sinh có Điểm TB >= 5
* In ra danh sách các học sinh có Điểm TB < 5 (tự làm bài)
* In ra danh sách các học sinh có ñiểm TB cao nhất
* In ra danh sách các học sinh có ñiểm TB thấp nhất (tự làm bài)
Type HocSinh = Record
Ho, Ten: String;
DiemTB: Real;
End;
Var
n, i, j: Integer;
HS: Array [1 10] of HocSinh;
t1, Max: Real;
t2: String;
Begin
WriteLn('Danh sach co bao nhieu hoc sinh');
ReadLn(n);
{Nhap DS}
For i:=1 to n do begin
WriteLn('Hoc sinh thu ', i);
Write('Ho : '); ReadLn(HS[i].Ho);
Write('Ten : '); ReadLn(HS[i].Ten);
Write('Diem TB: '); ReadLn(HS[i].DiemTB);
Trang 3WriteLn;
End;
{In DS}
WriteLn('DS Hoc sinh');
For i:=1 to n do begin
Write(HS[i].Ho, ' ');
Write(HS[i].Ten, ' ');
Write(HS[i].DiemTB:3:2);
WriteLn;
End;
{Sap thu tu}
For i:=1 to n-1 do
For j:=i+1 to n do
If HS[i].DiemTB > HS[j].DiemTB then begin
t2 := HS[i].Ho; {Hoan chuyen Ho}
HS[i].Ho := HS[j].Ho;
HS[j].Ho := t2;
t2 := HS[i].Ten; {Hoan chuyen Ten}
HS[i].Ten := HS[j].Ten;
HS[j].Ten := t2;
t1 := HS[i].DiemTB; {Hoan chuyen Diem TB}
HS[i].DiemTB := HS[j].DiemTB;
HS[j].DiemTB := t1;
End;
{In DS da sap thu tu}
WriteLn('DS Hoc sinh da sap thu tu');
For i:=1 to n do begin
Write(HS[i].Ho, ' ');
Write(HS[i].Ten, ' ');
Write(HS[i].DiemTB:3:2);
WriteLn;
End;
{In DS HS co diem TB >= 5}
WriteLn('DS Hoc sinh co diem TB >= 5');
For i:=1 to n do begin
If HS[i].DiemTB < 5 then Continue;
Write(HS[i].Ho, ' ');
Write(HS[i].Ten, ' ');
Write(HS[i].DiemTB:3:2);
WriteLn;
End;
Trang 4
{Tim diem TB cao nhat}
Max := HS[1].DiemTB;
For i:=2 to n do
If Max < HS[i].DiemTB then Max := HS[i].DiemTB;
{In DS HS co diem TB cao nhat}
WriteLn('DS Hoc sinh co diem TB cao nhat');
For i:=1 to n do
If HS[i].DiemTB = Max then begin
Write(HS[i].Ho, ' ');
Write(HS[i].Ten, ' ');
Write(HS[i].DiemTB:3:2);
WriteLn;
End;
ReadLn;
End
... sinh có Điểm TB >=* In danh sách học sinh có Điểm TB < (tự làm bài)
* In danh sách học sinh có điểm TB cao
* In danh sách học sinh có điểm... I.y:5:2, '')'');
ReadLn;
End
Bài tập 03 – Danh sách học sinh:
Nhập vào danh sách học sinh gồm có Họ, Tên, Điểm TB
* Sắp thứ tự danh...
WriteLn(''Do dai doan thang AB la '', DoDai:5:2);
ReadLn;
End
Bài tập 02 – Tìm toạ độ trung ñiểm ñoạn thẳng AB:
Toạ ñộ trung ñiểm I ñoạn thẳng