Bài 4 Sử dụng biến trong chương trình

Một phần của tài liệu sgv tin 8 (Trang 33 - 38)

1. Mục đích, yêu cầu

• Biết khái niệm biến, hằng;

• Hiểu cách khai báo, sử dụng biến, hằng;

• Biết vai trò của biến trong lập trình;

• Hiểu lệnh gán.

2. Những điểm cần lưu ý và gợi ý dạy học

Đây là bài tương đối khó đối với HS. Cần lưu ý nhấn mạnh một số điểm sau:

Biến là đại lượng để lưu trữ dữ liệu, có thể thay đổi giá trị của biến tại bất kì vị trí nào trong chương trình. Muốn sử dụng biến thì phải khai báo, khi khai báo biến phải khai báo kiểu dữ liệu mà biến sẽ lưu trữ. Biến chỉ có thể lưu trữ được dữ liệu có kiểu thuộc kiểu của biến. Người lập trình tự đặt tên cho biến theo quy tắc của ngôn ngữ lập trình đang sử dụng. Có thể gán giá trị cho biến và tính toán với biến.

Hằng có khai báo là đại lượng để lưu trữ dữ liệu cố định. Không được phép thay đổi giá trị của hằng trong chương trình.

Bài này hoàn toàn có thể được tiến hành dạy học theo đúng trình tự như trong SGK. Tuy nhiên, dưới đây xin giới thiệu một cách tiến hành dạy học khác để GV tham khảo.

Vào đầu bài học GV có thể yêu cầu HS viết một chương trình tính diện tích hình tròn có bán kính r = 2. Do HS đã được thực hành về viết biểu thức trong Pascal nên HS sẽ dễ dàng làm được bài này.

Begin

Write('Dien tich hinh troncoban kinh r=2 la: ', 3.14*2*2); readln;

end.

Với cách viết như trên, nếu muốn tính diện tích của một hình tròn khác thì lại phải vào chương trình để sửa lại. Như vậy sẽ rất mất thời gian, đó là chưa kể người sử dụng phải biết lập trình, hiểu chương trình thì mới vào sửa chương trình được. Việc đòi hỏi người sử dụng phải biết lập trình, sửa được chương trình là không thực tế.

GV đưa ra yêu cầu là cần viết một chương trình cho phép người sử dụng nhập từ bàn phím bán kính của hình tròn, sau đó tính toán diện tích và hiển thị kết quả ra màn hình.

Nói chung HS chưa đưa ra được phương án để giải quyết vấn đề này. GV cần đưa ra một chương trình thực hiện điều này để các em quan sát.

Var

R: Integer;

Begin

Write('Nhap ban kinh hinh tron R=: '); Readln(R); Write('Dien tich hinh tron la: ', 3.14*R*R); readln;

end.

Nếu dạy với máy tính, GV có thể cho chạy thử chương trình này để HS quan sát sẽ hiệu quả hơn.

Dựa trên chương trình này GV giới thiệu về biến nhớ, cách khai báo biến và sử dụng lệnh read() hoặc readln() để nhập giá trị biến từ bàn phím, cụ thể có thể giới thiệu như sau:

Trong chương trình đã sử dụng một công cụ hỗ trợ lập trình của PASCAL là biến nhớ

R.

Var R: Integer;

là lệnh khai báo biến nhớ. Khi chạy chương trình, đến lệnh này PASCAL dành một phần bộ nhớ và đặt tên cho phần bộ nhớ này là R - gọi tắt là ô nhớ R. Có thể hình dung ban đầu ô nhớ

R này chưa chứa giá trị (nói đúng hơn là chứa một giá trị nào đó - tuỳ thuộc vào ngôn ngữ lập trình, nhưng đây chưa phải là thời điểm phù hợp để nói về chi tiết này với HS). Về cú pháp khai báo biến chỉ cần lưu ý tên biến do người lập trình đặt (tuân thủ theo qui tắc đặt têncủa ngôn ngữ lập trình) và kiểu dữ liệu của biến. Chi tiết hơn về khai báo tên sẽ được đề cập trong bài thực hành 3.

Readln(R);

là lệnh dùng để nhập giá trị cho biến R từ bàn phím. Gặp lệnh này chương trình sẽ dừng lại và yêu cầu người sử dụng nhập giá trị từ bàn phím. Khi người sử dụng nhập một số, ví dụ số 3, (adsbygoogle = window.adsbygoogle || []).push({});

rồi nhấn Enter, thì chương trình sẽ "mang" số 3 này "đặt" vào ô nhớ R. Trong lập trình việc này được gọi là gán giá trị 3 cho biến R. Đến đây, biến R có giá trị bằng 3.

Với câu lệnh Write('Dien tich hinh tron la: ', 3.14*R*R);

điểm cần giải thích ở câu lệnh này đối với HS là biểu thức 3.14*R*R. Vì R đã được khai báo là biến và đã được gán giá trị bằng 3 nên khi tính toán biểu thức này, Pascal thay tên biến R

bằng giá trị là 3 đang được lưu ở ô nhớ R, nghĩa là tính 3.14*3*3. Biểu thức này tính diện tích hình tròn với bán kính là 3 vừa được nhập từ bàn phím.

Khi thực hiện chương trình, người sử dụng có thể nhập giá trị bán kính bất kì (chính xác thì phải là số nguyên bất kì, nhưng GV chưa cần giải thích chính xác, đầy đủ ở đây). Điều đó có nghĩa là ô nhớ R có thể nhận các giá trị khác nhau phụ thuộc vào người sử dụng. Đây là đặc điểm quan trọng của biến: Giá trị của biến có thể thay đổi.

Lưu ý rằng cách trình bày như trên chỉ giúp dẫn dắt học sinh đến khái niệm về biến. Sau này, trong quá trình giới thiệu các nội dung tiếp theo và các bài thực hành, giáo viên cần nhấn mạnh để học sinh hiểu rõ: mục tiêu của việc sử dụng biến không phải là tránh hoặc giảm đơn giản công việc chỉnh sửa chương trình mà mục tiêu hàng đầu là lưu trữ các giá trị trung gian

(được nhập vào hay được tính toán) cho các hoạt động xử lí dữ liệu về sau và tên biến giúp chương trình nhận biết chính xác dữ liệu được lưu ở đâu trong bộ nhớ. Nhiều thao tác xử lí dữ liệu không thể thực hiện được nếu không sử dụng biến. SGK đã trình bày rất rõ ý này.

Đến đây nhấn mạnh cho HS rằng cần khai báo biến, kiểu của biến trước. Có thể gán giá trị cho biến và sử dụng biến trong tính toán. Giá trị của biến có thể thay đổi.

Sau đó GV có thể đưa ra chương trình dưới đây:

Var R: Integer; S: Real; Const So_PI = 3.14; Begin

Write('Nhap ban kinh hinh tron R=: '); Readln(R); S:= So_PI*R*R;

Write('Dien tich hinh tron la: ', S); readln

end.

So với chương trình trước, điểm khác biệt của chương trình này là khai báo hằng số

So_PI, sử dụng hằng số So_PI để tính diện tích hình tròn trong biểu thức So_PI*R*R. Cần nhấn mạnh cho HS về cách khai báo hằng và đặc điểm của hằng số là giá trị được xác định ngay từ khi khai báo và không thay đổi giá trị. Thực hiện đến lệnh này PASCAL dành một ô nhớ với tên là So_PI và gán giá trị cho ô nhớ này là 3.14. Tương tự như với biến R, trong biểu thức So_PI*R*R, khi tính toán Pascal sẽ thay hằng số So_PI bằng giá trị 3.14 được lưu trong ô nhớ So_PI.

Câu lệnh S:= So_PI*R*R được sử dụng để giải thích cho HS về lệnh gán. HS đã biết cách khai báo biến R, cách gán giá trị cho biến R thông qua lệnh Readln(). Cách gán giá trị cho biến S ở đây là dùng lệnh gán, kí hiệu là :=. Gặp lệnh này, Pascal sẽ tính giá trị của biểu thức ở bên phải phép gán và gán giá trị này cho biến ở bên trái dấu gán. Cụ thể, Pascal sẽ tính toán biểu thức So_PI*R*Rở bên phải dấu :=, sau đó mang giá trị vừa tính được đặt vào ô nhớ

S. Cần lưu ý HS đây không có nghĩa như dấu bằng trong toán học.

Lưu ý, trong TP đã đinh nghĩa sẵn hàm Pi để cho giá trị của số p, vì vậy thực chất chương trình trên có thể không cần khai hằng số So_PI. Tuy nhiên, tại thời điểm này giáo viên không đề cập đến điều này để tránh gây phức tạp vấn đề.

Có thể dựa vào sự khác nhau giữa hai khai báo biến trong chương trình này để giới thiệu cho HS cần thiết phải có sự phù hợp giữa kiểu của biến với kiểu dữ liệu. Cụ thể, biến R

được khai báo với kiểu integer thì khi nhập bán kính người dùng chỉ được phép nhập các giá trị nguyên. Nếu dạy cùng với máy tính, máy chiếu GV có thể cho HS quan sát trực quan tình huống báo lỗi khi nhập bán kính là số thực.

Có thể yêu cầu HS giải thích tại sao lại khai báo S là kiểu thực, nếu khai báo là kiểu nguyên có được không? Qua câu hỏi này HS cần nhận thấy được Sphải có kiểu là số thực bởi vì So_PIlà số thực, nên kết quả của biểu thức So_PI*R*R là số thực.

Về vấn đề hợp kiểu của biến với giá trị gán cho biến, ở đây chỉ cần HS biết được nếu biến kiểu nguyên thì chỉ có thể được gán giá trị nguyên, nếu biến có kiểu thực thì có thể được gán giá trị thực. Không nên giới thiệu, phân tích sâu, chi tiết những tình huống ngoại lệ hoặc sự biến đổi kiểu dữ liệu ở đây.

Các chương trình ví dụ trên đây còn có thể được sử dụng để giới thiệu cho HS về việc kết hợp giữa lệnh write(), writeln()read(), readln() để tạo giao diện nhập, xuất dữ liệu.

Để chuẩn bị cho bài thực hành 3, GV có thể ra bài tập để học sinh tập khai báo biến trong Pascal, cụ thể như: khai báo biến để lưu giữ tuổi của một người; khai báo biến để lưu giữ tên người, khai báo biến để lưu cân nặng, chiều cao người. HS cần giải thích được việc lựa chọn kiểu dữ liệu phù hợp.

Cuối bài học này, cần khái quát cho HS biết biến, hằng là những đại lượng có trong mọi ngôn ngữ lập trình. Trên đây là những ví dụ được viết trong ngôn ngữ Pascal.

Lưu ý: Việc sử dụng biến đã giúp cải tiến chương trình ban đầu để cho phép người sử dụng có thể tính diện tích hình tròn với bán kính nhập từ bàn phím. Điều đó đã góp phần lí giải ý nghĩa, lợi ích của biến trong chương trình. Tuy nhiên, ví dụ trên lại chưa làm rõ ý nghĩa của

hằng trong chương trình.

Thử hình dung, nếu trong chương trình trên sử dụng So_PI nhiều lần, tức là nếu có nhiều biểu thức dùng đến So_PI như tính diện tích, tính chu vi của nhiều hình tròn chẳng hạn. Trong trường hợp không sử dụng hằng thì ở tất cả các biểu thức cần dùng số Pi đều phải viết giá trị số là 3.14. Giả sử sau đó muốn tính toán với độ chính xác cao hơn, chẳng hạn với số Pi là 3.1416, thì người lập trình phải tìm tất cả các chỗ mà số Pi đã được viết là 3.14 để thay bằng 3.1416. Như vậy sẽ mất thời gian và dễ nhầm lẫn.

Nhưng nếu chương trình sử dụng hằng So_PI, được khai báo ban đầu là Const So_PI = 3.14; và sau đó trong các công thức có sử dụng đến số Pi, thay vì phải viết là 3.14 người lập trình dùng hằng So_PI thay thế vào đó. Vì vậy, nếu muốn thay đổi giá trị của số Pi trong toàn bộ chương trình từ 3.14 sang 3.14.16 thì người lập trình chỉ cần tiến hành một chỉnh sửa duy nhất câu lệnh khai báo ở đầu chương trình thành So_PI = 3.1416;, không cần phải chỉnh sửa các biểu thức trong chương trình. Khi đó tất cả các biểu thức dùng hằng So_PI trong chương trình đều được tính toán với số Pi có giá trị mới là 3.1416.

Tình huống này là ví dụ làm rõ một trong những lợi ích và ý nghĩa của hằng trong lập trình. (adsbygoogle = window.adsbygoogle || []).push({});

Nếu khả năng tiếp thu của HS tốt và còn thời gian, sau khi đã hoàn thành bài học, căn cứ vào giải thích ý nghĩa của hằng ở trên, giáo viên có thể lấy một chương trình minh hoạ ý nghĩa, lợi ích của hằng cho HS. Phần giải thích về ý nghĩa, lợi ích của hằng không bắt buộc phải giới thiệu cho HS.

3. Hướng dẫn trả lời câu hỏi và bài tập

Bµi 1. Xét về mặt lập trình, biếnđại lượng được dùng để lưu trữ dữ liệu và dữ liệu được biến lưu trữ có thể thay đổi trong khi thực hiện chương trình. Xét về mặt lưu trữ dữ liệu, có thể xem biến là "tên" của một vùng nhớ được dành sẵn để lưu dữ liệu trong suốt quá trình thực hiện chương trình.

Gán giá trị cho một biến về thực chất là lưu dữ liệu tương ứng vào vùng nhớ được đặt tên và dành riêng cho biến. Việc thực hiện các tính toán và xử lí với biến có nghĩa là thực hiện tính toán và xử lí với dữ liệu được gán đó.

Giả sử X được khai báo là biến với kiểu dữ liệu số nguyên và X được gán dữ liệu là số 5. Sau khi khai báo, chương trình sẽ dành riêng một vùng nhớ nào đó cho biến X, và khi gán 5 cho X thì vùng nhớ đó lưu dữ liệu 5. Lệnh ghi X ra màn hình có nghĩa là ghi số 5 ra màn hình.

Lưu ý đối với giáo viên. Khi một vùng nhớ được khai báo để lưu dữ liệu làm giá trị của một biến, vùng nhớ đó sẽ không được phép sử dụng vào mục đích khác. Do vậy, một trong những kĩ năng lập trình là sử dụng càng ít biến càng tốt, nhất là trong những trường hợp việc sử dụng bộ nhớ bị hạn chế. Nhưng với công nghệ hiện nay, bộ nhớ máy tính đã có dung lượng rất lớn nên vấn đề hạn chế sử dụng biến trong chương trình đã không còn là vấn đề cấp thiết.

Bµi 2. Việc khai báo biến gồm: Khai báo tên biến và khai báo kiểu dữ liệu của biến.

Khi khai báo biến, ngoài việc tên biến được đưa vào danh sách các đối tượng quản lí, máy tính (thông qua chương trình dịch) sẽ xác định kiểu của biến và dành một vùng nhớ có độ lớn thích hợp với phạm vi kiểu của biến để lưu giá trị của biến. Ví dụ, cũng để lưu các giá trị là số nguyên, khi khai báo biến kiểu byte, máy tính chỉ dành vùng nhớ có độ lớn 1 byte, nhưng khi khai báo biến kiểu nguyên, máy tính sẽ dành vùng nhớ có độ lớn 2 byte, hoặc vùng nhớ 6 byte được dành cho biến được khai báo với kiểu số thực,... Nhờ thế việc sử dụng bộ nhớ sẽ hiệu quả hơn. Ngoài ra máy tính sẽ biết áp dụng các phép toán thích hợp đối với giá trị của biến.

Bµi 3. Đáp án: a) Hợp lệ; b) Không hợp lệ; c) Hợp lệ; d) Không hợp lệ.

Bµi 4. Mặc dù đều cùng phải khai báo trước khi có thể sử dụng trong chương trình, sự khác nhau giữa biến và hằng là ở chỗ giá trị của hằng không thay đổi trong suốt quá trình thực hiện chương trình, còn giá trị của biến thì có thể thay đổi được tại từng thời điểm thực hiện chương trình.

Bµi 5. Không thể gán lại giá trị 3.1415 cho Pi trong phần thân chương trình vì giá trị của hằng không thay đổi trong suốt quá trình thực hiện chương trình.

Bµi 6. a) Hợp lệ; b) Không hợp lệ vì tên biến không hợp lệ; c) Không hợp lệ vì hằng phải được cho giá trị khi khai báo; c) Không hợp lệ vì hằng phải được cho giá trị khi khai báo; d) Không hợp lệ vì không được gán giá trị cho biến khi khai báo (cách gán giá trị cho biến cũng không đúng cú pháp).

Bµi 7. Các lỗi trong chương trình: (1) Thừa dấu bằng ở dòng 1 (chỉ cần dấu hai chấm); (2) Thừa dấu hai chấm ở dòng 2 (với hằng chỉ cần dấu bằng); (3) Thiếu dấu chấm phẩy ở dòng 4; (4) Khai báo kiểu dữ liệu của biến b không phù hợp: Khi chia hai số nguyên, kết quả luôn luôn là số thực, cho dù có chia hết hay không. Do đó cần phải khai báo biến b là biến có kiểu dữ liệu số thực.

Bµi 8. Cách khai báo hợp lí:

a) Các biến a h là kiểu số nguyên; biến S: kiểu số thực.

b) Cả bốn biến a, b, c d là các kiểu số nguyên.

Bµi 9. Cần sử dụng các biến sau đây với mỗi học sinh: một biến kiểu xâu để lưu tên, ví dụ

Hoa, Mai,..., một biến kiểu số nguyên để lưu điểm, ví dụ Diem_Hoa, Diem_Mai; ngoài ra cần một biến Trungbinhlà biến kiểu số thực để ghi điểm trung bình của cả lớp.

Bµi 10. Chương trình Pascal có thể như sau đây:

uses crt;

var r: integer; C,S: real;

begin

clrscr;

write('Nhap ban kinh r = '); readln(r); C:=2*Pi*r;

S:=Pi*r*r;

writeln('Chu vi duong tron bang ',C:8:2); writeln('Dien tich hinh tron bang ',S:8:2);

end.

Một phần của tài liệu sgv tin 8 (Trang 33 - 38)