Tóm tắt lý thuyết pascal

ÔN THI HỌC SINH GIỎI PASCAL (LÝ THUYẾT)

  1. CÁC KIỂU DỮ LIỆU CƠ BẢN
  2. Kiểu logic

– Từ khóa: BOOLEAN

– miền giá trị: (TRUE, FALSE).

– Các phép toán: phép so sánh (=, <, >) và các phép toán logic: AND, OR, XOR, NOT.

Trong Pascal, khi so sánh các giá trị boolean ta tuân theo qui tắc: FALSE < TRUE.

Giả sử A và B là hai giá trị kiểu Boolean. Kết quả của các phép toán được thể hiện qua bảng dưới đây:

A B A AND B A OR B NOT A
TRUE TRUE TRUE TRUE FALSE
TRUE FALSE FALSE TRUE FALSE
FALSE TRUE FALSE TRUE TRUE
FALSE FALSE FALSE FALSE TRUE
  1. Kiểu số nguyên

2.1. Các kiểu số nguyên

Tên kiểu Phạm vi Dung lượng
Shortint -128 ® 127 1 byte
Byte 0 ® 255 1 byte
Integer -32768 ® 32767 2 byte
Word 0 ® 65535 2 byte
LongInt -2 147 483 648 ® 2 147 483 647 4 byte
Int64 2^63…2^63-1
Qword 0…2^64-1

2.2. Các phép toán trên kiểu số nguyên

2.2.1. Các phép toán số học:

+, -, *, / (phép chia cho ra kết quả là số thực).

Phép chia lấy phần nguyên: DIV  (Ví dụ : 34 DIV 5 = 6).

Phép chia lấy số dư: MOD (Ví dụ:  34 MOD 5 = 4).

  1. Kiểu số thực

3.1. Các kiểu số thực

Tên kiểu Phạm vi Dung lượng
Single 1.5´10-45 ® 3.4´10+38 4 byte
Real 2.9´10-39 ® 1.7´10+38 6 byte
Double 5.0´10-324 ® 1.7´10+308 8 byte
Extended 3.4´10-4932 ® 1.1´10+4932 10 byte

Chú ý: Các kiểu số thực Single, Double và Extended yêu cầu phải sử dụng chung với bộ đồng xử lý số hoặc phải biên dich chương trình với chỉ thị {$N+} để liên kết bộ giả lập số.

3.2. Các phép toán trên kiểu số thực:           +, -, *, /

Chú ý: Trên kiểu số thực không tồn tại các phép toán DIV và MOD.

3.3. Các hàm số học sử dụng cho kiểu số nguyên và số thực:

Thủ tục/ hàm chức năng
Biến kiểu nguyên
Sqr(x) Cho giá trị bằng bình phương của biến x
Random(N) Hàm có biểu thức N kiểu Word và cho giá trị là một số nguyên ngẫu nhiên trong phạm vi từ 0 đến N-1. Khi dùng hàm này ta phải gọi thủ tục randomize
Biến kiểu thực
Abs(x) Cho giá trị bằng trị tuyệt đối củ giá trị biến x hoặc số thực x
Int(x) Phần nguyên của số thực x (kết quả kiểu số thực)
Trunc(x) Phần nguyên của số thực x (kết quả kiểu số nguyên)
Sqr(x) Cho giá trị bằng bình phương của giá trị biến x hoặc số thực x
Sqrt(x) Cho giá trị bằng căn bậc hai của giá trị không âm của biến x hoặc số thực không âm x
Round(x) Làm tròn phần lẽ của x đến số nguyên gần nhất
  1. Kiểu ký tự

– Từ khoá: CHAR.

– Kích thước: 1 byte.

– Để biểu diễn một ký tự, ta có thể sử dụng một trong số các cách sau đây:

  • Đặt ký tự trong cặp dấu nháy đơn. Ví dụ ‘A’, ‘0’.
  • Dùng hàm CHR(n) (trong đó n là mã ASCII của ký tự cần biểu diễn). Ví dụ CHR(65) biễu diễn ký tự ‘A’.
  • Dùng ký hiệu #n (trong đó n là mã ASCII của ký tự cần biểu diễn). Ví dụ #65.

– Các phép toán: =, >, >=, <, <=,<>.

* Các hàm trên kiểu ký tự:

UPCASE(ch): Trả về ký tự in hoa tương ứng với ký tự ch. Ví dụ: UPCASE(‘a’) = ‘A’.

ORD(ch): Trả về số thứ tự trong bảng mã ASCII của ký tự ch. Ví dụ ORD(‘A’)=65.

CHR(n): Trả về ký tự tương ứng trong bảng mã ASCII có số thứ tự là n. Ví dụ: CHR(65)=’A’.

PRED(ch): cho ký tự đứng trước ký tự ch. Ví dụ: PRED(‘B’)=’A’.

SUCC(ch): cho ký tự đứng sau ký tự ch. Ví dụ: SUCC(‘A’)=’B’.

Read:   Đề thi HSG toán 9 cấp Huyện của Bà Rịa - Vũng Tàu – Năm học 2019 – 2020

CẤU TRÚC LỆNH

  1. CÂU LỆNH RẼ NHÁNH

1.1. Lệnh IF

Cú pháp:

  • Dạng đủ: IF < điều kiện>  THEN <câu lệnh 1> ELSE <câu lệnh 2> ;
  • Dạng khuyết : IF < điều kiện>  THEN <câu lệnh >;

BÀI TẬP:

1.1.1: Viết chương trình nhập vào một số nguyên và  kiểm tra xem số vừa nhập là số chẵn hay số lẻ.

1.1.2:  Viết chương trình giải phương trình bậc nhất ax+b=0

1.2. Lệnh CASE

Cú pháp:

Dạng 1 Dạng 2
CASE  B OF

Const 1: S1;

Const 2: S2;

Const n: Sn;

END;

CASE  B OF

Const 1: S1;

Const n: Sn;

ELSE  Sn+1;

END;

Trong đó:

  • B: Biểu thức kiểu vô hướng đếm được như kiểu nguyên, kiểu logic, kiểu ký tự, kiểu liệt kê.
  • Const i: Hằng thứ i, có thể là một giá trị hằng, các giá trị hằng (phân cách nhau bởi dấu phẩy) hoặc các đoạn hằng (dùng hai dấu chấm để phân cách giữa giá trị đầu và giá trị cuối).
  • Giá trị của biểu thức và giá trị của tập hằng i (i=1¸n) phải có cùng kiểu.

Khi gặp lệnh CASE, chương trình sẽ kiểm tra:

– Nếu giá trị của biểu thức B nằm trong tập hằng const i thì máy sẽ thực hiện lệnh Si tương ứng.

– Ngược lại:

+ Đối với dạng 1: Không làm gì cả.

+ Đối với dạng 2: thực hiện lệnh Sn+1.

BÀI TẬP:

1.2.1: Viết chương trình nhập vào tuổi của một người và cho biết người đó là thiếu niên, thanh niên, trung niên hay lão niên. Biết rằng: nếu tuổi nhỏ hơn 18 là thiếu niên, từ 18 đến 39 là thanh niên, từ 40 đến 60 là trung niên và lớn hơn 60 là lão niên.

1.2.2: Viết chương trình nhập vào ngày, tháng, năm. Máy sẽ hiện lên ngày, tháng, năm hôm sau.

Gợi ý:

Biện luận theo tháng. Gom tháng thành 3 nhóm: tháng có 31 ngày (1,3,5,7,8,10,12), tháng có 30 ngày (4,6,9,11) và tháng 2 (có 28 hoặc 29 ngày tùy theo năm nhuận).

Dùng lệnh lựa chọn:

CASE thang OF

1,3,5,7,8,10,12: ……….

4,6,9,11: …………………

2: …………………………..

END;

  1. CÂU LỆNH LẶP

2.1. Vòng lặp xác định

Có hai dạng sau:

Œ         Dạng tiến       

FOR <biến đếm>:=<giá trị Min> TO <giá trị Max> DO            S;

         Dạng lùi

FOR <biến đếm>:=<giá trị Max> DOWNTO <giá trị Min> DO        S;

BÀI TẬP:

2.1.1: Viết chương trình tính tổng S = 1+2+…+N.

2.1.2: Viết chương trình nhập vào N số nguyên từ bàn phím. Hãy tính và in ra màn hình tổng của các số vừa được nhập vào.

Ý tưởng:

Dùng phương pháp cộng dồn. Cho vòng lặp FOR chạy từ 1 tới N, ứng với lần lặp thứ i, ta nhập vào số nguyên X và đồng thời cộng dồn X vào biến S.

 

2.2. Vòng lặp không xác định

Dạng REPEAT Dạng WHILE
Repeat < câu lệnh>;

Until < điều kiện>;

While < điều kiện>

Do < câu lệnh>;

Ý nghĩa:

  • Dạng REPEAT: Lặp lại < câu lệnh> cho đến khi < điều kiện>=TRUE thì dừng.
  • Dạng WHILE: Trong khi < điều kiện> =TRUE thì tiếp tục thực < câu lệnh>;.

BÀI TẬP

2.2.1 Viết chương trình nhập vào các số nguyên cho đến khi nào gặp số 0 thì kết thúc. Hãy đếm xem có bao nhiêu số chẵn vừa được nhập vào.

Ý tưởng:

Bài toán này không biết chính xác số lần lặp nên ta không thể dùng vòng lặp FOR. Vì phải nhập vào số nguyên N trước, sau đó mới kiểm tra xem N=0? Do đó ta nên dùng vòng lặp REPEAT.

2.2.2: Viết chương trình nhập vào các số nguyên từ bàn phím cho đến khi nào gặp số nguyên tố thì kết thúc nhập. Tính tổng các số chẵn và trung bình cộng các số lẻ.

Gợi ý:

Dùng vòng lặp REPEAT … UNTIL NTo; để nhập. Trong đó, NTo là biến kiểu Boolean để kiểm tra số được nhập vào có phải là số nguyên tố hay không.

 

2.2.3: Viết chương trình nhập vào một số nguyên dương. Hãy thông báo lên màn hình số đó có bao nhiêu chữ số và tổng các chữ số của số đó.

Gợi ý:

Dùng vòng lặp WHILE. Trong khi N>0 thì: lấy ra chữ số cuối cùng của N để tính bằng phép toán MOD 10, sau đó bỏ bớt đi chữ số cuối cùng của N bằng phép toán DIV 10.

CHƯƠNG TRÌNH CON: THỦ TỤC VÀ HÀM

  1. KHÁI NIỆM VỀ CHƯƠNG TRÌNH CON

Chương trình con (CTC) là một đoạn chương trình thực hiện trọn vẹn hay một chức năng nào đó.          Trong Turbo Pascal, có 2 dạng CTC:

  • Thủ tục (PROCEDURE): Dùng để thực hiện một hay nhiều nhiệm vụ nào đó.
  • Hàm (FUNCTION): Trả về một giá trị nào đó (có kiểu vô hướng, kiểu string hoặc kiểu con trỏ). Hàm có thể sử dụng trong các biểu thức.

Ngoài ra, trong Pascal còn cho phép các CTC lồng vào nhau.

II. CẤU TRÚC CHUNG CỦA MỘT CHƯƠNG TRÌNH CÓ SỬ DỤNG CTC

PROGRAM  Tên_chương_trình;

USES CRT;

CONST  …………;

VAR       …………;

PROCEDURE  THUTUC[(Các tham số)] ;

[Khai báo Const, Type, Var]

BEGIN

…………..

END;

FUNCTION  HAM[(Các tham số)] :<Kiểu dữ liệu>;

[Khai báo Const, Type, Var]

BEGIN

…………..

HAM:=<Giá trị>;

END;

BEGIN {Chương trình chính}

……………….

THUTUC[(…)] ;

……………….

A:= HAM[(…)] ;

……………….

END.

Chú ý: Trong quá trình xây dựng CTC, khi nào thì nên dùng thủ tục/hàm?

Dùng hàm

Dùng thủ tục
– Kết quả của bài toán trả về 1 giá trị duy nhất (kiểu vô hướng, kiểu string hoặc kiểu con trỏ).

– Lời gọi CTC cần nằm trong các biểu thức tính toán.

– Kết quả của bài toán không trả về giá trị nào hoặc trả về nhiều giá trị hoặc trả về  kiểu dữ liệu có cấu trúc (Array, Record, File).

– Lời gọi CTC không nằm trong các biểu thức tính toán.

Ví dụ 1: Viết CTC để tính n! = 1.2…n.

Ý tưởng: Vì bài toán này trả về 1 giá trị duy nhất nên ta dùng hàm.

III. BIẾN TOÀN CỤC VÀ BIẾN ĐỊA PHƯƠNG

  • Biến toàn cục: là các biến được khai báo trong chương trình chính. Các biến này có tác dụng ở mọi nơi trong toàn bộ chương trình.
  • Biến địa phương: là các biến được khai báo trong các CTC. Các biến này chỉ có tác dụng trong phạm vi CTC đó mà thôi.

Chú ý: Trong một CTC, nếu biến toàn cục trùng tên với biến địa phương thì biến địa phương được ưu tiên hơn.

IV. ĐỆ QUI

4.1. Khái niệm đệ qui

Trong một chương trình, một CTC có thể gọi một CTC khác vào làm việc. Nếu như CTC đó gọi lại chính nó thì gọi là sự đệ qui.

4.2. Phương pháp thiết kế giải thuật đệ qui

  • Tham số hóa bài toán
  • Tìm trường hợp suy biến.
  • Phân tích các trường hợp chung (đưa về các bài toán cùng loại nhưng nhỏ hơn).

Ví dụ: Viết hàm đệ qui để tính n! = 1.2…n.

DỮ LIỆU KIỂU MẢNG (ARRAY)

  1. KHAI BÁO MẢNG

Cú pháp:

VAR                <Biến mảng> : ARRAY [chỉ số] OF <Kiểu dữ liệu>;

Ví dụ:

VAR                A: Array[1..100] of Integer; {Mảng 1 chiều}

B: Array[1..100,1..200] of integer; {Mảng 2 chiều: 100 hàng 200 cột}

C: Array[Byte] of Char;

  1. XUẤT NHẬP TRÊN DỮ LIỆU KIỂU MẢNG

– Để truy cập đến phần tử thứ k trong mảng một chiều A, ta sử dụng cú pháp: A[k] .

– Để truy cập đến phần tử (i,j) (hàng i cột j)  trong mảng hai chiều M, ta sử dụng cú pháp: M[i,j] .

– Có thể sử dụng các thủ tục READ(LN)/WRITE(LN) đối với các phần tử của biến kiểu mảng.

XÂU KÝ TỰ (STRING)

I. KHAI BÁO KIỂU STRING

            VAR                Tên biến : STRING[Max] ;

Trong đó Max là số ký tự tối đa có thể chứa trong chuỗi (Max Î[0,255] ). Nếu không có khai báo [Max] thì số ký tự mặ mặc định trong chuỗi là 255.

Ví dụ:

Var                  Name : String[30] ;

Line : String[80] ;

St : String; {St có tối đa là 255 ký tự}

II. TRUY XUẤT DỮ LIỆU KIỂU STRING

– Có thể sử dụng các thủ tục xuất nhập Write, Writeln, Readln để truy xuất các biến kiểu String.

– Để truy xuất đến ký tự thứ k của xâu ký tự, ta sử dụng cú pháp sau: Tênbiến[k] .

III. CÁC PHÉP TOÁN TRÊN XÂU KÝ TỰ

3.1. Phép nối xâu: +

3.2. Các phép toán quan hệ: =, <>, <, <=, >, >=.

Chú ý: Các phép toán quan hệ được so sánh theo thứ tự từ điển.

IV. CÁC THỦ TỤC VÀ HÀM VẾ XÂU KÝ TỰ

Thủ tục/ hàm chức năng
Inc(x) Cho kí tự đứng ngay sau kí tự ứng với giá trị hiện thời của x trong bộ mã ASCII
Dec(x) Cho kí tự đứng ngay trước kí tự ứng với giá trị hiện thời của x trong bộ mã ASCII
Chr(x) Cho kí tự có mã ASCII là x     VD: chr(65)=’A’
Ord(c) Cho giá trị số mã ASCII của kí tự c    VD: Ord(‘A’)=65
Pred(c) Cho kí tự đứng ngay trước kí tự c trong bảng ASCII
Succ(c) Cho kí tự đứng ngay sau kí tự c trong bảng ASCII
Upcase(c) Cho giá trị bằng chữ cái hoa tương ứng ( nếu c là chữ cái tiếng Anh), ngược lại hàm cho giá trị bằng giá trị của c
Lowercase(c) Cho giá trị bằng chữ thường tương ứng ( nếu c là chữ cái tiếng Anh), ngược lại hàm cho giá trị bằng giá trị của c
Length(st) Cho độ dài của chuỗi st
Pos(s,st) Cho vị trí đầu tiên tìm thấy chuỗi s trong chuỗi st, cho kết quả 0 nếu không tìm thấy
Copy(st,k,m) Cho m kí tự của st tính từ vị trí k
Concat(st1,st2,…stn) Ghép nối các chuỗi st1, st2,…,stn theo thứ tự đó thành 1 chuỗi duy nhất
Delete(st,k,m) Xoá m kí tự của st tính từ vị trí k
Insert(s,st,k) Chèn chuỗi s vào chuỗi st tại vị trí k (chèn vào phía trước vị trí k)
Str(x,st) Biến đổi số nguyên hay số thực x thành kiểu chuỗi và gán cho biến chuỗi st
Val(st,x,k) Biến đổi chuỗi số thành số nguyên hay số thực và gán cho biến x.
Hàm chuẩn trả về giá trị logic
Odd(x) Với biểu thức số nguyên x, cho giá trị TRUE nếu x lẻ, giá trị FALSE nếu x chẵn

DỮ LIỆU KIỂU FILE VĂN BẢN

3.1. Khai báo

Var      <Tên biến file>: Text;

3.2. Các lệnh và hàm chỉ tác động trên file dạng text

* Lệnh read và Readln

Cú pháp: Read(F,x) hay Readln(F,x);

Chức năng: Đọc một dòng từ vị trí con trỏ file và gán cho biến x. Biến x có thể nhận các kiểu: Char, String hoặc kiểu số. Lệnh readlc đọc xong xuống dòng tiếp theo.

* Lệnh Write và Writeln

Cú pháp: Write(F, x); hay Writeln(F, x);

Chức năng: Ghi giá trị x vào file ở vị trí con trỏ file. Lệnh  Writeln sau khi ghi con trỏ file sẽ chuyển về đầu dòng sau.

*  Hàm EOLn

Cú pháp: EOLn(F);

Chức năng: Hàm trả về giá trị True nếu con trỏ đang ở cuối một dòng, ngược lại hàm trả về giá trị False.

* Sau đây là các thao tác cơ bản khi xuất nhập file:

Ghi dữ liệu vào file

Đọc dữ liệu từ file
ASSIGN(f,FileName);

REWRITE(f);

WRITE(f,value);

CLOSE(f);

ASSIGN(f,FileName);

RESET(f);

READ(f,x);

CLOSE(f);

 Tải về Giao trinh_Pascal_LT

Read:   Thử khả năng lập trình của ChartGPT
Hình đại diện của người dùng

admin

Trả lời

Email của bạn sẽ không được hiển thị công khai. Các trường bắt buộc được đánh dấu *