Giới thiệu về pascal
I,Đôi nét về pascal:
Pascal là tên của một trong các ngôn ngữ lập trình cấp cao thông dụng. Ngôn ngữ lập trình Pascal được giáo sư Niklaus Wirth ở trường Ðại học Kỹ thuật Zurich (Thụy sĩ) thiết kế và công bố vào năm 1970. Niklaus Wirth đặt tên cho ngôn ngữ này là Pascal để tưởng nhớ đến nhà Toán học và Triết học Pháp ở thế kỷ 17 là Blaise Pascal, người đã phát minh ra một máy tính cơ khí đơn giản đầu tiên của con người.



Blaise Pascal
Niklaus Wirth
Ban đầu, Pascal là một ngôn ngữ được hướng để dùng trong giảng dạy về lập trình có cấu trúc, và nhiều thế hệ sinh viên đã "vào đời" thông qua việc học Pascal như ngôn ngữ vỡ lòng trong các chương trình học đại cương. Nhiều biến thể của Pascal ngày nay vẫn còn được sử dụng khá phổ biến, cả trong giảng dạy lẫn trong công nghiệp phát triển phần mềm.
Ngôn ngữ Pascal được dùng hiện nay có nhiều điểm khác biệt với chuẩn Pascal nguyên thủy của Giáo sư Wirth. Tùy theo quốc gia hoặc công ty đã phát triển cho ra đời các chương trình biên dịch ngôn ngữ Pascal như:

· ISO PASCAL (International Standards Organization) của Châu Âu

· ANSI PASCAL (American National Standards Institute) của Mỹ

· TURBO PASCAL của hãng BORLAND (Mỹ)

· IBM PASCAL của hãng Microsoft (Mỹ)

· v.v...

Ðến nay, ngôn ngữ Pascal đã phát triển đến phiên bản Turbo Pascal Version 7.
Cấu trúc chương trình
Theo quy ước, cấu trúc một chương trình được mô tả như sau:
Phần tiêu đề
[]

(*) Phần tiêu đề
Phần này bắt đầu bằng từ khoá program, sau đó nhất định là một khoảng trắng và một tên do người dùng tự đặt, cuối cùng kết thúc bằng dấu chấm phẩy ( ; ).
Ví dụ : Program Btap1;
hoặc : Program Giai_pt_bac2;
Phần tiêu đề chiếm một dòng, còn gọi là phần đầu của chương trình (nó có thể không có cũng được.)
(*) Phần khai báo
Phần khai báo có nhiệm vụ giới thiệu và mô tả các đối tượng, các đại lượng sẽ tham gia trong chương trình, giống như ta giới thiệu các thành viên trong một cuộc họp. Nó gồm khai báo sử dụng thư viện chuẩn, khai báo nhãn, khai báo hằng, khai báo kiểu dữ liệu mới, khai báo biến, và khai báo các chương trình con. Tùy theo yêu cầu cụ thể mà mỗi khai báo này có thể có hoặc không.
Khai báo nhãn (Label) chỉ dùng khi trong chương trình có sử dụng lệnh nhảy vô điều kiện GOTO. Nhược điểm của lệnh GOTO là làm mất tính cấu trúc của chương trình, trong khi có thể thay thế nó bằng các câu lệnh có cấu trúc của Pascal.
(*)Phần thân
Đây là phần chủ yếu nhất của một chương trình, bắt buộc phải có.
Thân chương trình bắt đầu bằng từ khoá BEGIN và kết thúc bằng END. (có dấu chấm ở cuối). Giữa khối BEGIN và END là các lệnh. Mỗi lệnh phải kết thúc bằng dấu chấm phẩy (;). Một lệnh, nếu dài, thì có thể viết trên hai hay nhiều dòng, ví dụ :
Writeln( ‘Phuong trinh co hai nghiem la X1=‘ va X2= ‘) ;
Ngược lại, một dòng có thể viết nhiều lệnh miễn là có dấu ( ; )
Write( ‘Nhap A, B, C:’ ) ; Readln(A,B,C) ;
Thông thường mỗi dòng chỉ nên viết một lệnh để dễ đọc, dễ kiểm tra lỗi.
Các kiểu dữ liệu

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

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

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).
 
2.2.2. Các phép toán xử lý bit:
     Trên các kiểu ShortInt, Integer, Byte, Word có các phép toán:
        NOT, AND, OR, XOR.
3. Kiểu số thực

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

III. Lệnh trong Pascal
1. Câu lệnh (statement)
a. Trong một chương trình Pascal, sau phần mô tả dữ liệu là phần mô tả các câu lệnh. Các câu lệnh có nhiệm vụ xác định các công việc mà máy tính phải thực hiện để xử lý các dữ liệu đã được mô tả và khai báo.
b. Câu lệnh được chia thành câu lệnh đơn giản và câu lệnh có cấu trúc.
            - Câu lệnh đơn giản
                        + Vào dữ liệu    :           Read, Readln
                        + Ra dữ liệu      :           Write, Writeln
                        + Lệnh gán       :           :=
                        + Lời gọi chương trình con (gọi trực tiếp tên của chương trình con)
                       + Xử lý tập tin : RESET, REWRITE, ASSIGN ...

- Câu lệnh có cấu trúc
          + Lệnh ghép      :          BEGIN .. END
          + Lệnh chọn      :          IF .. THEN .. ELSE
                                               CASE .. OF .
          + Lệnh lặp        :           FOR .. TO .. DO
                                               REPEAT .. UNTIL
                                                WHILE .. DO
c. Các câu lệnh phải được ngăn cách với nhau bởi dấu chấm phẩy ( ; ) và Các câu lệnh có thể viết trên một dòng hay nhiều dòng.
2. Cấu trúc tuần tự
a. Lệnh gán (Assignment statement)
Một trong các lệnh đơn giản và cơ bản nhất của Pascal là lệnh gán. Mục đích của lệnh này là gán cho một biến đã khai báo một giá trị nào đó cùng kiểu với biến.
                       



* Ý nghĩa:
Biến và các phát biểu gán là các khái niệm quan trọng của một họ các ngôn ngữ lập trình mà Pascal là một đại diện tiêu biểu. Chúng phản ánh cách thức hoạt động của máy tính hiện nay, đó là:
- Lưu trữ các giá trị khác nhau vào một ô nhớ tại những thời điểm khác nhau.
- Một quá trình tính toán có thể coi như là một quá trình làm thay đổi giá trị của một (hay một số) ô nhớ nào đó, cho đến khi đạt được giá trị cần tìm.


b. Lệnh ghép (Compound statement)

Một nhóm câu lệnh đơn được đặt giữa 2 chữ BEGIN và END sẽ tạo thành một câu lệnh ghép. Trong Pascal ta có thể đặt các lệnh ghép con trong các lệnh ghép lớn hơn bao ngoài của nó và có thể hiểu tương tự như cấu trúc ngoặc đơn trong các biểu thức toán học.
Sơ đồ: BEGIN
                                                Công việc 1 ;
                                                Công việc 2 ;
                                                .... Lệnh n;
                                    END ;
 hoặc BEGIN
                                                Begin
                                                            Begin
                                                            End;
End;
                                    END;
Ở hình minh họa trên ta dễ thấy các nhóm lệnh thành từng khối (block). Một khối lệnh bắt đầu bằng BEGIN và chấm dứt ở END; . Trong một khối lệnh cũng có thể có các khối lệnh con nằm trong nó. Một khối chương trình thường được dùng để nhóm từ 2 lệnh trở lên để tạo thành một của các lệnh có cấu trúc
4. Cấu trúc lặp
 
a. Lệnh FOR
Cấu trúc FOR cho phép lặp lại nhiều lần một dãy lệnh. Số lần lặp lại dãy lệnh đã biết trước. Phát biểu FOR có 2 dạng:
            FOR .. TO .. DO                      đếm lên
            FOR .. DOWNTO ..DO           đếm xuống
* Cú pháp tổng quát là:
          
FOR := TO/DOWNTO   DO ;

* Ý nghĩa :
¨         Đầu tiên kiểm tra trị đầu  nhỏ hơn hoặc bằng  trị cuối không? Nếu:
            +  Sai, kết thúc lệnh.
            + Đúng, thì thực hiện công việc, sau đó kiểm tra biến đếm có còn nhỏ hơn trị cuối không? Nếu đúng, thì tăng biến đếm lên 1 và cứ lặp cho đến khi biến đếm không còn nhỏ hơn hoặc bằng trị cuối nữa thì thoát khỏi vòng lặp và kết thúc lệnh.
Chú ý:   Trị đầu, trị cuối là các biến hoặc hằng và biến đếm phải là kiểu rời rạc.

b. Lệnh WHILE .. DO
* Cú pháp
WHILE <điều kiện> DO
Trong khi mà điều kiện còn đúng thì cứ thực hiện Công việc, rồi quay trở về kiểm tra điều kiện lại. Vòng lặp được tiếp tục, đến khi điều kiện đặt ra không còn đúng nữa thì đi tới thực hiện lệnh tiếp theo.
 Ghi chú:
·         Điều kiện trong cấu trúc lặp WHILE .. DO là một biểu thức logic kiểu Boolean chỉ có 2 giá trị là Đúng (True) hoặc Sai (False).
·         Nếu điều kiện Đúng thì chương trình sẽ chạy trong cấu trúc WHILE .. DO.
·         Sau mỗi lần lặp, chương trình trở lại kiểm tra điều kiện. Tùy theo biểu thức logic của điều kiện là Đúng hay Sai thì chương trình sẽ thực hiện Công việc tương ứng.
·         Nếu Sai thì chuyển xuống dưới cấu trúc WHILE .. DO.

 c. Lệnh REPEAT .. UNTIL
Câu lệnh REPEAT .. UNTIL dùng trong các trường hợp khi biến điều khiển không có kiểu rời rạc và đặc biệt trong các trường hợp số lần lặp không biết trước.
REPEAT    ; UNTIL  <Điều kiện thoát>
 * Ý nghĩa câu lệnh:
Nếu <điều kiện thoát> là Sai (False)  thì lặp lại cho đến khi điều kiện Đúng  thì mới thoát ra khỏi cấu trúc REPEAT .. UNTIL.
Nếu có nhiều câu lệnh thì mỗi lệnh ngăn cách nhau bằng dấu chấm phẩy (;) Công việc của REPEAT và UNTIL không nhất thiết phải dùng lệnh ghép để nhóm từ 2 lệnh đơn trở lên thành công việc.
Ghi chú:
So sánh 2 cách viết WHILE .. DO và REPEAT .. UNTIL ta thấy có sự khác biệt:
¨       Trong cấu trúc WHILE .. DO thì <Điều kiện> được kiểm tra trước, nếu thỏa <Điều kiện> thì mới thực hiện .
¨       Ngược lại, trong cấu trúc REPEAT .. UNTIL thì sẽ được thực thi trước sau đó mới kiểm tra <Điều kiện>, nếu không thỏa <Điều kiện> thì tiếp tục thi hành cho đến khi <Điều kiện> là đúng.
Lệnh REPEAT .. UNTIL thường được sử dụng trong lập trình, nhất là lúc người sử dụng muốn tiếp tục bài toán ở trường hợp thay đổi biến mà không phải trở về chương trình và nhấn tổ hợp phím Ctrl + F9 lại.
Một số ví dụ bài toán đơn giản trong pascal
Program Tinh_can_bac_hai_tong_binh_phuong_2_so;
Uses Crt;
var a, b: real;
Begin
Write(`nhap so a`);readln(a);
Write(`nhap so b`);readln(b);
Write(`Can bac hai cua tong binh phuong hai so la: `,sqrt(a*a + b*b),` Moi ban xem lai `);
Write(`Nhan enter de tat chuong trinh`);
Readln;
End.
VD:chương trình chào thế giới
program ChaoThegioi;
 
 begin
     WriteLn(`Chao The gioi!`);
 end.
Viết chương trình in lên màn hình hai câu sau :
" Chao cac ban ! "
" Rat vui đuoc lam quen voi cac ban ! "
Begin
Write(`Chao cac ban`);
Write(`Rat vui duoc lam quen voi cac ban!`);
Readln;
End.
Viết chương trình nhập vào số đo một cạnh và diện tích của hình chữ nhật, tính cạnh kia và chu vi của hình chữ nhật.

Var a,s,b,c:Real;
Begin
Write(`Nhap canh a: `); Readln(a);
Write(`Nhap dien tich s: `); Readln(s);
b:=s/a;
c:=(a+b)*2;
Writeln(` Canh kia la : `,b:4:3);
Writeln(` Chu vi la : `,c:4:3);
Readln;
End.
Program  GioiThieu;
Begin
Writeln ( ‘ Truong A ’ );

Write    ( ‘ Huyen Cam Lo-Tinh Quang Tri ’);
End.
Chương trình giới thiệu
Giải thích chương trình GioiThieu:
- Begin: Từ khoá cho biết bắt đầu chương trình.
‘ );
- Writeln: là thủ tục xuất nội dung các thành phần bên trong cặp dấu (...) lên màn
hình và chuyển con trỏ xuống dòng. Bên trong cặp dấu (...) có thể có nhiều thành
phân gồm chuỗi ký tự (hằng gia trị chuỗi), biến số hoặc hàm. Giữa các thành phần
trong cặp dấu (...) phải cách nhau bằng dấu ‘,‘ nếu không cùng loại, tức là chuỗi ký
tự phải được cách với biến số hoặc hàm đứng trước nó hay sau nó bằng dấu ‘,‘.
Chuỗi ký tự muốn hiển thị nguyên văn phải được đặt trong cặp dấu ‘ ‘.
- Write: là thủ tục xuất nội dung các thành phần bên trong cặp dấu (...) lên màn
hình, thủ tục này có chức năng tương tự Writeln nhưng không chuyển con trỏ xuống
dòng.
- End: là từ khoá cho biết kết thúc chương trình.
- Cac dòng lệnh nằm giữa Begin và End là lệnh mà chương trình cần phải thực
hiện.

Program TinhTong;
Uses CRT;
Begin
ClrScr;
Write ( ‘ 30 + 40 + 15 = ‘, 30 + 40 + 15 );
Readln;

Chương trình tính tổng
Tìm giá trị min, max của 2 số a; b
If aBegin
Max:=b;
Min:=a;
End
Else
Begin
Max:=a;
Min:=b;
End;
Uses CRT;
Var
a, b, S, P : Real ;
Begin
Clrscr;
Write( ‘Nhap chieu dai :’ );
Readln(a);
Write( ‘Nhap chieu rong :’ );
Readln(b);
S:=a*b;
P:=2* (a+b);
Writeln ( ‘Dien tich =‘ );
Writeln ( ‘Chu vi =‘ );
Readln;
End.
Tính chu vi và diện tích hình chữ nhật
Một số hình ảnh về pascal
Cám ơn bạn các bạn đã theo dõi
Tạm biệt
nguon VI OLET