VinaOnline.net

Cấu trúc rẽ nhánh trong Pascal : Chi tiết và đầy đủ cho học sinh phổ thông

Cấu trúc rẽ nhánh trong Pascal là sự chuyển tiếp giữa phần cơ bản và nâng cao trong lập trình Pascal (đối với học sinh phổ thông). Cấu trúc rẽ nhánh trong Pascal giúp cho người lập trình viên có nhiều lựa chọn, thể hiện được tính sáng tạo trong lập trình.

I. Cấu trúc rẽ nhánh trong Pascal : Dạng 1

Cú pháp:

If <Điều kiện> Then

Câu lệnh;

– Nếu điều kiện “ĐÚNG”, chương trình sẽ thực hiện “Câu lệnh”.

Ví dụ 1:

Viết chương trình nhập vào một số nguyên. In ra màn hình như sau:

– Số vừa nhập.

– Số dương nếu số đó lớn hơn 0. Không thỏa điều kiện thì không in dòng này.

Chương trình minh họa

Program so_nguyen;

Uses Crt;

Var so: Integer;

Begin

ClrScr;

Write(‘Nhap vao so nguyen: ‘): Readln(so);

Writeln(‘So vua nhap: ‘,so);

If so>0 Then

Writeln(‘So duong’);

Readln;

End.

Cấu trúc rẽ nhánh trong Pascal : Dạng 1

Cấu trúc rẽ nhánh trong Pascal : Dạng 1

Phân tích ví dụ 1:

Yêu cầu in ra:

– Số vừa nhập.

– In hoặc không “Số dương” tùy vào số nguyên bạn nhập khi thực thi chương trình.

– Xét hai dòng được in đậm

* Điều kiện trong cấu trúc rẽ nhánh LUÔNbiểu thức so sánh.

* Sau câu lệnh có thể được thực thi hoặc không tùy vào biểu thức so sánh có ĐÚNG không.

Chú ý:

Sau cấu trúc rẽ nhánh trong Pascal hoặc vòng lặp (sẽ đề cập những bài viết sau), muốn thực thi từ hai câu lệnh trở lên phải bao bởi Begin … End; (End; – Ngoại trừ End trong chương trình chính sử dụng dấu chấm. Tất cả End còn lại đều sử dụng chấm phẩy).

Ví dụ 2:

Mở rộng ví dụ 1:

Viết chương trình nhập vào một số nguyên. In ra màn hình như sau:

– Số vừa nhập.

Nếu số dương (>0) thì in tiếp hai dòng:

– Số dương.

– Chúc mừng bạn!.

Chương trình minh họa

Program so_nguyen;

Uses Crt;

Var so: Integer;

Begin

ClrScr;

Write(‘Nhap vao so nguyen: ‘): Readln(so);

Writeln(‘So vua nhap: ‘,so);

If so>0 Then

     Begin

  Writeln(‘So duong’);

  Writeln(‘Chuc mung ban!’);

     End;

Readln;

End.

Phân tích ví dụ 2:

Một số diễn giải giống ví dụ 1, chủ yếu làm sáng tỏ Begin … End sau cấu trúc rẽ nhánh.

– Sau các cấu trúc rẽ nhánh, các dòng lặp,… chỉ thực hiện 1 câu lệnh mà thôi.

– Trong Ví dụ 2, nếu không bao bởi căp Begin … End thì câu lệnh Writeln(‘Chuc mung ban!’) luôn luôn được thực hiện cho dù điều kiện trong cấu trúc rẽ nhánh có ĐÚNG không.

II. Cấu trúc rẽ nhánh trong Pascal : Dạng 2

Cấu trúc rẽ nhánh trong Pascal dạng 2 linh hoạt hơn dạng 1. Khi điều kiện SAI vẫn hiển thị thông báo (thực thi câu lệnh 2).

Cú pháp:

If <Điều kiện> Then

Câu lệnh 1

Else

Câu lệnh 2;

– Nếu điều kiện “ĐÚNG”, chương trình sẽ thực hiện “Câu lệnh 1”.

– Nếu điều kiện “SAI”, chương trình sẽ thực hiện “Câu lệnh 2”.

Ví dụ:

Viết chương trình nhập vào một số nguyên (<> 0). In ra màn hình số dương hay số âm.

Program so_am_duong;

Uses Crt;

Var so: Integer;

Begin

ClrScr;

Write(‘Nhap vao so nguyen: ‘): Readln(so);

If so>0 Then

Writeln(‘So duong’)

Else

Writeln(‘So am’);

Readln;

End.

Chú ý quan trọng

– Kết thúc câu lệnh trước Else không có dấu chấm phẩy.

III. Cấu trúc rẽ nhánh trong Pascal : Dạng 3

Cấu trúc rẽ nhánh trong Pascal dạng 3 là sự mở rộng của dạng 2.

Cú pháp

If <Điều kiện 1> Then

Câu lệnh 1

Else If <Điều kiện 2> Then

Câu lệnh 2

Else If <Điều kiện 3> Then

Câu lệnh 3

Else

Câu lệnh n;

Ví dụ:

Viết chương trình nhập vào tuổi của bạn (>=10) và cho biết bạn thuộc độ tuổi nào? Các độ tuổi gợi ý như sau:

– Thiếu niên tuổi từ 10->15
– Thanh niên tuổi 16->32
– Trung niên tuổi từ 33 -> 50
– Người già tuổi từ 50 trở lên.

Program do_tuoi;

Uses Crt;

Var tuoi: Byte;

Begin

ClrScr;

Write(‘Nhap tuoi cua ban (>=10): ); Readln(tuoi);

If tuoi<=15 Then

Writeln(‘Thieu nien’)

Else If tuoi<=32 Then

Writeln(‘Thanh nien’)

 Else If tuoi<=50 Then

Writeln(‘Trung nien’)

Else

Writeln(‘Nguoi gia’);

Readln;

End.

Chú ý:

Số cấu trúc rẽ nhánh trong Pascal = Số rẽ nhánh -1.

– Xét điều kiện là kiểu số phải theo trật tự nhất định (Bé đến lớn hoặc Lớn xuống bé; Tuyệt đối không được lộn xộn, nhảy cóc!).

Ví dụ:

1. <=15

2. <=32

3. <=50

Hoặc

1. >50

2. >32

3. >15

Bạn để ý có dấu bằng (=) hoặc không trong điều kiện nhé.

IV. Cấu trúc rẽ nhánh trong Pascal : Ghép điều kiện

Những điều kiện bạn vừa xét là những điều kiện đơn, khi thực hiện điều kiện ghép (nhiều điều kiện) với cấu trúc rẽ nhánh trong Pascal thì không thực hiện được.

1. Ghép điều kiện Or

ĐÚNG khi có ít nhất một điều kiện đúng.

Ví dụ:

((2>1) or (3=5)) => Đúng.

2. Ghép điều kiện And

ĐÚNG khi tất cả các điều kiện đúng.

Ví dụ:

((2>1) or (3=5)) => SAI.

Chú ý:

Bạn phải bao cặp dấu ngặc () để nhiều điều kiện thành một điều kiện ghép.

Củng cố kiển thức

1. Cấu trúc rẽ nhánh trong Pascal – Dạng 2 : Hiển thị số chẵn hoặc lẻ.

Viết chương trình nhập vào một số nguyên (<>0). Hiển thị ra màn hình số chẵn hoặc số lẻ.  

Giải gợi ý:

Program chan_le;

Uses Crt

Var so: Integer;

Begin

ClrScr;

Write(‘Nhap vao so nguyen (<>0): ‘); Readln(so);

If (so mod 2 =0) Then

Writeln(‘So chan’)

Else

Writeln(‘So le’);

Readln;

End.

Phân tích chương trình

– Mod là phép chia lấy phần dư.

– Điều kiện phải là biểu thức viết liền nhau, sử dụng cặp dấu () để bao điều kiện.

2. Cấu trúc rẽ nhánh trong Pascal – Dạng 3 : Phát thưởng học sinh.

Viết chương trình nhập vào giải thưởng của học sinh (A, B, C, D) và in ra tiền thưởng tương ứng:

A: 1000000 đồng.

B: 800000 đồng.

C: 600000 đồng.

D: 400000 đồng.

Giải gợi ý:

Program phat_thuong;

Uses Crt;

Var giai_thuong: Char;

Begin

ClrScr;

Write(‘Nhap vao giai thuong’); Readln(giai_thuong);

If ((giai_thuong=’A’) or (giai_thuong=’a’)) Then

Writeln(‘1000000 dong.’)

Else If ((giai_thuong=’B’) or (giai_thuong=’b’)) Then

Writeln(‘800000 dong.’)

Else If ((giai_thuong=’C’) or (giai_thuong=’c’)) Then

Writeln(‘600000 dong.’)

Else

Writeln(‘400000 dong.’);

Readln;

End.

Phân tích chương trình

Chương trình này chưa chặt chẽ phần Else cuối cùng vì khi người sử dụng gõ bất kỳ ký tự nào ngoài (‘A’, ‘a’, ‘B’, ‘b’, ‘C’, ‘c’) đều được 400000 dong. Vì vậy, chúng ta tạm chấp nhận. Nếu có điều kiện ràng buộc thì chương trình khá phức tạp, mất tập trung vào cấu trúc rẽ nhánh trong Pascal.

Lời kết

Đến đây bạn đã đi được rất dài (nếu xét trong phạm vi lớp 8), vì vậy bạn cần luyện tập và kiểm tra lại những gì đã đọc và thực hành để đạt kết quả tốt với ngôn ngữ lập trình Pascal.

 

 

 

 

Leave a Comment