Với bài 2, trọng tâm của bài này là cho HS luyện tập với lệnh gán và thực hiện việc tráo đổi giá trị của hai biến x, y. Đây là một công việc hay gặp trong lập trình và qua ví dụ này HS có thể hiểu rõ hơn về biến, cách sử dụng biến. Bài này cũng giới thiệu cách viết câu lệnh nhập nhiều dữ liệu từ bàn phím bằng một câu lệnh writeln hoặc write.
Để thực hành bài này, có thể tiến hành như sau:
Cho HS gõ chương trình trong SGK, tiến hành dịch, chỉnh sửa và cho chạy chương trình.
Do không có thông báo cho người dùng về yêu cầu nhập giá trị tương ứng của các biến x, y nên HS có thể gặp khó khăn không biết nhập thế nào. GV cần hướng dẫn HS cú pháp của câu lệnh và cách nhập hai số nguyên (cách nhau bởi dấu cách) rồi nhấn Enter và quan sát kết quả.
Nên gợi ý cho HS cải tiến chương trình trên để hướng dẫn người sử dụng nhập giá trị cho x, y từ bàn phím. In ra màn hình giá trị của x, y vừa được người sử dụng nhập vào và in ra màn hình giá trị x, y sau khi đã tráo đổi giá trị. Có thể tham khảo chương trình Tinhtien.pas để thực hiện việc này.
84 trang |
Chia sẻ: leddyking34 | Lượt xem: 10574 | Lượt tải: 1
Bạn đang xem trước 20 trang tài liệu Sách giáo viên môn Tin học cấp THCS, để xem tài liệu hoàn chỉnh bạn click vào nút DOWNLOAD ở trên
g 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 tron co ban 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à Đây không phải là lý do hàng đầu phải sử dụng biến. Như thế dễ nhầm vai trò của biến với hằng!
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, 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 S phải có kiểu là số thực bởi vì So_PI là 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() và 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.
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
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.
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.
Đáp án: a) Hợp lệ; b) Không hợp lệ; c) Hợp lệ; d) Không hợp lệ.
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.
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.
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).
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.
Cách khai báo hợp lí:
Các biến a và h là kiểu số nguyên; biến S: kiểu số thực.
Cả bốn biến a, b, c và d là các kiểu số nguyên.
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 Trungbinh Bài này khó hiểu, với mỗi học sinh, cần gì điểm trung bình, còn tên thì 50 HS thì 50 tên khác nhau, 50 điểm khác nhau!!!
là biến kiểu số thực để ghi điểm trung bình của cả lớp.
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.
Bài thực hành 3. Khai báo và sử dụng biến
1. Mục đích, yêu cầu
Thực hiện được khai báo đúng cú pháp, lựa chọn được kiểu dữ liệu phù hợp cho biến.
Kết hợp được giữa lệnh write(), writeln() với read(). readln() để thực hiện việc nhập dữ liệu cho biến từ bàn phím.
Hiểu về các kiểu dữ liệu chuẩn: kiểu số nguyên, kiểu số thực.
Sử dụng được lệnh gán giá trị cho biến.
Hiểu cách khai báo và sử dụng hằng.
Hiểu và thực hiện được việc tráo đổi giá trị của hai biến.
2. Những điểm cần lưu ý và gợi ý dạy học
Chương trình trong câu a, bài 1 là chương trình giả định số tiền phải trả bao gồm số tiền mua hàng (bằng đơn giá nhân với số lượng) và số tiền cước phí vận chuyển (cố định là 10000). Tổng số tiền phải trả bằng số tiền mua hàng cộng với cước phí.
Với bài này HS tập khai báo biến trong Pascal, cần cho HS tìm hiểu cú pháp khai báo biến, đặt tên đúng theo quy định của Pascal, chọn đúng kiểu dữ liệu của biến.
Rèn luyện soạn thảo, dịch, hiệu chỉnh, chạy và kiểm tra kết quả cũng là một mục tiêu của bài này.
Cần hướng dẫn để HS tìm hiểu chức năng của lệnh Readln(tên biến); để nhập giá trị của biến; Sự kết hợp của write() và readln() trong việc nhập giá trị biến từ bàn phím; Việc sử dụng biến trong biểu thức thanhtien:= soluong*dongia+cuocphi.
Các chú thích đặt trong cặp dấu ngoặc {} hoặc (* *) được dùng để giải thích câu lệnh, ý đồ của người viết chương trình. Gặp cặp dấu ngoặc này Pascal bỏ qua, không dịch những nội dung bên trong. Việc viết chú thích trong chương trình đôi khi rất cần thiết để giúp người khác có thể nhanh chóng hiểu được chương trình, thậm chí là để chính người đã viết ra chương trình dễ dàng hơn khi xem lại hoặc chỉnh sửa chương trình của mình.
Có thể gợi ý HS nhập số lượng là một số thực, ví dụ 6.5 chẳng hạn và giải thích hiện tượng xảy ra. Nguyên nhân là do kiểu dữ liệu nhập vào là số thực không phù hợp với kiểu của biến Soluong đã khai báo trong chương trình là số nguyên. Có thể gợi ý để HS thay đổi kiểu của biến số lượng đã khai báo để có thể nhập số lượng là một số thực.
Khi nhập bộ số liệu (1, 35000), kết quả không còn đúng nữa, nguyên nhân của hiện tượng này là do tràn số. Biến Soluong có kiểu là integer nên chỉ cho phép chứa các giá trị trong khoảng từ -32768 đến 32767, giá trị 35000 ngoài khoảng giá trị trên cho nên đã gây ra lỗi, kết quả đưa ra không chính xác. Có thể gợi ý cho HS chỉnh sửa khai báo kiểu dữ liệu để khắc phục hạn chế này.
Một trong những nội dung quan trọng của bài này là giúp học sinh luyện tập việc nhận biết và khai báo kiểu dữ liệu hợp lí cho các biến. Khai báo kiểu dữ liệu hợp lí một mặt sẽ giúp cho việc sử dụng bộ nhớ một cách tối ưu (ví dụ, với đại lượng chỉ nhận giá trị số tự nhiên trong vượt quá 255 thì không cần thiết phải khai báo biến kiểu số nguyên, mà chỉ cần kiểu byte), mặt khác giúp tránh lỗi tràn dữ liệu và dẫn đến kết quả sai. Trong các bài thực hành sau, giáo viên nên lưu ý học sinh đến điểm này.
Với bài 2, trọng tâm của bài này là cho HS luyện tập với lệnh gán và thực hiện việc tráo đổi giá trị của hai biến x, y. Đây là một công việc hay gặp trong lập trình và qua ví dụ này HS có thể hiểu rõ hơn về biến, cách sử dụng biến. Bài này cũng giới thiệu cách viết câu lệnh nhập nhiều dữ liệu từ bàn phím bằng một câu lệnh writeln hoặc write.
Để thực hành bài này, có thể tiến hành như sau:
Cho HS gõ chương trình trong SGK, tiến hành dịch, chỉnh sửa và cho chạy chương trình.
Do không có thông báo cho người dùng về yêu cầu nhập giá trị tương ứng của các biến x, y nên HS có thể gặp khó khăn không biết nhập thế nào. GV cần hướng dẫn HS cú pháp của câu lệnh và cách nhập hai số nguyên (cách nhau bởi dấu cách) rồi nhấn Enter và quan sát kết quả.
Nên gợi ý cho HS cải tiến chương trình trên để hướng dẫn người sử dụng nhập giá trị cho x, y từ bàn phím. In ra màn hình giá trị của x, y vừa được người sử dụng nhập vào và in ra màn hình giá trị x, y sau khi đã tráo đổi giá trị. Có thể tham khảo chương trình Tinhtien.pas để thực hiện việc này.
Về việc tráo đổi giá trị giữa hai biến x và biến y, có thể lấy ví dụ minh hoạ như việc muốn tráo đổi giữa hai cốc nước. Giả sử có hai cốc nước, một cốc nước chứa nước màu đỏ, một cốc nước chứa nước màu xanh. Làm thế nào để tráo đổi nước giữa hai cốc nước này. Đương nhiên là phải dùng cốc thứ ba làm trung gian để thực hiện điều này, cụ thể: Giả sử cốc X chứa nước màu đỏ, cốc Y chứa nước màu xanh và cốc Z là cốc trung gian, không chứa gì cả. Cách tráo đổi nước chứa trong cốc X và cốc Y như sau:;
Đổ nước đỏ trong cốc X sang cốc Z;
Đổ nước xanh trong cốc Y sang cốc X;
Đổ nước đỏ trong cốc Z sang cốc Y.
Sau khi thực hiện như trên nước trong hai cốc đã được tráo sang nhau.
Việc tráo đổi giá trị của biến cũng tương tự, trong chương trình đã phải sử dụng biến z làm biến trung gian để lưu giữ giá trị ban đầu của biến x. Cụ thể:
z:=x; {Lưu giá trị của biến x vào biết z}
x:=y; {Giá trị của biến x được thay bằng giá trị của biến y}
y:=z; { Giá trị của biến y được thay bằng giá trị của biến z, giá trị của biến z lúc này chính bằng giá trị của biết x ban đầu}
* Có một khác biệt cần được lưu ý ở đây. Khi đổ xong nước ở cốc Y sang nước ở cốc X thì cốc Y có nước còn cốc X hết nước. Khác với khi gán X:= Y; thì giá trị biến X bằng giá trị biến Y, nhưng giá trị biến Y không mất. Nếu học sinh thắc mắc thì GV có thể giải thích điều này, nếu học sinh không thắc mắc GV không nên giải thích để tránh làm phức tạp vấn đề.
Chương trình sau khi chỉnh sửa có thể như sau:
Program hoan_doi;
var x,y,z:integer;
begin
write('Nhap gia tri bien x = '); readln(x);
write('Nhap gia tri bien y = '); readln(y);
Writeln('Truoc trao doi, gia tri cua bien x: ', x);
Write('Truoc trao doi, gia tri cua bien y: ', y);
{Bat dau thuc hien trao doi}
z:=x;
x:=y;
y:=z;
{Ket thuc trao doi}
Writeln('Sau trao doi, gia tri cua bien x = ', x);
Write('Sau trao doi, gia tri cua bien y = ', y);
readln
end.
Lưu ý, để HS dễ tiếp thu, trong chương trình trên đã lựa chọn cách viết nhiều lệnh đơn giản, mặc dù có thể ghép một số lệnh thành một lệnh để chương trình ngắn gọn hơn. ví dụ, có thể thay hai lệnh:
Writeln('Truoc trao doi, gia tri cua bien x = ', x);
Write('Truoc trao doi, gia tri cua bien y = ', y);
bằng một lệnh như sau:
Writeln('Truoc trao doi, gia tri cua bien x = ', x, ' y = ', y);
Bài 5. Từ bài toán đến chương trình
1. Mục đích, yêu cầu
Biết khái niệm bài toán, thuật toán;
Biết các bước giải bài toán trên máy tính;
Xác định được Input, Output của một bài toán đơn giản;
Biết chương trình là thể hiện của thuật toán trên một ngôn ngữ cụ thể.
Biết mô tả thuật toán bằng phương pháp liệt kê các bước.
Hiểu thuật toán tính tổng của N số tự nhiên đầu tiên, tìm số lớn nhất của một dãy số.
2. Những điểm cần lưu ý và gợi ý dạy học
Bài toán và thuật toán để giải quyết bài toán là những nội dung rất quan trọng, nếu không nói là quan trọng nhất trong lập trình. Nếu học sinh nắm vững được những kiến thức này thì sẽ dễ dàng hơn rất nhiều trong việc tiếp thu kiến thức trong các bài sau. Vì lẽ đó các tác giả đề xuất dành thời lượng cho Bài 5 là 04 tiết lí thuyết và 02 tiết bài tập. Giáo viên cần tận dụng hết thời gian dành cho bài này để truyền đạt cho học sinh một cách kỹ lưỡng.
Khái niệm bài toán và giải bài toán đã trở thành quen thộc với học sinh trong các môn học khác như Toán, Vật lí,... Bài toán trong tin học không chỉ là những bài toán trong lĩnh vực toán học mà còn có thể là một nhiệm vụ, một công việc cần giải quyết trong cuộc sống thực tiễn (nhiều khi chẳng liên quan gì đến toán học) như: tính điểm trung bình một môn học, một học kì, nấu món ăn hay điều khiển rô-bốt nhặt rác chẳng hạn.
Để cho HS mở rộng nhận thức về khái niệm bài toán mà các em được biết ở môn học khác, có thể sử dụng lại ví dụ về bài toán điều khiển rô-bốt nhặt rác HS đã học ở bài 1. Ví dụ này cho thấy bài toán có thể còn là một công việc, một nhiệm vụ gắn liền với cuộc sống hàng ngày. Do đã được tiếp cận với ví dụ này ở bài học đầu tiên nên việc tìm ra điều kiện cho trước và kết quả thu được của bài toán này sẽ dễ dàng hơn với HS.
Để dẫn dắt đến khái niệm xác định bài toán, GV viên có thể dựa vào giả thiết và kết luận của một bài toán trong môn Toán để dẫn dắt học sinh xác định Input, Output của bài toán trong Tin học. Trong môn toán, thường trước khi bắt đầu giải một bài toán các em đã quen với việc tìm giả thiết và kết luận của bài toán. Trong tin học, phần giả thiết là các điều kiện cho trước (Input), phần kết luận là kết quả cần thu được (Output).
Có thể sử dụng một bài toán đơn giản, quen thuộc với HS để HS dễ dàng tìm ra được điều kiện cho trước (giả thiết) và kết quả cần thu được (kết luận) của bài toán này (không nhất thiết cứ phải lấy ví dụ trong SGK).
Để máy tính có thể "giải" được bài toán thì con người cũng phải chỉ dẫn cho máy tính. Tuy nhiên, sự chỉ dẫn của con người để máy tính thực hiện phải rất cụ thể, chi tiết và đặc biệt là máy tính phải "hiểu" được những chỉ dẫn này.Lặp lại trong đoạn sau!
Có thể đặt câu hỏi với HS: Máy tính có "giải" được bài toán không? Có thể sử dụng ví dụ về rô-bốt nhặt rác để HS thảo luận tìm ra câu trả lời. Việc viết chương trình điều khiển máy tính rẽ phải, tiến, rẽ trái, nhặt rác... là do con người nghĩ ra, máy tính chỉ thực hiện những thao tác theo chỉ dẫn của con người.
Như vậy, con người tìm ra cách thức, chỉ ra các thao tác và trình tự thực hiện các thao tác để giải quyết công việc, máy tính chỉ biết thực hiện các thao tác theo chỉ dẫn. Máy tính không tự giải được bài toán.
Tập hợp các bước để điều khiển rô-bốt nhặt rác chính là một thuật toán.
Có thể mô tả thuật toán bằng cách liệt kê các bước như giới thiệu trong SGK hoặc bằng sơ đồ khối. Tuy nhiên, GV không cần giới thiệu thêm về cách mô tả bằng sơ đồ khối.
HS đã biết máy tính chỉ có thể hiểu được ngôn ngữ máy. Ngôn ngữ lập trình là ngôn ngữ con người sử dụng để viết chương trình. Vì vậy, có thể gợi ý để HS suy luận dẫn đến phải thể hiện thuật toán bằng ngôn ngữ lập trình, cụ thể: Cách mô tả thuật toán với ngôn ngữ tự nhiên thì chỉ có con người mới hiểu, máy tính không hiểu được. Để máy tính có thể hiểu và có thể thực hiện được thuật toán thì cần thể hiện thuật toán bằng ngôn ngữ lập trình. Việc thể hiện thuật toán bằng một ngôn ngữ lập trình để máy tính có thể hiểu, thực hiện được chính là viết chương trình.
Để đi từ bài toán đến chương trình SGK nêu ba bước: Xác định bài toán, xây dựng thuật toán, viết chương trình. Đây là phương án chia bước đơn giản, HS dễ hiểu, dễ tiếp thu. Mặc dù có một số cách chia bước khác, tuy vậy để tránh làm phức tạp hoá vấn đề, GV không cần giới thiệu thêm hay phân tích sâu về các bước ở đây.
Nội dung mục 4 là quan trọng và tương đối khó với HS. Cần dành thời gian thích đáng cho mục này. Nên sử dụng tiết bài tập để bổ sung thêm thời lượng dạy học cho nội dung này. Mục tiêu của các ví dụ ở mục 4 là rèn luyện kĩ năng xác định Input, Ouput và mô tả thuật toán bằng cách liệt kê các bước cùng với việc giới thiệu thuật toán. Các thuật toán giới thiệu ở mục này là những thuật toán cơ bản học sinh cần tiếp thu. Trong đó, thuật toán tìm số lớn nhất của dãy số là thuật toán được yêu cầu cụ thể trong chuẩn kiến thức kĩ năng. Hơn nữa, các ví dụ trong mục này còn đề cập đến những thuật toán liên quan đến các cấu trúc rẽ nhánh, cấu trúc lặp và một số bài toán ở các bài sau. .
Lưu ý rằng tất cả các thuật toán nêu trong mục này và trong phần câu hỏi và bài tập của Bài 5 đều được sử dụng làm ví dụ minh họa hoặc để giải các câu hỏi và bài tập trong các bài sau. Do vậy việc việc rèn luyện kĩ với các
Các file đính kèm theo tài liệu này:
- Sách giáo viên Tin học THCS.doc