Chương trình đơn giản đầu tiên - Phần 2

Trong phần 1, chúng ta đã làm quen với một số thủ tục vào ra cơ bản ( write, writeln, read và readln), khai báo biến và sử dụng biến. Trong phần hai ta tiếp tục tìm hiểu về cách khai báo và sử dụng hằng, một số phép tính toán (, , * , / , mod , div ), phép gán trong Pascal.

#4.6 - Ví dụ 6

Ở vi dụ này mình sẽ giúp các bạn biết cách khai báo và sử dụng hằng. Trong quá trình học thì mình thấy hằng chủ yếu dùng để lưu những giá trị lặp đi lặp lại nhiều làn trong chương trình của bạn. Nhìn chung thì hằng nó cũng gần giống như biến thôi, nó cũng có một cái tên, nó mang một giá trị và giá trị đó luôn không đổi.

Program vd6;
uses crt;
const tb1 = 'So PI =';
tb2 = 'Nam nay la nam ';
pi = 3.14;
year = 2016;
begin
clrscr;
writeln(tb1, pi);
writeln(tb2, year);
readln;
end.
Về cách khai báo hằng như sau:
Const <tên hằng> : <Giá trị của hằng>;
<tên hằng 2> : <Giá trị của hằng>;
...
Phân tích chương trình trên:
1. Đầu tiên là phần khai báo tên chương trình, cái đơn giản chắc ai cũng biết.
2. Tiếp theo là khai báo hằng, mình khai báo tất cả là 4 hằng:
Hăng thứ nhất là tb1 với giá trị là hằng xâu 'So PI '
Hăng thứ hai là tb2 với giá trị là hằng xâu 'Nam nay la nam '
Hăng thứ nhất là pi với giá trị là số thực 3.14 (không phải là 3,14 đâu nhé, dấu chấm mới đúng)
Hăng thứ nhất là year với giá trị là số nguyên 2016
3. Khi tới phần thân thì mình cũng dùng lệnh writeln để in giá trị các hằng ra giống như biến vậy.
Và đây là kết quả:

#4.6 - Ví dụ 6

Tiếp theo là phép gán, khi ta khai báo một biến thì nó mang giá trị mặc định, phép gán là để đặt giá trị cho biến đó hoặc ta cũng có thể dùng phép gán để cập nhật giá trị mới cho biến.
Ví dụ thế này cho dễ tưởng tượng: bạn mới thuê một người làm ( giống như khai báo một biến mới) thì người đó chưa biết phải làm gì cả ( giống như biến mới chỉ mang giá trị mặc định) nên bạn phải giao một việc cho họ (Phép gán đặt giá trị cho biến) và đôi khi họ đang làm một việc gì đó thì bạn bảo họ làm việc khác ( giống như biến đang mang một giá trị nào đó nhưng bạn gán giá trị mới cho nó - cập nhật giá trị của biến)

Bây giờ chúng ta cùng làm vài ví dụ để hiểu phép gán.
Ví dụ:
Program vd6;
uses crt;
var a: integer;
begin
clrscr;
a:=6;
writeln(a);
readln;
end.


Mình không nói về cấu trúc chương trình nữa nhé, cái này khá đơn giản và mình đã nói nhiều trong bài trước, mình nói đến những thứ đáng chú ý thôi.
Trong ví dụ trên mình đã khai báo biến a thuộc kiểu dữ liệu integer, lúc này biến a đang có giá trị mắc định bằng không (0)
Tới phần thân, mình đã thực hiện phép gán: a:=6; tức là gán giá trị 6 cho biến a (ban đầu a=0 bây giờ a=6)
Tiếp theo mình in giá trị biến a ra màn hình: writeln(a); bạn đã biết nó bằng bao nhiêu chưa? Tất nhiên là bằng 6 phải không.

Tiếp một ví dụ như thế này nữa:
Program vd6;
uses crt;
var a: integer;
begin
clrscr;
a:=6;
a:=8;
writeln(a);
readln;
end.

Ví dụ này gấn giống ví dụ trên, chỉ khác ở chỗ sau khi gán a bằng 6 mình lại gán a bằng 8, sau đó mình in giá trị biến a ra màn hình? Nó có bằng 6 không nhỉ? Câu trả lời là 8 nhé, vì sau khi gán a bằng 6, mình lại gán nó bằng 8, nên giá trị cuối cùng của a là 8.

Tiếp ví dụ:
Program vd6;
uses crt;
var a,b: integer;
begin
clrscr;
a:=6;
b:=a;
writeln(b);
readln;
end.

Đầu tiên , mình khai báo hai biến a, b thuộc kiểu integer (giá trị của a, b đều bằng không).
Ở phần thân, mình gán a bằng 6 (a:=6;), vậy bây giờ giá trị của a là 6
Tiếp theo là lệnh: b:=a; có nghĩa là gán giá trị của a cho b, lúc này a đang bằng 6, mà mình gán giá trị của biến a cho biến b thì biến b bằng mấy? Nó bằng 6 nhé.
Vậy giá trị của biến a sau khi gán thì nó bằng mấy, vẫn bằng giá trị ban đầu của nó.

Chú ý: Khi gán giá trị một biến cho một biến thì hai biến đó phải cùng kiểu dữ liệu
Program vd6;
uses crt;
var a : real;
b: integer;
begin
clrscr;
a:=6;
b:=a;
writeln(b);
readln;
end.

Trong ví dụ trên, thay vì khai báo cả a và b  thuộc kiểu integer thì mình khai báo a thuộc kiểu real (kiểu số thực) và b thuộc kiểu integer (kiểu số nguyên)
Sau đó mình vẫn làm bình thường nhưng khi chạy chương trình là lỗi nhé, vì a,b không cùng kiểu dữ liệu

#4.7 - Ví dụ 7

Ở ví dụ này giúp các bạn vận dụng phép gán tốt hơn.
Ví dụ như sau: viết chương trình nhập vào hai số nguyên từ bàn phím, in giá trị hai biến a, b ra. Sau đó hoán đổi giá trị của hai biến cho nhau rồi in giá trị hai biến ra lại một lần nữa.
Giả sử mình nhập a=6 và b=8 thì hoán đổi giá trị của hai biến ta được a=8 và b=6.

Ngày xưa lúc đi học, thầy có nói cho mình một ví dụ cho dễ tượng bài toán, mình sẽ kể lại cho các nghe vì nó khá hay:
Bạn có một ly nước cam, một ly sữa và một cái ly không có gì - gọi là ly trung gian, vậy bằng cách nào bạn có thể chuyển sữa qua ly nước cam và chuyển nước cam qua ly sữa.
Câu trả lời như sau:
Bước 1: Đổ ly nước cam qua ly trung gian
Bước 2: Đổ ly sữa qua ly nước cam
Bước 3: Đổ ly trung gian (hiện tại đang chứa nước cam - bước 1) vào ly sữa (hiện tại đang rỗng - bước 2)

Ok, bài toán này y chang vậy, ta có hai biến mang giá trị giống như ly nước cam và ly sữa, quy ước luôn ly nước cam tượng trưng cho biến a, ly sữa tượng trưng cho biến b . Vậy ta còn thiếu một biến tượng trưng cho cái ly rỗng, ta phải làm sao? Thì ta khai báo thêm một biến nữa thôi, ta khai báo thêm biến c đại diện cho ly rỗng

Bây giờ ta tiến hành viết chương trình:
Bước 1: Đảm bảo câu trúc chương trình cho mình
Bước 2: Khai báo thư viện crt để dùng lệnh clrscr;
Bước 3: Khai báo biến, ta cần 3 biến, để bài bảo số nguyên thì ta chọn kiểu dữ liệu là integer.
var a,b,c : integer;
Bước 4: Clrscr; - xóa màn hình, các bạn tự thêm vào nhé, lúc viết mình quên thêm vào, đến lúc chụp xong hết mình mới để ý

Bước 5: Đọc vào hai biến từ bàn phím, biến a và biến b nhé
readln(a,b);
Bước 6: In giá trị hai biến đó ra:
writeln( a , ' ' , b);

Bước 7: Bắt đầu từ bước này là quan trọng đấy nhé:
Đổ ly nước cam qua ly rỗng, ly nước cam tượng trưng cho biến a, ly rỗng tượng trưng cho biến c.
vậy đổ ly nước cam qua ly rỗng là gán giá trị của a cho c:
c:=a;
Coi chừng sai nha bạn, nhiều bạn không suy nghĩ kĩ lại gán a:=c; là không ra kết quả của bài toán được đâu.

Bước 8: Đổ ly sữa qua ly nước cam
Ly sữa tượng trưng cho biến b, ly nước cam tượng trưng cho biến a. Vậy đổ ly sữa qua ly nước cam có nghĩa là gán giá trị của a cho c:
a:=b;

Bước 9: Đổ ly rỗng (hiện tại đang chứa nước cam) vào ly sữa (hiện tại đang rỗng)
Ly rỗng (hiện tại đang chứa nước cam) tượng trưng cho biến c, ly sữa tượng trưng cho biến b, vậy tức là gán giá trị của b cho c
b:=c;

Bước 10: In ra giá trị hai biến a,b một lần nữa để xem kết quả


writeln( a , ' ' , b);
Bước 11: Readln; dừng chương trình tới khi nhấn enter
Kết thúc chương trình.

Chạy thử chương trình nhé, mình nhập a=6 và b=8
Ban đầu, giá trị các biến như sau: a=6 b=8 c=0
Khi chạy tới c:=a; thì a=6 b=8 c=6
Khi chạy tới a:=b; thì a=8 b=8 c=6
Khi chạy tới b:=c; thì a=8 c=6 c=6
Mặc kệ biến c có giá trị bao nhiêu, cuối cùng ta cũng đạt được mục đính là hoán đổi giá trị của a và b cho nhau.

#4.7 - Ví dụ 7

Ở ví dụ này ta cùng làm một vài bài cộng trừ nhân (*) chia (/)...
Ví dụ: Viết chương trình tính và in ra kết quả phép tính 8+9+10
Program vd7;
uses crt;
var a : integer;
begin
clrscr;
a := 8+9+10;
writeln( ' 8 + 9 + 10  = ' , a);
readln;
end. 

Chương trình này rất đơn giản, mình đã dùng biến a để lưu giá trị phép tính 8+9+10, Pascal sẽ tự tính phép tính này.
Sau đó mình viết kết quả ra với lệnh writeln( ' 8 + 9 + 10  = ' , a);
Chú ý: ' 8 + 9 + 10 = ' là hằng xâu đấy nhé.

Khi ta cộng trừ nhân chia này nọ thì sẽ tạo ra một kết quả hay gọi là một giá trị nào đó, thông thương ta sẽ lưu vào biến nhưng bạn cũng có thể viết trực tiếp ra luôn như dưới:
Program vd7;
uses crt;
begin
clrscr;
writeln( ' 8 + 9 + 10  = ' ,  8+9+10);
readln;
end. 

Không cần biến a để lưu giá trị nữa, bạn có thể in trực tiếp kết quả phép tính ra luôn:
writeln( ' 8 + 9 + 10  = ' ,  8+9+10);
Trong đó ' 8 + 9 + 10  = ' là hằng xâu còn 8+9+10 là biểu thức cần in kết quả.

Còn nhiều phép tính nữa như + , - , * , / , mod , div các bạn tự nghĩ thêm ví dụ nhé, còn về phần nhập biểu thức thì nhập y như trong mấy dòng máy tính bỏ túi - loại chỉ có hai dòng hiển thị trên màn hình đấy. Mà cái này tỏng sách có nhiều, bạn cũng có thể tự tham khảo (trang 22 sgk tin học 8 và trang 25 sgk tin học 11)

Bạn cũng có thể thực hiện các phép tính với các biến, miễn là nó mang giá trị, xem ví dụ sau:

Program vd7;
uses crt;
var a,b,c,d: integer;
begin
clrscr;
a:=6;
b:=7;
c:=8;
d:= a+b+c;
writeln(d);
readln;
end. 

Hoặc bạn cũng có thể nhập a,b và c từ bàn phím:

Program vd7;
uses crt;
var a,b,c,d: integer;
begin
clrscr;
readln(a,b,c);
d:= a+b+c;
writeln(d);
readln;
end. 

#4.8 - Ví dụ 8

Ví dụ: Viết chương trình tính nghiệm của một phương trình bậc hai.(tham khảo thêm ở trang 34 sgk tin học 11 và https://vi.wikipedia.org/wiki/Phương_trình_bậc_hai - phần công thức nghiệm )

Nó cũng khá đơn giản thôi. Để tính nghiệm của phương trình bậc hai đầu tiên ta cần phải biết hệ số a,b và c của nó, ta sẽ nhập nó từ bàn phím và cũng cần 3 biến để lưu nó
Ta cần thêm một biến để tính delta
Ta cần hai biến để lưu hai nghiệm x1 và x2 của nó.

Ta cần chọn kiểu dữ liệu cho các biến, đầu tiên xét tới các hệ số a,b và c, các hệ số này có thể là 1, hoặc 1.5 vậy nó thuộc kiểu số thực nên ta chọn kiểu real
X1, x2 là delta cũng vậy, nó cũng thuộc kiểu real.

Bây giờ ta tiến hành viết:
Bước 1: Đảm bảo cấu trúc cho mình
Bước 2: Khai báo thư viện crt 
Uses crt;
Bước 3: Khai báo biến var a, b, c, delta, x1, x1 : real;
Bước 4: Bắt đầu vào phần thân, ta dùng clrscr; để xóa màn hình cho dễ nhìn
Bước 5: Xuất ra một đoạn thông báo yêu cầu nhập hệ số a, b và c
writeln('Nhap vao cac he so a,b va c ');
Bước 6: Đọc vào giá trị cho các biến a,b và c
readln(a,b,c);
Bước 7. Tính delta, chắc các bạn biết công thức tính delta là gì rồi phải không, tính xong ta sẽ gán nó vào biến delta
delta := b*b - 4*a*c;
 hoặc bạn có thể dùng hàm bình phương ( sqr(x) nhé ) như sau : delta := sqr(b) - 4*a*c;
Bước 8: Tính nghiệm đầu tiên x1 (trong này có sử dụng hàm căn bậc hai sqrt(x)
căn delta sẽ là sqrt(delta)
x1 := (-b - sqrt(delta)) / 2*a;
Bước 9: Tính nghiệm thứ hai
x1 := (-b + sqrt(delta)) / 2*a;

Bước 9: Hai nghiệm đã tính xong, bây giờ mình in ra nữa là xong
writeln( 'x1 = ' , x1 , ' x2 = ' , x2 );
Bước 10: Thêm lệnh readln; để nó dừng lại cho mình xem kết quả.
Ok, xong rồi đấy.
Khi chạy chương trình hãy nhập vào các số a,b,c mà cho ra nghiệm được ấy nhé. Nếu bạn nhập hệ số a,b,c của phương trình vô nghiệm, nghĩa là delta < 0, mà ở chỗ tính nghiệm x1, x2 ta có dùng hàm căn bậc hai của delta sqrt(delta) tuy nhiên delta âm nên không có căn bậc hai dẫn tới chương trình bị lỗi.

#5 - Bài tập

Có vướng mắc thì cứ để lại bình luận hoặc nhắn tin qua Facebook cho mình.

1. Viết ra màn hình bài thơ:
Trong đầm gì đẹp bằng sen
Lá xanh bông trắng lại chen nhụy vàng
Nhụy vàng, bông trắng, lá xanh                          
Gần bùn mà chẳng hôi tanh mùi bùn.

Trong pascal là không có dấu đâu nhé

2. Viết chương trình tính diện tích và chu vi hình vuông
3. Viết chương trình tính diện tích và chu vi hình tròn


Comments