MỘT SỐ VẤN ĐỀ CƠ BẢN TRONG LẬP TRÌNH PASCAL

I. GIẢI THUẬT :

Tóm Tắt

1.  Khái niệm :

  • Giải thuật (còn gọi là thuật toán) là một tập hữu hạn các thao tác (các công việc, các phép toán…) có thể đặt tên được và chúng được thực hiện theo một trình tự thích hợp đối với một số đối tượng nào đó để đạt được điều mong muốn.

2.  Biểu diễn giải thuật :

Thông thường, người ta sử dụng một trong 4 cách sau để biểu diễn giải thuật :

  • Liệt kê : Là hình thức liệt kê từng bước bằng ngôn ngữ tự nhiên.
  • Lưu đồ : Là hình thức biểu diễn giải thuật dưới dạng sơ đồ.
  • Dùng ngôn ngữ lập trình.
  • Dùng ngôn ngữ mã giả.

II. CÁC PHÉP TOÁN CƠ BẢN – LỆNH GÁN :

1.  Các phép tính : + ; – ; * ; /  (chia cho thương là số thực); DIV (chia lấy phần nguyên); MOD (Chia lấy phần dư).

2.  Các phép so sánh : > ; < ;  =  ; <> ; >= ; <=

3.  Các phép Logic : AND (và); OR (hoặc); XOR (hoặc triệt tiêu); NOT (phủ định)

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

4.  Phép gán (Lệnh gán) : V := E;  {V là 1 biến, E là biểu thức. VD : X := -b/a; }

III. CÁC KHAI BÁO : (Thường theo thứ tự như sau)

1.  Khai báo tên chương trình :  PROGRAM <Tên chương trình>;

2.  Khai báo sử dụng đơn vị chương trình :  USES <DS đơn vị chương trình>;

3.  Khai báo nhãn : LABEL <Tên nhãn>;

4.  Khai báo hằng  :  CONST <tên hằng> = <Giá trị>;  VD : Const Pi=3.14;

5.  Khai báo kiểu dữ liệu mới : TYPE  <Tên kiểu DL mới>=Định nghĩa kiểu;

6.  Khai báo biến : VAR <DS biến 1> : <Kiểu DL 1>; <DS biến 2> : <Kiểu DL 2>;

7.  Khai báo thủ tục (một dạng chương trình con) :

          PROCEDURE <Tên thủ tục> (Các tham số nếu cần);

8.  Khai báo hàm (một dạng chương trình con) :

          FUNCTION <Tên hàm> (Các tham số nếu cần) : <Kiểu DL của hàm>;

  1. CÁC KIỂU DỮ LIỆU ĐƠN GIẢN :

Integer, Real, Char, String, Boolean, String, String [k], đoạn con, liệt kê…

  • Mở rộng kiểu số nguyên :

Từ khai báo
Phạm vi biểu diễn
Kích thước (Byte)

BYTE
0 .. 255
1

SHORTINT
-128 .. +128
1

INTEGER
-32768 .. 32767
2

WORD
0 .. 65535
2

LONGINT
-2147483648 .. 2147483647
4

Int64

  • Mở rộng kiểu số thực :

Từ khai báo
Phạm vi biểu diễn
Chữ số có nghĩa
Kích thước (Byte)

REAL
2.9E-39 .. 1.7E+38
11-12
6

SINGLE
1.5E- 45 .. 3.4E+38
7-8
4

DOUBLE
5.0E-324 .. 1.7E+308
15-16
8

EXTENDED
3.4E- 4951 .. 1.1E+4932
19-20
10

(Thông thường chỉ dùng kiểu Real. Muốn sử dụng các kiểu thực khác thì phải dùng hướng dẫn dịch {N+} ở đầu chương trình)

IV. CÁC THỦ TỤC CƠ BẢN CỦA PASCAL :

1.  Thủ tục nhập : READ

  • Read (DS biến); hoặc Readln (DS biến); {Nhập vào biến giá trị từ bàn phím}
  • Read (F, DS biến); hoặc Readln (F, DS biến); {Đọc từ tệp F vào DS biến}
  • Readln; {Chờ nhấn phím Enter}

 Thủ tục nhập đặc biệt: Readkey; {Cho kí tự khi gõ phím mà không cần nhấn Enter}

Hàm KeyPressed cho giá trị True nếu bàn phím có kí tự gõ, ngược lại có giá trị False.

2.  Thủ tục xuất : WRITE

  • Write (DS dữ liệu xuất); hoặc Writeln (DS dữ liệu xuất); {Xuất ra màn hình}
  • Write (n:d); hoặc Writeln (n:d); {Dành d vị trí để xuất biến nguyên}
  • Write (x:d:d1); hoặc Writeln (x:d:d1);

{Dành d vị trí để xuất biến thực với d1 kí số thập phân}

  • Write (F, DSDL xuất); hoặc Writeln (F, DSDL xuất);{Ghi dữ liệu vào tệp F}
  • Write (LST, DSDL xuất); hoặc Writeln (LST, DSDL xuất);{Xuất ra máy in}
  • Writeln; {Xuống dòng}
  • Write(#7); hoặc Write(Chr(7)); {Phát ra một tiếng chuông ở loa của máy}

3.  Các thủ tục điều khiển màn hình :

ClrScr; {Xóa mành hình}

ClrEol; {Xóa từ vị trí con trỏ tới cuốn dòng}

DelLine; {Xóa toàn bộ dòng chứa con trỏ, sau đó dồn các dòng dưới lên}

InsLine; {Xen một dòng trắng vào màn hình từ vị trí con trỏ}

Gotoxy (Cột, dòng); {Chuyển tới tọa độ cột, dòng}

Hàm WhreX cho giá trị cột hiện thời.  Hàm WhreY cho giá trị dòng hiện thời.

Textbackground (color) hoặc Textbackground (0 tới 15); {định màu nền}

TextColor (color) hoặc TextColor (số từ 0 tới 15); {định màu chữ}

4.  Một số thủ tục khác :

Goto Nhãn; {Nhảy vô điều kiện tới Nhãn trong chương trình}

Exit; {Ngừng thủ tục (thoát khỏi thủ tục)}

Halt; {Ngừng chương trình}

V. MỘT SỐ CẤU TRÚC ĐIỀU KHIỂN :

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

Dạng 1 : IF <Điều kiện> THEN <Câu lệnh>;

Dạng 2 : IF <Điều kiện> THEN <Câu lệnh 1>  ELSE <Câu lệnh 2>;

(Lưu ý : Trước ELSE của lệnh IF không được viết dấu chấm phẩy)

2.  Câu lệnh lựa chọn CASE :

Dạng 1
Dạng 2
CASE <Biểu thức> OF
CASE <Biểu thức> OF

<Giá trị 1> : <Câu lệnh 1>;
<Giá trị 1> : <Câu lệnh 1>;

<Giá trị 2> : <Câu lệnh 2>;
<Giá trị 2> : <Câu lệnh 2>;

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

<Giá trị n> : <Câu lệnh n>;
<Giá trị n> : <Câu lệnh n>;

END;
ELSE <Câu lệnh n+1>;

END;

(Lưu ý : CASE kết thúc bằng END; Trước ELSE của CASE được chấm phẩy )

3.  Điều khiển lặp FOR…TO/ FOR…DOWNTO :

Dạng 1 : FOR <Biến đếm> := <Trị đầu> TO <Trị cuối> DO <Câu lệnh>;

Dạng 2 : FOR <Biến đếm> := <Trị đầu> DOWNTO <Trị cuối> DO <Câu lệnh>;

4.  Điều khiển lặp REPEAT…UNTIL : Ngừng lặp khi <Điều kiện> ĐÚNG.

REPEAT

<Câu lệnh 1>;

<Câu lệnh 2>;

<Câu lệnh 3>;

<Câu lệnh n>;

UNTIL <Điều kiện>;

5.  Điều khiển lặp WHILE…DO : Ngừng lặp khi <Điều kiện> SAI.

WHILE Điều kiện DO Câu lệnh;

(Sau DO chỉ có 1 câu lệnh, do đó muốn lặp nhiều phát biểu ta phải dùng phát biểu ghép)

6.  Lệnh ghép : Ở những chỗ ta chỉ được sử dụng 1 câu lệnh, nhưng ta lại muốn sử dụng nhiều hơn 1 câu lệnh thì phải sử dụng lệnh ghép. Lệnh ghép có dạng :

BEGIN

<Câu lệnh 1>;

<Câu lệnh 2>;

<Câu lệnh 3>;

<Câu lệnh n>;

END;

VII. CÁCH ĐẶT TÊN TRONG PASCAL – TỪ KHÓA:

1.  Cách đặt tên trong Pascal (chương trình, biến, hằng, nhãn, thủ tục, hàm… ) :

Tên có thể được đặt bằng  một dãy bao gồm chữ cái, chữ số, dấu “_” (gạch nối dưới) nhưng bắt đầu của tên bắt buộc phải là một chữ cái. Tên không được có khoảng trắng và tên không được trùng với từ khóa.

2.  Từ khóa trong Pascal (Phải học thuộc lòng) :

And, Array, Begin, Case, Const, Div, Do, Downto, Else, End, File, For, Function, Goto, If, In, Label, Mod, Nil, Not, Of, Or, Packed, Procedure, Program, Record, Repeat, Set, String, Then, To, Type, Until, Uses, Var, While, With.

VIII. MỘT SỐ THỦ TỤC VÀ HÀM :

1.     Hàm xử lý số :

ABS (x) : .

SQR (x) : x2.

SQRT (x) : .

SUCC (n) : n+1.

PRED (n) : n-1.

TRUNC (x) : Lấy phần nguyên của x (bỏ phần thập phân).

ROUND (x) : Làm tròn x.

COS (x) : Cos x.

SIN (x) : Sin x.

ARTAN (x) : Arctg x.

EXP (b*LN(A))  : Ab.

INC(i) : i:=i+1;

DEC(i) : i:=i-1;

ORD (ch) : Cho thứ tự của kí tự ch trong bảng ASCII (VD : ORD (‘A’)=65, ORD (‘a’)=97).

CHR (i) : Cho kí tự có thứ tự là i trong bảng ASCII (VD : CHR (65) = ‘A’).

ODD (n) : Cho giá trị True nếu n là số lẻ.

SOUND(F) : tạo âm thanh tần số F tính theo Hz cho đến khi gặp lệnh OSOUND.

NOSOUND; : Ngừng thực hiện hàm SOUND.

DELAY (T) : tạo thời gian trể T tính theo đơn vị Mili giây (T là số nguyên).

READKEY; : Nhận một kí tự từ bàn phím không đưa ra màn hình và không cần gõ phím Enter. (VD : Ch := Readkey;)

WHEREX : Cho giá trị cột hiện thời của con trỏ.

WHEREY : Cho giá trị dòng hiện thời của con trỏ.

LENGTH (Chuỗi) : Cho độ dài thật của chuỗi.

<Chuỗi>[k] : cho kí tự thứ k trong chuỗi. Đặc biệt : Chuỗi [0]=Length(chuỗi).

VD : For i:=1 to length(st) do

If ord(st[i]) >= 97 then st[i] := chr(ord(st)-32);

{Duyệt chuỗi st để đổi chuỗi st bất kỳ thành chuỗi gồm toàn chữ in hoa}

LENGTH (S,P,N) : xóa trong chuỗi S đi N ký tự kể từ vị trí P.

POS (S1,S) : Tìm kiếm chuỗi S1 trong chuỗi S. (Hàm cho giá trị là vị trí đầu tiên)

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

  1. THỦ TỤC (PROCEDURE) VÀ HÀM (FUNCTION) :

1.  Xét ví dụ sau đây : Chương trình tính tổ hợp chập k của n phần tử.

 

Program Tinh_To_Hop_Chap_K_Cua_N_Phan_Tu;

Uses Crt;

Var n,k: Byte; Tohop : Real;

Procedure Nhap; {Thu tuc nhap du lieu}

Begin

     Clrscr;

     Write (‘Nhap n : ‘);

     Readln (n);

     Write (‘Nhap k : ‘);

     Readln (k);

End;

Function GT (x : Byte) : Longint; {Ham tinh giai thua}

Var i : Byte; k : Longint;

Begin

     i:=0;

     k:=1;

     While i<x do

           Begin

           i:=i+1;

           k:=k*i;

    End;

     GT:=k;

End;

Begin {Main Program}

Nhap; {Goi thu tuc nhap}

Tohop := GT(n)/(GT(k)*GT(n-k));

   {Dung ham GT(n) nhieu lan de tinh to hop chap k cua n phan tu}

Write(‘To hop chap ‘,k,’ cua ‘,n,’ phan tu la : ‘,Tohop:0:0);

Readln;

End. {Main Program}

  • Ta nhận thấy trong chương trình có 2 chương trình con là : Thủ tục Nhap và hàm GT. Các chương trình con này có thể gọi nhiều lần trong chương trình chính. Nếu không có hàm GT thì chương trình chính sẽ rất rườm rà vì phải viết 3 lần đoạn chương trình tính giai thừa rồi mới gán giá trị cho biến Tohop.


2.  Cách viết thủ tục và hàm :

  • Cách viết các chương trình con cũng gần giống như chương trình chính, cũng có thể có các phần khai báo (biến, hằng,…), thân thủ tục cũng trong cặp từ khóa Begin … End nhưng kết thúc bằng dấu chấm phẩy.

3.  Sự khác nhau giữa thủ tục và hàm :

  • Sự khác nhau cơ bản giũa thủ tục và hàm là ở chỗ : Hàm cho ta kết quả là một giá trị thông qua tên của nó, còn thủ tục thì chỉ thực hiện một khối thao tác mà không cho kết quả qua tên thủ tục.

KIỂU DỮ LIỆU CÓ CẤU TRÚC

  1. KIỂU MẢNG :

1.  Khai báo :

  • Cách 1 : TYPE <Kiểu mảng> = ARRAY [Chỉ số đầu .. Chỉ số cuối] OF <Kiểu phần tử>;

VAR <Biến mảng> : <Kiểu mảng>;

VD : TYPE  mangnguyen = ARRAY [1..10] OF Integer;

VAR A,B,C : mangnguyen;

  • Cách 2 : VAR <Biến mảng> : ARRAY [Kiểu chỉ dẫn] OF <Kiểu phần tử>;

VD : VAR  A,B,C : ARRAY [1..10] OF Integer;

2.  Truy nhập vào phần tử mảng :

<Tên mảng> [Chỉ số] {VD: Viết A[5] là truy nhập vào phần tử thứ 5 của mảng A;

3.  Duyệt mảng :

Dùng lệnh FOR duyệt qua từng phần tử của mảng để thao tác với phần tử.

VD : For i:=1 to 10 do    {Nhập dữ liệu vào mảng A}

Begin

Writeln (‘A[‘,i,’]=’);

Readln (A[i]);

End;

For i:=1 to 10 do Writeln {‘A[‘,i,’]=’,A[i]); {Viết mảng A ra màn hình}

For i:=1 to 10 do C[i]:=A[i]+B[i]; {Gán giá trị cho mảng C}

4.  Mảng nhiều chiều (còn gọi là ma trận) :

  • Mảng 2 chiều :

Var X,Y,Z : Array [1..3,1..5] Of Integer; {Mảng X,Y,Z gồm 3 hàng, 5 cột}

  • Duyệt để truy nhập vào phần tử mảng 2 chiều : Dùng 2 vòng FOR lồng nhau.

For i:=1 to 3 do

For j:=1 to 5 do

Z[I,J]:=X[I,J]+Y[I,J];

Căn cứ vào cách khai báo và sử dụng mảng 1 chiều, mảng 2 chiếu, chúng ta có thể xây dựng mảng n chiều.

Share this:

Thích bài này:

Thích

Đang tải…