Vì vậy mà trước khi thực hiện lệnh gán x := y để máy nhận... giá trị của b ta phải gửi giá trị cũ của x vào biến tg.[r]
Trang 14) Khái quát hóa
Xuất phát từ bài toán: “Sắp xếp ba số a, b, c theo thứ tự tăng dần”.
Var a,b,c: Real;
Procedure Sapxep(Var x, y, z: Real);
Var tg: Real;
Begin
If x > y Then Begin
tg := x; x := y; y := tg;
End;
If y > z Then Begin
tg := y; y := z; z := tg;
End;
If x > y Then Begin
tg := x; x := y; y := tg;
End;
End;
Begin
Writeln('Nhap vao ba so: ');
Write('So thu nhat: '); Readln(a);
Write('So thu hai : '); Readln(b);
Write('So thu ba : '); Readln(c);
Sapxep(a, b, c);
Writeln('Ba so sau khi sap xep la:');
Write(a:6:0, b:6:0, c:6:0);
Readln
End
Ở đây chúng ta cần lưu ý với học sinh rằng : lệnh gán nhận giá trị mới thì
mất giá trị cũ Vì vậy mà trước khi thực hiện lệnh gán x := y để máy nhận
Trang 2giá trị của b ta phải gửi giá trị cũ của x vào biến tg Tại sao lệnh thứ ba lại
giống lệnh thứ nhất? đó là vì x, y, z, tg là các địa chỉ lưu trữ những giá trị Những giá trị này bị thay đổi qua những lệnh gán Địa chỉ của biến thì không đổi, nhưng nội dung của biến thì đã thay đổi khi thực hiện lệnh gán
Tiếp theo, chúng ta có thể nêu câu hỏi: Khái quát, nếu phải sắp xếp n
số theo thứ tự tăng dần ta phải làm thế nào? Ta có chương trình như sau:
Var a: Array[1 100] Of Real;
i,j,n: Integer;
Procedure Doicho(Var x,y:Real);
Var tg:Real;
Begin
Tg := x; x := y; y := tg;
End;
Procedure Sapxep;
Begin
For i := 1 to n - 1 do
For j := i + 1 to n do
If a[i] > a[j] Then Doicho(a[i], a[j]);
End;
Begin
Write('Nhap so phan tu cua day so: '); Readln(n);
For i := 1 to n do Begin
Write('So thu ',i,': '); Readln(a[i]);
End;
Sapxep;
Writeln('Day so sau khi sap xep la:');
For i := 1 to n do Write(a[i]:6:0);
Readln
End