pascal 3

Màu nền
Font chữ
Font size
Chiều cao dòng

MỤC LỤC

Chương I : Giới thiệu về ngôn ngữ PASCAL

I/ Bộ chữ viết của PASCAL, từ khoá, tên

II/ Giải thuật và lưu đồ cú pháp

III/ Các đại lượng cơ bản

IV/ Thực hành TURBO PASCAL

Chương II: Khai báo hằng, biến và câu lệnh

I/ Khai báo hằng

II/ Khai báo biến

III/ Các lệnh

A/ Câu lệnh đơn giản

• Lệnh gán

• Thủ tục đưa dữ liệu ra màn hình WRITE, WRITELN

3. Thủ tục vào ra dữ liệu READ, READLN

B/ Câu lệnh có cấu trúc

• IF ... THEN ... ELSE ...

• CASE ... OF ...

• Vòng lặp REPEAT

• Vòng lặp WHILE

5. Vòng lặp FOR

Chương III: Dữ liệu có cấu trúc: Kiểu mảng (ARRAY)

• Đặt vấn đề

2. mảng

Chương IV: Xâu kí tự (String)

• Đặt vấn đề

• Khai báo

• Phép ghép đối với xâu

• Một số hàm và thủ tục đối với xâu

5. Truy nhập vào từng kí tự của xâu

Chương V: Dữ liệu có cấu trúc: dữ liệu kiểu bản ghi (RECORD)

• Đặt vấn đề

• Khai báo RECORD

3. Thao tác đối với biến RECORD

Chương VI: Chương trình con: Thủ tục và hàm

• Đặt vấn đề

• Chương trình con hàm (FUNTION)

3. Chương trình con thủ tục (PROCEDURE)

Chương VII: Tệp dữ liệu DATA FILE

• Đặt vấn đề

2. Khai báo

Chương VIII: Đồ hoạ (GRAPHICS)

GIỚI THIỆU VỀ NGÔN NGỮ LẬP TRÌNH PASCAL.

PASCAL là ngôn ngữ lập trình cấp cao Do giáo sư Niklaus Wirth - Thụy sĩ sáng tác vào năm 1970. Lúc đầu mục đích của GS Wirth thiết kế PASCAL là để giảng dạy cho sinh viên ở các trường Đại học vì PASCAL có đặc điểm: ngữ pháp, ngữ nghĩa đơn giản và có tính logíc, cấu trúc chương trình rõ ràng dễ hiểu.

Trong quá trình phát triển, PASCAL đã phát huy được ưu điểm của mình, được nhiều người ưa chuộng và trở thành một ngôn ngữ mạnh được ứng dụng trong nhiều lĩnh vực khác nhau. Từ PASCAL Do GS Wirth sáng tác ra, rất nhiều hãng đã phát triển thêm và tạo ra các chương trình dịch ngôn ngữ PASCAL với nhiều thêm bớt khác nhau nhưng TURBO PASCAL của hãng Borland (Mỹ) có nhiều ưu điểm nhất và trở thành một ngôn ngữ cấp cao phổ biển nhất trên thế giới được sử dụng trong lĩnh vực giảng dạy và lập trình chuyên nghiệp. TURBO PASCAL được cải tiến qua nhiều phiên bản: 1.0, 2.0, 3.0, 4.0, 5.0, 5.5, 6.0, 7.0 (1992).

Ngôn ngữ PASCAL là ngôn ngữ lập trình có cấu trúc được cài đặt trên hầu hết các máy vi tính. Lớp các bài Toán giải bằng ngôn ngữ này tương đối rộng, nó là một ngôn ngữ cấp cao phổ biến nhất được sử dụng trong lĩnh vực giảng dạy và lập trình chuyên nghiệp.

Để chạy được chương trình TURBO PASCAL trên đĩa phải có ít nhất 2 tệp:

• TURBO. EXE: Chương trình dịch, soạn thảo, ...

2. TURBO.TPL: Chứa thư viện, các hàm, thủ tục

Chương I : Giới thiệu về ngôn ngữ PASCAL

BÀI 1

I/ BỘ CHỮ VIẾT CỦA PASCAL, TỪ KHÓA, TÊN.

Một ngôn ngữ bất kỳ, từ ngôn ngữ giao tiếp của con người tới ngôn ngữ máy tính, đều được xây dựng trên một bộ các chữ viết, mỗi chữ viết là một kí tự, sau đó có quy tắc viết các từ thành câu để diễn tả các hành vi, sự việc, nghĩa là phải tuân thủ theo cú pháp và ngữ pháp của ngôn ngữ đó.

Ngôn ngữ máy tính PASCAL cũng như các ngôn ngữ máy tính khác được xây dựng với bộ chữ viết (hay còn gọi là kí tự) sau:

- Chữ cái: A --> Z; a --> z

- Kí tự gạch nối ( _ )

- 0 --> 9

- Kí hiệu Toán học: +, -, *, /, =, , ( , ) ....

- Các kí hiệu đặc biệt: . , ; : [ ] ? % @ \ | ! & # $ '

* Từ khoá ( Key word ): Program, Begin, End, If, Then ...

* Tên (IdentIfier): Là một dãy kí tự được dùng để chỉ tên hằng số, tên hằng kí tự, tên biến, tên kiểu, tên chương trình con. Tên được tạo bởi các chữ cái và các chữ số, bắt đầu tên phải là chữ cái, không chứa dấu cách và có thể chứa dấu gạch nối.

Ví dụ: có thể đặt tên chương trình có nhiệm vụ giải phương trình bậc hai như sau:

PROGRAM GIAI_PHUONG_TRINH_BAC_HAI;

Trong đó

+ PROGRAM: là từ khoá

+ GIAI_PHUONG_TRINH_BAC_HAI : Là tên chương trình

+ Dấu(;) là dấu ngăn cách giữa lệnh của Pascal

II/ CÁC ĐẠI LƯỢNG CƠ BẢN:'

1. Kiểu số nguyên (Integer)

Phạm vi sử dụng : -32768

ví dụ: -5, 10, 30 , ...

2. Kiểu số thực (Real)

Phạm vi sử dụng : 2.9*10-39

ví dụ : 3.14 3.0 -3.14

3. Kiểu số thực (Double)

Phạm vi sử dụng : 5.0*10324

4. Hằng

Hằng có thể là một số hay một xâu kí tự trong khi chạy chương trình thì giá trị của hằng không thay đổi

* Số: Là số nguyên hay số thực

* Xâu kí tự: Xâu là một dãy bất kỳ các ký tự. Độ dài của xâu là số ký tự kể cả dấu cách mà xâu đó có (0--> 255).

Hằng xâu là xâu ký tự đặt giữa cặp nháy đơn.

Ví dụ1 : ' Hà Nội, ngày 20/10/1998'

Ví dụ 2: '+ - + - + - + - + - + - + - + -'

5. Biểu thức

a) Biểu thức số học

Phép Toán số học: Thông thường PASCAL

+ +

- -

x *

: /

Chia lấy nguyên: DIV Ví dụ: 5 DIV 2 = 2

Chia lấy dư: MOD Ví dụ: 5 MOD 2 = 1

Biểu thức số học: Là mang phép Toán số học tác dụng lên hằng, lên biến, lên hàm.

Ví dụ 1: a * b

c * d

Được viết trên máy là: Cách 1: a*b/(c*d)

Cách 2: (a/c)*(b/d)

Cách 3: a*b/c/d

Ví dụ 2 : a2 + b2 - 2abCosx ==> a*a+b*b-2*a*b*cos(x)

- Hàm mẫu: Một số hàm sơ cấp Toán học thường dùng người ta lập sẵn thành những chương trình mẫu có sẵn trong ngôn ngữ, khi cần ta chỉ việc viết tên hàm trong 1 biểu thức nào đó và thay đổi số bởi 1 giá trị cụ thể

|x| abs(x)

vx sqrt(x)

x2 sqr(x)

ex exp(x)

lnx ln(x)

sinx sin(x)

cosx cos(x)

Hàm lấy phần nguyên int(x)

Hàm lấy phần thập phân Frac(x)

b) các phép toán quan hệ

Thông thường PASCAL

= =

> >

= >=

=

c) Các phép toán logic:

Các phép toán dưới đây thực hiện trên các giá trị Boolean và cho kết quả là Boolean

AND Phép " Và"

OR Phép " Hoặc"

NOT Phép "Phủ định"

XOR Phép "Triệt tiêu"

X Y X AND Y X OR Y X XOR Y

FLASE FLASE FLASE FLASE FLASE

FLASE TRUE FLASE TRUE TRUE

TRUE FLASE FLASE TRUE TRUE

TRUE TRUE TRUE TRUE FLASE

Ví dụ :

Not (5>1) cho giá trị là Flase

(414) cho giá trị là True

6. Cấu trúc chương trình PASCAL

Một chương trình PASCAL nói chung gồm 3 phần:

1 - Đầu chương trình

2 - Khai báo dữ liệu hằng, biến (Const, Var)

- Mô tả kiểu dữ liệu (Type)

- Khai bác chương trình con

3 - Thân chương trình chứa các lệnh để máy tính thực hiện

Ví dụ:

PROGRAM Ten; {đầu chương trình}

Var a,b: Real; {khai báo 2 biến thực}

Begin

các lệnh; thân chương trình

End.

* Giải thích:

- Đầu chương trình: PROGRAM: Từ khoá

Tên: Tự đặt

- Khai báo gồm các thành phần sau: đơn vị chương trình xác định hằng, khai báo biến, khai báo kiểu, khai báo hàm, khai báo thủ tục.

- Thân chương trình: Gồm các lệnh của PASCAL giữa các lệnh cách nhau bởi dấu [;]. Phần chương trình xem như ra lệnh để giải bài Toán nào đó nhằm giao cho máy thực hiện.

III/ THỰC HÀNH TURBO PASCAL

TURBO PASCAL có nhiều phiên bản, mới nhất là 7.0, hiện nay phổ biến dùng TURBO PASCAL 5.0 và 7.0

1. Bắt đầu sử dụng TURBO PASCAL.

Khởi động TURBO PASCAL bằng cách ấn

A:>TURBO * {nếu sử dụng đĩa mềm}

C:>CD TP\BIN * {chuyển vào thư mục TP}

C:>TP\BIN>TURBO {Chạy TURBO}

Trên màn hình sẽ hiện ra

File Edit Search Run Compile Debug Tools Options WinDow Help

New

Open... F3

Save F2

Save as...

Save all

Change dir...

Print

Printer setup...

DOS shell

Exit Alt+X

Mỗi từ (gọi là cửa sổ) ở dòng trên cùng đảm bảo một số công việc, muốn đọc công việc nào ta dùng mũi tên trái, phải () trỏ đến vùng cần chọn gõ * (như hình trên là cửa sổ File đang được sử dụng (kích hoạt))

2. Các thao tác

* Sao chép khối: Khối có thể là 1 từ, 1 dòng hay nhiều dòng

bước 1: đánh dấu đầu khối gõ Ctrl + KB

bước 2: đánh dấu cuối khối gõ Ctrl + KK

bước 3: Copy khối gõ Ctrl + KC

bước 4: Chuyển con trỏ đến vị trí cần sao chép gõ Ctrl + KV

bước 5: bỏ đánh dấu khối gõ Ctrl + KH

* Cất nội dung tệp lên đĩa : F2

* Về Menu chính : F10

* Mở tệp mới : F3

* Soát lỗi chương trình : Alt + F9

* Chạy chương trình : Ctrl + F9

* Đóng tệp : Vào menu WINDOWN ==> CLOSE

* Thoát khỏi TURBO PASCAL : vào menu FILE ==> EXIT

bài tập

• Khi nhập số doanh thu của một cơ quan nào đó mà có tổng doanh thu lớn hơn 45679 mà khai báo biến là kiểu Integer thì đúng hay sai ?, Nếu sai thì sai ở điểm nào.

• Khi khai báo số học sinh của một nhà trường thì ta khai báo biến là kiểu gì? Vì sao ?

• Khi có một biến tham gia tính toán ở trong chương trình mà giá trị của biến đó không thay đổi thì ta nên khai báo như thế nào?

• Nếu như ta muốn lấy phần nguyên của phép chia dưới đây ta phải dùng hàm mẫu gì?; Viết như thế nào ?

2349 chia cho 23

• Nếu như ta muốn lấy phần dư của phép chia dưới đây ta phải dùng hàm mẫu gì?; Viết như thế nào ?

673653 chia cho 1023

7) Hãy thể hiện phép toán dưới đây sang ngôn ngữ của máy

a) x3cos(1-2x) + ln(x2+8) chia cho vx4+1 + e-2x + |4x2 - 3|

b)

Chương II: KHAI BÁO HẰNG, BIẾN VÀ CÂU LỆNH

I. KHAI BÁO HẰNG

Hằng là các đại lượng không thay đổi giá trị. có các loại hằng số, hằng kí tự, hằng Boolean.

Khai báo hằng: các hằng được khai báo bằng một tên đặt trong phần khai báo CONST ở đầu chương trình.

CONST

Tên = Giá trị;

Trong đó

Tên: Tự đặt

Giá trị : Số nguyên, số thực, hằng, xâu kí tự, giá trị logic

Ví dụ: CONST

A = 5; số nguyên (Integer)

PI = 3.14; số thực (Real)

TD = 'Hanoi'; hằng xâu ( String)

B = True; giá trị logic (Boolean)

II. KHAI BÁO BIẾN

Biến là đại lượng có thể thay đổi giá trị. Các biến được khai báo bằng cách đặt tên biến vào phần khai báo biến ở đầu chương trình từ khoá VAR

Var

Tên: kiểu

Trong đó

Tên: Tự đặt

Kiểu: Số nguyên, số thực, hằng, xâu kí tự, giá trị logic)

Ví dụ: Var

i,j: Integer;

x,y: Real;

KT: Char;

B: Boolean;

III. CÁC LỆNH

Bên cạnh phần mô tả dữ liệu là phần lệnh của chương trình. Phần này xác định các công việc mà chương trình phải thực hiện để xử lý các dữ liệu đã được mô tả và khai báo. Các câu lệnh cách nhau bằng dấu chấm phẩy (;). Câu lệnh được chia ra làm hai loại: Câu lệnh đơn giản và câu lệnh có cấu trúc.

A/ Câu lệnh đơn giản

• Lệnh gán:

v: = e ;

Trong đó

v: Là biến nhất thiết phải khai báo

e: Là biểu thức số học, biểu thức xâu kí tự

*Tác động: Máy tính Toán biểu thức e được kết quả bao nhiêu mang gán cho biến v (nghĩa là lưu trữ vào ô nhớ có tên là v).

Ví dụ:

d:=b*b-4*a*c;

x1:=(-b+sqrt(d))/(2*a);

i:=0;

i:=i+1;

2. Thủ tục đưa dữ liệu ra màn hình: WRITE, WRITELN

Để viết dữ liệu ra màn hình ta dùng lệnh:

Write (dữ liệu);

hoặc Writeln(dữ liệu);

dữ liệu là hằng, biến, hàm, biểu thức.

* Viết ra kiểu số nguyên:

PROGRAM viet_so_nguyen

Var I: Integer;

Begin

I:=123;

Writeln( I );

Writeln(-567);

End.

+ Tác động: dữ liệu sẽ được đưa ra màn hình:

* Viết kiểu số thực:

Writeln(73.123456789:12:6) ;

Writeln(3.14:12:6);

+ Tác động: kết quả ra màn hình:

* Viết ra ký tự:

Writeln('Chao cac ban');

+ Tác động: kết quả ra màn hình

Chú ý: Khi viết

- Writeln(dữ liệu): Sau khi hiện dữ liệu ra màn hình con trỏ xuống đầu dòng tiếp theo

- Writeln: Màn hình để trống một dòng

3. Thủ tục vào dữ liệu: READ và READLN

Phép gán là lệnh cơ bản, đơn giản nhất để gán giá trị cho một biến ở trong chương trình thông qua bản phím.

READ(danh sách biến)

READLN (danh sách biến)

danh sách các biến nếu nhiều chúng cách nhau bằng dấu (,)

Ví dụ: READLN (a,b,c);

* Tác động: Khi chương trình thực hiện trên màn hình sẽ xuất hiện dấu nhấp nháy yêu cầu người sử dụng gõ vào bàn phím (Khi gõ phải đảm bảo sự tương ứng về số lượng, thứ tự, kiểu).

ví dụ: gõ 1.2 0.5 -1 (enter)

máy sẽ có a: = 1.2

b: = 0.5

c: = -1

* Chú ý : Khi viết READ và READLN

- READ ( danh sách biến): Khi hết dữ liệu gõ ENTER con trỏ không xuống đầu dòng tiếp theo

- READLN(danh sác biến): Khi hết dữ liệu gõ ENTER con trỏ xuống đầu dòng tiếp theo

- READLN; Chương trình tạm dừng, muốn tiếp tục bấm ENTER

* Kết hợp: WRITE và READLN

Các ví dụ dùng Reandln hoặc Read có một nhược điểm là không có chỉ dẫn trên màn hình để báo cho biết chúng ta đang cần đưa giá trị vào cho biến nào. Vì vậy ta có thể kết hợp với thủ tục Write như sau:

Write( ' I = ' ); Readln( I );

Write(' XX = ' ); Readln( XX );

B/ Câu lệnh có cấu trúc

1. Câu lệnh điều kiện IF ... THEN ... ELSE ...

Hai mẫu câu lệnh như sau:

IF (Đk) THEN (S1)

IF (Đk) THEN (S1) ELSE (S2)

Trong đó: IF, THEN, ELSE: là từ khoá

Đk: biểu thức logic

S1, S2 : lệnh bất kỳ

* Tác động:

Đối với câu lệnh 1: Nếu đk đúng máy thực hiện lệnh S1, còn nếu không thì kết thúc

Đối với câu lệnh 2: Nếu đk đúng máy thực hiện lệnh S1, nếu không máy thực hiện lệnh S2

Ví dụ: Lập chương trình để giải phương trình bậc 2

1. Đọc a, b, c từ bàn phím

2. Tính và đưa ra màn hình nghiệm của phương trình

Chương trình

PROGRAM Giai_Phuong_Trinh_Bac_Hai;

Uses crt;

Var

x,x1,x2,d:Real;

a,b,c:Real;

Begin

Clrscr;

Write('Ban hay vao so a:');Readln(a);

Write('Ban hay vao so b:');Readln(b);

Write('Ban hay vao so c:');Readln(c);

d:= b*b-4*a*c;

If D>0 Then

Begin

X1:=(-b+sqrt(d))/(2*a);

X2:=(-b-sqrt(d))/(2*a);

Write('Phuong trinh bac hai vua cho co hai nghiem :');

Writeln('X1 =',x1:1:2);

Writeln('X2 =',X2:1:2);

End;

If D=0 Then

Begin

X:=-b/2*a;

Writeln('Phuong trinh ban vua cho co mot nghiem kep:'¬);

Write('X1=X2=',X:1:2);

End;

If D

Write('Phuong trinh ban vua cho vo nghiem');

Readln;

End.

Bài tập1: Hãy lập chương trình nhập hai số a,b từ bàn phím kiểm tra số nào lớn , số nào nhỏ. Đưa ra màn hình lời thông báo cụ thể

Bài tập 2: Hãy lập chương trình nhập hai số a và b. Hãy thực hiện phép chia số a cho số b. Nếu b=0 thì đưa ra màn hình lời thông báo là " Không chia được vì mẫu bằng không", nếu không thì đưa ra kết quả

bài tập 3: Hãy nhập 3 số a, b, c hãy kiểm tra xem giá trị của 3 số đó có thoả mãn là 3 cạnh của một tam giác hay không, nếu như thoả mãn là 3 cạnh của một tam giác thì hãy cho biết đó là tam giác gì

Đáp án:

Bài 1:

PROGRAM Tim_Max_Min;

Uses crt;

Var

a,b,c:Integer;

Begin

Clrscr;

Write('Ban hay vao so a:');Readln(a);

Write('Ban hay vao so b:');Readln(b);

If (a>b) Then

Begin

Writeln('so a la so lon nhat:',a);

Writeln('so b la so lon nhat:',b);

End;

If(b>a) Then

Begin

Writeln('so b la so lon nhat:',b);

Writeln('so a la so lon nhat:',a);

End;

If(b=a) Then

Begin

Writeln('hai so a va b bang nhau:',a);

End;

Readln;

End.

Bài 2:

PROGRAM Chia_hai_so;

Uses crt;

Var

a,b:Integer;

t: Real;

Begin

Clrscr;

Write('Ban hay vao so a:');Readln(a);

Write('Ban hay vao so b:');Readln(b);

If b0 Then

Begin

t:=a/b;

Writeln('So a chia cho so b duoc:',t:3:2);

End

Else

Writeln('Khong the chia a cho b duoc vi b bang khong');

Readln;

End.

2. Câu lệnh CASE ... OF ...

Hai mẫu câu lệnh IF đã học chỉ thực hiện rẽ hai nhánh tương ứng với hai giá trị của biểu thức Boolean. Việc thử và chọn một trong nhiều nhánh sẽ được thực hiện với câu lệnh CASE như sau:

Mẫu 1 Mẫu 2

CASE OF CASE OF

Giá trị 1: ; Giá trị 1: ;

Giá trị 2: ; Giá trị 2: ;

... ...

Giá trị N: ; Giá trị N: ;

END; ELSE

END;

Trong đó không còn chỉ là biểu thức Boolean như trong câu lệnh If. Nó có thể là biểu thức có các kiểu vô hướng đếm được ( Kể cả kiểu liệt kê, nhưng không được là kiểu thực (Real)). Nên nó có nhiều giá trị khác nhau tương ứng với các hằng

Ở mẫu 2

Ví dụ: Dựa vào điểm để phân loại sinh viên:

0 đến 4 điểm: loại kém

5 đến 6 điểm: loại trung bình

7 đến 8 điểm: loại khá

9 đến 10 điểm: loại giỏi

Lập chương trình

1. Đọc điểm từ bàn phím

2. Thông báo trên màn hình điểm và loại

PROGRAM PLSV;

Var

D: Integer;

BEGIN

Write('Vao diem :'); Readln(d);

CASE d OF

0..4: Writeln(d,': loai kem');

5,6: Writeln(d,': loai trung binh');

7,8: Writeln(d,': loai kha');

9,10: Writeln(d,': loai gioi');

End;

Readln;

END.

Bài tập làm thêm trong giờ thực hành

Bài tập 1: ở một ngã tư đường có các tín hiệu màu xanh, đỏ, vàng : hãy lập trình để khi nhập một trong ba màu trên thì xẽ xuất hiện lời thông báo cụ thể như

- Màu xanh thì mọi người được đi

- Màu vàng thì mọi người chuẩn bị dừng

- Màu đỏ thì mọi người dừng lại

Bài Tập 2: Hãy lập trình nhập từ bàn phím Tháng, năm của một năm bất kỳ hay đưa ra lời thông báo cụ thể tháng đó bao nhiêu ngày biết rằng

- Tháng 4, 6, 9, 11 có số ngày bằng 30

-Tháng 1, 3, 5, 7, 8, 10, 12 có số ngày bằng 31

Còn tháng 2: Nếu (Năm mod 4) bằng không thì số ngày bằng 29

: Còn lại bằng 28

Đáp án

Bài 1:

PROGRAM Tin_Hieu_Giao_Thong;

Uses crt;

Var

Mau:Char;

Begin

Clrscr;

Write('Moi Ban Vao Mau Cua Den:');Readln(mau);

Case mau Of

'x': Writeln('Mau xanh thi duoc di');

'd': Writeln('Mau Do tat ca dung lai');

'v': Writeln('Mau vang chuan bi dung');

End;

Readln;

End.

Bài 2:

PROGRAM Tinh_ngay_cua_thang;

Uses crt;

Var

Ngay, Thang, Nam:Integer;

Begin

Clrscr;

Write(' Ban vao thang can tinh:'); Readln(Thang);

Write(' Ban vao Nam can tinh:'); Readln(Nam);

Case Thang Of

4,6,9,11 : Ngay:=30

2: Case Nam Mod 4 Of

0: Ngay:=29

1,2,3: Ngay:=28

1,3,5,7,8,10,12: Ngay:=31

End; { Of case nam}

Writeln('So ngay cua thang',thang,' Nam',nam,'la:',ngay);

Readln;

End.

3. Vòng lặp REPEAT

Repeat

Until

Trong đó: Repeat, Until: là từ khoá

đk: là biểu thức lôgic

*Tác động: Máy thực hiện các công việc S1, S2, ..., Sn sau đó kiểm tra điều kiện. Nếu:

- đk = False : máy quay về thực hiện từ S1 đến Sn và quá trình lại diễn ra như trước.

- đk = True : máy chuyển sang lệnh sau Until

Ví dụ: Lập chương trình tính tổng sau

T =1 + 1/2 + 1/3 + ...+ 1/N

PROGRAM tinh_Tong;

Var

T: Real;

N,i : Integer;

BEGIN

Write('cho N=');Readln(N);

T:=0;

i:=1 ;

Repeat

T:=T+1/i;

i:=i+1;

Until T>N;

Writeln('Tong=',T:3:3);

Readln;

END.

4. Vòng lặp WHILE

WHILE DO

BEGIN

END

Tác động:

Máy kiểm tra nếu:

- đk = True : máy thực hiện lệnh S rồi quay về kiểm tra điều kiện và quá trình diễn ra như trước.

• đk = False: máy chuyển sang sau lệnh While

Ví dụ 1:

Lập chương trình tính tổng sau

T =1 + 1/2 + 1/3 + ...+ 1/N

PROGRAM Tinh_Tong;

Uses crt;

Var

A: Real;

i,n: Integer;

Begin

Clrscr;

Write('Ban hay vao so n:');Readln(n);

A:=0; i:=1;

WHILE i

Begin

A:=A+1/i;

i:= i+1;

End;

Writeln(' Tong cua day so la:',a:3:2);

Readln;

End.

Ví dụ 2:

Lập chương trình:

Cho 1+1/3+1/5+...+1/2n-1 + ...

1. Đọc * (*>0 bé tuỳ ý) từ bàn phím

2. Tính và đưa ra màn hình tổng trên cho tới khi số lượng tổng quát

PROGRAM TG2;

Var

E, T : Real;

I : Integer;

BEGIN

Write('cho epxilon = '); Readln( E );

T:=0;

I:=1;

While 1/ I > E Do

Begin

t:=t+1/i;

i:=i+2

End;

Writeln('Tong=',T:1:2);

Readln;

END.

2. Vòng lặp FOR

a) FOR V:=E1 To E2 Do S; {e1

Trong đó :

FOR, DO : từ khoá

E1, E2: số nguyên

V: biến cùng kiểu E1, E2 (V không được là biến thực)

S: lệnh bất kỳ

Tác động: Biến V nhận giá trị đầu (E1) rồi kiểm tra

V

- Nếu đúng thì thực hiện công việc S, sau đó tăng V lên 1 đơn vị rồi quay lại kiểm tra điều kiện và quá trình lại diễn ra như trước.

• Nếu sai kết thúc, chuyển sang lệnh sau FOR

b) FOR V:=E1 DOWNTO E2 DO S; {E1>E2}

Tác động

V nhận giá trị E1 rồi kiểm tra V>=E2

- Nếu đúng thực hiện công việc S rồi trừ V đi 1

sau đó quay lại kiểm tra điều kiện và quá trình

lại diễn ra như trước.

- Nếu sai máy kết thúc và chuyển ra lệnh sau FOR

Ví dụ 1: Viết đoạn chương trình để đưa ra màn hình 80 * trên 1 hàng, trên 1 cột

* In trên 1 dòng

FOR i:=1 To 80 DO

Write('*');

hoặc FOR i:=80 DownTo 1 DO

Write('*');

* In trên 1 cột:

FOR i:=1 To 80 DO

Writeln('*');

hoặc FOR i:=80 DOWNTO 1 DO

Writeln('*');

Bài tập : Hãy lập chương trình đầy đủ thực hiện in ra màn hình n dấu sao theo hàng dọc và theo hàng ngang với n nhập từ bàn phím

Ví dụ 2: Hãy viết chương trình in ra màn hình một tam giác cân bằng dấu sao (*). Tam giác có chiều cao là h được nhập từ bàn phím

Chương trình cụ thể:

PROGRAM in_ra_dau_sao;

Var i,j,cao:Integer;

BEGIN

i:=1;

Write('cao may tang =');Readln(cao);

while i

Begin

For j:=1 To cao-i Do Write(' ');

For j:=1 To 2*i-1 Do Write('*');

Writeln;

i:=i+1;

End;

Readln;

END.

Bài tập : Hãy lập các chương trình thực hiện công việc sau

1. Tính tổng các số nguyên từ 1 đến n. ( với n là số nguyên nhập từ bàn phím)

2. Viết hai dòng chữ cái hoa và nhỏ từ 'A' đến 'Z' ra màn hình với quy cách mỗi chữ chiếm 2 chỗ. Sau đó là 1 dòng trắng rồi đến hai dòng kí tự theo thứ tự ngược lại (tức là từ 'Z' đến 'A' và 'z' đến 'a'.

Đáp án

Câu 1:

PROGRAM Tinh_Tong;

Uses crt;

Var

Tong,i :Integer;

Begin

Clrscr;

Write ('ban hay vao n:'); Readln(n);

For I:=1 To N Do

Tong:=Tong+I;

{ có thể thay câu lệnh trên bằng câu lệnh

For I:=n DownTo 1 Do

Tong:=Tong+I }

Writeln ('Tong cua cac so ban vua cho bang:',Tong);

Readln;

End.

Câu 2:

PROGRAM In_chu;

Uses crt;

Var

Ch: Char;

Begin

Clrscr;

For Ch:='A' To 'Z' Do

Write(ch:2);

Writeln;

For Ch:='a' To 'z' Do

Write(ch:2);

Writeln;

Writeln;

For ch:='Z' DownTo 'A'

Write('ch:2');

For ch:='z' DownTo 'a'

Write(ch:2);

Readln;

End.

Chương III: DỮ LIỆU CÓ CẤU TRÚC: KIỂU MẢNG (ARRAY)

Chúng ta đã làm quen với các kiểu dữ liệu đơn giản là các kiểu vô hướng (Integer, Char, boolean, Real, kiểu liệt kê). Trong PASCAL còn tồn tại kiểu dữ liệu có cấu trúc. Kiểu dữ liệu có cấu trúc là các kiểu dữ liệu được tạo ra từ các phần tử có kiểu dữ liệu đơn giản. PASCAL có tất cả 4 kiểu dữ liệu có cấu trúc: ARRAY, SET, RECORD, FILE.

1. Đặt vấn đề:

- có 1 dãy số : a1, a2, ..., an

- 1 vecTo: b(b1, b2, ..., bk) mảng 1 chiều

- 1 ma trận: c11 c12 c13

c21 c22 c23 mảng 2 chiều

Cách viết mảng

a1 [a1] ; ai a[i] ; a12 a[1,2]

2. Mảng

*Khái niệm: Mảng là một số hữu hạn phần tử có cùng kiểu dữ liệu

* Khai báo mảng:

Var

Ten:Array[cd . . ct] Of kiểu;

Trong đó: Var, Array, Of: Là từ khóa

Tên: Do người dùng tự đặt

cd, ct : Là số nguyên, biểu thức (cd

kiểu : - cơ bản (số nguyên, thực, kí tự, logic0

- Mở rộng

Ví dụ: Khai báo mảng có tên là A gồm 10 phần tử số thực:

Var

A: Array[1 . . 10] Of Real;

*Tác động: Khai báo mảng để báo mảng dành ra vùng ô nhớ cho các phần tử của mảng vùng đó cụ thể là bao nhiêu phụ thuộc vào:

- Số phần tử (kích thước)

- Kiểu của phần tử

Lấy thêm 1 vài ví dụ khác về mảng

Type

AI = Array [1 . . 100] Of Integer;

AC = Array [1 . . 10] Of Char;

Var

MC : Array ['a' . . 'z'] Of Integer;

MM : Array[color] Of boolean;

Ví dụ1: Cho dãy số a1, a2, ... , an (n

Lập chương trình

1. Đọc n và dãy số từ bàn phím

2. Tính và đưa ra màn hình tổng của dãy

PROGRAM Tong3;

Var

a:Array[1..100] Of Real;

i,n:Integer;

t:Real;

BEGIN

Write('cho so phan thu:');Readln(n);

For i:=1 To n Do

Begin

Write('a[i]=');

Readln(a[i]);

End;

Writeln;

Writeln('DAY DA CHO');

For i:=1 To n Do

Write(a[i]:1:2,' ');

t:=0;

For i:=1 To n Do

t:=t+a[i];

Writeln;

Writeln('Tong = ',t:1:2);

Readln;

END.

Ví dụ 2: Cho dãy số a1, a2, ... , an (n

Hãy lập chương trình tìm số lớn nhất trong dãy số đó

Viết chương trình

PROGRAM timmax;

Uses crt;

Var

a:Array[1 . . 100] Of Real;

i,n: Integer;

max: Real;

BEGIN

Clrscr;

Write('cho so phan thu:');Readln(n);

For i:=1 To n Do

Begin

Write('a[i]=');

Readln(a[i]);

End;

Writeln;

Writeln('DAY DA CHO');

For i:=1 To n Do

Write(a[i]:1:2,' ');

max:=a[1];

For i:=2 To n Do

If a[i]>max Then max:=a[i];

Writeln('So lon nhat la: ',max:1:2);

Readln;

END.

Ví dụ 3: Cho dãy số a1, a2, ... , an (n

Lập chương trình sắp xếp dãy số tăng dần

Giảng theo giải thuật "nổi bọt":

Tìm max của n số sau đó đặt max vào vị trí n

Tìm max của n-1 số sau đó đặt max vào vị trí n-1

Hoặc tìm min theo cách ngược lại

PROGRAM sapxep;

Var

a:Array[1..100] Of Real;

i,j,n:Integer;

tg:Real;

BEGIN

Clrscr;

Write('cho so phan thu:');Readln(n);

For i:=1 To n Do

Begin

Write('a[i]=');

Readln(a[i]);

End;

Writeln;

Writeln('DAY DA CHO');

For i:=1 To n Do

Write(a[i]:1:2,' ');

For i:=1 To n-1 Do

For j:=i+1 To n Do

If a[i]>a[j] Then

Begin

tg:=a[i];

a[i]:=a[j];

a[j]:=tg;

End;

Writeln;

Writeln('Day sap tang: ');

For i:=1 To n Do

Write(a[i]:1:2,' ');

Readln;

END.

Chương IV: XÂU KÍ TỰ (STRING)

1. Đặt vấn đề:

Khi cần nhập vào hoặc in ra tên người, địa chỉ hoặc dòng văn bản thì 1 vài kí tự không đáp ứng được nên PASCAL dùng xâu kí tự để biểu diễn.

2. Khai báo

Var

Ten:String[n];

Trong đó:

Var, String:từ khóa

Ten: tự đặt

N: chỉ chiều dài của xâu 0

Ví dụ

Var

Ht : String[25];

Dc : String[50];

3. Phép ghép đối với xâu

Có 2 xâu kí tự ST1, ST2, ta gọi ghép ST1 và ST2 nghĩa là viết các kí tự của ST1 trước tiếp đến kí tự của ST2.

Phép ghép có thể tác dụng lên hằng xâu, biến xâu, 1 số hàm xâu.

Ví dụ: ST1: 'HA NOI';

ST2: 'VIET NAM';

ST3:=ST1+ST2;

ST3:='HA NOI VIET NAM'

4. Một số hàm và thủ tục đối với xâu

a) Hàm:

* Length(ST)

Trong đó: Length: tên hàm

ST: biến hoặc hàm xâu

Ví dụ ST:='HA NOI'

length(ST) cho độ dài xâu kí tự là 6

* COPY(ST,N,K)

Copy: tên hàm

ST: biến hoặc hàm xâu

N,K: các hằng số hoặc biến số

Hàm này sẽ sao chép từ xâu ST, xâu con gồm K ký tự kể từ vị trí N

Ví dụ: ST:='123456789'; muốn sao chép 1 xâu con gồm 2 kí tự kể từ vị trí thứ 3

dùng lệnh: COPY(ST,3,2); sẽ cho ST = '34'

*POS(ST1,ST2)

POS: tên hàm ST1, ST2: hàm hoặc xâu

Tác động: duyệt ST2 từ trái qua phải xem có ST1 không nếu:

có: đưa ra con số là vị trí ký tự đầu tiên của ST1 trong ST2

không: cho ra số 0

Ví dụ: ST:='BACH KHOA HA NOI';

POS('HA',ST); máy sẽ đưa ra số 11 (vị trí đầu tiên của chữ 'HA')

* UPCASE(KT)

UPCASE: tên hàm

KT: biến kí tự

Tác động: đổi chữ thường ra chữ hoa

Ví dụ: KT:='a'

UPCASE(KT); máy đưa ra 'A'

b) Thủ tục:

*DELETE(ST,N,K);

Thủ tục này sẽ xoá khỏi ST K ký tự kể từ vị trí N

* INSERT(ST1,ST2,N)

Thủ tục này sẽ chèn xâu ST1 vài ST2 tại vị trí N

Ví dụ: ST2:='HA NOI NAM';

INSERT('VIET ',ST2,7);

5. Truy nhập vào từng kí tự của xâu

Ta có thể truy nhập vào từng kí tự của xâu kí tự

Ví dụ: có 1 xâu kí tự S:='TIN' ;

Lưu trữ chiều dài

s[0] s[1] s[2] s[3]

S[0] :=3 {chiều dài của byte} S[1] = T; S[2] = I ; S[3] = N

Mỗi kí tự chiếm 1 byte muốn truy nhập từng ký tự ta sẽ sử dụng chỉ số của chúng.

Ví dụ: Tìm xem byte thứ 2 của kí tự có phải là 'I' không, nếu đúng thông báo ra màn hình

If s[2] = 'I' Then

Writeln('Chữ thứ 2 của xâu kí tự là I');

Nếu vị trí kí tự đó nằm ngoài độ dài thực của xâu thì phần tử đó của xâu không có giá trị xác định. Vì vậy khi truy nhập vào phần tử của xâu chữ ta cần phải kiểm tra xem vị trí đó có nằm trong khoảng độ dài thực của xâu hay không.

If 2

Writeln('Chữ thứ 2 của S là ',s[2]);

Ví dụ1: Lập chương trình

1. Đọc vào xâu bất kỳ

2. Đưa xâu ra màn hình

3. Đọc vào 1 kí tự bất kỳ thông báo trên màn hình số lần xuất hiện của kí tự đó

Viết chương trình:

PROGRAM demKT;

Var

S : String[255];

KT : Char;

i,dem:Integer;

BEGIN

Write('cho xau KT:');Readln(s);

Writeln(s);

Write('ki tu can tim:');Readln(KT);

For i:=1 To length(s) Do

If s[i]=KT Then dem:=dem+1;

If dem=0 Then Write('khong co ki tu',KT)

Else

Writeln('ki tu ',KT,' xuat hien ',dem,' lan');

Readln;

END.

Ví dụ 2: Trong lớp có n sinh viên (n

Lập chương trình

1. Đọc n sinh viên và họ tên sinh viên từ bàn phím

2. Ra màn hình danh sách gồm : TT ho ten

3. Tìm 1 sinh viên được gõ vào từ bàn phím, thông báo trên màn hình có hay không.

Chương trình cụ thể

PROGRAM thamhoi;

Var

h:Array[1..100] Of String[25];

i,n:Integer;

ST:String[25];

B:Boolean;

BEGIN

Write('cho so sv:');Readln(n);

For i:=1 To n Do

Begin

Write('ten:');

Readln(h[i]);

End;

Writeln('DANH SACH LOP');

For i:=1 To n Do

Writeln(i,' ',h[i]);

Write('Ban tim ai:');Readln(ST);

B:=false;

For i:=1 To n Do

If h[i]=ST Then b:=true;

If b Then Writeln('co ban ',ST)

Else Writeln('Dang tiec khong co ban ',ST);

Readln;

END.

Chương V: DỮ LIỆU CÓ CẤU TRÚC:

DỮ LIỆU KIỂU BẢN GHI (RECORD)

1. Đặt vấn đề:

Chúng ta đã học về kiểu cấu trúc mảng (ARRAY), kiểu cấu trúc dữ liệu này mô tả được tạo ra bằng một tập hợp các phần tử có cùng kiểu. Ví dụ

Array[1 . . 10] : Integer {một mảng có 10 số nguyên}

Array['A' . . 'Z'] : Char { một mảng kí tự từ A đến Z}

Nhưng nếu cần mô tả cùng một đối tượng bằng các phần tử có kiểu dữ liệu khác nhau, ví dụ

Lập chương trình quản lý học viên gồm các dữ liệu khác nhau như:

Họ tên sinh viên: kiểu xâu kí tự

Năm sinh: kiểu nguyên

Điểm thi: kiểu số thực

Cấu trúc chương trình quản lý học viên có các trường có kiểu khác nhau nhưng liên kết với nhau nên phải định nghĩa ra bản ghi(RECORD).

2. Khai báo RECORD

Mô tả kiểu RECORD bằng chữ RECORD, theo sau là danh sách các trường và kiểu trường của RECORD.

TYPE

Ten=RECORD

b1 : k1;

b2 : k2;

...

bn : kn;

End;

Trong đó: Type, Record, End: từ khoá

Ten: tự đặt (ten là cấu trúc bản ghi)

b1, b2, ..., bn: tự đặt (tên các trường của bản ghi)

k1, k2, ..., kn: kiểu trường

Chú ý: mô tả RECORD bao giờ cũng được kết thúc bằng chữ END;

Ví dụ: Một hồ sơ bao gồm các dữ liệu như: họ tên, năm sinh, điểm. Ta mô tả Record HOSO như sau:

TYPE

hoso=RECORD

hoten : String[25];

namsinh : Integer;

diem : Real;

End;

3. Thao tác đối với biến RECORD

Để thâm nhập vào một trường của Record, cần phải dùng tên biến Record sau đó là dấu (.) và tên trường của Record.

Ví dụ: Với mô tả kiểu được nêu ở ví dụ trên, ta tiếp tục khai báo và thực hiện một đoạn chương trình để đọc dữ liệu vào các biến như sau:

Var

sv1 : hoso; {gán sv1 là biến kiểu bản ghi}

Begin

Write('Vao ho ten sinh vien 1: ');

Readln(sv1.hoten);

Write('Nam sinh: ');

Readln(sv1.namsinh);

Write('Diem thi: ');

Readln(sv1.diem);

End.

Ví dụ: lập chương trình

1. Đọc số sinh viên(n) và thông tin về sinh viên từ bàn phím

2. Đưa ra màn hình danh sách: TT HOTEN NAMSINH DIEM

• Đưa ra màn hình số lượng sinh viên phải thi lại

* Viết chương trình

PROGRAM QLSV;

type

sv=Record

ht: String[25];

ns:Integer;

d:Real;

End;

Var

M:Array[1..100] Of sv;

i,n: Integer;

d1: Integer;

BEGIN

Write('So sv:');Readln(n);

For i:=1 To n Do

Begin

Write('HO TEN:'); Readln(M[i].ht);

Write('NĂM SINH:'); Readln(M[i].ns);

Write('DIEM:'); Readln(M[i].d);

End;

Writeln;

Writeln('DANH SACH LOP');

For i:=1 To n Do

Writeln(i,' ',M[i].ht,' ',M[i].ns,' ',M[i].d:1:2);

d1:=0;

For i:=1 To n Do

If M[i].d

Begin

Writeln(M[i].ht,M[i].d);

d1:=d1+1;

End;

If d1=0 Then Writeln ('CA LOP DAT')

Else

Writeln('co ',d1,' SINH VIEN THI LAI');

Readln;

END.

*Bài tập làm thêm: Viết chương trình đưa ra sinh viên có điểm thấp nhất

Program Sinh_vien_thap_nhat;

Type

Hs = Record

Ht : String[25];

Ns : Integer;

D : Readl;

End;

Var

A: Array [1..100] of Hs;

I,N : Integer;

Min : Real;

Begin

Write(' Cho so sinh vien:'); Readln(n);

For i:=1 To n Do

Begin

Write('Ho Va Ten :'); Readln(A[i].ht);

Write('Nam Sinh :'); Readln(A[i].ns);

Write('Diem Thi :'); Readln(A[i].d);

End;

Writeln;

Writeln('Danh Sach ca lop ');

For i:=1 To N Do

Writeln(i,' ', A[i].Ht ,' ', A[i].Ns ,' ' , A[i].d:1:2);

Min:=A[1].d;

For i:=2 To n Do

IF Min>=A[i].d Then

Min:=A[i].d;

Writeln('Hoc sinh co diem thap nhat ');

Writeln(A[i].Ht);

Writeln(A[i].Ns);

Writeln('Diem thap nhat la:',min:1:2);

Readln;

End.

* Bài tập làm thêm: Viết chương trinh đưa ra sinh viên có điểm cao nhất

Program Sinh_vien_thap_nhat;

Type

Hs = Record

Ht : String[25];

Ns : Integer;

D : Readl;

End;

Var

A: Array [1..100] of Hs;

I,N : Integer;

Max : Real;

Begin

Write(' Cho so sinh vien:'); Readln(n);

For i:=1 To n Do

Begin

Write('Ho Va Ten :'); Readln(A[i].ht);

Write('Nam Sinh :'); Readln(A[i].ns);

Write('Diem Thi :'); Readln(A[i].d);

End;

Writeln;

Writeln('Danh Sach ca lop ');

For i:=1 To N Do

Writeln(i,' ', A[i].Ht ,' ', A[i].Ns ,' ' , A[i].d:1:2);

Max:=A[1].d;

For i:=2 To n Do

IF Max=

Max:=A[i].d;

Writeln('Hoc sinh co diem cao nhat ');

Writeln(A[i].Ht);

Writeln(A[i].Ns);

Writeln('Diem cao nhat la :',Max:1:2);

Readln;

End.

* Bài tập làm thêm: Dựa vào các chương trình trên hãy viết chương trình

1. Đưa ra tên những sinh viên thi lại

2. Đưa ra sinh viên có điểm cao nhất

3. Đưa ra sinh viên có điểm thấp nhất

Chương VI: CHƯƠNG TRÌNH CON: THỦ TỤC VÀ HÀM

1. Đặt vấn đề:

- Trong khi lập trình có những đoạn chương trình thường lặp đi lặp lại nhiều lần ở những chỗ khác nhau. Để tránh rườm rà những đoạn chương trình này được thay thế bằng các chương trình con tương ứng, khi cần ta chi việc gọi chương trình con đó ra mà không phải viết lại cả đoạn chương trình đó. Ví dụ khi làm một bài Toán lượng giác tính Sin của một biến x nào đó. Như vậy cần lập một chương trình con có tên là SIN và tham số cần thiết là x.

- Khi lập một chương trình lớn, phức tạp thi việc hiệu chỉnh, sửa lỗi sẽ rất khó khăn. Vì vậy ta có thể phân tách vấn đề phức tạp đó thành các vấn đề nhỏ hơn để dễ kiểm tra, gỡ rối từng khối một sau đó ghép các chương trình con này thành một chương trình lớn (tương tự như việc lắp ráp sản phẩm từ các bán thành phẩm).

Trong PASCAL có hai loại chương trình con: Hàm (FUNCTION) và thủ tục (PROCEDURE)

Sự khác nhau giữa hai chương trình con:

- Funtion: trả lại cho một giá trị kết quả vô hướng thông qua tên của Funtion nên nó được sử dụng trong biêủ thức.

- Procedure: Không trả lại kết quả thông qua tên của nó nên Procedure không thể viết trong các biểu thức.

2. Chương trình con hàm(Funtion)

a) Khai báo

Funtion Tenham (tham số hình thức) : Kiểu;

Khai báo;

Begin

các lệnh;

Tenham:=...

...

End;

Trong đó:

+ Funtion, Begin, End: từ khoá

+Tenham: tự đặt

+ Khai báo: (khai báo giống chương trình (prorgam))

+ Các lệnh: các lệnh của PASCAL

+ Kiểu: kiểu cơ bản và kiểu mở rộng

+ Tham số hình thức có 2 cách:

- Tên: kiểu

- Var tên: kiểu

Ví dụ về đầu chương trình con

ví dụ 1: Funtion F( i : Integer) : Integer;

ví dụ 2: Funtion H( Var x, y : Real) : Real;

ví dụ 3: Funtion G ( Var x,y : Real ; i : Integer) : Real;

b) Cách gọi và truyền tham số

Viết tên hàm trong một biểu thức nào đó và thay tham số hình thức bởi tham số thực sự. Khi thay đảm bảo sự tương ứng về: số lượng, thứ tự, kiểu

Tham số hình thức Tham số thực sự

Tham trị Tên : Kiểu Hằng, Biến, Hàm, Biểu thức

Biến Var Tên : Kiểu Biến

c) Tính đệ qui của chương trình con

Tính đệ là lời gọi của chính nó

ví dụ: n! = 1.2.3.....(n-1).n

gt = gt(n - 1) * gt

Ví dụ: Lập chương trinh tính giai thừa

PROGRAM Gthua;

Var i : Integer;

Function Gt(i:Integer):Integer;

Begin

If i=0 Then gt:=1

Else

gt:=gt(i-1)*i;

End;

BEGIN

Write('cho i:'); Readln(i);

Writeln('Giai thua cua ',i,'= ',Gt(i));

Readln;

END.

Bài Tập : Hãy lập một chương trình tính dân số của đàn thỏ biết:

+ Ban đầu đàn thỏ có một cặp ( Bố và mẹ)

+ Cứ sau hai tháng cặp thỏ lai sinh ra được một cặp con

Hãy lập trình nhập từ bàn phím số tháng và đưa ra kết quả là dân số của đàn thỏ hiện tại

PROGRAM TINH_SO_THO;

USES CRT;

function tho(n:integer):integer;

begin

if n

else

tho:=tho(n-1)+tho(n-2);

end;

VAR

n:integer;

BEGIN

clrscr;

sound(500);

delay(500);

nosound;

write('ban hay vao so thang :');readln(n);

writeln('dan so tho la:',tho(n));

readln;

End.

3) Chương trình con thủ tục(Procedure)

a) Khai báo

(1) Tham trị (2) Tham biến

Procedure ten; Procedure ten(tham số hình thức);

Khai báo; Khai báo;

Begin Begin

các lệnh; các lệnh;

End. End.

Không tham số Có tham số

Trong đó: - Procedure, Begin, End: từ khoá

- tên: tự đặt

- Khai báo: giống chương trình, giống hàm

- Các lệnh: lệnh PASCAL

- Tham số hình thức: có 2 cách viết giống hàm

b) Cách gọi và truyền tham số

Viết tên thủ tục và thay tham số hình thức bởi tham số thực sự. Khi thay phải đảm bảo tương ứng: số lượng, thứ tự, kiểu

Ví dụ:

PROGRAM bDoi; {1} PROGRAM bDoi; {2}

Var x:Integer; Var x:Integer;

procedure BD(y:Integer); procedure BD(Var y:Integer);

Begin Begin

y:=100; y:=100;

End; End;

BEGIN BEGIN

x:=0 x:=0

BD(x); BD(x);

Writeln('x = ',x); Writeln('x = ',x);

Readln; Readln;

END. END.

- Chương trình 1 truyền theo tham trị, Do vậy những thay đổi trong chương trình con (y:=100) không làm thay đổi giá trị trong chương trình chính (x=0 trước khi gọi thì sau khi gọi nó vấn bằng 0.

- Chương trình (2) truyền theo tham biến, Do vậy những thay đổi trong chương trình con (y:=100) thi làm thay đổi giá trị trong chương trình chính.

* Biến Toàn cục (tổng thể) : Là biến khai báo trong chương trình chính và nó có tác dụng bất kỳ nơi nào trong chương trình.

* Biến địa chương (cục bộ) là biến khai báo trong chương trình con và chỉ có tác dụng trong chowng trình con đó. Nói cách khác khi chương trình con kết thưc thì biến cục bộ cũng hết (trong ví dụ trên biến y là biến cục bộ)

Ví dụ: Cho dãy a1 .... an (n

1. lập thủ tục vào ra dữ liệu

2. Lập thủ tục sắp xếp

PROGRAM sapxep;

type

M=Array[1..200] Of Real;

Var

a:M;

n:Integer;

procedure vao(Var b:M;l:Integer);

Var

i:Integer;

Begin

For i:=1 To l Do

Begin

Write('a[',1,']=');

Readln(b[i]);

End;

End;

procedure RA(Var b:M;l:Integer);

Var

i:Integer;

Begin

For i:=1 To l Do

Write(b[i]:1:2, ' ');

End;

Procedure SAP(Var b:M; l:Integer);

Var

i,j:Integer;

tg:Real;

Begin

For i:=1 To l-1 Do

For j:=i+1 To l Do

If b[i]>b[j] Then

Begin

tg:=b[i];

b[i]:=b[j];

b[j]:=tg;

End;

End;

BEGIN

Write('so pt:');Readln(n);

vao(a,n); Writeln;

Writeln('day chua sap');

RA (a,n); Writeln;

SAP(a,n);

Writeln('DAY DA SAP');

RA(a,n);

Readln;

END.

Bài tập 1: Hãy lập trình giải phương trình bậc hai (Viết dưới dạng các chương trình con)

Program Giai_PT;

Var

M,N,K : Real;

Procedure Giai_Pt_b2 (A,B,C:Real);

Var

DELTA,X1,X2:REAL;

Procedure DELTA_DUONG;

Begin

X1:=(-B+SQRT(DELTA))/(2*A);

X2:=(-B-SQRT(DELTA))/(2*A);

Writeln('Hai Nghiem Don:';

Writeln(' X1 = ',X1:3:2);

Writeln(' X2 = ',X2:3:2);

End;

Procedure DELTA_AM;

Begin

X1:=-B/(2*A);

X2:=SQRT(-DELTA))/(2*A);

Writeln('Hai Nghiem Lien Hop Phuc:';

Writeln(' X1 = ', X1,'+j ', ABS(X2));

Writeln(' X2 = ', X2:,'+j ', ABS(X2));

End;

Procedure DELTA_AM;

Begin

Writeln('Mot Nghiem Kep:';

Writeln(' X1 = ',-B/(2*A));

End;

Begin

DELTA :=B*B -4*A*C;

IF DELTA = 0 THEN DELTA_KHONG;

IF DELTA > 0 THEN DELTA_DUONG;

IF DELTA

Begin

Clrscr;

Write(' He so A= '); Readln(K);

Write(' He so B = '); Readln(M);

Write(' He so C = '); Readln(N);

Giai_Pt_b2 (A,B,C:Real);

Readln;

End.

Bài tập 2:

cho mot day so hay dua ra so thap nhat va lon nhat dua ra man hinh day sap xep tang dan va day sap xep giam dan, dua ra man hinh nhung so duong va hay tinh va dua ra man hinh tong ,va trung binh cac so duong do hay thuc hien bang chuong trinh con

PROGRAM HOAN;

Uses Crt;

Type

Mang= Array[1..100] of integer;

Procedure Timmax(var a:mang;n:integer);

Var

Max : Integer;

i,tg : Integer;

Begin

tg :=a[1];

For i:=1 To n Do

If a[i]>tg Then

tg:=a[i];

Max:=tg;

Writeln('so lon nhat la:',max);

end;

Procedure timmin(Var c: Mang ; n : Integer);

Var

min:Integer;

i,tg:Integer;

Begin

tg:=c[1];

For i:=1 To n Do

If c[i]

tg:=c[i];

Min:=tg;

Writeln('so nho nhat la:',Min);

end;

Procedure Saptang(Var a:Mang;n:Integer);

Var

i,j,tg:Integer;

Begin

For i:=1 To n-1 Do

For j:=i+1 To n Do

If a[i]>a[j] Then

Begin

tg:=a[i];

a[i]:=a[j];

a[j]:=tg;

End;

Write('Day sap tang:');

For i:=1 To n Do

write(a[i],' ');

writeln;

end;

procedure sapgiam(var a:mang;n:integer);

var

i,j,tg:integer;

begin

for i:=1 to n-1 do

for j:=i+1 to n do

if a[i]

begin

tg:=a[i];

a[i]:=a[j];

a[j]:=tg;

end;

write('Day sap giam:');

for i:=1 to n do

write(a[i],' ');

writeln;

end;

procedure trungbinh(var b:mang;n:integer);

var

tb:real;

tong:integer;

i,j:integer;

begin

tong:=0;

j:=0;

for i:=1 to n do

if b[i]>0 then

begin

j:=j+1;

tong:=tong+b[i];

end;

write('cac so duong trong day:');

for i:=1 to j do

begin

write(b[i],' ');

end;

writeln;

writeln('tong cac so duong trong day so vua cho:',tong);

writeln('Trung binh cong cac so duong cua day la: ',tong/j:2:2);

end;

VAR

a:mang;

i,n:byte;

BEGIN

clrscr;

Write('ban hay vao so phan tu cua mang:');readln(n);

for i:=1 to n do

begin

write('a[',i,']=');readln(a[i]);

end;

timmax(a,n);

timmin(a,n);

saptang(a,n);

sapgiam(a,n);

trungbinh(a,n);

readln;

END.

Bài Tập 3

Lap chuong trinh con tinh ham y=ux+(v*v)/(x*x)+1 voi u=sinx/1+(x*x) va v=1 neu x>10 va v=cos(x*x)+10 neu x

- Hay lap chuong trinh con tinh ham tai y(1) va y(20)

- Hay doc hai gia tri a,b tinh va dua ra man hinh y tai a va y tai a+0,1 cho

den y tai b

PROGRAM TINH_HAM;

uses crt;

function y(x:real):real;

begin

if x>10 then

y:=(sin(x)/1+(x*x))*x +1/(x*x)+1

else

y:=(sin(x)/1+(x*x))*x + ((cos(x*x)+10)*(cos(x*x)+10))/((x*x)+1);

end;

VAR

h,a,b,c,x:real;

BEGIN

clrscr;

Write('Ban hay vao gia tri cua x,a,b:');readln(x,a,b);

writeln;

Write('Voi X co gia tri la: ',x:0:0,' Thi ham co gia tri: ',y(x):0:0);

writeln;

Write('Voi X co gia tri bang 1 thi ham co gia tri: ',y(1):0:0);

writeln;

Write('Voi X co gia tri la 20 thi ham co gia tri: ',y(20):0:0);

Writeln;

x:=a;

repeat

Writeln('Voi x co gia tri la: ',x:2:2,' Thi ham co gia tri:', y(x):0:0);

x:=x+0.1;

until x>=b;

readln;

END.

Bài Tập 4

Viet chuong trinh con tim so y trong day so x

PROGRAM TIM_SO_Y_TRONG_DAY_SO_X;

uses crt;

type

mang=array[1..100] of integer;

procedure timkiem(y,n:integer;var a:mang;var i :integer);

var

j:integer;

begin

j:=1;

a[n+1]:=y;

while ya[j] do inc(j);

if j=n+1 then i:=0

else i:=j;

end;

VAR

n,y,i:integer;

a: mang;

ch: char;

BEGIN

clrscr;

Write('Ban hay vao so phan tu:');readln(n);

for i:=1 to n do

begin

write('a[',i,']=');readln(a[i]);

end;

repeat

Write('Moi ban vao so can tim:');readln(y);

Timkiem(y,n,a,i);

begin

clrscr;

if i=0 then Writeln(y,'Rat tiec khong co mat trong mang')

else Writeln(y,' Co mat Trong mang va o vi tri: ',i);

end;

Writeln('Ban co muon tim tiep nua khong ?(c/k)');readln(ch);

until upcase(ch)='K';

readln;

END.

Chương VII: DỮ LIỆU CÓ CẤU TRÚC:

TỆP DỮ LIỆU (DATA FILE)

1. Đặt vấn đề:

Ví dụ khi tổ chức quản lý 1 thư viện thì các dữ liệu cho một cuốn sách là : tên sách, tên tác giả, giá tiền, số trang, nhà xuất bản ... Các dữ liệu này nhóm với nhau thành 1 tờ phiếu, các dữ liệu trên tờ phiếu này có cùng một kiểu dữ liệu, các phiếu được xếp với nhau thành một tệp và được đặt tên(gọi là tên tệp).

Khái niệm: Tệp dữ liệu (DATA FILE) là một tập hợp các dữ liệu có liên quan với nhau và có cùng kiểu được nhóm lại với nhau tạo thành một dãy. Chúng thường được chứa trong một biết bị nhớ ngoài của máy tính (đĩa mềm, đĩa cứng, băng từ) với một tên nào đó Do người sử dụng đặt.

2. Khai báo:

Type

tên=file Of kiểu;

Var

biến : tên;

Var

biến : file Of kiểu;

Ví dụ:

Type

SV = Record

ht : String[25];

d: Real;

End;

F = file Of SV

Var

X:F;

Var

SN : file Of Integer;

ST : file Of Real;

ST1: file Of String[80];

3. Các thao tác

a) Mở tệp để ghi

Ta dùng 2 thủ tục sau:

Assign(bt,tt); {gán, chỉ định tên tệp cho biến tệp}

ReWrite(bt); {đưa đầu đọc về đầu tệp chuẩn bị ghi}

* Trong đó:

- assign, reWrite : từ khoá

- bt: biến tệp có trong khai báo

- tt: tên tệp (xâu kí tự)

b) Ghi lên đĩa với tên tệp đã định

Dùng thủ tục

Write: tên, thủ tục

bt: biến tệp có trong assign

dl: dữ liệu cần ghi (hằng, bgiến, hàm ...)

* tác động:

Thay vì đưa dữ liệu ra màn hình bằng việc ghi dữ liệu lên đĩa.

c) Đóng tệp: Close(bt)

close: tên thủ tục

bt: biến tên tệp có trong assign

* tác động: thủ tục này đóng tệp đang mở để hệ điều hành cập nhật các thủ tục ở trên đĩa.

d) Mở để đọc:

assign(bt, tt);

reset(bt);

* tác động:

- assign giống như mở, gán tên tệp cho biến tệp

- Reset: đưa đầu đọc về đầu tệp chuẩn bị cho việc đọc

* Chú ý: Nếu tệp không có máy sẽ báo sai phần tử đầu tiên của tệp mang STT là 0

e) Đọc từ tệp

Vì số phần tử của tệp là không biết trước Do vậy trước khi đọc phải kiểm tra xem tệp đã hết hay chưa.

EOF(End Of file) {kết thúc của tệp}

Hàm này có kiểu boolean:

+ True: hết tệp

+ false: chưa hết

EOF(bt); EOF: tên hàm ; bt: biến tệp

READ(bt, biến);

READ: tên thủ tục bt: biến tệp biến: nhận dữ liệu

* tác động: Thay vì việc gõ dữ liệu từ bàn phím bằng việc nhân dữ liệu từ tệp, đầu đọc tự động dịch sang phần tử tiếp theo.

Muốn đọc Toàn bộ các phần tử của tệp ta dùng các lệnh sau đây;

EOF(bt) READ(bt, biến)

WHILE NOT(EOF(bt)) DO

Begin

READ(bt, biến);

.....

End;

Ví dụ: Trong lớp có n sinh viên (n

1. Đọc n và điểm thi từ bàn phím, ghi lên đĩa với tên tệp 'DIEM THI.L1'

2. Đọc từ tệp điểm thi lần 1 'DIEM THI.L1' và thông báo trên màn hình số lượng sinh viên thi lại

* Viết chương trình

PROGRAM ghi;

Var

d:Real;

F:file Of Real;

i,n:Integer;

BEGIN

Write('so SV:');Readln(n);

assign(F,'DIEMTHI.L1'); {mở ghi}

Rewrite(F);

For i:=1 To n Do

Begin

Write('vao diem:');

Readln(d);

Write(F,d); {ghi lên đĩa}

End;

close(F);

END.

* Chú ý: Thủ tục Rewrite ngoài việc đưa "đầu đọc" về đầu tệp (phần tử thứ 0) nếu trên tệp đã có dữ liệu thì thủ tục Rewrite sẽ xoá sạch. Do vậy ta viết phần ghi riêng.

PROGRAM Doc;

Uses crt;

Var

x:Real;

dt:file Of Real;

d:Integer;

BEGIN

assign(dt,'DIEM THI.L1');

reset(dt);

d:=0;

while not(EOF(dt)) Do

Begin

Read(dt,x); {đọc từ tệp}

If x

End;

If d=0 Then Writeln('ca lop dat')

Else Writeln('co ',d,' SV thi lai');

Readln;

close(dt);

END.

Bài tập làm thêm: Hộp chè có các thông tin : tên chè, trọng lượng, giá.Lập chương trình

1. Đọc các thông tin về hộp chè từ bàn phím rồi ghi lên đĩa với tên tệp 'CHE.XK'

2. đọc từ tệp 'CHE.XK' và hiện các thông tin lên màn hình.

Đáp án

• Tạo Tệp Ghi.Xk

PROGRAM GHI_CHE;

USES crt;

TYPE

che=record

tc:string[20];{ten che}

tl:integer; {trong luong}

gt:real;{gia tien}

end;

VAR

x:che;

i,n:integer;

hop:file of che;

BEGIN

clrscr;

write('cho so luong loai che:');readln(n);

assign(hop,'che.xk');

rewrite(hop);

for i:=1 to n do

begin

write('ten che:');readln(x.tc);

write('trong luong:');readln(x.tl);

write('gia tien :');readln(x.gt);

seek(hop,i);{dinh vi de ghi};

write(hop,x);

end;

close(hop);

readln;

END.

B) Tạo tệp mở chè

Program Mo_Che;

Uses crt;

Type

Che = record

Tc: String[20];

Tl : Integer;

Gt : Real;

End;

Var

X: Che;

I : Integer;

Hop : file Of Che;

Begin

Clrscr;

Assign(hop,'Che.Xk');

Reset(Hop);

While Not (Eof(hop)) Do

Begin

Read(Hop,x);

Writeln(' Ten che:',X.Tc);

Writeln(' Trong luong:',X.Tl);

Writeln(' Gia Tien:',X.Gt:3:2);

End;

Readln;

End.

Buổi 14: Thực hành

Có các thông tin về học sinh: Tên học sinh, Địa chỉ, Điểm thi

Hãy lập chương trình

1. Đọc các thông tin về học sinh từ bàn phím rồi ghi lên đĩa với tên tệp 'Hocsinh.Dat'

2. đọc từ tệp 'Hocsinh.Dat' và hiện các thông tin lên màn hình.

• Tạo têp Hocsinh.dat

PROGRAM GHI;

uses crt;

TYPE

sv=record

ht:string[25];

ns:integer;

dc:string[40];

d:real;

end;

VAR

i,n:integer;

f:file of sv;

h:sv;

BEGIN

clrscr;

write('cho so sinh vien:');readln(n);

assign(f,'hocsinh.dat');

rewrite(f);

for i:=1 to n do

begin

seek(f,filesize(f));

clrscr;

writeln('ban dang nhap du lieu cua sinh vien thu:',i);

write('ho va ten:');readln(h.ht);

write('sinh nam :');readln(h.ns);

write('noi sinh :');readln(h.dc);

write('diem thi :');readln(h.d);

seek(f,i);

write(f,h);

end;

close(f);

end.

B) Đọc từ tệp Hocsinh.Dat

PROGRAM MO;

uses crt;

type

hs=record

ht:string[30];

ns:integer;

dt:real;

dc:string[40];

end;

VAR

x:hs;

i,n:integer;

f:file of hs;

BEGIN

assign(f,'hocsinh.dat');

reset(f);

seek(f,0);

while not (eof(f)) do

begin

for i:=1 to filesize(f) do

begin

write('ho va ten:', x.ht);

write('sinh nam :', x.ns);

write('dia chi :', x.dc);

write('diem thi :', x.dt);

end;

end;

close(f);

readln;

END.

Bài Tập tổng hợp

Program QLHS;

Uses crt;

Type

Hocsinh=Record

Ten:String[20];

Nsinh:Integer;

Diem:Real;

Diachi:String[40];

Tel:integer;

End;

Var

f:File of Hocsinh;

l: Array [1..100] of Hocsinh;

ch,ch1: Char;

s: Integer;

D: Real;

tl,i,n:Integer;

Begin

Clrscr;

Tl:=0;

Write ('Ban hay vao so hoc sinh trong lop:');Readln(n);

For i:=1 To N Do

Begin

Write(' Ho Va Ten :'); Readln(l[i].ten);

Write(' Nam Sinh :'); Readln(l[i].Nsinh);

Write(' Diem Thi :'); Readln(l[i].Diem);

Write(' Dia chi :'); Readln(l[i].Diachi);

Write(' Dien Thoai:'); Readln(l[i].Tel);

Writeln;

If l[i].diem

Tl:=Tl+1

End;

Writeln;

Write(' Ban co muon cat du lieu khong:?(Y/N)'); Readln(ch);

If ch='y' Then

Begin

Assign(f,'Hocsinh.dat');

Rewrite(f);

For i:=1 To n Do

Write(f,l[i]);

Close(f);

Writeln('Ban da cat du lieu vao file hocsinh.dat');

Readln;

End

Else

Begin

Clrscr;

For i:=1 To N do

Writeln;

Writeln(' Tuoi hoc tro toi yeu mau tim');

Writeln(' Vi tim buon tim dai tim co don');

Writeln(' Yeu mau tim buon chieu thu bay');

Writeln(' Pho len den mau tim van co don');

Writeln(' =======Good bye======');

Readln;

Exit;

End;

Writeln;

Write('Ban co muon xem danh sach khong?(c/k)'); Readln(ch1);

If ch1='c' Then

Begin

Assign(f,'Hocsinh.dat');

Reset(f);

For i:=1 To N Do

Begin

Writeln(' Ho va ten : ',L[i].Ten);

Writeln(' Nam Sinh : ',L[i].Nsinh);

Writeln(' Diem Thi : ',L[i].Diem:2:1);

Writeln(' Dia Chi : ',L[i].Diachi);

Writeln(' Dien Thoai: ',L[i].Tel);

End;

End

Else

Write ('Good Bye ? See You Again');

Readln;

For i:=1 To Tl Do

Begin

Writeln(' So nguoi thi lai la:',tl);

Writeln(' Ho Va Ten:',l[i].ten);

Writeln(' Nam Sinh : ',L[i].Nsinh);

Writeln(' Diem Thi : ',L[i].Diem:2:1);

Writeln(' Dia Chi : ',L[i].Diachi);

Writeln(' Dien Thoai: ',L[i].Tel);

End;

Readln;

End.

Chương VIII: ĐỒ HOẠ (GRAPHICS)

1. Các file tối thiểu cần cho đồ hoạ

Ngoài các tệp cơ bản TURBO.EXE

TURBO.TPL

TURBO.TP

Cần phải thêm file:

* GRAPH.TPU (chứa trên 50 thủ tục và hàm về đồ hoạ dùng để vẽ, không có tệp này không thể vẽ hình được)

*.BGI (các file chứa các điều khiển tương ứng với các màn hình khác nhau)

*.CHR (các file chứa điều khiển vẽ các kiểu chữ khác nhau trong đồ hoạ

* Khai báo đồ hoạ.

USES

GRAPH;

2. Giới thiệu màn hình

x

o

25

y

80

Độ phần giải màn hình: (chiều ngang x chiều đứng)

CGA: 320 x 200 (cho 4 màu - màn hình này gần như không còn tồn tại nữa)

MGDA: 720 x 348 (màn hình đơn sắc, độ phần giải cao - loại này rất ít)

EGA: 640 x 350 (16 màu - loại màn hình này hiện nay không còn phổ biến)

VGA: 640 x 400

SVGA: 1024 x 768 (độ phân giải rất cao, có khả năng hiển thị tới 256 màu)

Hai loại VGA và SVGA phổ biến nhất hiện nay.

3. Giới thiệu hệ trục Toạ độ

o,o max x

max y

4. Đặt chế độ đồ hoạ

Initgraph(gd,gm,' ');

Trong đó: Initgraph : tên thủ tục

gd: tham biến nguyên, chứa giá trị xác định kiểu màn hình

gm: tham biến nguyên, chứa giá trị xác định chế độ đồ hoạ.

' ': Nếu các tệp TURBO.BGI, TURBO.CHR ở thư mục gốc, Còn nếu 2 file đó ở thư mục con thì phải chỉ ra đường dẫn đến 2 file đó.

* tác động: Đưa máy từ chế độ văn bản sang chế độ đồ hoạ.

5. Thủ tục vẽ điểm.

PutPixel(x,y,màu);

Trong đó: PutPixel: tên thủ tục

x,y: Toạ độ nguyên phụ thuộc vào độ phân giải

màu: khai báo màu cho màn hình

* Tác động: Thủ tục này vẽ điểm có Toạ độ xy và màu cho trước

6. Thủ tục vẽ đoạn thẳng.

Line(x1,y1,x2,y2);

B(x2,y2)

A(x1,y1)

- line: tên thủ tục

- x1, y1: điểm thứ nhất

- x2, y2: điểm thứ hai

* Tác động: vẽ đoạn thẳng nối điểm A có Toạ độ x1,y1 với điểm B có Toạ độ x2, y2.

Ví dụ: Vẽ hệ trục Toạ độ vuông góc giữa màn hình (độ phân giải 640 x 400)

A'(320,0)

A(0,200) B(639,200)

B'(320,300)

để vẽ được hệ trục Toạ độ trên ta dùng lệnh:

Line(0,200,639,200); {ox}

Line(320,0,320,299); {oy}

Muốn có mũi tên phải vẽ thêm 4 đường nữa

7. hàm cực đại:

Hàm cực đại theo x : getmaxx

Hàm cực đại theo y: getmaxy

Ví dụ: A'(u,0)

A(0,v) B(getmaxx,v)

B'(u,getmaxy)

u:=getmaxx div 2;

v:=getmaxy div 2;

Dòng lệnh: Line(0,v,getmax,v);

Line(u,0,u,getmaxy);

8. Vẽ hình chữ nhật

* Vẽ hình chữ nhật tô đặc ở bên trong:

Bar(x1,y1,x2,y2); (x1,y1)

(x2,y2)

* Vẽ chu vi hình chữ nhật :

Rectangle(x1,y1,x2,y2); (x1,y1)

(x2,y2)

* Vẽ khối chữ nhật

Bar 3D(x1,y1,x2,y2, sâu, đỉnh);

9. Vẽ đường tròn.

CIRCLE(x,y,r)

Trong đó: x,y: tâm đường tròn

r: bán kính đường tròn

Ví dụ: Vẽ 1 đường tròn ở giữa màn hình

Circle(u,v,100);

10. Chuyển Toạ độ (MOVETO)

MOVETO(x1,y1); {chuyển con trỏ tới tọa độ (x1,y1)

11. Đặt màu hình vẽ

Setcolor(màu); ví dụ: Setcolor(green); {đặt màu hình vẽ màu xanh}

Setbkcolor(màu); ví dụ: Setbkcolor(white); {đặt màu nền màu trắng}

Ví dụ: Vẽ y=sinx trên đoạn x[0,2*] trong Toạ độ vuông góc, gốc ở giữa màn hình và chia [0,2 *] thành các phần có độ dài bằng nhau = 0,001.

PROGRAM Vesinx;

uses

graph;

Var

gd,gm,u,v,h,t:Integer;

x,y,b:Real;

BEGIN

gd:=detect;

initgraph(gd,gm,' ');

setcolor(green);

u:=getmaxx div 2;

v:=getmaxy div 2;

line(0,v,getmaxx,v);

line(u,0,u,getmaxy);

b:=0;

repeat

x:=u+50*b;

y:=v-50*sin(b);

h:=round(x);

t:=round(y);

putpixel(h,t,14);

b:=b+0.001

until b>2*pi;

Readln;

closegraph;

END.

Bài tập: Vẽ các hình sau: Hình quả bóng, ngôi nhà

12. Hiển thị văn bản trong chế độ đồ hoạ

OutText(ST); {Cho hiển thị nội dung của xâu ST tại vị trí hiện tại của con trỏ đồ hoạ}

OutTextXY(X,Y,ST); {Hiện nội dung của xâu ST tại Toạ độ X,Y

SetTextSTyle(Font, chiều viết, kích thước);

Trong đó:

Font: Gồm các kiểu Font: DefautFont (kí hiệu là 0), TriplexFont (1), SmallFont (2), SansSerIfFont (3), GothicFont (4).

Chiều viết: 0: kiểu nằm ngang

1: kiểu thẳng đứng

Kích thước: là kích thước chữ To, nhỏ - Nhận giá trị từ từ 1 đến 10.

Ví dụ: Vẽ 1 dòng chữ lên màn hình sau đó thay đổi kích thước

Uses crt,graph;

Var

gd,gm :Integer;

maxx,maxy:Integer;

Begin

gd:=detect;

initgraph(gd,gm,' ');

maxx:=getmaxx;

maxy:=getmaxy;

setcolor(getmaxcolor);

settextSTyle(triplexfont,horizdir,5);

settextJuSTIfy(Centertext,CenterText);

OutTextXY(Maxx div 2,MaxY div 2,'DH Bach Khoa');

Readln;

ClearDevice;

SetTextSTyle(TriplexFont, HorizDir, UserCharSize);

SetUserCharSize(3,4,4,1);

OutTextXY(MaxX div 2, MaxY div 2,'Rong=3/4, cao gap bon');

Readln;

ClearDevice;

SetTextSTyle(triplexFont,HorizDir,UserCharSize);

SetUserCharSize(1,1,3,1);

OutTextXY(MaxX div 2, MaxY div 2,'Rong binh thuong, cao gap ba');

Readln;

CloseGraph;

End.

* Một số bài tập thực hành (giải thích trên chương trình)

Bài 1: Vẽ điểm ngẫu nhiên

PROGRAM Vediem;

Uses graph,crt;

Var

gd,gm:Integer;

Begin

gd:=0;

initgraph(gd,gm,'c:\tp\bgi');

ranDomize;

repeat

putpixel(Random(getmaxx),Random(getmaxy),Random(getmaxcolor));

delay(10);

until keypressed;

closegraph;

End.

Bài 2: Vẽ đường tròn chuyển động

Phương pháp: - Vẽ đường tròn

- Thay đổi vị trí

- Xoá đường tròn cũ đi

PROGRAM ve_duong_tron_chuyen_Dong;

Uses crt,graph;

Var gd,gm,i:Integer;h:Integer;

Begin

gd:=0;

initgraph(gd,gm,'c:\tp\bgi');

i:=50;setbkcolor(green);

repeat

setcolor(white);

line(0,300,getmaxx,300);

circle(i,250,50);

delay(50);

setcolor(green);

circle(i,250,50);

If i>=getmaxx-50 Then h:=-5;

If i

i:=i+h;

until keypressed;

closegraph;

End.

Bài 3: Vẽ chữ chuyển động từ trái sang phải, từ phải sang trái trên màn hình

PROGRAM chucd;

Uses crt;

Var i,j:Integer;

Begin

Clrscr;

i:=1;j:=79;

Repeat

goToxy(i+1,10); {chuyển con trỏ tới điểm x=i+1, y=10}

Write('CHUONG TRINH TRUYEN HINH');

goToxy(1,11);clreol;

goToxy(j+1,11);Write('DAI TRUYEN HINH HA NOI');

goToxy(1,12);clreol;

delay(250);

goToxy(i+1,10);clreol;

goToxy(j+1,11);clreol;

i:=(i+1) mod 80;

j:=(j+79) mod 80;

until keypressed;

End.

Bài 4: Tạo 1 dòng chữ chuyển động từ dưới lên

PROGRAM chucddl;

Uses crt;

Var i,j:Integer;

Begin

Clrscr;

i:=24;

Repeat

goToxy(20,i);

Write('CHUONG TRINH TRUYEN HINH');{cot truoc,Dong sau}

goToxy(20,i+1);clreol;

delay(550);

goToxy(20,i);clreol;

i:=(i+24) mod 25;

until keypressed;

End.

Bạn đang đọc truyện trên: Truyen2U.Pro

#saoxa