Hiển thị các bài đăng có nhãn Tin Học 11. Hiển thị tất cả bài đăng
Hiển thị các bài đăng có nhãn Tin Học 11. Hiển thị tất cả bài đăng

Bài 1: Khái niệm về lập trình và ngôn ngữ lập trình

BÀI 1: KHÁI NIỆM LẬP TRÌNH VÀ NGÔN NGỮ LẬP TRÌNH

1. Ngôn ngữ lập trình

- Ngôn ngữ lập trình là ngôn ngữ dùng để diễn tả thuật toán sao cho máy tính hiểu và thực hiện được.
- Có 3 loại ngôn ngữ lập trình:
  • Ngôn ngữ máy: bao gồm các lệnh được mã hóa bằng các kí hiệu 0 – 1. Chương trình được viết trên ngôn ngữ máy có thể được nạp vào bộ nhớ và thực hiện ngay. Đây cũng là ngôn ngữ duy nhất mà máy tính có thể trực tiếp hiểu và xử lý đ­ựơc.
  • Hợp ngữ: Là loại ngôn ngữ sử dụng một số từ để thực hiện lệnh trên thanh ghi. Hợp ngữ sử dụng các từ viết tắt tiếng Anh để diễn tả câu lệnh.
  • Ngôn ngữ bậc cao: Là loại ngôn ngữ gần với ngôn ngữ tự nhiên, ít phụ thuộc vào loại máy. Các lệnh được mã hóa bằng một ngôn ngữ gần với ngôn ngữ Tiếng Anh.
    • Chương trình viết trên ngôn ngữ bậc cao phải được chuyển đổi thành chương trình trên ngôn ngữ máy mới có thể thực hiện được => Phải sử dụng một chương trình dịch để chuyển đổi.
    • Lập trình bằng ngôn ngữ bậc cao dễ viết hơn vì các lệnh được mã hóa gần với ngôn ngữ tự nhiên. Lập trình trên ngôn ngữ máy rất khó, thường các chuyên gia lập trình mới lập trình được.

2. Lập trình

- Lập trình là việc sử dụng cấu trúc dữ liệu và các lệnh của ngôn ngữ lập trình cụ thể để mô tả dữ liệu và diễn đạt các thao tác của thuật toán.

3. Chương trình dịch

- Ch­ương trình dịch là ch­ương trình đặc biệt, có chức năng chuyển đổi ch­ương trình đư­ợc viết bằng ngôn ngữ lập trình bậc cao sang ngôn ngữ máy.

a. Biên dịch (Compiler)

- Biên dịch đượ­c thực hiện qua hai bước
  • Bước 1: Duyệt, phát hiện lỗi, kiểm tra tính đúng đắn của lệnh trong chương trình nguồn.
  • Bước 2: Dịch toàn bộ chương trình nguồn thành một chương trình trên ngôn ngữ máy.
=> Biên dịch thuận tiện cho các chương trình ổn định và cần thực hiện nhiều lần.

b. Thông dịch (Interpreter)

- Thông dịch được thực hiện bằng cách lặp lại dãy các bư­ớc sau:
  • Bước 1: Kiểm tra tính đúng đắn của lệnh tiếp theo trong chương trình nguồn.
  • Bước 2: Chuyển lệnh đó thành ngôn ngữ máy.
  • Bước 3: Thực hiện các câu lệnh vừa được chuyển đổi.
=> Thông dịch phù hợp với môt trường đối thoại giữa người và máy.

Bài 2: Các thành phần của ngôn ngữ lập trình

BÀI 2. CÁC THÀNH PHẦN CỦA NGÔN NGỮ LẬP TRÌNH

1. Các thành phần cơ bản

- Mỗi ngôn ngữ lập trình thường có ba thành phần cơ bản: bảng chữ cái, cú pháp và ngữ nghĩa.

a. Bảng chữ cái

- Bảng chữ cái là tập các kí hiệu dùng để viết chương trình.
- Trong ngôn ngữ Pascal bảng chữ cái gồm: Các chữ cái trong bảng chữ cái tiếng Anh, các chữ số 0 → 9 và một số kí tự đặc biệt.

b. Cú pháp

- Cú pháp là bộ qui tắc dùng để viết chương trình.

c. Ngữ nghĩa

- Ngữ nghĩa xác định ý nghĩa thao tác cần phải thực hiên, ứng với tổ hợp kí tự dựa vào ngữ cảnh của nó
*Nhận xét:
- Cú pháp cho biết cách viết một chương trình hợp lệ, còn ngữ nghĩa xác định ý nghĩa của các tổ hợp kí tự trong chương trình.
- Lỗi cú pháp được chương trình dịch phát hiện và thông báo cho người lập chương trình biết, chỉ có các chương trình không còn lỗi cú pháp mới có thể được dịch sang ngôn ngữ máy.
- Lỗi ngữ nghĩa chỉ được phát hiện khi thực hiện chương trình trên dữ liệu cụ thể.

2. Một số khái niệm

a. Tên

- Mọi đối tượng trong chương trình đều phải được đặt tên theo quy tắc của ngôn ngữ lập trình và từng chương trình dịch cụ thể.
- Ý nghĩa của việc đặt tên và khai báo tên cho các đối tượng:
  • Để quản lý và phân biệt các đối tượng trong chương trình.
  • Để gợi nhớ nội dung của đối tượng.
- Qui tắc đặt tên trong Pascal:
  • Tên là một dãy liên tiếp không quá 127 kí tự bao gồm các chữ cái, chữ số và dấu gạch dưới nhưng phải bắt đầu bằng chữ cái hoặc dấu gạch dưới.
  • Trong chương trình dịch Free Pascal, tên có thể có độ dài tới 255 kí tự
  • Ngôn ngữ pascal không phân biệt chữ hoa, chữ thường trong tên. Một số ngôn ngữ lập trình khác (ví dụ C++) phân biệt chữ hoa, chữ thường
  • Tên không bắt đầu bằng chữ số, không chứa dấu cách, không chứa kí tự đặt biệt
  • Nhiều ngôn ngữ lập trình, trong đó có pascal, phân biệt ba loại tên:
    • Tên dành riêng
    • Tên chuẩn
    • Tên cho người lập trình đặt
* Tên dành riêng:
- Là tên được dùng với ý nghĩa riêng xác định => Người lập trình không thể dùng với ý nghĩa khác.
- Tên dành riêng còn được gọi là từ khoá.
- Ví dụ: Một số từ khóa:
  • Trong Pascal: Program, uses, var, type, const, begin, end, array, type,…
  • Trong C++: main, include, if, while, void.
* Tên chuẩn:
- Được dùng với ý nghĩa nhất định nào đó, dùng riêng thì phải khai báo.
- Ví dụ:
  • Trong Pascal: abs, sqr, sqrt, cos, sin,…
  • Trong C++: cin, cout, getchar, …
*Tên do người lập trình đặt:
- Được dùng với ý nghĩa riêng, xác định bằng cách khai báo trước khi sử dụng.
- Các tên do người dùng đặt trong chương trình không được trùng nhau và không được trùng với tên dành riêng.

b. Hằng và biến

* Hằng
- Hằng là đại lượng có giá trị không thay đổi trong quá trình thực hiện chương trình.
- Các ngôn ngữ lập trình thường có:
  • Hằng số: số nguyên và số thực. Ví dụ: 2, 1.0E-6,…
  • Hằng lôgic: Là giá trị đúng (True)hoặc sai (False).
  • Hằng xâu: Là chuỗi kí tự trong bộ mã ASCII, đặt trong cặp dấu nháy.
* Biến
- Là đại lượng được đặt tên, dùng để lưu trữ giá trị và giá trị có thể được thay đổi trong quá trình thực hiện chương trình.
- Các Ngôn ngữ lập trình có nhiều loại biến khác nhau
- Biến phải khai báo trước khi sử dụng

c. Chú thích

- Các chú thích không làm ảnh hưởng đến chương trình.
- Trong Pascal chú thích được đặt trong {} hoặc (*và*).
- Trong C++ chú thích đặt trong /* và */ hoặc //.

Bài 3: Cấu trúc chương trình

BÀI 3. CẤU TRÚC CHƯƠNG TRÌNH

1. Cấu trúc chung

- Một chương trình viết bằng ngôn ngữ lập trình bậc cao thông thường gồm có: 2 phần là phần khai báo và phần thân chương trình, trong đó phần thân bắt buộc phải có.
- Qui ước:
  • Phần diễn giải bằng ngôn ngữ tự nhiên đặt trong cặp ngoặc <>
  • Thành phần có thể có hoặc không đặt trong cặp ngoặc []
=>Với qui ước trên ta có thể mô tả cấu trúc chung của một chương trình như sau:
[<phần khai báo>]
<phần thân>
- Trong Pascal:
  • Phần khai báo:
               Program < tên chương trình>;
               Uses < tên các thư viện>;
               Const <tên hằng>=<giá trị của hằng>;
               Var < tên biến>: <kiểu dữ liệu>;
               Procedure …; <khai báo thủ tục>
               Function …; <khai báo hàm>…
  • Phần thân:
               Begin
                    {Dãy các câu lệnh};
               End.

2. Các thành phần của chương trình

a. Phần khai báo

* Khai báo tên chương trình
- Trong Pascal:
  • Cú pháp: program <tên chương trình>;
  • Ví dụ:
    • Program vidu;
    • Program tinhtong;
* Khai báo thư viện
- Khai báo thư viện trong Pascal:
  • Cú pháp: Uses <tên thư viện>;
  • Ví dụ:
    • Uses crt; {Thư viện crt chứa các hàm vào/ra chuẩn làm việc với màn hình và bàn phím}
    • Uses graph; {Thư viện graph chứa các hàm đồ hoạ}
- Trong C++:
               #include <stdio.h>;
               #include <conio.h>;
* Khai báo hằng:
- Trong Pascal:
  • Cú pháp: Const <tên hằng> = <giá trị>;
  • Ví dụ
    • Const MaxN = 1000;
    • Const PI = 3.1416;
* Khai báo biến:
- Trong Pascal:
  • Cú pháp: Var <danh sách biến>:<kiểu dữ liệu>;
  • Ví dụ: Giải phương trình bậc hai: ax2 + bx +c = 0 => Khai báo: Var a, b, c, x1, x2, delta: real;

b. Phần thân chương trình

- Phần thân chương trình bao gồm dãy lệnh trong phạm vi được xác định bởi cặp dấu hiệu mở đầu và kết thúc.
- Trong Pascal, được bắt đầu và kết thúc bởi Begin… End.
     Begin
          [<Dãy lệnh>];
     End.

Bài 4: Một số kiểu dữ liệu chuẩn

BÀI 4. MỘT SỐ KIỂU DỮ LIỆU CHUẨN
- Có 4 kiểu dữ liệu chuẩn trong pascal: kiểu nguyên, kiểu thực, kiểu kí tự và kiểu logic
a. Kiểu nguyên
Kiểu
Bộ nhớ lưu trữ 1 giá trị
Phạm vi giá trị
Byte (dương)
1 byte
Từ 0 đến 255
Integer (âm, dương)
2 byte
Từ -215 đến 215-1
Word (dương)
2 byte
Từ 0 đến 216-1
Longint (âm, dương)
4 byte
Từ -231 đến 231-1
b. Kiểu thực
- Có nhiều kiểu cho giá trị là số thực nhưng hay dùng một số kiểu sau:

Kiểu
 Bộ nhớ lưu trữ 1 giá trị
Phạm vi giá trị
  Single
 4 byte
Từ 1.5×10-45 đến 3.4×1038
  Real
   6 byte
Từ 2.9×10-39 đến 1.7×1038
  Double
  8 byte
 Từ 5.0×10-324 đến 1.7×10308
  Extended
 10 byte
Từ 3.4×10-4932 đến 1.1×104932
c. Kiểu kí tự
Kiểu
Bộ nhớ lưu trữ 1 giá trị
Phạm vi giá trị
Char
1 byte
256 kí tự trong bộ mã ASCII
* Lưu ý:
- Mỗi kí tự có 1 mã tương ứng trong phạm vi từ 0 đến 255
- Các kí tự có quan hệ so sánh, việc so sánh dựa trên mã của từng kí tự.
d. Kiểu Logic
Kiểu
Bộ nhớ lưu trữ 1 giá trị
Phạm vi giá trị
boolean
1 byte
True hoặc False

Bài 5: Khai báo biến

BÀI 5. KHAI BÁO BIẾN
- Trong NLT Pascal biến đơn được khai báo như sau: 
Var <danh sách biến>: <kiểu dữ liệu>;
- Trong đó:
  • Var: Là từ khoá dùng để khai báo biến
  • Danh sách biến: là 1 hoặc nhiều biến cách nhau bởi dấu phẩy.
  • Kiểu dữ liệu: Là một kiểu dữ liệu nào đó của ngôn ngữ Pascal. thường là kiểu dữ liệu chuẩn hoặc kiểu dữ liệu do người lập trình định nghĩa.
- Ví dụ: Var a, b, c, x1, x2, delta: Byte;
- Ta có thể khai báo nhiều biến và nhiều kiểu dữ liệu khác nhau theo cách dưới đây:
     Var
              <danh sách biến 1>:<kiểu dữ liệu 1>;
              <danh sách biến 2>:<kiểu dữ liệu 2>;
             …………………………………
- Ví dụ:
     Var       min, max: integer;
                  KT: boolean;
                   a,b: real;
* Lưu ý:
- Cần đặt tên biến sao cho gợi nhớ đến ý nghĩa của nó.
- Không nên đặt tên quá ngắn hay quá dài, dễ dẫn đến mắc lỗi hay hiểu nhầm.
- Khai báo biến cần quan tâm chú ý đến phạm vi giá trị của nó.

Bài 6: Phép toán, biểu thức, câu lệnh gán

BÀI 6. PHÉP TOÁN, BIỂU THỨC, CÂU LỆNH GÁN

1. Phép Toán

- Ngôn ngữ lập trình Pascal sử dụng một số phép toán sau:
  • Với số nguyên: +, -, *, Div, Mod
  • Với số thực: +, -, *, /
  • Các phép toán quan hệ: <, <=, >, >=, <> cho kết quả là một giá trị Logic (true hoặc false).
  • Các phép toán logic: NOT, OR, AND thường dùng để kết hợp nhiều biểu thức quan hệ với nhau.

2. Biểu thức và câu lệnh gán

a. Biểu thức số học

- Biểu thức số học là một dãy các phép toán +, -, *, /, div và mod từ các hằng, biến kiểu số và các hàm.
- Dùng cặp dấu () để quy định trình tự tính toán.
* Thứ tự thực hiện các phép toán:
- Trong ngoặc trước, ngoài ngoặc sau.
- Nhân chia trước, cộng trừ sau
- Giá trị của biểu thức có kiểu là kiểu của biến hoặc hằng có miền giá trị lớn nhất trong biểu thức.

b. Hàm số học chuẩn

- Các ngôn ngữ lập trình thường cung cấp sẵn một số hàm số học để tính một số giá trị thông dụng.
- Cách viết: Tên_hàm (đối số). VD: sqrt(4); sqr(2);
- Kết quả của hàm phụ thuộc vào kiểu của đối số.
- Đối số của hàm là một hay nhiều biểu thức số học đặt trong dấu ngoặc () sau tên hàm.
- Bản thân hàm cũng có thể coi là biểu thức số học và có thể tham gia vào biểu thức như một toán hạng bất kỳ.
* Bảng một số hàm chuẩn số học:
SQR(x)
 Trả về x2
SQRT(x)
 Trả về căn bậc hai của x (x\(\ge\)0)
ABS(x)
 Trả về |x|
SIN(x)
 Trả về sin(x) theo radian
COS(x)
 Trả về cos(x) theo radian
ARCTAN(x)
 Trả về arctang(x) theo radian
LN(x)
 Trả về ln(x)
EXP(x)
 Trả về ex
TRUNC(x)
 Trả về số nguyên gần với x nhất nhưng bé hơn x.
INT(x)
 Trả về phần nguyên của x
FRAC(x)
 Trả về phần thập phân của x
ROUND(x)
 Làm tròn số nguyên x
PRED(n)
 Trả về giá trị đứng trước n
SUCC(n)
 Trả về giá trị đứng sau n
ODD(n)
 Cho giá trị TRUE nếu n là số lẻ.
INC(n)
 Tăng n thêm 1 đơn vị (n:=n+1).
DEC(n)
 Giảm n đi 1 đơn vị (n:=n-1).

c. Biểu thức quan hệ

* Cấu trúc:
<Biểu thức 1> <phép toán quan hệ> <Biểu thức 2>
- Trong đó: Biểu thức 1 và biểu thức 2 phải cùng kiểu.
* Trình tự thực hiện:
- Tính giá trị biểu thức
- Thực hiện phép toán quan hệ
=> Kết quả của biểu thức logic là True hoặc False.
- Ví dụ: a>b hoặc 2*c<3*a

d. Biểu thức Logic

- Biểu thức Logic đơn giản nhất là hằng hoặc biến Logic.
- Ví dụ:
  • a, b, c là 3 cạnh của tam giác nếu thoã mãn điều kiện: (a+b>c) and (b+c>a) and (c+a>b)
=> Giá trị của biểu thức logic là: true hoặc false
  • not(x>1) thể hiện phát biểu “x không lớn hơn 1”. Biểu thức này tương đương biểu thức quan hệ x<=1
- Ngoài ra còn có các phép toán logic khác như: and, or, ... Ví dụ: biểu thức quan hệ ta viết lại dưới dạng phép toán logic như sau: (x>=4) and (x<=9)

e. Câu lệnh gán

- Lệnh gán là cấu trúc cơ bản nhất của mọi ngôn ngữ lập trình, thường dùng để gán giá trị cho biến.
- Cấu trúc: Tên biến:=biểu thức;
- Trong đó biểu thức phải phù hợp với tên biến, nghĩa là kiểu của tên biến phải cùng với kiểu của biểu thức hoặc phải bao hàm kiểu của biểu thức.
- Hoạt động của lệnh gán: Tính giá trị của biểu thức sau đó ghi giá trị đó vào tên biến.
- Ví dụ:
  • x1:=(- b + sqrt(delta))/(2*a);
  • x2:=(- b - sqrt(delta))/(2*a);
  • x1:=(-b-sqrt(b*b-4*a*c))/(2*a);
* Lưu ý:
- Biến kiểu thực có thể nhận giá trị kiểu nguyên và biến kiểu xâu có thể nhận kiểu kí tự, ngược lại thì không.

Bài 7: Các thủ tục chuẩn vào ra đơn giản

BÀI 7. CÁC THỦ TỤC CHUẨN VÀO/RA ĐƠN GIẢN

1. Nhập dữ liệu vào từ bàn phím

- Ta sử dụng thủ tục chuẩn read hoặc readln có cấu trúc như sau:
          read(<biến 1>,…,<biến n>);
          readln(<biến 1>,…,<biến n>);
- Ví dụ 1:
  • read(n);
  • readln(A,B,C);
- Ví dụ 2: Xét chương trình sau:
Program VD;
Uses crt;
Var a, b, c : Integer;
Begin        
     Clrscr;          
     Write(‘Moi ban nhap 3 so:’);          
     Readln(a, b, c);          
     Write(‘Ban vua nhap vao 3 so:, a, b, c);          
     Readln;
End.
* Chú ý:
- Khi nhập dữ liệu từ bàn phím READ và READLN có ý nghĩa như nhau, thường hay dùng READLN hơn. READLN luôn chờ gõ phím Enter.
- Khi nhập giá trị cho nhiều biến thì những giá trị này gõ cách nhau một dấu cách hoặc kí tự xuống dòng (phím Enter).

2. Đưa dữ liệu ra màn hình

- Để đưa dữ liệu ra màn hình tại vị trí con trỏ, ta dùng thủ tục write hoặc writeln với cấu trúc:
          Write(<giá trị 1>,…<giá trị n>);
          Writeln(<giá trị 1>,…<giá trị n>);
Trong đó: các giá trị có thể là biến đơn, biểu thức, tên hàm hoặc hằng.
- Ví dụ: xét chương trình sau
Program vd;
Uses crt;
Var tuoi:byte;
Begin Clrscr;
    Write(‘Moi ban nhap 3 so:’);
    readln(a,b,c);
    Write(‘Ban vua nhap 3 so:’,a,b,c);
    Write(‘Ban go ENTER de ket thuc’);
    Readln;
End.
* Lưu ý:
- Thủ tục Writeln sau khi đưa kết quả ra sẽ chuyển con trỏ màn hình xuống đầu dòng tiếp theo .
- Các thủ tục readln và writeln có thể không có tham số.
- Quy cách đưa thông tin ra:
  • Kết quả số thực:<độ rộng>:<số chữ số thập phân>
  • Kết quả khác:<độ rộng>
  • Độ rộng và số chữ số thập phân là các hằng nguyên dương.
Ví dụ:
Writeln(n:5, x:6:2);
Write(i:3, j:4, a+b:8:3);​

Bài 8: Soạn thảo, dịch, thực hiện và hiệu chỉnh chương trình

BÀI 8. SOẠN THẢO, DỊCH, THỰC HIỆN, HIỆU CHỈNH CHƯƠNG TRÌNH
- Trong máy tính cần có các tệp sau: turbo.exe, turbo.tpl, graph.tpu, egavga.bgi, turbo.tph 
- Một số thao tác thường dùng:
  • Soạn thảo: Gõ nội dung chương trình gồm: phần khai báo và các lệnh trong phần thân.
  • Lưu chương trình: Nhấn phím F2
  • Mở file đã có: Nhấn phím F3
  • Biên dịch chương trình: Nhấn tổ hợp phím Alt+F9 => nếu có lỗi cần chỉnh sửa, nếu không có lỗi chương trình xuất hiện bảng thông báo: Compile successful: press any key
  • Chạy chương trình: Nhấn tổ hợp phím Ctrl+F9
  • Đóng cửa sổ chương trình: Nhấn tổ hợp phím Alt+F3
  • Thoát khỏi Turbo Pascal: Nhấn tổ hợp phím Alt+X

Bài 9: Cấu trúc rẽ nhánh

BÀI 9. CẤU TRÚC RẼ NHÁNH

1. Cấu trúc rẽ nhánh

- Xét các ví dụ sau:
  • VD1: Chiều mai nếu trời không mưa thì Hùng đến nhà Tâm để học nhóm.
  • VD2: Chiều mai nếu trời không mưa thì Hùng đến nhà Tâm để học nhóm, nếu trời mưa thì Hùng gọi điện cho Tâm trao đổi.
- Nhận xét: Các mênh đề rẽ nhánh thường có dạng:
  • Nếu.....Thì....... → Đây là cách diễn đạt dạng thiếu
  • Nếu......Thì......Nếu không thì...... → cách diễn đạt dạng đủ
=> Cấu trúc dùng để mô tả các mệnh đề có dạng như trên được gọi là cấu trúc rẽ nhánh dạng thiếu và đủ.
- Ví dụ: Thuật toán giải và biện luận phương trình bậc nhất ax + b = 0
Bước 1: Nhập a, b
Bước 2: Nếu a<>0 thì x:=-b/a → bước 4
              Ngược lại → bước 3
Bước 3: Nếu b<>0 thì thông báo phương trình vô nghiệm
              Ngược lại thông báo phương trình vô số nghiệm.
Bước 4: Đưa x ra màn hình.

2. Cấu trúc if..... then..... (dạng thiếu)

- Cấu trúc:
IF <Điều kiện> THEN<Câu lệnh>;
- Sơ đồ khối:
       
- Hoạt động:
  • Bước 1: Tính giá trị của biểu thức điều kiện.
  • Bước 2: Kiểm tra giá trị của biểu thức điều kiện
    • Nếu biểu thức điều kiện có giá trị đúng thì thực hiện câu lệnh sau từ khoá THEN, rồi thoát ra khỏi câu lệnh IF, chuyển sang câu lệnh tiếp theo.
    • Nếu biểu thức điều kiện có giá trị sai thì thoát ra khỏi câu lệnh IF và chuyển đến thực hiện lệnh tiếp theo.

3. Cấu trúc if..... then..... else..... (dạng đủ)

- Cấu trúc: 


IF <Điều kiện> THEN <Câu lệnh 1> ELSE <Câu lệnh 2>;
- Trong đó:
  • IF, THEN, ELSE là từ khoá
  • Điều kiện: Là biểu thức Logic hoặc biểu thức quan hệ.
- Sơ đồ khối:
- Hoạt động: 
  • Bước 1: Tính giá trị của biểu thức điều kiện.
  • Bước 2: Kiểm tra giá trị của biểu thức điều kiện
    • Nếu biểu thức điều kiện có giá trị đúng thì thực hiện câu lệnh sau từ khoá THEN, rồi thoát ra khỏi câu lệnh IF, chuyển đến thực hiện lệnh tiếp theo.
    • Nếu biểu thức điều kiện có giá trị sai thì thực hiện câu lệnh 2 sau từ khóa ELSE, rồi thoát ra khỏi câu lệnh IF, chuyển đến thực hiện lệnh tiếp theo.

4. Câu lệnh ghép

a. Định nghĩa

- Khi sau THEN và sau ELSE có từ 2 câu lệnh trở lên ta phải ghép chúng lại thành một nhóm nằm giữa 2 từ khoá BEGIN và END.
=> Định nghĩa: Một nhóm câu lệnh đơn được đặt giữa 2 từ khóa BEGIN và END sẽ tạo thành một câu lệnh ghép. 

b. Cú pháp:

BEGIN
     câu lệnh 1;
     câu lệnh 2;
     .....
     câu lệnh n;
END;

- Trong đó: 
  • BEGIN, END là từ khoá
  • câu lệnh 1, câu lệnh 2, ... câu lệnh n là các câu lệnh đơn bất kỳ.

c. Ví dụ

- Ví dụ 1: Tìm nghiệm của phương trình bậc 2: ax2 + bx + c = 0 với a\(\ne\)0
PROGRAM vidu1;
VAR a,b,c,x,x1,x2,delta:real;
BEGIN
     Write(‘nhap a,b,a’); readln(a,b,c);
     Delta:=b*b-4*a*c;
     IF delta <0 THEN

          writeln(‘phuong trinh vo nghiem’)
     ELSE IF delta=0 THEN
     Begin
          X:=-b/2*a;
          Writeln(‘phuong trinh co 1 nghiem la:’,x:8:2);
     End; 
     ELSE
     Begin  
          X1:=(-b-sqrt(delta))/2*a;  
          X2:=(-b+sqrt(delta))/2*a;
     End;
     Readln;
END.
- Ví dụ 2: Chương trình tìm nghiệm của phương trình bậc nhất ax + b = 0
PROGRAM vidu2;
VAR a,b,x:real;
BEGIN

     Write(‘nhap a,b’); readln(a,b);
     IF a<>0 THEN
     Begin
          X:=-b/a;
          writeln(‘phuongtrinh co nghiem  la:’,x:8:2);
     End;
     ELSE IF b=0 THEN  
          writeln(‘phuong trinh vo so nghiem’);
     Else
          writeln(‘phuong trinh vo nghiem’);
     Readln;
END.
* Lưu ý: 
- 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.

Bài 10: Cấu trúc lặp

BÀI 10. CẤU TRÚC LẶP
- Trong cuộc sống, có những hành động được gọi là lặp đi lặp lặp lại nhiều lần như:
  • Đánh răng mỗi ngày hai lần, học Tin học mỗi tuần 2 tiết, mỗi ngày tắm một lần...
  • Học cho đến khi thuộc bài, rửa tách trà cho đến khi sạch...
- Trong Pascal, cách mô tả công việc (hoạt động) được lặp lại nhiều lần gọi là cấu trúc lặp. Có 3 loại cấu trúc vòng lặp như sau:
  • Cấu trúc for
  • Cấu trúc while do
  • Cấu trúc repeat

1. Cấu trúc FOR

- Cấu trúc FOR cho phép lặp lại nhiều lần một dãy lệnh mà số lần lặp lại đã biết trước.
- Phát biểu FOR có 2 dạng: 
  • Dạng tiến (đếm lên): FOR ..... TO ..... DO
  • Dạng lùi (đếm xuống): FOR ..... DOWNTO ..... DO
- Cú pháp tổng quát:      
FOR <biến đếm> := <giá trị đầu> TO/DOWNTO <giá trị cuối>  DO <Công việc>;

- Sơ đồ khối:


- Hoạt động: 


  • Bước 1: Thực hiện biểu thức 1 (gán giá trị khởi đầu)
  • Bước 2: Kiểm tra điều kiện lặp:
    • Nếu điều kiện lặp có giá trị ‘sai’ thì ra khỏi vòng lặp.
    • Ngược lại, nếu điều kiện lặp có giá trị ‘đúng’ thì chuyển tới bước 3.
  • Bước 3: Thực hiện khối lệnh sau for (thân của for), chuyển tới bước 4.
  • Bước 4: Thực hiện biểu thức 3 (tăng/ giảm biến đếm), rồi quay về bước 2.

* Chú ý: 
  • Giá trị đầu, giá trị cuối là các biến hoặc hằng;
  • Biến đếm phải là kiểu rời rạc.


- Ví dụ 1: Chương trình in một dãy số từ 0 đến 9
PROGRAM Day_So;
VAR i: Integer;
BEGIN
     FOR i := 0 TO 9 DO
          Write (i);
     Readln;
END.


2. Câu lệnh While …Do

- Cấu trúc:
WHILE <điều kiện> DO <lệnh cần lặp>;
- Sơ đồ khối:
* Lưu ý: Trong khối các lệnh lặp bắt buộc phải có lệnh thay đổi biến chỉ số (để thay đổi giá trị <điều kiện>)
- Hoạt động:
  • Bước 1: Kiểm tra điều kiện lặp:
    • Nếu điều kiện lặp sai thì thoát khỏi vòng lặp, chuyển sang lệnh tiếp theo.
    • Nếu điều kiện lặp đúng thì chuyển sang bước 2.
  • Bước 2: Thực hiện khối  các lệnh lặp.
  • Bước 3: Quay lại bước 1.
- Ví dụ 2: Chương trình tính trung bình n số:  x1 + x2 + x3 + ... + xn
Program Trung_binh_Day_So;
VAR  n, count: Integer;
     x, sum, average: real;
BEGIN
     count := 1;
     sum := 0;
     Writeln('Nhập n = '); readln (n);
     WHILE  count  < n+1  DO
     BEGIN
          Writeln('Nhập giá trị thứ' , count,' của x = '); readln (x);
          sum := sum + x;
          count := count + 1;
     END;
     average :=  sum/n;
     Writeln('Trung bình là =' , average : 10 : 3 );
     Readln;
END.

Bài 11: Kiểu mảng

BÀI 11. KIỂU MẢNG

1. Kiểu mảng một chiều

a. Khái niệm

- Mảng một chiều là một dãy hữu hạn các phần tử có cùng kiểu. Mảng được đặt tên và mỗi phần tử mang một chỉ số. Để mô tả mảng một chiều cần xác định kiểu của các phần tử và cách đánh chỉ số các phần tử.
- Với mảng một chiều ta quan tâm đến:
  • Tên kiểu mảng một chiều.
  • Số lượng phần tử trong mảng.
  • Kiểu dữ liệu của phần tử.
  • Cách khai báo biến mảng.
  • Cách tham chiếu đến phần tử.

b. Khai báo mảng một chiều

- Cách 1: Khai báo trực tiếp:
                    VAR <tên biến mảng>: ARRAY [kiểu chỉ số] OF <kiểu phần tử>;
- Cách 2: Khai báo gián tiếp
                     TYPE <tên kiểu mảng> = ARRAY [kiểu chỉ số] OF <kiểu phần tử>;
                     VAR <tên biến mảng> : <tên kiểu mảng>;
- Trong đó:
  • Kiểu chỉ số thường là một đoạn số nguyên liên tục có dạng n1...n2 (n1<n2; n1, n2 là các hằng hoặc biểu thức)
  • Kiểu phần tử là kiểu dl của các phần tử của mảng.
- Ví dụ 1: Var Nhietdo: array [1..Max] Of real;
- Ví dụ 2: Khai báo mảng tối đa 100 số nguyên (chỉ số đầu tiên là 1)
=> Ta có các cách sau:
  • Cách 1: Var a: Array[1..100] Of Integer;
  • Cách 2:
               Const Nmax = 100;
               Var a: Array[1..Nmax] Of integer;

c. Tham chiếu tới phần tử của mảng

- Để tham chiếu tới phần tử của mảng ta gọi theo cấu trúc: Tên_biến[chỉ số]
VD: Tham chiếu đến phần tử thứ 20 trong mảng A ta viết A[20].

d. Một số ví dụ

- Bài 1: Viết CT tạo mảng A gồm N (N\(\le\)100) số nguyên. Tính tổng các phần tử của mảng là bội của một số nguyên dương k cho trước.
Var  S, n, k, i: integer;
     A: array[1..100] of integer;
Begin
     Write(‘Nhap n = ’);
     readln(n);
     {tao mang}
     For i:=1 To n Do
     begin
          write(‘phan tu thu ’,i,’ =’); 
          readln(A[i]);
     end;
     write(‘Nhap k = ’);
     readln(k);
     S:= 0; {khoi tao S ban dau}
     {tinh tong}
     For i:=1 To n Do
          If A[i] mod k = 0 Then S:= S + A[i];
     Writeln(‘Tong can tinh la ’, S);
End.

2. Kiểu mảng hai chiều

a. Khái niệm mảng 2 chiều

Xét bài toán: Bảng nhân: Hãy viết chương trình in ra bảng nhân như sau
1
2
3
4
5
6
7
8
9
10
2
4
6
8
10
12
14
16
18
20
3
6
9
12
15
18
21
24
27
30
4
8
12
16
20
24
28
32
36
40
5
10
15
20
25
30
35
40
45
50
6
12
18
24
30
36
42
48
54
60
7
14
21
28
35
42
49
56
63
70
8
16
24
32
40
48
56
64
72
80
9
18
27
36
45
54
63
72
81
90
=> Các bước cần thực hiện khi sử dụng mảng 1 chiều để thực hiện bài toán trên:
- Cần sử dụng 9 mảng 1 chiều, mỗi mảng lưu 1 hàng của bảng nhân => Khai báo 9 biến mảng
=> Nhược điểm: Phải khai báo nhiều biến, chương trình phải viết nhiều lệnh để tạo và in giá trị của mảng. 
=> Giải pháp: Coi mỗi mảng một chiều là 1 phần tử và ghép 9 mảng 1 chiều trên thành 1 mảng 2 chiều.
* Khái niệm mảng hai chiều:
- Mảng hai chiều là mảng một chiều mà mỗi phần tử của nó lại là mảng một chiều. 
- Mảng hai chiều là bảng các phần tử cùng kiểu
* Các yếu tố xác định mảng hai chiều:
  • Tên mảng hai chiều.
  • Số lượng phần tử của mỗi chiều.
  • Kiểu dữ liệu của phần tử.
  • Cách khai báo biến.
  • Cách tham chiếu đến phần tử.

b. Cách Khai báo:

- Có hai cách khai báo biến mảng 2 chiều:
  • Cách 1: Khai báo trực tiếp:
                     VAR <tênbiếnmảng>: ARRAY [kiểu chỉ số hàng, kiểu chỉ số cột] OF <kiểu phần tử>;
  • Cách 2: Khai báo gián tiếp:
                     TYPE <tên kiểu mảng> = ARRAY [kiểu chỉ số hàng, kiểu chỉ số cột] OF <kiểu phần tử>;
                     VAR <tên biến mảng> : <tên kiểu mảng>;

c. Tham chiếu đến một phần tử của mảng hai chiều:

                     TÊN_BIẾN[chỉ số hàng, chỉ số cột]

d. Các ví dụ:

- Ví dụ 1: Viết chương trình tạo và in mảng hai chiều gồm m hàng, n cột.
program Tao_in_mang;
var i, j, m, n: integer;
A: array[1..100,1..100] of integer;
begin
     write('Nhap so hang m = '); readln(m);
     write('Nhap so cot n = '); readln(n);
     {Tạo mảng}
     for i:= 1 to m do for j:= 1 to n do
     begin
          write('Nhap A[',i, ',',j,']=');
          readln(A[i, j]);
     end;
     {In mảng}
     for i:= 1 to m do
     begin
          for j:= 1 to n do write(A[i, j]:4);
          writeln;
     end;
     readln;
end.