1. Giới thiệu về ngôn ngữ lập trình là gì ?



tải về 0.58 Mb.
trang4/6
Chuyển đổi dữ liệu30.08.2016
Kích0.58 Mb.
#28832
1   2   3   4   5   6
đã nhập.

Chương trình

Program Thong_ke_hang;
uses crt;

Type hang=record


ten: string[20];
Ngay: string[10];
sl,gia,tien : real;
end;

Var bang:array[1..30] of hang; i,n: integer; tong: real;


begin

clrscr;


Write)'Nhap so luong mat hang n ? ');
readln(n);

tong:=0;

for i:=1 to n do

with bang[i] do


begin

Write(' Tên hang '); readln(ten);

Write(' Ngay nhap '); readln(ngay);
Write(' So luong '); readln(sl);
Write(' Gia '); readln(gia);
tien:=sl * gia;

tong:=tong+tien;


end;

Writeln(' Bang thong ke hang nhap');

Writeln('| Ten hang':20,'| Ngay nhap':12,'| So luong':12,'| Don gia':12,'| Tien':12 );
for i:= 1 to n do

with bang[i] do

Writeln(ten:20, ngay:12, sl:12:2, gia:12:2, tien:12:2);
writeln;

writeln('Tong so tien la: ', tong: 15:2);


readln;

end.


2 - Kiểu tệp (File)

2.1 - Khái niệm tệp

Tệp dữ liệu là tập hợp các dữ liệu có liên quan với nhau và được nhóm lại với nhau tạo thành một dãy, được lưu trữ trên bộ nhớ ngoài ví dụ như đĩa từ.

Các phần tử của tệp cùng kiểu, được lưu trữ kế tiếp nhau, khi làm việc với các phần tử của tệp có con trỏ tệp. Khi mới mở tệp con trỏ tệp trỏ vào phần tử đầu tiên của tệp. Cuối tệp có dấu kết thuc tệp kí hiệu là eof(tệp).

Các phần tử của tệp f như sau:

Mỗi ô là một phần tử của tệp. Cuối tệp là dấu kết thúc tệp eof(f) (end of file)


eof(f)
Con trỏ tệp (cửa sổ tệp) chỉ vào phần tử đầu Phần tử i Kết thúc tệp


 Có thể có các loại tệp sau:

- Tệp định kiểu.

- Tệp văn bản ( Text)

- Tệp không định kiểu

Trong các phần sau chỉ xét tệp định kiểu và tệp văn bản.
 Tệp và mảng có những điểm giống và khác nhau sau đây:

* Điểm giống nhau giữa tệp và mảng : tập hợp các phần tử cùng kiểu.

* Điểm khác nhau giữa tệp và mảng : Mảng khai báo với số phần tử xác định, còn tệp với số phần tử không xác định, tệp có thể chứa số phần tử tuỳ ý theo dung lượng trên đĩa.

2.2 - Các cách truy nhập tệp

* Truy nhập tuần tự và truy nhập ngẫu nhiên:

- Truy nhập tuần tự: Việc đọc một phần tử bất kỳ của tệp bắt buộc phải tuần tự đi qua các phần tử trước đấy. Còn muốn thêm một phân tử vào tệp phải thêm vào cuối tệp.


Kiểu truy nhập này đơn giản trong việc tạo tệp, xử lý tệp, song nó kém linh hoạt

- Truy nhập tệp trực tiếp( direct access ): Có thể truy nhập vào bất kỳ phần tử nào trong tệp thông qua chỉ số thứ tự của phần tử trong tệp. Tuỳ theo từng bộ nhớ ngoài mà có thể truy nhập trực tiếp được hay không, như đĩa từ có thể truy nhập trực tiếp được, còn băng từ chỉ có thể truy nhập tuần tự không truy nhập trực tiếp được. Như vậy trong truy nhập trực tiếp có thể đọc bất kỳ phần tử nào, thêm phần tử mới thì phải thêm vào cuối tệp.

2.3 - Khai báo tệp định kiểu

Khai báo tệp định kiểu dùng cụm từ sau:


File of kiểu_phần_tử;

 Khai báo kiểu tệp:

Type tên_kiểu = File of kiểu_phần_tử;  Khai báo biến têp:

Var tên_biến : File of kiểu_phần_tử;


Ví dụ 1 type t= file of integer;
var f1,f2 : t;

Ví dụ 2: type bang= record


ten: string[25];

Ns: string[10];


Que: string[30];
luong,bhxh:real;
end;

var f1,f2,f3: file of bang;

2.4 - Tạo tệp để ghi dữ liệu

* Mở tệp để ghi dữ liệu

Dùng 2 thủ tục đi liền nhau theo thứ tự như sau:

- Thủ tục Assign

Assign(biến_têp, tên_tệp);
Thủ tục này gán tên_tệp cho biến_tệp. Tên_tệp theo đúng qui tắc đặt tên trong DOS mà ta đã học ở phần trên.

- Thủ tục Rewrite

Rewrite(biến_tệp);

Thủ tục này thực hiện việc mở tệp để ghi.

Ví dụ: Mở tệp có tên là ‘songuyen.dat’ gán cho biến tệp f để ghi dữ liệu ta viết như sau:
Assign(f,’songuyen.dat’);

Rewrite(f);

Sau khi mở tệp xong thì tệp chưa có phần tử nào, tệp rỗng. Con trỏ tệp ( cửa sổ tệp ) trỏ vào cuối tệp (eof) . Nếu tên_tệp trùng với tệp đã có thì tệp đó sẽ bị xoá.

* Ghi dữ liệu vào tệp dùng thủ tục Write

Write(biến_tệp, biểu_thức1, biểu_thức2, . . ., biểu_thức n);

Các biểu_thức phải có giá trị cùng kiểu với kiểu của tệp. Giá trị của các biểu thức sẽ được ghi vào tệp theo như thứ tự đã viết.

Write(f, 2, 4, 6, i*j+3);

* Đóng tệp bằng thủ tục Close


Close(biến _tệp);
* Các ví dụ chương trình tạo tệp để ghi dữ liệu

Bài toán 1: Tạo tệp có tên là ‘songuyen.dat’ ghi các số nguyên dương <200 mà chia hết


cho 3.

Chương trình

Program Tao_tep_so_nguyen;
uses crt;

var i : integer; f : file of integer ;


Begin

assign(f, ‘songuyen.dat’);


rewrite(f);

for i:=3 to 199 do

if (i mod 3) = 0 then write(f, i);

close(f);

readln;
end.
Bài toán 2: Tạo tệp ‘sach.dat’ để ghi các thông tin cho các cuốn sách bao gồm các dữ liệu như tên sách, năm xuất bản, số trang, tác giả.

Chương trình

Program Tao_tep_sach;
uses crt;

Type tin = record

ten: string[25];
nam: integer;
trang: longint;

tacgia: string[25];


end;

Var i,n : integer; f: file of tin; nhap: tin;


Begin

clrscr;


assign(f, ‘sach.dat’);
rewrite(f);

write(‘ Nhap so sach n : ‘); readln(n);


for i:= 1 to n do

begin


with nhap do
begin

write(‘Ten sach : ‘); readln(ten);

write(‘Nam xuat ban : ‘); readln(nam);
write(‘So trang : ‘); readln(trang);
write(‘Ten tac gia : ‘); readln(tacgia);
end;

write(f, nhap);


end;

close(f);


end.
2.5 - Đọc dữ liệu từ tệp đã có

* Mở tệp để đọc

Mở tệp để đọc dùng 2 thủ tục đi liền nhau theo thứ tự sau:

- Thủ tục Assign

assign(biến_tệp, tên_tệp);

- Thủ tục Reset

Reset(biến_tệp) ;

Thủ tục này thực hiện mở tệp để đọc.

Ví dụ1: Mở tệp ‘songuyen.dat’ gắn với biến tệp f để đọc dữ liệu.
assign(f, ‘songuyen.dat’);

reset(f);

Ví dụ 2: Mở tệp ‘sach.dat’ gắn với biến tệp f1 để đọc dữ liệu.
assign(f1, ‘sach.dat’);

reset(f1);

* Đọc dữ liệu từ tệp

Đọc dữ liệu từ tệp được thực hiện bằng thủ tục Read như sau: Read(biên_tệp, biến1, biến2, . . . , biến n);

Thủ tục này thực hiện đọc giá trị ở vị trí con trỏ gán cho các biến tương ứng như thứ tự đã viết, khi đọc xong con trỏ tệp lại chuyển sang phần tử tiếp theo đọc và gán cho biến khác, cứ thế đọc cho đến biến n .

Việc đọc chỉ được thực hiện khi tệp vẫn còn phần tử, tức là con trỏ chưa tới eof ( cuối tệp).


do vậy trước khi đọc phải kiểm tra xem đã kết thúc tệp chưa, dùng hàm chuẩn eof như sau:
eof(biến_têp); hàm này cho giá trị True nếu con trỏ ở cuối tệp, ngược lại hàm cho giá trị
False.

Có thể dùng 2 cấu trúc sau:

- Kiểm tra nếu tệp chưa kết thúc thì đọc

if not eof(biến_têp) then read(biến_têp, biến);

- Đọc tất cả các phần tử của tệp

While not eof(biến_têp) do


Begin

read(biến_tệp, biến);


end;

Nếu con trỏ ở cuối tệp mà vẫn đọc thì máy sẽ báo lỗi, sau đó chương trình dừng lại. Do vậy phải kiểm tra trước khi đọc.

Ví dụ while not eof(f) do
begin

read(f,x);


writeln(x);
end;

* Đóng tệp

Close(biến_tệp);
* Các ví dụ chương trình đọc dữ liệu từ tệp

Bài toán 1: Đọc dữ liệu từ tệp ‘songuyen.dat’ đã tạo ở trên và hiện kết quả trên màn hình. Chương trình

program Doc_tep_songuyen;
uses crt;

var i: integer; f: file of integer;


begin

clrscr;


assign(f, ‘songuyen.dat’);
reset(f);

while not eof(f) do


begin

read(f, i);


writeln(i);
end;

close(f);


readln;
end.

Bài toán 2: Viết chương trình thực hiện tạo tệp ‘diem.dat’ ghí lại điểm thi của thí sinh, dữ liệu bao gồm: họ và tên thí sinh, điểm toán, điểm lý, điểm hoá. Đồng thời thực hiện đọc tệp và in ra thí sinh trúng tuyển, điểm chuẩn đỗ được nhập vào từ bàn phím.

Chương trình

program Tao_doc_tep_diemts;


uses crt;

type hs = record

ten: string[25];

toan,ly,hoa : real;


end;
var i,n: integer; f: file of hs; nhap: hs; diemc: real;

{*** **}


procedure tao; { thu tuc tao }

begin
clrscr;

assign(f, ‘diem.dat’);
rewrite(f);

write(‘ So thi sinh: ‘); readln(n);


for i:=1 to n do

begin


with hs do
begin

write(‘ Ho va ten: ‘); readln(ten);


write(‘ Diem toan: ‘); readln(toan);
write(‘ Diem ly : ‘); readln(ly);

write(‘ Diem hoa : ‘); readln(hoa);


end;

write(f, hs);


end;

close(f);

end; { ket thuc thu tuc tao}

{ *** ***}

Procedure doc; { thu tuc doc }
begin

clrscr;


Assign(f, 'Diem.dat' );
reset(f);

write(‘ Diem chuan : ‘); readln(diemc);

writeln(‘ Danh sach thi sinh trung tuyen dai hoc ‘); while not eof(f) do

begin


read(f,hs);
with hs do

if toan+ly+hoa >= diemc then writeln(ten:25,toan:10:1,ly:10:1,hoa:10:1);


end;

close(f);

end; { ket thuc thu tuc doc}

{*** ***}

{ than chuong trinh chinh}
repeat

clrscr;


writeln(‘ 1- Tao tep’);
writeln(‘ 2- Doc tep’);
writeln(‘ 3- Ket thuc’);

write(‘ Hay chon mot viec ? ‘); readln(i);


case i of

1: tao;


2: doc;

end;


until i=3;
readln;

end.
2.6 - Truy nhập tệp trực tiếp

Các phần đã xét ở trên là truy nhập tuần tự tệp có định kiểu. Trong phần này ta xét cách truy nhập trực tiếp tệp có định kiểu.

Sử dụng tất cả các thủ tục và lệnh đã nêu ở trên, ngoài ra để truy nhập trực tiếp tệp còn sử dụng một số thủ tục và hàm sau.

* Thủ tuc Seek để dịch chuyển con trỏ tệp
Seek( biến_tệp, n);

n có kiểu longint. Thủ tục này thực hiện chuyển con trỏ tệp tới phần tử thứ n. Trong tệp phần tử đầu được đánh thứ tự là 0.

* Hàm Filepos

Filepos(biến_tệp)

Hàm này cho vị trí hiện thời của con trỏ tệp. Ví trí đầu là 0. * Hàm Filesize

Filesize(biến_tệp)

Hàm này cho số lượng phần tử của tệp. Hàm cho giá trị 0 khi tệp rỗng.

Để thêm 1 phần tử vào tệp phải thêm vào cuối tệp. Như vậy phải dịch con trỏ tới cuối tệp bằng thủ tục seek như sau:

seek(biến_tệp, Filesize(biến_tệp)-1 );
* Ví dụ chương trình truy nhập tệp trực tiếp

Bài toán 1: Tạo tệp ‘sochan.dat’ ghi các số nguyên dương chẵn <=20. Truy nhập để sửa một phần tử bất kỳ và thêm một phần tử vào tệp.

Chương trình

Program truy_nhap_truc_tiep_tep;


uses crt;

var i,j : integer; f: file of byte;


{ thu tuc tao tep }

procedure tao;


begin

clrscr;


assign(f, ‘sochan.dat’);
rewrite(f);

for i:=1 to 20 do

if (i mod 2) =0 then write(f, i);

close(f);


readln;

end; {ket thuc thu tuc tao }


{ thu tuc sua }

procedure sua;


begin

clrscr;
reset(f);

write(‘ sua phan tu thu ? ‘); readln(i);
seek(f, i-1);

read(f,j);

witeln(‘ gia trị cu: ‘, j);

write(‘ nhap gia tri moi : ‘);


readln(j);

seek(f, i-1);


write(f, j);
close(f);

end; { ket thuc thu tuc sua }


{ thu tuc them phan tu }
procedure them;

begin


clrscr;
reset(f);

write(‘ gia tri moi them: ‘);


readln(j);

seek(f, filesize(f)-1);


write(f,j);

close(f);


readln;

end; {ket thuc thu tuc sua }


{ thu tuc doc }

procedure doc;


uses crt;

clrscr;


reset (f);

while not eof(f) do


begin

read(f,i);


witeln(i);
end;

close(f);

end; { ket thuc thu tuc doc}

{*** ***}

{ than chuong trinh chinh}
repeat

clrscr;


writeln(‘ 1- Tao tep’);

writeln(‘ 2- Sua tep’);

writeln(‘ 3- Them phan tu’);
writeln(‘ 4- Doc tep’);
writeln(' 5- ket thuc ');

write(‘ Hay chon mot viec ? ‘); readln(i);

case i of

1: tao;


2: sua;
3: them;
4: doc;
end;

until i=5;


readln;

end.
2.7 - Tệp văn bản

* Khai báo tệp văn bản

Trong Pascal có một kiểu tệp đã được định nghĩa trước đó là tệp văn bản, được định nghĩa với từ chuẩn TEXT.

Khai báo kiểu tệp văn bản;
Var Ten_bien: TEXT;

Các phần tử của TEXT là các kiểu kí tự, được tổ chức thành các dòng với độ dài của các dòng khác nhau, nhờ có thêm các dấu hết dòng (End of Line). Đó là cặp kí tự điều khiển CR (Carriage Return, nhẩy về đầu dòng, mã ASCII là 13) và LR(Line Feed: xuống dòng, mã ASCII là10), chúng dùng để ngăn cách các dãy kí tự tương ứng với 2 dòng khác nhau.


Ví dụ: Đoạn văn bản sau:

HANOI


123

THUDO


Được chứa trong tệp văn bản thành một dãy như sau:

HANOI CR LF 123 CR LF THUDO CR LF EOF


Do tệp văn bản được tổ chức thành từng dòng nên việc ghi và đọc tệp văn bản có thẻ tục ghi và đọc theo dòng.

* Ghi vào tệp văn bản

Có thể ghi các giá trị kiểu Integer, real, boolean, string vào tệp văn bản bằng lệnh Write hoặc Writeln, các lệnh này cho phép chuyển các giá trị kiểu nói trên sang dạng kí tự.
Có 3 dạng sau:

Dạng 1:


Write(biến _tệp, biểu_thức_1, biểu_thức_2,..., biểu_thức_n);
Ghi các giá trị của biểu thức vào tệp không có dấu hết dòng
Dạng 2:

Writeln(biến _tệp, biểu_thức_1, biểu_thức_2,..., biểu_thức_n);


Ghi các giá trị của biểu thức vào tệp có dấu hết dòng.
Dạng 3:

Writeln(biến _tệp);

Ghi dấu hết dòng vào tệp.

* Đọc dữ liệu từ tệp vănbản

Chúng ta có thể đọc các kí tự, các số nguyên, số thực, boolean từ tệp văn bản thông qua các thủ tục sau:

Dạng 1:


read(biến _tệp, biến1, biến2, biến3,..., biếnn);

Đọc các giá trị từ tệp gán cho các biến tương ứng và không sang đầu dòng tiếp theo.


Dạng 2:

readln(biến _tệp, biến1, biến2, biến3,..., biếnn);

Đọc các giá trị từ tệp gán cho các biến tương ứng và đưa con trỏ sang đầu dòng tiếp

theo.


Dạng 3:

readln(biến _tệp);

Đưa con trỏ sang đầu dòng tiếp theo.

Hàm chuẩn EOLN(f) sẽ phát hiện ra dấu hết dòng của tệp f.

Hàm này cho giá trị là True nếu kết thúc dòng, ngược lại là False.
* Các chương trình xử lý tệp văn bản
Bài toán 1: Tạo tệp văn bản ghi lại n dòng văn bản nhập vào từ bàn phím. Đọc tệp đã tạo và hiện ra trên màn hình.

Program Tao_doc_tep_van_ban;


uses crt;

var i,n: integer; f: text; s: string;

{*** **}

procedure tao; { thu tuc tao }

begin
clrscr;

assign(f, ‘vanban.txt’);


rewrite(f);

write(‘ So dong van ban: ‘); readln(n);


for i:=1 to n do

begin


write(‘ Nhap dong ‘, i ); readln(s); writeln(f, s);

end;


close(f);

end; { ket thuc thu tuc tao}

{ *** ***}

Procedure doc; { thu tuc doc }


begin

clrscr;


Assign(f, 'vanban.txt' );
reset(f);

Writeln(‘ Tep van ban da tao’);


while not eof(f) do

begin


readln(f,s);
writeln(s);
end;

close(f);

end; { ket thuc thu tuc doc}

{*** ***}

{ than chuong trinh chinh}
repeat

clrscr;


writeln(‘ 1- Tao tep’);
writeln(‘ 2- Doc tep’);
writeln(‘ 3- Ket thuc’);

write(‘ Hay chon mot viec ? ‘); readln(i);


case i of

1: tao;


2: doc;
end;

until i=3;


readln;

end.


Bài toán 2: Đọc xâu văn bản từ tệp, kiểm tra xem xâu đó có đối xứng không, sau đó sắp xếp các chữ số trong xâu theo thứ tự tăng dần.

chương trình

PROGRAM DOC_XAU_SAP_TT_SO;
USES CRT;

TYPE MANG=ARRAY[1..200] OF CHAR;

VAR I,K,L,N:INTEGER;T:BOOLEAN;S:STRING;A:MANG;F:TEXT; PROCEDURE SAPTANG(VAR X:MANG;M:INTEGER);
VAR J,Z:INTEGER;P:CHAR;

BEGIN


FOR J:=1 TO M-1 DO

FOR Z:=1 TO M-J DO IF X[Z]>X[Z+1] THEN BEGIN P:=X[Z];


X[Z]:=X[Z+1];

X[Z+1]:=P;


END;

END;


BEGIN { thân chương trinh chính}

CLRSCR;


ASSIGN(F,'VB.TXT');
RESET(F);

READLN(F,S);

WRITELN(' XAU DOC DUOC');
WRITELN(S);

N:=LENGTH(S);

{tim xau doi xung}

K:=1;L:=N;T:=TRUE;

WHILE (K

IF S[K]=S[L] THEN BEGIN K:=K+1; L:=L-1; END


ELSE T:=FALSE;

IF T THEN WRITELN(' XAU DOI XUNG ') ELSE WRITELN(' XAU KHONG DOI XUNG ');

{ sap cac so trong xau tang dan }

K:=0;


FOR I:=2 TO N DO IF (ORD(S[I])>=48) AND (ORD(S[I])<=57) THEN
BEGIN

K:=K+1;
A[K]:=S[I];


END;

SAPTANG(A,K);


L:=0;

FOR I:=1 TO N DO IF (ORD(S[I])>=48) AND (ORD(S[I])<=57) THEN


BEGIN

L:=L+1;


S[I]:=A[L];
END;

WRITELN('XAU DA SAP THU TU CAC SO '); WRITELN(S);

READLN;

CLOSE(F);


END.

Bài tập chương VI

1. Viết chương trình gồm 2 CT con làm các công việc sau: Ghi 1 bài thơ có n dòng, nội dung
nhập vào từ bàn phím lên tệp văn bản có tên ‘BAITHO.TXT’ và đọc tệp văn bản đã tạo từ
đĩa và cho hiện nội dung lên màn hình. Dùng câu lệnh lựa chọn để chọn công việc: 1= Ghi,
2=Doc.

2. Viết chương trình tạo tệp dữ liệu ‘DIEM.DAT’ chứa bảng điểm của n người và in kết quả ra màn hình. Bảng điểm gồm các cột: Họ tên, Điểm Toán, Điểm Lý, Điểm Hoá , Tổng, Loại. Nhập vào: Họ tên, Điểm toán, Điểm lý, Điểm hoá.

Tính Tổng, Loại :

Tổng = Điểm toán + Điểm lý + Điểm hoá .

Loại = ‘ DO ’ nếu Tổng > 19

Loại = ‘ TRUOT' nếu Tổng <= 19


3. Viết chương trình tạo tệp dữ liệu ‘LUONG.DAT’ chứa bảng lương của n người và in kết quả ra màn hình.

Bảng lương gồm các cột: Họ tên, Ngày công, Lương ính,Thưởng, Tổng Nhập vào : Họ tên, Ngày công, Lương chính .

Tính Thưởng, Tổng :

Thưởng = Lương chính x 2 nếu Ngày công > 25

Thưởng = Lương chính nếu Ngày công <= 25

Tổng = Lương chính + Thưởng .


4. Viết chương trình tạo tệp dữ liệu ‘HANG.DAT’ chứa bảng Thống kê hàng nhập của n mặt hàng và in kết quả ra màn hình. Bảng Thống kê hàng nhập gồm các cột:
Tên , Số lượng, Đơn giá, Tiền, Loại.

Nhập vào: Tên , Số lượng, Đơn giá.

Tính Tiền, Loại : Tiền = Số lương x Đơn giá .

Loại = ‘Cao’ nếu Tiền > 500000.

Loại = ‘THAP’ nếu Tiền <= 500000.
5. Viết chương trình tạo tệp dữ liệu ‘SACH.DAT’ chứa bảng danh mục của n quyển sách và in kết quả ra màn hình. Bảng danh mục sách bao gồm các cột:

Tên, Năm, Tác giả, Giá, Loại.

Nhập vào : Tên, Năm, Tác giả, Giá.
Tính Loại theo công thức sau:

Loại = ‘Cao’ nếu Tiền > 50000

Loại = ‘TB’ nếu 20000<= Tiền <= 50000

Loại = ‘THAP’ nếu Tiền < 20000.

CHƯƠNG VII

ĐỒ HOẠ VÀ ÂM THANH

1- Đồ hoạ

1.1 - Khái niệm chung

Màn hình máy vi tính hiện nay có nhiều loại khác nhau, các máy AT-386, AT-486, AT-
586... thường dùng loại màn hình VGA (Video Graphic Adapter), TVGA (Top of VGA) hoặc
SVGA (Supper VGA), đây là loại màn hình có thể dùng ở một trong hai chế độ: chế độ TEXT

- hiển thị văn bản và chế độ GRAPHIC - hiển thị đồ hoạ.

Trong chế độ TEXT màn hình được chia thành 25 dòng và 80 cột, nếu viết kín màn hình ta có thể viết được 2000 ký tự. Chúng ta có thể thay đổi chế độ phân giải để viết ra 25 dòng x 40 cột hoặc 80 dòng x 50 cột...

Muốn vẽ hình, tô màu các hình ta phải chuyển sang chế độ đồ hoạ, trong chế độ này


màn hình được xem là một ma trận điểm, tuỳ thuộc độ phân giải ta có thể có ma trận 640x480
điểm hoặc 1024x720 điểm.... Mỗi điểm trên màn hình được gọi là 1 Pixel tức là một phần tử
ảnh

( Picture Element ), ta có thể hoàn toàn chủ động trong việc thay đổi màu sắc, cường độ sáng của từng điểm để tạo ra một bức tranh theo ý muốn. Vị trí của mỗi điểm trên màn hình được biểu diễn bởi hai toạ độ: Hoành độ và Tung độ, gốc toạ độ (0,0) là điểm ở góc trên bên trái màn hình còn điểm góc dưới bên phải có toạ độ là 639,479.

Muốn chuyển sang làm việc ở chế độ đồ hoạ, trong thư mục hiện hành (thư mục chứa chương trình Pascal) phải có các tệp GRAPH.TPU, *.BGI và *.CHR. Lời gọi đơn vị chương trình đồ hoạ phải đặt ở đầu chương trình sau từ khoá USES như ví dụ 43.

Ví dụ 43

Program Ve_hinh;
Uses GRAPH;
1.2 - Khởi động chế độ đồ hoạ

Trong phần thân chương trình cần phải đưa vào các thông báo về kiểu màn hình, chế độ đồ hoạ (MODE) tương ứng. Những người làm tin học ứng dụng thường không quan tâm lắm đến các thông số này do vậy dễ lúng túng khi cần khai báo. Để khắc phục nhược điểm đó trong Turbo Pascal đã có sẵn một thủ tục khởi tạo chế độ đồ hoạ là Initgraph(var GD,GM: Integer, DP:string[n]); Khi gọi thủ tục này với các tham số hợp lệ Initgraph sẽ tự xác định kiểu màn hình và Mode đồ hoạ tối ưu .

Người lập trình có thể tự mình khai báo các tham số GD, GM (Trong đó GD: Graph Driver - là một số nguyên xác định kiểu màn hình; GM: Graph Mode - cũng là một số nguyên xác định Mode đồ hoạ).

Trước hết trong phần khai báo biến các tham số này phải khai thuộc kiểu Integer, sau


đó trong phần thân chương trình phải chọn các giá trị thích hợp cho kiểu màn hình và Mode
đồ hoạ.

Thông thường chúng ta không biết chính xác kiểu màn hình và Mode đồ hoạ của máy tính đang sử dụng nên sẽ gặp lúng túng khi khai báo. Trong trường hợp này tốt nhất là để Pascal tự xác định giúp chúng ta các tham số này.

Nếu ngay sau từ khoá Begin của phần thân chương trình chúng ta khai báo

GD:= DETECT;


thì Initgraph hiểu là nó phải tự đi xác định kiểu màn hình và Mode đồ hoạ sao cho đạt kết quả tối ưu. Nói chung trừ những trường hợp đặc biệt, chúng ta không nên tự xác định những thông số này làm gì.

Bảng .... cho biết giá trị của các tham số GD,GM và độ phân giải màn hình của ba loại màn hình đã có, loại thông dụng nhất hiện nay là VGA.

Bảng ...
Kiểu màn hình Mode đồ hoạ Độ phân giải

Tên Giá trị Tên Giá trị

CGA 1 CGAC0 0 320x200

CGAC1 1 320x200

CGAC2 2 320x200

CGAC3 3 320x200

CGACHi 4 640x200

EGA 3 EGALO 0 640x200

EGAHi 1 640x350

IBM8514 6 IBM8514L 0 640x480, 256 màu

O 1 1024x768, 256 màu

IBM8514Hi

VGA 9 VGALO 0 640x200

VGAMed 1 640x350

VGAHi 2 640x480
Ví dụ 44 trình bày cách sử dụng thủ tục Initgraph để thiết kế chương trình vẽ một đường tròn có tâm tại chính giữa màn hình và bán kính là 50 Pixel. Các tham số GD,GM sẽ do Pascal tự xác định, các tệp điều khiển đồ hoạ đặt trong thư mục TP trên đĩa cứng C.
Ví dụ 44

Program Ve_hinh_tron;


Uses graph;

Var


GD,DM: Integer;
BEGIN

GD:= detect;

Initgraph(GD,GM,'C:\tp\bgi');

If graphresult <> grok then halt(1);


Circle(320,240,50);

Readln;


CloseGraph;
END.

Nếu chúng ta muốn tự mình khai báo GD và GM (Ví dụ: màn hình VGA, kiểu đồ hoạ là độ phân giải cao, tệp tin đồ hoạ chứa trong thư mục TP5 trên đĩa A) thì bỏ lệnh GD:=DETECT Và viết lại đoạn đầu của ví dụ 44 như sau:


GD:=VGA;

GM:=VGAHi;

INITGRAPH(GD,GM,'C:\TP\BGI');



tải về 0.58 Mb.

Chia sẻ với bạn bè của bạn:
1   2   3   4   5   6




Cơ sở dữ liệu được bảo vệ bởi bản quyền ©hocday.com 2024
được sử dụng cho việc quản lý

    Quê hương