Bài 1.Đáp án:
a) INPUT: Danh sách họ của các học sinh trong lớp. OUTPUT: Số học sinh có họ Trần.
b) INPUT: Dãy n số.
OUTPUT: Tổng của các phần tử lớn hơn 0. c) INPUT: Dãy n số.
OUTPUT: Số các số có giá trị nhỏ nhất.
Bài 2. Sau ba bớc, x có giá trị ban đầu của y và y có giá trị ban đầu của
Bài 3.Mô tả thuật toán:
INPUT: Ba số dơng a >0, b >0 và c >0.
OUTPUT: Thông báo "a, b và c có thể là ba cạnh của một tam giác"hoặc thông báo "a, b và c không thể là ba cạnh của một tam giác".
Bớc 1. Tính a + b. Nếu a + b ≤ c, chuyển tới bớc 5. Bớc 2. Tính b + c. Nếu b + c ≤ c, chuyển tới bớc 5.
Bớc 3. Tính a + c. Nếu a + c ≤ b, chuyển tới bớc 5.
Bớc 4. Thông báo "a, b và c có thể là ba cạnh của một tam
giác" và kết thúc thuật toán.
Bớc 5. Thông báo "a, b và c không thể là ba cạnh của một tam
giác" và kết thúc thuật toán.
Bài 4.Có thể giải bài toán này bằng cách sử dụng một biến phụ hoặc
không dùng biến phụ.
Thuật toán 1. Sử dụng biến phụ z.
INPUT: Hai biến x và y.
OUTPUT: Hai biến x và y có giá trị tăng dần.
Bớc 1. Nếu x ≤ y, chuyển tới bớc 5.
Bớc 2. z ← x. Bớc 3. x ← y.
Bớc 4. y ← z.
Bớc 5. Kết thúc thuật toán.
Thuật toán 2. Không sử dụng biến phụ (xem bài tập 2 ở trên).
INPUT: Hai biến x và y.
OUTPUT: Hai biến x và y có giá trị tăng dần.
Bớc 1. Nếu x ≤ y, chuyển tới bớc 5. Bớc 2. x ← x + y.
Bớc 3. y ← x − y. Bớc 4. x ← x − y.
Bài 5. Trớc hết, nếu cần, ta hoán đổi giá trị hai biến x và y để chúng có giá trị tăng dần. Sau đó lần lợt so sánh z với x và z với y, sau đó thực hiện các bớc hoán đổi giá trị cần thiết (xem lại ví dụ 5 trong bài 5, SGK).
INPUT: Ba biến x, y và z.
OUTPUT: Ba biến x, y và z có giá trị tăng dần.
Bớc 1. Nếu x ≤ y, chuyển tới bớc 3.
Bớc 2. z ← x, x ← y, y ← z. (Sau bớc này x và y có giá trị tăng
dần.)
Bớc 3. Nếu y ≤ z, chuyển tới bớc 6.
Bớc 4. Nếu z < x, t ← x, x ← z và z ← t, (với t là biến trung gian)
và chuyển đến bớc 6.
Bớc 5. t ← y, y ← z và z ← t.
Bớc 6. Kết thúc thuật toán.
Bài 6. a) Tính tổng các phần tử của dãy số A = {a1, a2,..., an} cho trớc. INPUT: n và dãy n số a1, a2,..., an.
OUTPUT: Tổng S = a1 + a2 +... + an.
Bớc 1. S ← 0; i ← 0.
Bớc 2. i ← i + 1.
Bớc 3. Nếu i ≤ n, S ← S + ai và quay lại bớc 2.
Bớc 4. Thông báo S và kết thúc thuật toán.
b) Tìm số nhỏ nhất trong dãy n số a1, a2, ..., an cho trớc. Thuật toán này tơng tự nh thuật toán tìm giá trị lớn nhất trong dãy n số đã cho (xem ví dụ 6, bài 5). Điều khác biệt là thêm các bớc nhập số n và dãy n số a1, a2, ..., an.
INPUT: n và dãy n số a1, a2,..., an. OUTPUT: Min = Min{ a1, a2, ..., an}
Bớc 1. Nhập n và dãy n số a1, a2,..., an.
Bớc 2. Gán Min ← a1; i ← 1.
Bớc 3. i ← i + 1.
Bớc 5. Nếu ai < Min, gán Min ← ai rồi quay lại bớc 3. Trong trờng hợp ngợc lại, quay lại bớc 3.
Bớc 6. Ghi giá trị Min ra màn hình và kết thúc thuật toán.
Bài 7. a) Đếm số các số dơng trong dãy số A = {a1, a2,.., an} cho trớc. INPUT: n và dãy n số a1, a2,..., an.
OUTPUT: Soduong = Số các số ai > 0.
Bớc 1. Gán Soduong ← 0. Bớc 2. i ← i + 1.
Bớc 3. Nếu i > n, chuyển đến bớc 5.
Bớc 4. Nếu ai > 0, gán Soduong ← Soduong +1 rồi quay lại bớc 2. Trong trờng hợp ngợc lại, quay lại bớc 2.
Bớc 5. Thông báo giá trị Soduong và kết thúc thuật toán.
b) Tìm vị trí của số dơng đầu tiên trong dãy số A = {a1, a2,..., an} cho trớc, tính từ phải sang trái.
INPUT: n và dãy n số a1, a2,..., an.
OUTPUT: Vitri = Vị trí của số dơng đầu tiên trong dãy số a1, a2,...,
an, tính từ phải sang trái.
Bớc 1. Gán i ← n.
Bớc 2. Nếu ai > 0, chuyển tới bớc 5. Bớc 3. Gán i ← i − 1.
Bớc 4. Nếu i < 1, chuyển tới bớc 5; ngợc lại, quay lại bớc 2. Bớc 5. Thông báo giá trị Vitri = i và kết thúc thuật toán.
Bài 8. Tính tổng các số dơng trong dãy số A = {a1, a2,..., an} cho trớc. INPUT: n và dãy n số a1, a2,..., an.
OUTPUT: S = Tổng các số ai > 0 trong dãy a1, a2,..., an.
Bớc 1. S ← 0; i ← 0. Bớc 2. i ← i + 1.
Bớc 3. Nếu ai > 0, S ← S + ai; ngợc lại, giữ nguyên S.
Bớc 4. Nếu i ≤ n, và quay lại bớc 2.
Bài 6. Câu lệnh điều kiện
1. Mục đích, yêu cầu
• Biết sự cần thiết của cấu trúc rẽ nhánh trong lập trình.
• Biết cấu trúc rẽ nhánh đợc sử dụng để chỉ dẫn cho máy tính thực hiện các thao tác phụ thuộc vào điều kiện.
• Hiểu cấu trúc rẽ nhánh có hai dạng: Dạng thiếu và dạng đủ. • Biết mọi ngôn ngữ lập trình đều có câu lệnh để thể hiện cấu
trúc rẽ nhánh.
• Hiểu cấu trúc, hoạt động câu lệnh điều kiện dạng thiếu và dạng đủ trong Pascal.
• Bớc đầu viết đợc câu lệnh điều kiện trong Pascal.
2. Những điểm cần lu ý và gợi ý dạy học
Trớc khi bắt đầu bài học mới, GV có thể kiểm tra bài cũ và yêu cầu học sinh nhận xét về thứ tự thực hiện câu lệnh trong các chơng trình đã học. GV cần nhấn mạnh cho HS biết rằng: các lệnh trong chơng trình đ- ợc thực hiện theo thứ tự từ trên xuống dới. Thực hiện các lệnh tuần tự từ trên xuống dới là một cấu trúc điều khiển của ngôn ngữ lập trình.
Bắt đầu bài học mới, GV có thể xuất phát từ những hoạt động phụ thuộc vào điều kiện trong đời sống để dẫn dắt HS đến sự cần thiết cần có cấu trúc rẽ nhánh trong ngôn ngữ lập trình. Nhiều bài toán mà máy tính giúp con ngời giải quyết là những vấn đề của đời sống thực tiễn. Trong thực tiễn, một công việc có thể đợc thực hiện nếu nh một điều kiện nào đó đợc thoả mãn. Vì vậy, mọi ngôn ngữ lập trình đều phải có cấu trúc điều khiển cho phép giải quyết các tình huống này. Nghĩa là, trong chơng trình một số câu lệnh có thể đợc thực hiện hoặc không đợc thực hiện phụ thuộc vào một điều kiện cụ thể nào đó.
Cũng từ những ví dụ về hoạt động phụ thuộc vào điều kiện, GV có thể khái quát lên hai cấu trúc rẽ nhánh dạng thiếu và dạng đủ bằng ngôn ngữ tự nhiên nh sau:
Nếu... thì...
Nếu... thì.... không thì...
Tơng ứng với hai cấu trúc rẽ nhánh dạng thiếu và dạng đủ, trong Pascal có hai câu lệnh điều kiện dạng thiếu và dạng đủ nh sau:
Dạng thiếu: if <điều kiện> then <câu lệnh>;
Dạng đủ: if <điều kiện> then <câu lệnh 1> else <câu
lệnh 2>;
Sau đó giới thiệu cho HS về sơ đồ hoạt động của câu lệnh điều kiện dạng thiếu và dạng đủ.
(Xuân sửa lu đồ này nhé)
ở dạng thiếu: Nếu điều kiện thoả mãn thì câu lệnh đợc thực hiện, ngợc lại thì bỏ qua câu lệnh.
(Xuân sửa lu đồ này nhé)
ở dạng đủ: Nếu điều kiện thoả mãn thì câu lệnh 1 đợc thực hiện, ngợc lại thì thực hiện câu lệnh 2.
Trong đó, câu lệnh, câu lệnh 1, câu lệnh 2 là câu lệnh của Pascal.
if <điều kiện> then <câu lệnh>;
Điều kiện thờng là phép so sánh (lu ý, do HS THCS cha học về
biểu thức quan hệ nên ở đây dùng cụm từ phép so sánh để nói về điều kiện trong câu lệnh điều kiện). Phép so sánh cho kết quả là đúng tơng đ- ơng điều kiện đợc thoả mãn, ngợc lại phép so sánh cho kết quả sai tơng đơng với điều kiện không thoả mãn.
Trong SGK dành mục 2 và mục 3 để nói về điều kiện và phép so sánh. Trọng tâm của hai mục này là cần cho HS biết trong lập trình điều kiện thờng đợc thể hiện bằng phép so sánh (biểu thức so sánh) và khái niệm điều kiện đợc thoả mãn (hay không đợc thoả mãn) trong đời sống tơng đơng với khái niệm phép so sánh cho kết quả là đúng (hay sai) trong ngôn ngữ lập trình.
Mặc dù các phép so sánh, kí hiệu các phép so sánh trong Pascal đã đợc giới thiệu ở bài học trớc. Tuy nhiên, HS cha đợc luyện tập, do vậy GV cần lu ý hớng dẫn HS luyện tập về phép so sánh cùng với việc tìm hiểu, tập viết câu lệnh điều kiện trong bài học này.
Đến đây GV có thể sử dụng các ví dụ ở mục 5 (SGK) để HS luyện tập nhằm hiểu rõ về hoạt động của câu lệnh điều kiện dạng thiếu, dạng đủ, biết ý nghĩa câu lệnh, câu lệnh 1, câu lệnh 2 và điều kiện. Cần dành thời gian thích đáng cho HS luyện tập qua các ví dụ minh hoạ (khoảng 1 tiết học). Các ví dụ ở đây cần đơn giản, dễ hiểu để HS có thể dễ dàng nắm bắt đợc hoạt động của câu lệnh điều kiện, ý nghĩa của biểu thức điều kiện, câu lệnh. Tránh ra những ví dụ quá phức tạp về điều kiện, nhiều phép so sánh.
Cuối bài học GV cần khái quát hoá để HS biết cấu trúc rẽ nhánh, hoạt động của cấu trúc rẽ nhánh là giống nhau ở mọi ngôn ngữ lập trình. Nhng mỗi ngôn ngữ lập trình lại có những câu lệnh riêng để thể hiện cấu trúc rẽ nhánh.
Lu ý: Hoàn toàn có thể theo các trình tự giới thiệu trong SGK để tiến hành dạy học bài học này. Tuy nhiên, tiến trình dạy học theo cách giới thiệu ở trên là một phơng án khả thi. Phơng án này đi từ câu lệnh cụ thể của Pascal, sau đó khái quát thành những kiến thức, nguyên tắc chung cho mọi ngôn ngữ lập trình. Căn cứ vào điều kiện thực tế, GV chủ động lựa chọn cách tiến hành phù hợp.
Việc dịch câu lệnh if... then... và if... then... esle... ra tiếng Việt t- ơng ứng là nếu... thì... và nếu... thì... không thì.... có thể là cần thiết cho HS dễ nhớ ý nghĩa của câu lệnh, nhất là với HS cha đợc học tiếng Anh.
3. Hớng dẫn trả lời câu hỏi và bài tập
Bài 1.Có thể nêu vài ví dụ về các hoạt động hằng ngày phụ thuộc vào
điều kiện. Dới đây là một số ví dụ:
a) Nếu đạt điểm tổng kết cả năm cao hơn 8.5, em sẽ đạt danh hiệu "Học sinh giỏi".
b) Nếu không đợc cắm điện, máy tính để bàn của em sẽ không hoạt động đợc.
c) Nếu bị bệnh, em (cần phải) đi đến phòng khám để bác sĩ khám bệnh.
d) Nếu không đợc tới đủ nớc đúng thời kì phát triển, lúa sẽ không cho thu hoạch cao.
Bài 2. Đáp án: a) Đúng; b) Đúng; c) Sai; d) Sai; e) Sai, nếu x ≥ 1.
Bài 3. Giả sử Điểm_1 là số điểm của ngời thứ nhất và Điểm_2 là số điểm của ngời thứ hai, ngoài ra một ngời thứ nhất trong đầu một số tự nhiên n < 10.
Điều kiện ở trò chơi là ngời thứ hai đoán đúng số n. Khi đó
Điểm_2 đợc cộng thêm 1; ngợc lại, Điểm_2 đợc giữ nguyên. Tơng
tự, nếu ngời thứ hai nghĩ số tự nhiên m, và điều kiện thứ hai là ngời thứ nhất đoán đúng số m đó. Khi đó Điểm_1 đợc cộng thêm 1; ng- ợc lại, Điểm_1 đợc giữ nguyên.
Điều kiện ở trò chơi là sau 10 lần, nếu Điểm_1 > Điểm_2 thì ngời thứ nhất đợc tuyên bố thắng cuộc; ngợc lại, ngời thứ hai thắng. Trờng hợp Điểm_1 = Điểm_2 thì không có ngời thắng và ngời thua.
Bài 4. Điều kiện để điều khiển chiếc khay trong trò chơi ngời chơi nhấn phím mũi tên → hoặc ←. Nếu ngời chơi nhấn phím →, biểu tợng chiếc khay sẽ di chuyển sang phải một đơn vị khoảng cách; nếu phím ← đợc nhấn, biểu tợng chiếc khay sẽ di chuyển sang trái. Nếu một phím khác ngoài hai phím mũi tên trên đợc nhấn, chiếc khay vẫn giữ nguyên vị trí.
Bài 5. a) Sai (thừa dấu hai chấm);
b) Sai (thừa dấu chấm phẩy thứ nhất); c) Sai (thừa dấu chấm phẩy sau từ then);
d) Đúng, nếu phép gán m:=n không phụ thuộc điều kiện x>5; ngợc lại, sai và cần đa hai câu lệnh a:=b; m:=n; vào giữa
cặp từ khoá begin và end;
e) Sai (thừa dấu chấm phẩy thứ nhất); f) Đúng.
Bài 6. a) Vì 45 chia hết cho 3, điều kiện đợc thoả mãn nên giá trị của X
đợc tăng lên 1, tức bằng 6; b) Điều kiện không đợc thoả mãn nên câu lệnh không đợc thực hiện, tức X giữ nguyên giá trị 5.
Bài 7.Thuật toán:
Bớc 1. Nhập số n.
Bớc 2. Nếu n chia hết cho 2, ghi ra màn hình "n là số chẵn"; ngợc
lại, ghi ra màn hình "n là số lẻ".
Bớc 3. Kết thúc thuật toán.
Bài 8. Chơng trình Pascal:
uses crt;
var X,Y,Z: real;
begin
clrscr;
write('Nhap so X = '); readln(Y); write('Nhap so Y = '); readln(Y);
if X>Y then begin Z:=X; X:=Y; Y:=Z; writeln(X,' ',Y);
readln
end.
Bài 9. Thuật toán:
Bớc 1. Nhập ba số A, B và C.
Bớc 2. Nếu A > B, X ← A, A ← B, B ← X. Bớc 3. Nếu C > A, X ← A, A ← C, C ← X. Bớc 4. Nếu C < B, X ← B, B ← C, C ← X.
Bớc 5. Ghi giá trị các biến theo thứ tự A, B và C và kết thúc
Chơng trình Pascal: uses crt; var A, B, C, X: integer; begin clrscr; write('Nhap so A: '); readln(A); write('Nhap so B: '); readln(B); write('Nhap so C: '); readln(C);
if A>B then begin X:=A; A:=B; B:=X end; if C<A then begin X:=A; A:=C; C:=X end; if C<B then begin X:=B; B:=C; C:=X end; writeln(A,' ',B,' ',C);
readln;
end.
Bài 10. Thuật toán:
Bớc 1. Nhập ba số A, B và C.
Bớc 2. Nếu A + B < C hoặc B + C < A hoặc C + A < B, thông báo A, B và C không phải là ba cạnh của một tam giác và
chuyển tới bớc 5.
Bớc 3. Nếu A2 + B2 = C hoặc B2 + C2 = A2 hoặc C2 + A2 = B, thông
báo A, B và C là ba cạnh của một tam giác vuông và chuyển tới bớc 5.
Bớc 4. Nếu A = B và B = C, thông báo A, B và C là ba cạnh của
một tam giác đều; ngợc lại, nếu A = B hoặc B = C hoặc A =
C, thông báo A, B và C là ba cạnh của một tam giác cân. Bớc 5. Kết thúc thuật toán. Chơng trình Pascal: program Sap_xep; uses crt; var A, B, C, X: integer; begin
clrscr;
write('Nhap so A: '); readln(A); write('Nhap so B: '); readln(B); write('Nhap so C: '); readln(C);
if (A+B<C) or (B+C<A) or (A+C<B)then
writeln('Day khong la ba canh cua mot tam giac')
else if (A*A=B*B+C*C) or (B*B=A*A+C*C) or
(C*C=A*A+B*B) then
writeln('Day la ba canh cua tam giac vuong')
else if (A=B) and(B=C) and (A=C) then
writeln('Day la ba canh cua tam giac deu')
else if (A=B) or (B=C) or (C=A)then
writeln('Day la ba canh cua tam giac can')
else
writeln('Day chi la ba canh cua tam giac thuong');
readln;
end.
Bài thực hành 4. Sử dụng lệnh rẽ nhánh
1. Mục đích, yêu cầu
• Viết đợc đợc câu lệnh điều kiện if...then trong chơng trình;
• Rèn luyện kĩ năng ban đầu về đọc các chơng trình đơn giản và hiểu đợc ý nghĩa của thuật toán sử dụng trong chơng trình.
2. Những điểm cần lu ý và gợi ý dạy học
Bài này là bài đầu tiên HS thực hành sử dụng lệnh if... then. Do vậy, các ví dụ cần đơn giản, dễ hiểu để HS dễ dàng nhận ra ý nghĩa, hoạt động của câu lệnh điều kiện, biểu thức điều kiện, câu lệnh trong cấu trúc rẽ nhánh.
HS đã đợc làm quen với thuật toán này ở ví dụ 4, bài 5. Do vậy, nói chung HS sẽ không gặp khó khăn về thuật toán này khi tìm hiểu chơng trình Sap_xep ở bài tập 1 của bài thực hành này. Hoàn toàn có thể sử dụng chơng trình Sap_xep để đạt mục tiêu thực hành sử dụng câu lệnh
if... then...else.
Tuy nhiên, dới đây xin giới thiệu một phơng án về cơ bản vẫn dựa