Giáo án Tin học 11 tiết 24: Bài tập và thực hành số 4
Bài 2: SGK tr.66
Bài toán: Cho mảng A gồm N phần tử. Hãy viết chương trình tạo mảng B[1.N], trong đó B[i] là tổng của i phần tử đấu tiên của A.
*Chương trình: (SGK tr.66)
*Chương trình được chỉnh sửa lại như sau:
Program SubSumB;
Const Nmax = 100;
Type MyArrInt = Array[1.Nmax] of integer;
Var n, i, j : integer;
A, B : MyArrInt;
BEGIN
Randomize;
Write(Nhap n = ); readln(n);
For i := 1 to n do
A[i] := random(300) - random(300);
For i:= 1 to n do write(A[i]);
Writeln;
Ngày soạn: 19/01/2008 BÀI TẬP VÀ THỰC HÀNH SỐ 4 I. MỤC TIÊU BÀI HỌC: 1. Kiến thức: -Củng cố cho HS những kiến thức cơ bản khi lập trình với kiểu dữ liệu mảng; -Làm quen với thuật toán Sắp xếp đơn giản. 2. Kỹ năng: -Rèn luyện kĩ năng sử dụng kiểu dữ liệu có cấu trúc, kĩ năng diễn đạt thuật toán bằng chương trình sử dụng kiểu dữ liệu kiểu mảng; -Rèn luyện kĩ năng nhận xét, phân tích và đề xuất cách giải bài toán sao cho chương trình chạy nhanh hơn. 3. Thái độ: Tự giác, chủ động trong khi thực hành. II. CHUẨN BỊ: 1. Tài liệu, bài tập: SGK, SBT, SGV. 2. Dụng cụ, thiết bị: Phòng máy vi tính. III. TIẾN TRÌNH LÊN LỚP: 1. Ổ định, tổ chức lớp: CBL báo cáo sĩ số. 2. Kiểm tra bài cũ: thông qua bài tập thực hành trên máy. 3. Bài giảng: Hoạt động của Thầy và Trò Nội dung ghi bảng Hoạt động 1: -Nội dung: Tìm hiểu CT diễn đạt của TT sắp xếp. -Mục tiêu: HS hiểu được CT và TT sắp xếp đơn giản. -Các bước tiến hành: GV: Gợi ý cho HS TT sắp xếp tăng dần. HS: Chú ý theo dõi những dẫn dắt của GV để trả lời câu hỏi. GV: Yêu cầu HS đưa ra các bước để sắp xếp các phần tử của một mảng không giảm. HS: -Lần lượt lấy từng phần tử từ trái qua phải; -Cứ mỗi phần tử ta đem so sánh lần lượt với các phần tử đứng bên phải của nó; -Nếu phần tử bên phải nhỏ hơn thì đổi chỗ. GV: Yêu cầu HS tìm hiểu CT, SGK tr.65 HS: Tìm hiểu CT, suy nghĩ và trả lời câu hỏi GV: Vai trò của biến i, j trong CT? Mỗi vòng lặp for trong CT sắp xếp có ý nghĩa gì? HS: Biến i, j dùng làm chỉ số. Mỗi vòng lặp for ứng với mỗi phép duyệt lần lượt. GV: Lệnh T := A[i]; A[i] := A[i+1]; A[i+1] := t; có ý nghĩa gì? HS: Dùng để đổi giá trị A[i] với A[i+1]. GV: Cho HS thực hiện CT. *Sửa CT để giải quyết bài toán ở câu b. GV: Yêu cầu HS viết lệnh để đếm số lần tráo đổi. HS: Dem := Dem +1; GV: Lệnh này được viết vào vị trí nào trong chương trình. HS: Viết ngay sau đoạn lệnh tráo đổi. GV: Yêu cầu HS thực hiện sửa CT và thông báo kết quả. GV: Chiếu CT đã chỉnh sửa lên bảng để HS đối chiếu với CT của HS. Hoạt động 2: -Nội dung: Rèn luyện kĩ năng nhận xét, phân tích và đề xuất cách giải bài toán sao cho chương trình chạy nhanh hơn. -Mục tiêu: HS biết sử dụng kiểu mảng để lập trình giải một bài toán. Biết nhận xét, phân tích và đề xuất phương pháp giải hay. -Các bước tiến hành: GV: Cho HS tìn hiểu chương trình, sau đó GV minh họa cách tạo mảng B[1..n]: i 1 2 3 4 5 A[i] 8 7 5 9 6 for i:= 1 to n for j:= to i B[1] = A[1] = 8 B[2] = A[1] + A[2] = 15 B[3] = A[1] + A[2] + A[3] = 20 B[4] = A[1] + A[2] + A[3] + A[4] = 29 B[5] = A[1] + A[2] + A[3] + A[4] + A[5] = 35 Vậy: B[i] := B[i] + A[j]; i 1 2 3 4 5 B[i] 8 15 20 29 35 GV: Hướng dẫn HS cải tiến chương trình: Nhận xét bài toán ở câ a: *Thứ nhất: B[1] = A[1] *Thứ hai: B[2] = A[1] + A[2] = B[1] + A[2] B[3] = A[1] + A[2] + A[3] = B[2] + A[3] . . . i-1 B[i] = ∑A[n]+ A[i] = B[i-1] + A[i] (i>1) n=1 Từ nhận xét, ta có: B[1] = A[1]; B[i] = B[i-1] + A[i]; (i>1) Bài 1: SGK tr.65 a/ Tìm hiểu và chạy thử chương trình thực hiện thuật toán sắp xếp dãy số nguyên bằng thuật toán tráo đổi với các giá trị khác nhau của n: *Chương trình giải bài toán sắp xếp dãy số (SGK tr.65). b/ Khai báo thêm biến Dem và bổ sung vào chương trình những câu lệnh cần thiết để biến Dem tính số lần thực hiện tráo đổi trong thuật toán. Đưa kết quả tìm được ra màn hình. *Chương trình ở câu a, sau khi bổ sung: Program SapXepB; Uses crt; Const Nmax = 250; Type ArrInt = Array[1..Nmax] of integer; Var n, i, j, t : integer; A : ArrInt; BEGIN Clrscr; Randomize; Write(‘Nhap n = ‘); readln(n); For i := 1 to n do A[i] := random(300) - random(300); For i:= 1 to n do write(A[i]); Writeln; For j:= N downto 2 do For i:= 1 to j-1 do If A[i] > A[i+1] then Begin T := A[i]; A[i] := A[i+1]; A[i+1] := t; End; Writeln(‘Day so da duoc sap xep:’); For i:= 1 to N do Write(A[i]:6); Readln END. Bài 2: SGK tr.66 Bài toán: Cho mảng A gồm N phần tử. Hãy viết chương trình tạo mảng B[1..N], trong đó B[i] là tổng của i phần tử đấu tiên của A. *Chương trình: (SGK tr.66) *Chương trình được chỉnh sửa lại như sau: Program SubSumB; Const Nmax = 100; Type MyArrInt = Array[1..Nmax] of integer; Var n, i, j : integer; A, B : MyArrInt; BEGIN Randomize; Write(‘Nhap n = ‘); readln(n); For i := 1 to n do A[i] := random(300) - random(300); For i:= 1 to n do write(A[i]); Writeln; {Bat dau tao B} For i:= 1 to N do begin B[i] := 0; For j:= 1 to i do B[i] := B[i] + A[j]; End; {Ket thuc tao B} Writeln(‘Day so da tao cho B:’); For i:= 1 to N do Write(B[i]:6); Readln END. 4.Tổng kết nội dung, đánh giá cuối bài: -Thuật toán sắp xếp đơn giản; -Một bài toán có thể có nhiều cách viết thành một chương trình. Cần chọn cách có số phép tính ít nhất. 5.Dặn dò, kế hoạch học tập tiết sau: -Xem lại tất cả các kiến thức đã học: lệnh cơ bản, lệnh điều khiển, kiểu dữ liệu cơ bản, kiểu dữ liệu có cấu trúc; -Xem trước bài: Kiểu xâu. IV. NHỮNG VẤN ĐỀ CẦN RÚT KINH NGHIỆM: ĐỀ TRẮC NGHIỆM TIN HỌC LỚP 11 (15PHÚT) Câu 1: Cho đoạn chương trình sau: Begin x:=a; if a<b then x:=a; end. Cho a=20, b=15. x nhận giá trị nào sau đây? a/ 10 b/ 20 c/ 25 d/ 15 Câu 2: Cho đoạn chương trình sau: i:=1 ; M:= 0; while i<10 do begin M:=M+2; i:=i+1; end. M nhận giá trị nào sau đây? a/ 10 b/ 18 c/ 14 d/ 20 Câu 3: Cấu trúc câu lệnh if-then là: a/ if then b/ if then else c/ a, b đều đúng. d/ a, b đều sai. Câu 4: Chọn câu sai: a/ Trong câu lệnh rẽ nhánh điều kiện là biểu thức lơgic. b/ Cấu trúc rẽ nhánh dùng để mơ tả cấu trúc lặp. c/ Trong câu lệnh while-do câu lệnh sau do sẽ được thực hiện ít nhất một lần. d/ Câu lệnh, câu lệnh1, câu lệnh2 trong câu lệnh if-then là một câu lệnh của ngơn ngữ pascal. Câu 5: Điền vào chỗ trống dưới đây để được đoạn chương trình tìm giá trị lớn nhất trong 2 số a và b: Begin if b>a then max:=b; end. a/ if b<=a then max:=a; b/ else max:=a; c/ a, b đúng. d/ a, b sai. Câu 6: Cho đoạn chương trình sau: T:= 0 For i:=1 to 100 do If (I mod 2 = 0) and (I mod 3 = 0) then T:= T+i; Chọn câu đúng: a/ Chương trình đưa ra tổng các số tự nhiên từ 1 đến 100. b/ Chương trình đưa ra tổng các số tự nhiên chia hết cho 6. c/ Chương trình đưa ra tổng các số tự nhiên chia hết cho 6 trong phạm vi từ 1 đến 100. d/ a, b, c đều đúng. Câu 7: Chọn câu đúng: a/ Cĩ thể tổ chức mọi loại chu trình với câu lệnh while-do. b/ Trong lệnh while-do sau từ khĩa do được phép viết nhiều câu lệnh. c/ Trong lệnh while-do sau từ khĩa do cĩ thể là một lệnh while-do. d/ a, b, c đều đúng. Câu 8: Cho đoạn chương trình sau: If a=3 then x:=y+2 Chọn câu đúng: a/ a=2; y=3; x=5 b/ a=1; y=6; x=8 c/ a=3 y=4; x=6 d/ a, b, c đều đúng. Câu 9: Cho bài tốn: tính tổng và đếm các số tự nhiên chia hết cho 3 trong phạm vi từ 1 đến 100. S:=0; dem:=0 For i:=1 to 100 do If .. then S:=S+1; . end; Chọn câu đúng điền vào chỗ trống ở trên. a/ i mod 3 = 0; begin; dem:=dem+1 b/ i div 3 = 0; dem:=dem+1; begin c/ i mod 3 0; dem:=dem+1; begin d/ a, b, c đều đúng Câu 10: Cho A, B, X là các biến số thực. Chọn câu đúng: a/ if A<B; then X:=X+1; b/ if A<B then X:=A+B; c/ f A<B then X:=A; else X:=B; d/ i if A<B then X:=A else X:=B; ĐÁP ÁN ĐỀ TRẮC NGHIỆM 15PHÚT: Câu1 Câu2 Câu3 Câu4 Câu5 Câu6 Câu7 Câu8 Câu9 Câu10 a x x b x x x c x x x d x x
File đính kèm:
- BT va TH 4_T24.doc