Bài 29 FULL SCREEN cho DOSBOX

Leave a comment

Không biết đặt mục này vào đâu nên cho nó thành một bài.
Nhiều bạn muốn phóng to toàn màn hình cửa sổ Dosbox
Muốn vậy bạn chỉ việc bấm đồng thời hai phím ALT và ENTER, bấm lại ALT-ENTER sẽ trở về như cũ

Bài 28 Runtime Error 200

Leave a comment

Đúng ra là tiếp tục bài mới. Nhưng vì có nhiều bạn dính lỗi 200 nên chúng ta xét qua vấn đề này.
Lỗi 200 -Runtime Error 200- (chia cho Zero) thường gây ra bởi một lỗi trong phiên bản cũ của Turbo Pascal và trình biên dịch Borland Pascal (phiên bản 6 và trước đó). Các lỗi đã được cụ thể trong đơn vị CRT.ASM với các trình biên dịch.

Chúng ta không bàn tới nguyên nhân.

Một giải pháp là biên dịch lại mã nguồn bằng cách sử dụng một phiên bản sau này của Pascal

Hoặc bạn cũng có thể cài bản vá lỗi. Ví dụ PatchCRT by Kennedy Software.

Cá nhân chúng tôi khuyên bạn nên cài bản mới của Turbo Pascal.

Bài 27 Một Số Hàm Số

Leave a comment

Trước khi tiếp tục, chúng ta “ngó qua” một số Hàm số của Pascal
Dưới đây là một số hàm được Pascal thiết kế sẵn. Người sử dụng có thể gọi và sử dụng chúng mà không cần phải khai báo unit qua câu khai báo USES

 

Hàm

Ý nghĩa

Kiểu đối số

Kiểu trả về

Ví dụ

ABS(x) Trị tuyệt đối x Số nguyên, số thực Giống đối số Abs(-2) ð 2
SQR(x) Bình phương x Số nguyên, số thực Giống đối số Sqr(2) ð 4
SQRT(x) Căn bậc hai x Số nguyên, số thực Số thực Sqrt(9) ð 3
EXP(x) Hàm ex Số nguyên, số thực Số thực Exp(3) ð
LN(x) Hàm Số nguyên, số thực Số thực Ln(2) ð
SIN(x) Hàm lượng giác Số nguyên, số thực Số thực Sin(PI) ð 0
COS(x) Hàm lượng giác Số nguyên, số thực Số thực Cos(PI) ð 1
ARCTAN(x) Hàm lượng giác Số nguyên, số thực Số thực Arctan(1) ð
SUCC(x) Succ(x) ï x + 1 Số nguyên Số nguyên  
PRED(x) Pred(x) ï x -1 Số nguyên Số nguyên  
ROUND(x) Làm tròn Số thực Số nguyên Round(8.6) ð 9
TRUNC(x) Làm tròn Số thực Số nguyên Trunc(8.6) ð 8
ORD(x) Lấy mã ASCII Ký tự Số nguyên Ord(‘a’) ð 97
CHR(x) ký tự ï mã ASCII Số nguyên Ký tự Chr(65) ð ‘A’
ODD(x) Kiểm chẳn lẽ Số nguyên Logic Odd(5) ð True

Bài 26 Cấu trúc rẽ nhánh và lựa chọn phần 3

Leave a comment

Chúng ta tiếp tục phân tích vài ví dụ đơn giản.

program Re_Nhanh;

var
i: Integer;

begin
Writeln(‘Nhap vao mot so’);
Readln(i);
if i > 5 then
Writeln(‘So ban nhap vao lon hon 5’);
end.

Có một ký hiệu “lạ” là “>“. Thật ra cũng chẳng lạ lùng gì, tuy nhiên chúng ta chưa bàn tới nên cứ cho nó là lạ vậy. Đây là một trong những operators hay sử dụng trong cấu trúc rẽ nhánh

> Lớn hơn
< Nhỏ hơn
>= Lớn hơn hoặc bằng
<= Nhỏ hơn hoặc bằng
= Bằng
<> Không bằng

Trong chương trình trên, sau khi người sử dụng nhập một số từ bàn phím nó sẽ được gán vào biến i. Tiếp theo ta sẽ so sánh biến i với 5 bằng dấu >
Nếu muốn ta có thể phất triển thêm dựa trên cấu trúc IF…ELSE

program Re_Nhanh2;

var
i: Integer;

begin
Writeln(‘Nhap vao mot so’);
Readln(i);
if i > 5 then
Writeln(‘So lon hon 5’)
else
Writeln(‘So khong lon hon 5’);
end.

Lưu ý là ta trả lời “So khong lon hon 5” chứ không phải là “So nho hon 5” vì trường hợp sô bằng 5 cũng sẽ rẽ nhánh ELSE

Giả sử bạn muốn tìm số lớn hơn 5 nhung nhỏ hơn 20 thì sao. Hoặc bạn muốn tìm số nhỏ hơn 5 hoặc lớn hơn 20. Ta cần sử dụng AND hoặc OR

program Re_Nhanh3;

var
i: Integer;

begin
Writeln(‘Nhap mot so’);
Readln(i);
if (i > 5) and (i < 20) then
Writeln('So năm trong khoang 5-20');
end.

Bài 25 Cấu trúc rẽ nhánh và lựa chọn phần 2

Leave a comment

Phần trước là tổng hợp lại lý thuyết. Chúng ta sẽ xét vài ví dụ trong phần này

1/Giả sử ta cần rẽ nhánh với câu hỏi đơn giản sau
-Chia số a cho số b
-NẾU b khác không thì TRẢ LỜI KẾT QUẢ
-Nếu b = 0 thì KHÔNG LÀM GÌ CẢ

Rõ ràng ta sẽ cần lệnh IF
Đây là ví dụ

program Chia_Hai_So;
Var a,b: Integer;
Begin
Write( ‘Nhập a: ’); Readln(a);
Write( ‘Nhập b: ‘); Readln(b);
If b <> 0 then
Write( ‘Thương hai số vừa nhập: ’,a/b:5:2);
Readln;
End.

Phát triển chương trình trên thêm một bước, thay vì KHÔNG LÀM GÌ CẢ, ta sẽ trả lời người dùng là không thể chia cho một số 0. Ta cần phải sử dụng cấu trúc IF…ELSE

program Chia_Hai_So2;
Var a,b: Integer;
Begin
Write( ‘Nhập a: ’); Readln(a);
Write( ‘Nhập b: ‘); Readln(b);
If b <>0 then
Write( ‘Thương hai số vừa nhập: ’,a/b:5:2);
Else
Write( ‘Không thể chia cho 0’ );
Readln;
End.

2/Một bài toán khác: Viết chương trình nhập vào một tháng, sau đó in lên màn hình tháng đó có bao nhiêu ngày. Có lẽ bạn cũng sẽ đoán ra la ta cần sử dụng cấu trúc lựa chọn CASE. Lưu ý, bài toán này vẫn có thể sử dụng IF…ELSE, ví dụ tháng chẵn mà nhỏ hơn 7 thì sao, tháng chẵn lớn hơn 7 thì sao….Tuy nhiên ở đây chúng ta sẽ dùng CASE. Điều này cũng cho ta thấy, cùng một bài toán có thể có rất nhiều lời giải khác nhau, bạn không cần cứng nhắc theo một kiểu, cứ mặc sức “sáng tạo”

program Ngay_Thang;
Var T: Integer;
Begin
Write( ‘Nhập vào một tháng: ’); Readln(T);
CASE T OF
1, 3, 5, 7, 8, 10, 12: Write( ‘Tháng có 31 ngày.’);
4, 6, 9, 11: Write( ‘Tháng có 30 ngày.’);
2: Write( ‘Tháng có 28 (nhuần 29) ngày.’);
End;
Readln;
End.

Bài 24 Cấu trúc rẽ nhánh và lựa chọn

Leave a comment

Phần 24 này chúng ta sẽ thảo luận về cấu trúc rẽ nhánh và lựa chọn

Cấu trúc rẽ nhánh có lẽ phải gọi là “trái tim” của Lập trình nói chung. Trừ những chương trình quá đơn giản chỉ có ý nghĩa học tập, những chương trình đích thực đều phải có cấu trúc rẽ nhánh.

CẤU TRÚC RẼ NHÁNH

1.Dạng Không Đầy Đủ
Cú pháp: IF Điều kiện THEN Công việc;
Nếu điều kiện là đúng thì thực hiện công việc (ngược lại là điều kiện sai thì không thực thi công việc).

2.Dạng Đầy Đủ
Cú pháp: IF Điều kiện THEN Công việc 1
ELSE Công việc 2;
Nếu điều kiện là đúng thì thực hiện công việc 1, ngược lại là điều kiện sai thì thực thi công việc 2. Chú ý trước ELSE không có dấu ; (chấm phẩy).

CẤU TRÚC LỰA CHỌN
1.Dạng Không Đầy Đủ
Cú pháp: CASE biến OF
Hằng 1a, 1b,…, 1x: Công việc 1;
Hằng 2a, 2b,…, 2x: Công việc 2;

Hằng na, nb,…, nx: Công việc n;
END;

Ý nghĩa: Trước hết kiểm tra giá trị của biến có bằng một trong các hằng 1a, 1b,…, 1x hay không. Nếu đúng thì thực hiện công việc 1, rồi kết thúc lệnh (thực hiện tiếp các lệnh sau END; nếu có). Nếu không, thì kiểm tra giá trị của biến có bằng một trong các hằng 2a, 2b,…, 2x hay không. Nếu đúng thì thực hiện công việc 2, rồi kết thúc lệnh (thực hiện tiếp các lệnh sau END). Nếu không thì cứ tiếp tục kiểm tra như vậy. Nếu giá trị của biến không bằng bất cứ hằng nào từ 1a đến nx thì câu lệnh CASE kết thúc mà không làm gì cả.

2.Dạng Đầy Đủ
Cú pháp: CASE biến OF
Hằng 1a, 1b,…, 1x: Công việc 1;
Hằng 2a, 2b,…, 2x: Công việc 2;

Hằng na, nb,…, nx: Công việc n;
ELSE

END;
Ý nghĩa: Khác dạng không đầy đủ ở chỗ nếu giá trị của biến không bằng bất cứ hằng nào từ 1a đến nx thì câu lệnh CASE sẽ thực thi công việc N+1.

Bài 23 – Read và Readln

Leave a comment

Chúng ta thảo luận riêng Read và Readln đơn giản vì trong bước đầu lập trình, bạn sẽ sử dụng rất nhiều

Cú pháp:

(1) Readln(Biến_1, biến_2, biến_n);
(2) Read(Biến_1, biến_2, biến_n);

Khi thực hiện lệnh này, máy dừng lại chờ người dùng nhập vào đủ n lần nhập dữ liệu tương ứng với n biến.
Ngoài ra, ta có thể sử dụng thủ tục Readln để dừng chương trình và chờ người dùng ấn một phím bất kỳ để tiếp tục, ký tự được ấn không hiển thị lên màn hình.

Chú ý:

– Các biến trong thủ tục Readln phải thuộc kiểu nguyên, thực, ký tự hoặc xâu ký tự. Do đó, ta không thể nạp từ bàn phím giá trị True hoặc False các biến kiểu Boolean.
– Dữ liệu nhập vào phải tương ứng với kiểu đã khai báo. Phải ấn phím Enter để thực hiện lệnh nhập sau khi gõ xong giá trị cần nhập.

Cái này rất quan trọng, chúng ta thường quen với “hiện đại hóa” ví dụ hỏi năm chúng ta chỉ cần nhập 2012 thôi mà không ENTER
Vì vậy trong bước đầu, nên có dòng hướng dẫn người sử dụng ấn phím ENTER

Ví dụ : Với a, b là hai biến nguyên, x là biến thực. Xét đoạn chương trình sau:

Readln(a, b);
Readln(x);

Nếu ta gõ các phím: 4 454 6.5 87 -> Enter
Kết quả: a nhận giá trị 4, b nhận giá trị 454. Các ký tự còn lại bị bỏ qua và không được xét trong thủ tục Readln(x) tiếp theo. Như vậy, máy dừng lại ở câu lệnh Readln(x) để chờ nhập số liệu cho biến x.

Lúc này nếu nhập tiếp 4 454 6.5 87 -> Enter thì giá trị của x sẽ là 4

Nhìn “na ná” như nhau, tuy nhiên Read khác hẳn Readln. Tuy nhiên chúng ta sẽ bàn tới Read sau.

Older Entries