I. CÁC kiểu dữ liệu cơ BẢn kiểu logic Từ khóa: boolean



tải về 209.28 Kb.
Chuyển đổi dữ liệu21.12.2018
Kích209.28 Kb.

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

- 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 = ;

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> : ;

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 (:=): :=;

- 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( [, ,...]);

(2) WRITELN( [, ,...]);

(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áchcó 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);



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( [,,...,]);

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)



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 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 := TO 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 :=< 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;

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 ;

+ 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

;

;

.........

;

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

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[.. ] of

- 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ụ:


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 l‎y 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 đó.

  • 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ố)]:;

[Khai báo Const, Var]

BEGIN

..............



HAM:=;

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)

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

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

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.

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

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


Поделитесь с Вашими друзьями:


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

    Quê hương