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...
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
Writeln('Hoc sinh co diem cao nhat ');
Writeln('Diem cao nhat la :',Max:1:2);
* 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
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:
2. Chương trình con hàm(Funtion)
Funtion Tenham (tham số hình thức) : Kiểu;
+ Funtion, Begin, End: từ khoá
+ 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:
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;
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
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ụ: Lập chương trinh tính giai thừa
Function Gt(i:Integer):Integer;
Writeln('Giai thua cua ',i,'= ',Gt(i));
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
function tho(n:integer):integer;
write('ban hay vao so thang :');readln(n);
writeln('dan so tho la:',tho(n));
3) Chương trình con thủ tục(Procedure)
Procedure ten; Procedure ten(tham số hình thức);
Trong đó: - Procedure, Begin, End: từ khoá
- Khai báo: giống chương trình, giống hàm
- Tham số hình thức: có 2 cách viết giống hàm
PROGRAM bDoi; {1} PROGRAM bDoi; {2}
procedure BD(y:Integer); procedure BD(Var y:Integer);
Writeln('x = ',x); Writeln('x = ',x);
procedure vao(Var b:M;l:Integer);
procedure RA(Var b:M;l:Integer);
Procedure SAP(Var b:M; l:Integer);
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)
Procedure Giai_Pt_b2 (A,B,C:Real);
Writeln('Hai Nghiem Lien Hop Phuc:';
Writeln(' X1 = ', X1,'+j ', ABS(X2));
Writeln(' X2 = ', X2:,'+j ', ABS(X2));
IF DELTA = 0 THEN DELTA_KHONG;
IF DELTA > 0 THEN DELTA_DUONG;
Write(' He so A= '); Readln(K);
Write(' He so B = '); Readln(M);
Write(' He so C = '); Readln(N);
Mang= Array[1..100] of integer;
Procedure Timmax(var a:mang;n:integer);
Writeln('so lon nhat la:',max);
Procedure timmin(Var c: Mang ; n : Integer);
Writeln('so nho nhat la:',Min);
Procedure Saptang(Var a:Mang;n:Integer);
procedure sapgiam(var a:mang;n:integer);
procedure trungbinh(var b:mang;n:integer);
write('cac so duong trong day:');
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);
Write('ban hay vao so phan tu cua mang:');readln(n);
write('a[',i,']=');readln(a[i]);
- 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
y:=(sin(x)/1+(x*x))*x +1/(x*x)+1
y:=(sin(x)/1+(x*x))*x + ((cos(x*x)+10)*(cos(x*x)+10))/((x*x)+1);
Write('Ban hay vao gia tri cua x,a,b:');readln(x,a,b);
Write('Voi X co gia tri la: ',x:0:0,' Thi ham co gia tri: ',y(x):0:0);
Write('Voi X co gia tri bang 1 thi ham co gia tri: ',y(1):0:0);
Write('Voi X co gia tri la 20 thi ham co gia tri: ',y(20):0:0);
Writeln('Voi x co gia tri la: ',x:2:2,' Thi ham co gia tri:', y(x):0:0);
Viet chuong trinh con tim so y trong day so x
PROGRAM TIM_SO_Y_TRONG_DAY_SO_X;
mang=array[1..100] of integer;
procedure timkiem(y,n:integer;var a:mang;var i :integer);
Write('Ban hay vao so phan tu:');readln(n);
write('a[',i,']=');readln(a[i]);
Write('Moi ban vao so can tim:');readln(y);
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);
Writeln('Ban co muon tim tiep nua khong ?(c/k)');readln(ch);
Chương VII: DỮ LIỆU CÓ CẤU TRÚC:
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}
- bt: biến tệp có trong khai báo
b) Ghi lên đĩa với tên tệp đã định
dl: dữ liệu cần ghi (hằng, bgiến, hàm ...)
Thay vì đưa dữ liệu ra màn hình bằng việc ghi dữ liệu lên đĩa.
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.
- 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
EOF(End Of file) {kết thúc của tệp}
EOF(bt); EOF: tên hàm ; bt: biến tệp
READ: tên thủ tục bt: biến tệp biến: nhận dữ liệu
Muốn đọc Toàn bộ các phần tử của tệp ta dùng các lệnh sau đây;
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
assign(F,'DIEMTHI.L1'); {mở ghi}
If d=0 Then Writeln('ca lop dat')
Else Writeln('co ',d,' SV thi lai');
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.
write('cho so luong loai che:');readln(n);
write('ten che:');readln(x.tc);
write('trong luong:');readln(x.tl);
write('gia tien :');readln(x.gt);
Writeln(' Trong luong:',X.Tl);
Writeln(' Gia Tien:',X.Gt:3:2);
Có các thông tin về học sinh: Tên học sinh, Địa chỉ, Điểm thi
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.
write('cho so sinh vien:');readln(n);
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);
Write ('Ban hay vao so hoc sinh trong lop:');Readln(n);
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);
Write(' Ban co muon cat du lieu khong:?(Y/N)'); Readln(ch);
Writeln('Ban da cat du lieu vao file hocsinh.dat');
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======');
Write('Ban co muon xem danh sach khong?(c/k)'); Readln(ch1);
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);
Write ('Good Bye ? See You Again');
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);
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
*.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ạ
Độ 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)
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.
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ạ.
* tác động: Đưa máy từ chế độ văn bản sang chế độ đồ hoạ.
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
* 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)
để vẽ được hệ trục Toạ độ trên ta dùng lệnh:
Muốn có mũi tên phải vẽ thêm 4 đường nữa
Dòng lệnh: Line(0,v,getmax,v);
* Vẽ hình chữ nhật tô đặc ở bên trong:
Rectangle(x1,y1,x2,y2); (x1,y1)
Bar 3D(x1,y1,x2,y2, sâu, đỉnh);
Ví dụ: Vẽ 1 đường tròn ở giữa màn hình
MOVETO(x1,y1); {chuyển con trỏ tới tọa độ (x1,y1)
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}
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);
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
settextSTyle(triplexfont,horizdir,5);
settextJuSTIfy(Centertext,CenterText);
OutTextXY(Maxx div 2,MaxY div 2,'DH Bach Khoa');
SetTextSTyle(TriplexFont, HorizDir, UserCharSize);
OutTextXY(MaxX div 2, MaxY div 2,'Rong=3/4, cao gap bon');
SetTextSTyle(triplexFont,HorizDir,UserCharSize);
OutTextXY(MaxX div 2, MaxY div 2,'Rong binh thuong, cao gap ba');
* Một số bài tập thực hành (giải thích trên chương trình)
putpixel(Random(getmaxx),Random(getmaxy),Random(getmaxcolor));
Bài 2: Vẽ đường tròn chuyển động
PROGRAM ve_duong_tron_chuyen_Dong;
Var gd,gm,i:Integer;h:Integer;
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
goToxy(i+1,10); {chuyển con trỏ tới điểm x=i+1, y=10}
Write('CHUONG TRINH TRUYEN HINH');
goToxy(j+1,11);Write('DAI TRUYEN HINH HA NOI');
Bài 4: Tạo 1 dòng chữ chuyển động từ dưới lên
Bạn đang đọc truyện trên: Truyen4U.Com