• Không có kết quả nào được tìm thấy

LY-THUYET-PASCAL - Website Trường THCS Lê Quý Đôn - Đại Lộc - Quảng Nam

N/A
N/A
Protected

Academic year: 2022

Chia sẻ "LY-THUYET-PASCAL - Website Trường THCS Lê Quý Đôn - Đại Lộc - Quảng Nam"

Copied!
1
0
0

Loading.... (view fulltext now)

Văn bản

(1)

A-CÁC KIỂU DỮ LIỆU CƠ BẢN

KHAI BÁO HẰNG, BIẾN, KIỂU, BIỂU THỨC VÀ CÂU LỆNH I. CÁC KIỂU DỮ LIỆU CƠ BẢN

1. Kiểu logic

- Từ khóa: BOOLEAN

- miền giá trị: TRUE (đúng), FALSE(sai).

- 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 A XOR B NOT A

TRUE TRUE TRUE TRUE FALSE FALSE

TRUE FALSE FALSE TRUE TRUE FALSE

FALSE TRUE FALSE TRUE TRUE TRUE

FALSE FALSE FALSE FALSE FALSE TRUE

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

Tên kiểu Phạm vi Dung lượng

Byte 0  255 1 byte

Integer -32768  32767 2 byte

Word 0  65535 2 byte

LongInt -2147483648  2147483647 4 byte

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).

3. 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

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.

4. 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'.

(2)

- 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'.

II. KHAI BÁO HẰNG

- Hằng là một đại lượng có giá trị không thay đổi trong suốt chương trình.

- Cú pháp:

CONST <Tên hằng> = <Giá trị>;

III. KHAI BÁO BIẾN

- Biến là một đại lượng mà giá trị của nó có thể thay đổi trong quá trình thực hiện chương trình.

- Cú pháp:

VAR < DS Tên biến> : <Kiểu dữ liệu>;

Ví dụ:

VAR x, y: Real; {Khai báo hai biến x, y có kiểu là Real}

a, b: Integer; {Khai báo hai biến a, b có kiểu integer}

IV. BIỂU THỨC

Biểu thức là công thức tính toán mà trong đó bao gồm các phép toán, các hằng, các biến, các hàm và các dấu ngoặc đơn.

Ví dụ: (x +y)/(5-2*x) biểu thức số học (x+4)*2 = (8+y) biểu thức logic

Trong một biểu thức, thứ tự ưu tiên của các phép toán được liệt kê theo thứ tự sau:

 Dấu ngoặc ()

 Phép toán *, /, DIV, MOD, AND.

 Phép toán so sánh =, <, >, <=, >=, <>, IN V. CÂU LỆNH

6.1. Câu lệnh đơn giản

- Câu lệnh gán (:=): <Tên biến>:=<Biểu thức>;

- Các lệnh xuất nhập dữ liệu: READ/READLN, WRITE/WRITELN.

- Lời gọi hàm, thủ tục.

6.2. Câu lệnh có cấu trúc

- Câu lệnh ghép: BEGIN ... END;

- Các cấu trúc điều khiển: IF.., CASE..., FOR..., REPEAT..., WHILE...

6.3. Các lệnh xuất nhập dữ liệu 6.3.1. Lệnh xuất dữ liệu

Để xuất dữ liệu ra màn hình, ta sử dụng ba dạng sau:

(1) WRITE(<tham số 1> [, <tham số 2>,...]);

(2) WRITELN(<tham số 1> [, <tham số 2>,...]);

(3) WRITELN;

Các thủ tục trên có chức năng như sau:

(1) Sau khi xuất giá trị của các tham số ra màn hình thì con trỏ không xuống dòng.

(2) Sau khi xuất giá trị của các tham số ra màn hình thì con trỏ xuống đầu dòng tiếp theo.

(3) Xuống dòng.

Các tham số có thể là các hằng, biến, biểu thức. Nếu có nhiều tham số trong câu lệnh thì các tham số phải được phân cách nhau bởi dấu phẩy.

Khi sử dụng lệnh WRITE/WRITELN, ta có hai cách viết: không qui cách và có qui cách:

- Viết không qui cách: dữ liệu xuất ra sẽ được canh lề ở phía bên trái. Nếu dữ liệu là số thực thì sẽ được in ra dưới dạng biểu diễn khoa học.

Ví dụ:

WRITELN(x); WRITE(sin(3*x));

- Viết có qui cách: dữ liệu xuất ra sẽ được canh lề ở phía bên phải.

Ví dụ:

WRITELN(x:5); WRITE(sin(13*x):5:2);

(3)

Câu lệnh Kết quả trên màn hình Writeln('Hello');

Writeln('Hello':10);

Writeln(500);

Writeln(500:5);

Writeln(123.457) Writeln(123.45:8:2)

Hello Hello 500 500

1.2345700000E+02 123.46

6.3.2. Nhập dữ liệu

Để nhập dữ liệu từ bàn phím vào các biến có kiểu dữ liệu chuẩn (trừ các biến kiểu BOOLEAN), ta sử dụng cú pháp sau đây:

READLN(<biến 1> [,<biến 2>,...,<biến n>]);

Chú ý: Khi gặp câu lệnh READLN; (không có tham số), chương trình sẽ dừng lại chờ người sử dụng nhấn phím ENTER mới chạy tiếp

B-CÂU LỆNH ĐIỀU KIỆN (CẤU TRÚC RẼ NHÁNH) 1. Câu lệnh điều kiện dạng thiếu:

IF <điều kiện> THEN <câu lệnh>;

- Cú pháp:

Ví dụ 1 Giả sử in số a ra màn hình nếu a>b Nếu a>b thì in ra màn hình giá trị của a Thể hiện bằng câu lệnh trong Pascal:

If a > b then write(a);

Ví dụ 2: Giả sử cần in số b ra màn hình nếu a < b.

+ Nếu a < b thì in ra màn hình giá trị của b. Thể hiện bằng lệnh điều kiện dạng thiếu trong Pascal là:

If a < b then write(b);

b. Dạng đủ - Cú pháp:

5. Câu lệnh điều kiện:

IF <điều kiện> THEN <câu lệnh1>

ELSE <câu lệnh 2>;

- Hoạt động: Chương trình sẽ kiểm tra điều kiện.

Nếu điều kiện được thoả mãn, chương trình sẽ thực hiện câu lệnh1 sau từ khoá Then. Ngược lại, câu lệnh2 sẽ được thực hiện.

2. Lệnh CASE

Cú pháp:

(4)

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 2: S2; ...

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.

C- CÂU LỆNH LẶP 1. Vòng lặp với số lần biết trước.

Có hai dạng sau:

Dạng tiến : FOR <biến đếm>:=<giá trị đầu> TO <giá trị cuối> DO câu lệnh;

+ Hoạt động của vòng lặp:

- B1: biến đếm nhận giá trị đầu

- B2: Chương trình kiểm tra biểu thức điều kiện, nếu biểu thức điều kiện đúng thì thực hiện câu lệnh.

- B3: Biến đếm tự động tăng lên 1 đơn vị và quay lại B2.

- B4: Nếu biểu thức điều kiện nhận giá trị sai thì thoát ra khỏi vòng lặp.

Dạng lùi : FOR <biến đếm>:=< giá trị cuối > DOWNTO < giá trị đầu > DO câu lệnh;

Chú ý: Khi sử dụng câu lệnh lặp FOR cần chú ý các điểm sau:

Không nên tuỳ tiện thay đổi giá trị của biến đếm bên trong vòng lặp FOR vì làm như vậy có thể sẽ không kiểm soát được biến đếm.

Giá trị đầu và cuối trong câu lệnh FOR sẽ được xác định ngay khi vào đầu vòng lặp. Do đó cho dù trong vòng lặp ta có thay đổi giá trị của nó thì số lần lặp cũng không thay đổi.

Bài tập :

1/ Viết chương trình in ra các số lẻ nhỏ hơn hoặc bằng n (Với n được nhập).

Program In_So_Le;

Uses crt;

var i,n: integer;

Begin

Clrscr;

Write('Nhap so n ='); readln(n);

For i:=1 to n do if i mod 2 =1 then Write(i:3,',');

readln end.

2/ Viết chương trình in ra các số lẻ nhỏ hơn hoặc bằng n ( Với n được nhập). Sao cho 15 số lẻ được in trên một dòng.

Program In_So_Le;

(5)

Uses crt;

var Dem,i,n: integer;

Begin

Clrscr;

Write('Nhap so n ='); readln(n);

Dem:= 0;

For i:=1 to n do if i mod 2 =1 then Begin

Write(i:3,',');

Dem:= Dem + 1;

if Dem mod 15 = 0 then Writeln;

end;

readln end.

3 /Một số có tổng các ước nhỏ hơn nó bằng chính nó được gọi là số hoàn chỉnh.

Ví dụ: 6 có các ước nhỏ hơn nó là 1, 2, 3. Tổng là 1 + 2 + 3 = 6.

Viết chương trình xét xem một số n được nhập từ bàn phím có phải là số hoàn chỉnh không.

Program So_Hoan_Chinh;

uses crt;

var n, i, s: integer;

begin

write('nhap so n: ');readln(n);

s:=0;

for i:= 1 to n -1 do if n mod i = 0 then s:=s+i;

if s = n then write(n, ' la so hoan chinh')

else writeln(n, ' khong phai la so hoan chinh');

readln end.

4/ Viết chương trình tìm các số hoàn chỉnh nhỏ hơn n (Với n được nhập từ bàn phím).

Program Tim_uoc_2;

uses crt;

Var S, n, i,j: longint;

Begin

clrscr;

Write('Nhap so n ='); readln(n);

For i:=1 to n do Begin

S:=0;

For j:=1 to i do if i mod j = 0 then S:=S+j;

if S = 2*i then write(i:6,',');

end;

readln end.

.2 Vòng lặp với số lần chưa biết trước số lần lặp.

a. Lệnh While.. Do ;

+ Cú pháp: While <điều kiện> do <câu lênh>;

+ Hoạt động:

- B1. Kiểm tra điều kiện.

- B2. Nếu điều kiện sai, câu lệnh sẽ bị bỏ qua và việc thực hiện câu lệnh lặp kết thúc. Nếu điều kiện đúng, thực hiện câu lệnh và quay lại B1

b. Lệnh Repeat.. Until ;

* Cú pháp:

REPEAT

(6)

<Lệnh 1>;

<Lệnh 2>;

...

<Lệnh n>;

UNTIL < Biểu thức logic >;

Giải thích sự hoạt động lệnh REPEAT:

Đầu tiên, thực hiện lần lượt các lệnh <Lệnh 1>, <Lệnh 2>,..., <Lệnh n>, sau đó kiểm tra < Biểu thức logic >. Nếu < Biểu thức logic > nhận giá trị FALSE thì lại quay lên đầu vòng lặp thực hiện tiếp <Lệnh 1>, <Lệnh 2>,..., <Lệnh n>. Nếu <

Biểu thức logic > nhận giá trị TRUE thì máy thoát khỏi vòng lặp. Như vậy, các lệnh nằm giữa REPEAT... UNTIL được thực hiện ít nhất một lần.

Chú ý:

- Các lệnh nằm giữa REPEAT UNTIL không có từ khoá Begin End. - Trong vòng lặp phải có lệnh nào đó làm thay đổi giá trị một biến trong <Biểu thức logic> nhằm làm dừng vòng lặp, nếu không vòng lặp sẽ chạy mãi không ngừng dẫn đến treo máy.

Bài tập :

Viết chương trình in ra các số lẻ nhỏ hơn hoặc bằng số nguyên dương n ( Với n được nhập). Yêu cầu nhập lại nếu n <=0

a. Hướng dẫn:

- Sử dụng kiến thức số lẻ đầu tiên bằng 1. Số lẻ sau bằng số trước cộng với 2.

- Cho biến i có giá trị ban đầu bằng 1.

- Dùng vòng lặp while do với điều kiện i < n và công việc bên trong là in i và tăng i lên 2.

b. Mã chương trình:

Program In_So_Le;

uses crt;

var i,n:integer;

begin

clrscr;

Repeat

write('Nhap so n: ');readln(n);

until n>0;

i:=1;

while i<=n do begin

write(i:3,', '); i:=i+2;

end;

readln end.

Nhận xét:

- Mọi vòng lặp For ... to ... do đều có thể thay thế bằng vòng lặp while ... do.

- Đoạn mã:

Repeat

write('Nhap so n: ');readln(n);

until n>0;

Dùng để kiểm tra, khống chế điều kiện của dữ liệu vào.

- Trong vòng lặp while nhất thiết phải có một câu lệnh làm thay đổi điều kiện lặp. Ở đây là i:=i+2. Nếu không có sẽ dẫn đến trường hợp lặp vô hạn. Chương trình chạy mãi mà không có lối ra (Không thoát ra khỏi vòng lặp được).

D- DỮ LIỆU KIỂU MẢNG (Một chiều) I. KHAI BÁO MẢNG

Cú pháp:

VAR Tên mảng : array[<chỉ số đầu>.. <chỉ số cuối>] of <kiểu dữ liệu>

- Trong đó chỉ số đầu và chỉ số cuối là hai số nguyên hoặc biểu thức nguyên - Thoả mãn chỉ số đầu ≤ chỉ số cuối và kiểu dữ liệu có thể là integer hoặc real.

Ví dụ:

(7)

VAR M: Array[1..100] of Integer;

C: Array[‘A’..’Z’] of byte;

Trong đó chỉ số có kiểu vô hướng đếm được (như: nguyên, kí tự ...) II. QUẢN LÝ MỘT MẢNG:

- Để quản ly một dãy cần hai biến nguyên và một biến mảng. Một biến kiểu nguyên để lưu số phần tử của dãy, một biến nguyên khác để lưu chỉ số và một biến mảng để lưu giá trị các phần tử của dãy.

- Để truy cập đến phần tử thứ i trong mảng A, ta sử dụng cú pháp: A[i].

- Có thể sử dụng các lệnh READ(LN) /WRITE(LN) để đọc và in dữ liệu đối với các phần tử của biến kiểu mảng.

Bài tâp: 1/Viết chương trình cho phép nhập n số và in ra theo thứ tự ngược lại. Ví dụ nhập 3, 5, 7 thì in ra 7, 5, 3.

Program mang_1;

uses crt;

var n, i: integer;

M: array[1..100] of real;

Begin

write('Nhap so n: ');readln(n);

for i:=1 to n do Begin

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

end;

for i:= n downto 1 do write(m[i],’ ,’);

readln end.

2/ Viết chương trình nhập n số, xoá số thứ k trong n số vừa nhập.In ra n-1 số còn lại.

n= 10 (Nhập 10 phần tử)

Ví dụ: Nhập 2, 3, 4, 5, 6, 8, 7, 6, 5, 4.

k= 8 (Xoá phần tử thứ 8).

In ra: 2, 3, 4, 5, 6, 8, 7, 5, 4.

a. Hướng dẫn:

Xoá phần tử k bằng cách ghi đè phần tử thứ k+1 lên nó.

Program Xoa_mang;

uses crt;

var m:array[1..100] of integer;

n,i,k:byte;

begin

Write('So phan tu cua day: ');readln(n);

for i:=1 to n do Begin

write('M[',i,']=');

readln(M[i]);

end;

write('Nhap phan tu can xoa: ');readln(k);

for i:=k to n-1 do m[i]:=m[i+1];

for i:=1 to n-1 do write(m[i],', ');

readln end.

CHƯƠNG TRÌNH CON: THỦ TỤC VÀ HÀM I. 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 đó.

(8)

 Hàm (FUNCTION): Trả về một giá trị nào đó (có kiểu vô hướng, kiểu string). 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, Var]

BEGIN

...

END;

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

[Khai báo Const, 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).

- 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.

CÁC HÀM XỬ LÍ TRONG PASCAL:

A/ Các hàm xử lí số :

1/ SQR(n): Trả về bình phương của n (VD: n = 25 à SQR(n) = 625) 2/ SQRT(n): Trả về căn bậc hai của n (n≥0) (VD: n = 25 à SQRT(n) = 5) 3/ ABS(n): Trả về giá trị tuyệt đối của n (VD: n = -25 à ABS(n) = 25) 4/ EXP(n): Trả về e mũ n (VD: n = 2 à EXP(n) = e2)

5/ TRUNC(n): Trả về phần nguyên của n (n Î Q).(VD: n = 3,24 à TRUNC(n) = 3) 6/ INT(n): Trả về phần nguyên của n (n Î R) (VD: n = 2/3 à INT(n) = 1)

(9)

7/ ROUND(n): Làm tròn số n cho số nguyên gần n nhất (VD: n = 3,52 à ROUND(n)= 4

8/ ODD(n): Cho giá trị TRUE nếu n là số lẻ. (VD: n = 23, m = 24 à ODD(n) = TRUE, ODD(m)

= FALSE)

9/ INC(n): Tăng n thêm 1 đơn vị (n:=n+1). (VD: n = 5 à INC(n) = 6 hoặc INC(n,4) = 9) 10/ DEC(n): Giảm n đi 1 đơn vị (n:=n-1). (VD:n=5àDEC(n)=4 hoặc DEC(n,3)= 2) B/ Các hàm xử lí xâu:

1/ INSERT(S1,S2,vt): Chèn xâu S1 vào xâu S2 bắt đầu từ vị trí vt.

VD: S = ‘Song Hong’ à Insert(S, 5, ‘12’) = ‘Song12 Hong’

2/ DELETE(S,vt,n): Xoá n kí tự của xâu S bắt đầu từ vị trí vt VD: S = ‘Song Hong’ à Delete(S, 1, 5) = ‘Hong’

3/ UPCASE(ch): Chuyển kí tự ch thành chữ hoa VD: Ch = ‘a’à UPCase(ch) = ‘A’

4/ POS(S1,S2):Cho vị trí xuất hiện đầu tiên của xâu S1 trong xâu S2 VD: S1= ‘n’; S2 = ‘Song Hong’ àPos(S1, S2) = 3

5/ LENGTH(S):Cho giá trị là độ dài của xâu S VD: S = ‘Song Hong’ àLength(S) = 9

6/ COPY(S,vt,n): Tạo xâu gồm n kí tự bắt đầu từ vị trí vt của xâu S VD: S = ‘Song Hong’ à Copy(S, 6, 3)= ‘Hon’

7/ CONCAT(S1,S2): Nối chuỗi S1 và S2

VD: S1 = ‘Song’; S2 = ‘Hong’ àCONCAT(S1,S2)=“SongHong’ hoặc S = S1 + S2 8/ VAL(ch, so, code): Đổi chuỗi (ch) sang dạng số (so)

VD: ch = ‘1234’ à VAL(ch,so,code) = 1234 (khi đó code = 0) ch = ‘12a4’ à VAL(ch,so,code) bị lỗi (khi đó code = 3) 9/ STR(so,S): Đổi giá trị số (so) sang dạng chuỗi (S)

VD: so = 1234 à STR(so, S) = ‘1234’

C/ Các hàm xử lí kí tự:

1/ ORD(ch): Trả về số thứ tự trong bảng mã ASCII của ký tự ch.

VD: ch = ‘A’ à ORD(ch)=65.

2/ CHR(n): Trả về ký tự tương ứng trong bảng mã ASCII.

VD: n = 65 à CHR(n) = ‘A’.

3/ PRED(ch): cho ký tự đứng trước ký tự ch. VD: ch = ‘B’ à PRED(ch) = ‘A’.

4/ SUCC(ch): cho ký tự đứng sau ký tự ch. VD: ch = ‘A’ à SUCC(ch) = ‘B’.

Bảng mã ASCII :

Kí tự Kí tự Kí tự Kí tự

0 NUI 32 SPACE 64 @ 96 .

1 SOH 33 ! 65 A 97 a

2 STX 34 .. 66 B 98 b

3 ETX 35 # 67 C 99 c

4 EOT 36 $ 68 D 100 d

5 ENQ 37 % 69 E 101 e

6 ACK 38 & 70 F 102 f

7 BEL 39 71 G 103 g

8 BS 40 ( 72 H 104 h

9 HT 41 ) 73 I 105 i

10 LF 42 74 J 106 j

11 VT 43 + 75 K 107 k

12 FF 44 , 76 L 108 l

(10)

13 CR 45 - 77 M 109 m

14 SO 46 . 78 N 110 n

15 SI 47 / 79 O 111 o

16 DLE 48 0 80 P 112 p

17 DC1 49 1 81 Q 113 q

18 DC2 50 2 82 R 114 r

19 DC3 51 3 83 S 115 s

20 DC4 52 4 84 T 116 t

21 NAK 53 5 85 U 117 u

22 SYN 54 6 86 V 118 W

23 ETB 55 7 87 W 119 v

24 CAN 56 8 88 X 120 x

25 EM 57 9 89 Y 121 y

26 SUB 58 : 90 Z 122 z

27 ESC 59 ; 91 ] 123 {

28 FS 60 < 92 \ 124 |

29 GS 61 = 93 [ 125 }

30 RS 62 > 94 ^ 126 ~

31 US 63 ? 95 _ 127 DEL

MỘT SỐ LỖI CÚ PHÁP THƯỜNG GẶP CỦA PASCAL

1.Lỗi cú pháp : Là những lỗi phát sinh do lập trình viên viết sai những quy định về văn phạm của hệ thống hoặc ngôn ngữ.

2.Xử lý lỗi : Lỗi cú pháp được phát hiện trong quá trình dịch. Turbo Pascal báo lỗi cú pháp theo nguyên tắc "Mỗi lần chỉ báo một lỗi". Nếu gặp lỗi, ta cần trở về chế độ soạn thảo, tìm vị trí xuất hiện lỗi, sửa lại lỗi đó rồi dịch lại chương trình.

3.Các thông báo lỗi thường gặp và gợi ý khắc phục :

Lỗi 2: Identifier expected: Mong gặp định danh (có thể do chưa khai báo biến, hằng…)

Lỗi 3: Unknown identifier: Định danh chưa được khai báo. Hãy khai báo định danh này ở đầu thủ tục hoặc chương trình (có thể do sai chính tả một tên, từ khoá nào đó)

Lỗi 4:. Duplicate identifier: định danh được khai báo 2 lần trở lên.

Lỗi 5: Syntax error: Lỗi cú pháp. Gặp một ký tự sai hoặc viết sai một hằng.

Lỗi 6: Error in real constant: Viết sai hằng thực.

Lỗi 7: Error in integer constant: Viết sai hằng nguyên.

Lỗi 8: String constant exceeds line: Giá trị của xâu ký tự quá dài, xem lại có thiếu dấu đóng/mở (dấu nháy đơn) hằng văn bản không?

Lỗi 10: Unexpected end of file: Cần gặp dấu kết tệp. Lỗi 10 có thể xuất hiện trong các trường hợp sau:

+ Trong chương trình các cặp BIGIN và END không cân đối.

+ Tệp khác được gọi lồng tại một vị trí không hợp lệ.

+ Chú thích chưa được đóng bằng dấu } hoặc * ).

Lỗi 11: Line too long: Dòng dài quá. Bộ soạn thảo cho phép phát sinh các dòng dài tối đa 249 ký tự trong khi khi chương trình dịch chỉ làm việc với các dòng dài tối đa 126 ký tự.

(11)

Lời khuyên: Không nên viết các dòng dài quá 60 ký tự.

Lỗi 12: Type identifier expected: Cần có định danh kiểu

Lỗi 20: Variable identifier expected: Cần một định danh cho biến.

Lỗi 25: Invalid string length: Chiều dài xâu không hợp lệ. Chiều dài hợp lệ nằm trong khoảng 0 ..

255.

Lỗi 26: TYPE mismatch: Kiểu không tương thích. Các nguyên nhân sinh lỗi có thể do biểu thức được gán cho biến không đúng kiểu.

Lỗi 29: Ordinal type expected: Cần một kiểu thức bậc. Trong trường hợp này không được dùng các kiểu Real, string, Record, PROCEDURE hoặc pointer.

Lỗi 30: Integer constant expected: Cần một hằng nguyên Lỗi 31: Constant expected: Cần một hằng

Lỗi 33: Type identifier expected: Cần một định danh kiểu Lỗi 36: BEGIN expected: Thiếu BEGIN

Lỗi 37: END expected: Thiếu END

Lỗi 38: Integer expression expexted: Cần biểu thức nguyên Lỗi 39: Ordinal expression expected: Cần biểu thức thứ bậc

Lỗi 40:. Boolean expression expected: Cần biểu thức kiểu BOOLEAN

Lỗi 41: Operand types do not match operator: Kiểu toán hạng không phù hợp với toán tử

Lỗi 42: Error in expression: Biểu thức sai. Thường gặp trường hợp sử dụng ký tự lạ hoặc quên viết dấu phép toán trong biểu thức.

Lỗi 43: Illegal assigment: Gán không hợp lệ. Không được gán trị cho biến tệp hoặc biến không định kiểu. Không được gán trị cho định danh hàm ở ngoài thân của hàm đó.

Lỗi 44: Field identifier expected: Cần một định danh thường. Lỗi phát sinh khi sử dụng bản ghi (RECORD) không có trường hợp đi kèm.

Lỗi 54: OF expected: Thiếu OF trong TYPE, CASE, FILE, SET, ARRAY Lỗi 57: THEN expected: Thiếu THEN trong IF

Lỗi 58: TO or DOWN TO expected: Thiếu To hoặc DOWN TO trong FOR Lỗi 66: String variable expected: Cần một biến string.

Lỗi 67: String expression expected; Cần một biểu thức string.

Lỗi 74: Constant and case types do not match: Kiểu hằng và kiểu biểu thức trong CASE không phù hợp với nhau.

Lỗi 75: Record variable expected: Cần một biến kiểu RECORD.

Lỗi 76: Constant out of range: Hằng vượt quá miền. Lỗi có thể gặp trong các tình huống sau:

- Chỉ dẫn mảng vượt ra ngoài giới hạn của mảng

- Gọi thủ tục và hàm với các tham trị cụ thể vượt ra ngoài giới hạn đã khai báo.

Lỗi 79: Integer or Real expssion expected: Cần một biểu thức kiểu INTEGER hoặc REAL.

Lỗi 85: ";" expected: Cần có dấu chấm phẩy.

Lỗi 86: ": " expected: Cần có dấu hai chấm.

Lỗi 87: " , " expected: Cần có dấu phảy

Lỗi 88: " ( " expected: Cần có dấu mở ngoặc đơn Lỗi 89: " ) " expected: Cần có dấu đóng ngoặc đơn Lỗi 99: " = " expected: Cần có dấu bằng.

(12)

Lỗi 91: ":= "expected: Cần dấu gán

Lỗi 92: " [ " or " (. " expected: Cần mở dấu ngoặc vuông khi khai báo hoặc chỉ định phần tử của mảng, tập.

Lỗi 93: " ] " or " .) " expected: Cần dấu đóng ngoặc vuông khi khai báo hoặc chỉ định phần tử của mảng hoặc tập.

Lỗi 94: " ." expected: Cần dấu chấm khi chỉ định một trường trong bản ghi Lỗi 95: " .." expected: Cần dấu nhiều chấm khi liệt kê giới hạn mảng, tập.

Lỗi 98: Integer variable expected: Cần biến nguyên.

Lỗi 100: String. length, mismatch: Chiều dài xâu không phù hợp với số lượng các phần tử của mảng ký tự.

Lỗi 102: String constant expected: Cần một hằng kiểu xu.

Lỗi 103: Integer or real variable expected: Cần biến nguyên hoặc thực (biến số).

Lỗi 104: Ordinal variable expected: Cần biến (kiểu) thứ tự.

Lỗi 106: Character expressionexpected: Cần biểu thức kiểu ký tự.

Lỗi 112: CASE constant out of range: Hằng của toán tử CASE không nằm trong giới hạn.

Lỗi 113: Error in statement: Câu lệnh sai. Lỗi không sảy ra khi viết sai kí tự đầu tiên của câu lệnh.

Lỗi 200: Division by zero: Chia cho số 0. (Lỗi khi chạy chương trình)

* Phương pháp học giỏi môn tin học Pascal dành cho học sinh phổ thông

Đừng sợ cú pháp các câu lệnh

Một số cú pháp và cấu trúc cần học và nhớ, nếu cần thêm có thể tham khảo ở các tài liệu, nhưng chỉ cần chừng này từ khóa thôi là đủ để viết hầu hết các bài tập pascal rồi.

Một số hàm thường dùng:

ClrScr: lệnh xóa màn hình;

Write, Writeln: ghi ra màn hình Read, readln: đọc giá trị vào biến Các phép toán thường dùng:

Phép cộng (+); Phép trừ (-); Phép nhân (*); phép chia (/);

Phép chia lấy phần nguyên (div); phép chia lấy phần dư(mod); Phép gán (:=),

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

Một số kiểu dữ liệu thường dùng: Interger, real, string, char, array, Boolean … Các câu lệnh sử dụng thường xuyên

+ Lệnh ghép : BEGIN .. END

+ Lệnh điều kiện : IF .. THEN .. ELSE

(13)

CASE .. OF . + Lệnh lặp : FOR .. TO .. DO REPEAT .. UNTIL WHILE .. DO

Chúng ta thấy rằng cũng không có quá nhiều cấu trúc và cú pháp cần phải nhớ đúng không nào.

Gặp những lỗi về cú pháp thì rất dễ sửa, chương trình biên dịch Pascal sẽ báo cho ta chính xác lỗi gì? ở đâu? khi chúng ta chạy chương trình. Cho nên các em không nên tập trung nhiều vào cú pháp ngôn ngữ lập trình mà tập trung nhiều vào tìm thuật toán, tức là tìm tuần tự các bước để giải bài toán. Vì khi chúng ta đã tìm ra được thuật toán rồi thì việc chuyển nó thành chương trình máy tính sẽ không còn gì khó khăn nữa.

Bài viết ngày mai sẽ viết rõ hơn về học cách tư duy tìm thuật toán để giải quyết những bài tập tin học.

Các em nhớ đón đọc nhé.

Tài liệu tham khảo

Tài liệu liên quan

Viết chương trình sử dụng biến mảng để nhập từ bàn phím các phần tử của một dãy số, độ dài của dãy cũng được nhập từ bàn phím.c. Nếu điều kiện sai, câu lệnh sẽ bị bỏ

Tính cạnh góc vuông còn lại và cho biết có phải là tam giác vuông cân hay không..

Viết các tam giác này theo thứ tự các đỉnh tương ứng và giải thích rõ vì sao chúng đồng dạng?.

Muốn biến Max lưu giá trị lớn nhất của mảng A thì cần khai báo biến Max kiểu gì

Hình ảnh trong chế độ đồ họa được tạo ra bằng các điểm ảnh (Pixel), số điểm ảnh của màn hình đồ họa tùy thuộc vào từng loại CARD màn hình và MODE qui định cho màn

Bất kể máy tính của bạn gặp loại trục trặc nào, vài người sẽ khuyên bạn định dạng (format) lại đĩa cứng, cài đặt lại Windows và các trình ứng dụng, sau đó phục hồi các

Hình ảnh trong chế độ đồ họa được tạo ra bằng các điểm ảnh (Pixel), số điểm ảnh của màn hình đồ họa tùy thuộc vào từng loại CARD màn hình và MODE qui định cho màn

Thanh công cụ cấu trúc (Structure toolbar) chủ yếu thể hiện các cách vẽ các liên kết, góc xoay, dấu, cân bằng, tính toán trong công thức cấu tạo hoặc phản ứng hóa