CÁC THỦ TỤC VÀ HÀM CHUẨN

Một phần của tài liệu BAI GIANG PASCAL 2 (Trang 26 - 28)

KIỂU CON TRỎ VÀ BIẾN ĐỘNG

10.4CÁC THỦ TỤC VÀ HÀM CHUẨN

2006.1011

Thủ tục New(p): Cấp phát bộ nhớ cho biến động trỏ bởi biến con trỏ p.

Nếu dùng N lần NEW(p) liên tục thì có N biến động cùng kiểu, nhưng con trỏ p chỉ trỏ vào biến động tạo ra cuối cùng. Muốn truy nhập các biến động tạo ra trước đó, phải lưu trữ địa chỉ của chúng.

Thủ tục Dispose(p): Giải phóng bộ nhớ đã cấp cho biến động trỏ bởi p.

Thủ tục Mark(p): Đánh dấu địa chỉ cần giải phóng sau này.

Thủ tục Release(p): Xoá mọi biến động được tạo ra từ khi đánh dấu bởi Mark(p).

VD 10.2 (dùng New(p), Dispose(p), Mark(p), Release(p))

VAR {Khai báo các biến con trỏ}

p, q, r, s: ^Real; {biến con trỏ chứa đ/c biến động kiểu Real} t: Pointer; {con trỏ không định kiểu}

BEGIN New(p); ... Mark(t); ... New(q); ... New(r); ... Release(t); ... END.

Thủ tục GetMem(p, n): Cấp phát n bytes cho biến động trỏ bởi p.

Hàm Maxavail: Cho kích thước block cực đại các bytes liên tiếp chưa dùng Heap.

Hàm Memavail: Cho tổng số bytes còn rỗi trong Heap.

VD 10.3 Lập trình tạo n < 100 biến động có kiểu số nguyên. Tính tổng các số nguyên tố trong n số đó.

VARA: array[1..100] of ^Integer; N, i: Byte; S: LongInt; Function NTO(n: Integer): Boolean; Var i: Integer;

Begin

NTO:= FALSE; If n < 2 then Exit;

For i:= 2 to Trunc(Sqrt(n)) do If n mod i = 0 then Exit; NTO:= TRUE; End; BEGIN Write(‘n = ‘) ReadLn(n); For i:= 1 to n do Begin New(a[i]);

Write(‘Nhap so thu ‘, i, ‘: ‘); Readln(a[i]^); End;

{Tinh tong cac so nguyen to}

S:= 0;

For i:= 1 to n do

If NTO(a[i]^) then S:= S + a[i]^;

Write(‘Tong cac so nguyen to : ‘, S); Readln; END.

Một phần của tài liệu BAI GIANG PASCAL 2 (Trang 26 - 28)