Tải bản đầy đủ (.docx) (13 trang)

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

Bạn đang xem bản rút gọn của tài liệu. Xem và tải ngay bản đầy đủ của tài liệu tại đây (300.86 KB, 13 trang )

<span class='text_page_counter'>(1)</span><div class='page_container' data-page=1>

<b>A-CÁC KIỂU DỮ LIỆU CƠ BẢN</b>


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


<b>1. Kiểu logic</b>


- Từ khóa: <b>BOOLEAN</b>


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


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


<b>A</b> <b>B</b> <b>A AND B</b> <b>A OR B</b> <b>A XOR B</b> <b>NOT A</b>


TRUE TRUE TRUE TRUE FALSE FALSE


TRUE FALSE FALSE TRUE TRUE FALSE


FALSE TRUE FALSE TRUE TRUE TRUE


FALSE FALSE FALSE FALSE FALSE TRUE


<b>2. Kiểu số nguyên</b>
<i><b>2.1. Các kiểu số nguyên</b></i>


<b>Tên kiểu</b> <b>Phạm vi</b> <b>Dung lượng</b>



Byte 0  255 1 byte


Integer -32768  32767 2 byte


Word 0  65535 2 byte


LongInt -2147483648  2147483647 4 byte
<i><b>2.2. Các phép toán trên kiểu số nguyên</b></i>


<i>2.2.1. Các phép toán số học:</i>


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


Phép chia lấy phần nguyên: <b>DIV</b> (Ví dụ : 34 DIV 5 = 6).
Phép chia lấy số dư: <b>MOD</b> (Ví dụ: 34 MOD 5 = 4).
<b>3. Kiểu số thực</b>


<i><b>3.1. Các kiểu số thực:</b></i>


<b>Tên kiểu</b> <b>Phạm vi</b> <b>Dung lượng</b>


Single 1.510-45 3.410+38 4 byte
Real 2.910-39 1.710+38 6 byte
<i><b>3.2. Các phép toán trên kiểu số thực:</b></i> <b>+, -, *, /</b>


<i><b>Chú ý: </b>Trên kiểu số thực khơng tồn tại các phép tốn DIV và MOD.</i>
<b>4. Kiểu ký tự</b>


- Từ khoá: <b>CHAR</b>.
- 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 tốn: =, >, >=, <, <=,<>.


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


- <b>UPCASE(ch)</b>: Trả về ký tự in hoa tương ứng với ký tự ch. Ví dụ: UPCASE('a') = 'A'.
- <b>ORD(ch)</b>: Trả về số thứ tự trong bảng mã ASCII của ký tự ch. Ví dụ ORD('A')=65.


</div>
<span class='text_page_counter'>(2)</span><div class='page_container' data-page=2>

- <b>PRED(ch)</b>: cho ký tự đứng trước ký tự ch. Ví dụ: PRED('B')='A'.
- <b>SUCC(ch)</b>: cho ký tự đứng sau ký tự ch. Ví dụ: SUCC('A')='B'.
<b>II. KHAI BÁO HẰNG</b>


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


<b> CONST <Tên hằng> = <Giá trị>;</b>
<b>III. KHAI BÁO BIẾN</b>


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


<b>VAR < DS Tên biến> : <Kiểu dữ liệu>;</b>
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}
<b>IV. BIỂU THỨC</b>


Biểu thức là cơng thức tính tốn mà trong đó bao gồm các phép tố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
<b>V. CÂU LỆNH</b>


<b>6.1. Câu lệnh đơn giản</b>


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


- Các lệnh xuất nhập dữ liệu: <b>READ/READLN, WRITE/WRITELN.</b>
- Lời gọi hàm, thủ tục.


<b>6.2. Câu lệnh có cấu trúc</b>


- Câu lệnh ghép: <b>BEGIN ... END;</b>



- Các cấu trúc điều khiển: <b>IF.., CASE..., FOR..., REPEAT..., WHILE...</b>
<b>6.3. Các lệnh xuất nhập dữ liệu</b>


<i><b>6.3.1. Lệnh xuất dữ liệu</b></i>


Để xuất dữ liệu ra màn hình, ta sử dụng ba dạng sau:
<b>(1)</b> <b>WRITE(<tham số 1> [, <tham số 2>,...]);</b>
<b>(2)</b> <b>WRITELN(<tham số 1> [, <tham số 2>,...]);</b>
<b>(3)</b> <b>WRITELN;</b>


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



</div>
<span class='text_page_counter'>(3)</span><div class='page_container' data-page=3>

<b>Câu lệnh</b> <b>Kết quả trên màn hình</b>
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


<i><b>6.3.2. Nhập dữ liệu</b></i>


Để 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:


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


<b>Chú ý</b>: Khi gặp câu lệnh <b>READLN;</b> (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> B-CÂU LỆNH ĐIỀU KIỆN (CẤU TRÚC RẼ NHÁNH)</b>



</div>
<span class='text_page_counter'>(4)</span><div class='page_container' data-page=4>

<b>Dạng 1</b> <b>Dạng 2</b>
<b>CASE B OF</b>


<b>Const 1: S1;</b>
<b>Const 2: S2;</b>
<b>...</b>


<b>Const n: Sn;</b>
<b>END;</b>


<b>CASE B OF</b>
<b>Const 1: S1;</b>
<b>Const 2: S2;</b>
<b>...</b>


<b>Const n: Sn;</b>
<b>ELSE Sn+1;</b>


<b>END;</b>
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> C- CÂU LỆNH LẶP</b>
<b>1. Vịng lặp với số lần biết trước.</b>


Có hai dạng sau:




<i><b>Dạng tiến</b></i> <i>: FOR <biến đếm>:=<giá trị đầu> TO <giá trị cuối> DO câu lệnh;</i>
+ 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ì thốt ra khỏi vịng lặp.


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


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


 <i>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</i>
<i>kiểm sốt được biến đếm.</i>



 <i>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</i>
<i>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.</i>


<b>Bài tập :</b>


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


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.


<b> </b>


<b> 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</b>
<b>in trên một dòng.</b>


</div>
<span class='text_page_counter'>(5)</span><div class='page_container' data-page=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.


<b>3 /Một số có tổng các ước nhỏ hơn nó bằng chính nó được gọi là số hồn chỉnh.</b>
<b>Ví dụ: 6 có các ước nhỏ hơn nó là 1, 2, 3. Tổng là 1 + 2 + 3 = 6.</b>


<b>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ố hồn chỉnh không.</b>


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.


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


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.
<b> a. Lệnh While.. Do ;</b>


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

+ 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>b. Lệnh Repeat.. Until ;</b>
<i><b>* Cú pháp:</b></i>


</div>
<span class='text_page_counter'>(6)</span><div class='page_container' data-page=6>

<i> <Lệnh 1>;</i>
<i> <Lệnh 2>;</i>
<i> ...</i>
<i> <Lệnh n>;</i>


<i><b> UNTIL</b> < Biểu thức logic >;</i>
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 <
<i>Biểu thức logic > nhận giá trị TRUE thì máy thốt khỏi vòng lặp. Như vậy, các</i>


<i>lệnh nằm giữa REPEAT... UNTIL được thực hiện ít nhất một lần.</i>


Chú ý:


- Các lệnh nằm giữa REPEAT và UNTIL khơng có từ khố Begin và 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
<i>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</i>
ngừng dẫn đến treo máy.


<b>Bài tập :</b>


<b>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 </b>
<b>lại nếu n <=0</b>


<i><b>a. Hướng dẫn: </b></i>


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


<b>Nhận xét: </b>


- 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 thốt ra khỏi vòng lặp được).


<b> D- DỮ LIỆU KIỂU MẢNG (Một chiều)</b>


<b>I. KHAI BÁO MẢNG</b>
Cú pháp:


</div>
<span class='text_page_counter'>(7)</span><div class='page_container' data-page=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ự ...)
<b>II. QUẢN LÝ MỘT MẢNG:</b>


- Để 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 <b>READ(LN) /WRITE(LN)</b> để đọc và in dữ liệu đối với các phần tử của biến
kiểu mảng.


<b>Bài tâp:</b> 1/<b>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 </b>
<b>ra 7, 5, 3.</b>


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/ <b>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.</b>
<b>n= 10 (Nhập 10 phần tử)</b>


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.
<i><b>a. Hướng dẫn:</b></i>


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.


<b>CHƯƠNG TRÌNH CON: THỦ TỤC VÀ HÀM</b>
<b>I. KHÁI NIỆM VỀ CHƯƠNG TRÌNH CON</b>


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:


</div>
<span class='text_page_counter'>(8)</span><div class='page_container' data-page=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.


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



<b>II. CẤU TRÚC CHUNG CỦA MỘT CHƯƠNG TRÌNH CĨ SỬ DỤNG CTC</b>
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.


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


<b>Dùng hàm</b> <b>Dùng thủ tục</b>


- Kết quả của bài toán trả về 1 giá trị duy
<i><b>nhất (kiểu vô hướng, kiểu string).</b></i>


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


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


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


 <b>CÁC HÀM XỬ LÍ TRONG PASCAL</b>:


<i><b>A/ Các hàm xử lí số</b><b>:</b><b> </b></i>


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


<b>4/ EXP(n):</b> Trả về e mũ n (VD: n = 2 à EXP(n) = e2<sub>)</sub>


<b>5/ TRUNC(n):</b> Trả về phần nguyên của n (n Ỵ Q).(VD: n = 3,24 à TRUNC(n) = 3)


</div>
<span class='text_page_counter'>(9)</span><div class='page_container' data-page=9>

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


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


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


<b>1/ INSERT(S1,S2,vt):</b> 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’
<b>2/ DELETE(S,vt,n):</b> Xố n kí tự của xâu S bắt đầu từ vị trí vt
VD: S = ‘Song Hong’ à Delete(S, 1, 5) = ‘Hong’
<b>3/ UPCASE(ch):</b> Chuyển kí tự ch thành chữ hoa


VD: Ch = ‘a’à UPCase(ch) = ‘A’


<b>4/ POS(S1,S2):</b>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


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


<b>6/ COPY(S,vt,n):</b> 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’



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


VD: S1 = ‘Song’; S2 = ‘Hong’ àCONCAT(S1,S2)=“SongHong’ hoặc S = S1 + S2
<b>8/ VAL(ch, so, code)</b>: Đổ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)
<b>9/ STR(so,S):</b> Đổi giá trị số (so) sang dạng chuỗi (S)


VD: so = 1234 à STR(so, S) = ‘1234’
<i><b>C/ Các hàm xử lí kí tự:</b></i>


<b>1/ ORD(ch):</b> Trả về số thứ tự trong bảng mã ASCII của ký tự ch.
VD: ch = ‘A’ à ORD(ch)=65.


<b>2/ CHR(n):</b> Trả về ký tự tương ứng trong bảng mã ASCII.
VD: n = 65 à CHR(n) = ‘A’.


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


 <i><b>Bảng mã ASCII</b><b> :</b></i>


<b>Mã</b> <b>Kí tự</b> <b>Mã</b> <b>Kí tự</b> <b>Mã</b> <b>Kí tự</b> <b>Mã</b> <b>Kí tự</b>


0 <b>NUI</b> 32 <b>SPACE</b> 64 <b>@</b> 96 <b>.</b>


1 <b>SOH</b> 33 <b>!</b> 65 <b>A</b> 97 <b>a</b>


2 <b>STX</b> 34 <b>..</b> 66 <b>B</b> 98 <b>b</b>



3 <b>ETX</b> 35 <b>#</b> 67 <b>C</b> 99 <b>c</b>


4 <b>EOT</b> 36 <b>$</b> 68 <b>D</b> 100 <b>d</b>


5 <b>ENQ</b> 37 <b>%</b> 69 <b>E</b> 101 <b>e</b>


6 <b>ACK</b> 38 <b>&</b> 70 <b>F</b> 102 <b>f</b>


7 <b>BEL</b> 39 <b>’</b> 71 <b>G</b> 103 <b>g</b>


8 <b>BS</b> 40 <b>(</b> 72 <b>H</b> 104 <b>h</b>


9 <b>HT</b> 41 <b>)</b> 73 <b>I</b> 105 <b>i</b>


10 <b>LF</b> 42 <b>≠</b> 74 <b>J</b> 106 <b>j</b>


11 <b>VT</b> 43 <b>+</b> 75 <b>K</b> 107 <b>k</b>


</div>
<span class='text_page_counter'>(10)</span><div class='page_container' data-page=10>

13 <b>CR</b> 45 <b>-</b> 77 <b>M</b> 109 <b>m</b>


14 <b>SO</b> 46 <b>.</b> 78 <b>N</b> 110 <b>n</b>


15 <b>SI</b> 47 <b>/</b> 79 <b>O</b> 111 <b>o</b>


16 <b>DLE</b> 48 <b>0</b> 80 <b>P</b> 112 <b>p</b>


17 <b>DC1</b> 49 <b>1</b> 81 <b>Q</b> 113 <b>q</b>


18 <b>DC2</b> 50 <b>2</b> 82 <b>R</b> 114 <b>r</b>



19 <b>DC3</b> 51 <b>3</b> 83 <b>S</b> 115 <b>s</b>


20 <b>DC4</b> 52 <b>4</b> 84 <b>T</b> 116 <b>t</b>


21 <b>NAK</b> 53 <b>5</b> 85 <b>U</b> 117 <b>u</b>


22 <b>SYN</b> 54 <b>6</b> 86 <b>V</b> uploa


d.123
doc.ne


t


<b>W</b>


23 <b>ETB</b> 55 <b>7</b> 87 <b>W</b> 119 <b>v</b>


24 <b>CAN</b> 56 <b>8</b> 88 <b>X</b> 120 <b>x</b>


25 <b>EM</b> 57 <b>9</b> 89 <b>Y</b> 121 <b>y</b>


26 <b>SUB</b> 58 <b>:</b> 90 <b>Z</b> 122 <b>z</b>


27 <b>ESC</b> 59 <b>;</b> 91 <b>]</b> 123 <b>{</b>


28 <b>FS</b> 60 <b><</b> 92 <b>\</b> 124 |


29 <b>GS</b> 61 <b>=</b> 93 <b>[</b> 125 <b>}</b>



30 <b>RS</b> 62 <b>></b> 94 <b>^</b> 126 <b>~</b>


31 <b>US</b> 63 <b>?</b> 95 <b>_</b> 127 <b>DEL</b>


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


1.<b>Lỗi cú pháp</b>: 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.<b>Xử lý lỗi </b>: 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.<b>Các thơng báo lỗi thường gặp và gợi ý khắc phục </b>:<b> </b>


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


<b>Lỗi 3:</b> 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ừ khố nào đó)


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


<b>Lỗi 5:</b> Syntax error: Lỗi cú pháp. Gặp một ký tự sai hoặc viết sai một hằng.
<b>Lỗi 6:</b> Error in real constant: Viết sai hằng thực.


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


<b>Lỗi 8:</b> 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?



<b>Lỗi 10:</b> 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ệ.


</div>
<span class='text_page_counter'>(11)</span><div class='page_container' data-page=11>

<b>Lỗi 11:</b>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ự.


<i>Lời khun: Khơng nên viết các dịng dài q 60 ký tự.</i>
<b>Lỗi 12:</b>Type identifier expected: Cần có định danh kiểu


<b>Lỗi 2</b>0: Variable identifier expected: Cần một định danh cho biến.


<b>Lỗi 25:</b> 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.


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


<b>Lỗi 29</b>: 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.


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


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


<b>Lỗi 37:</b>END expected: Thiếu END



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


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


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


<b>Lỗi 42:</b> 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.


<b>Lỗi 43:</b> 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 ở ngồi thân của hàm đó.


<b>Lỗi 44:</b> 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.


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


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


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


<b>Lỗi 74:</b> 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.


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



<b>Lỗi 76:</b>Constant out of range: Hằng vượt q miền. Lỗi có thể gặp trong các tình huống sau:
<b> </b> - 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.


<b>Lỗi 79</b>: Integer or Real expssion expected: Cần một biểu thức kiểu INTEGER hoặc REAL.
<b>Lỗi 85</b>: ";" expected: Cần có dấu chấm phẩy.


<b>Lỗi 86</b>: ": " expected: Cần có dấu hai chấm.
<b>Lỗi 87</b>: " , " expected: Cần có dấu phảy


</div>
<span class='text_page_counter'>(12)</span><div class='page_container' data-page=12>

<b>Lỗi 89:</b>" ) " expected: Cần có dấu đóng ngoặc đơn
<b>Lỗi 99</b>: " = " expected: Cần có dấu bằng.


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


<b>Lỗi 92:</b> " [ " 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.


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


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


<b>Lỗi 100</b>: 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ự.


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



<b>Lỗi 103</b>: Integer or real variable expected: Cần biến nguyên hoặc thực (biến số).
<b>Lỗi 104</b>: Ordinal variable expected: Cần biến (kiểu) thứ tự.


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


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


<b>Lỗi 113:</b>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.
<b>Lỗi 200</b>: Division by zero: Chia cho số 0. (Lỗi khi chạy chương trình)


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



<b>Đừng sợ cú pháp các câu lệnh</b>


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.


<i><b>Một số hàm thường dùng:</b></i>
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
<i><b>Các phép tốn thường dùng:</b></i>


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


</div>
<span class='text_page_counter'>(13)</span><div class='page_container' data-page=13>

+ 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 tốn, tức là tìm tuần tự các bước để giải bài tốn. Vì khi
chúng ta đã tìm ra được thuật tố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.


</div>

<!--links-->

×