Giáo án Tin học 11 tiết 23: Bài tập và thực hành số 3
Đưa các câu lệnh sau vào những vị trí cần thiết để sửa đổi chương trình ở câu a để chương trình thực hiện đếm số lượng số dương và đếm số lượng số âm của mảng A:
posi, neg: integer;
posi := 0; neg := 0;
if A[i] > 0 then posi := posi + 1
else if A[i] < 0 then neg := neg + 1;
writeln(posi:4, neg:4);
Ngày soạn: 18/01/2008. BÀI TẬP VÀ THỰC HÀNH SỐ 3 I. MỤC TIÊU BÀI HỌC: 1. Kiến thức: Củng cố lại các kiến thức cơ bản về kiểu dữ liệu mảng. 2. Kỹ năng: -Nâng cao kỹ năng sử dụng một số lệnh kiểu dữ liệu mảng trong lập trình, cụ thể: +Khai báo kiểu dữ liệu mảng một chiều; +Nhập/xuất dữ liệu cho mảng; +Duyệt qua tất cả các phần tử của mảng để xử lí từng phần tử của mảng. -Biết giải một số bài toán cơ bản thường gặp. 3. Thái độ: Tự giác, tích cực, chủ động và sáng tạo trong lập trì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 cách sử dụng lệnh và kiểu dữ liệu mảng một chiều qua chương trình có sẵn trong bài 1/63. -Mục tiêu: HS hiểu được chương trình có sẵn ở câu a, biết được kết quả chạy chương trình này, từ đó tìm cách giải quyết câu b. -Các bước tiến hành: GV: Hướng dẫn HS phân tích đề bài. -Xác định input,output? -Viết thuật tĩan và đưa ra hướng giải quyết HS: phân tích đề bài. GV: Lệnh gán A[i] := random(300) - random(300); có ý nghĩa gì? HS: Lệnh gán trên sinh ngẫu nhiên giá trị cho mảng A từ -299 đến 299. GV: Hướng dẩn học sinh viết chương trình HS tự viết chương trình GV: Hướng dẫn HS biên dịch, chạy thử và kiểm tra chương trình. HS: Thực hiện. GV: Hướng dẫn HS sửa chương trình ở câu a để được chương trình giải quyết bài toán ở câu b: -Biến posi và neg dùng để làm gì? -Chức năng của lệnh: if A[i] > 0 then posi := posi + 1 else if A[i] < 0 then neg := neg + 1; HS: - Biến posi và neg dùng để lưu số lượng đếm được số dương và số âm. -Chức năng của lệnh: đếm số dương hoặc số âm. GV: Yêu cầu HS thêm vào vị trí cần thiết để chương trình đếm được số. HS: Thực hiện chỉnh sửa chương trình và chạy chương trình để xem kết quả. GV: Chiếu chương trình đã chỉnh sửa lên bảng. HS: Đối chiếu với chương trình mà HS tự chỉnh sửa. Hoạt động 2: -Nội dung: Hướng dẫn HS viết chương trình tìm phần tử có giá trị lớn nhất trong 2/64 -Mục tiêu: HS hiểu được chương trình có sẵn ở câu a, biết được kết quả chạy chương trình này, từ đó tìm cách giải quyết câu b. -Các bước tiến hành: GV: Hướng dẫn HS phân tích đề bài. HS: phân tích đề bài. GV: Yêu HS nhập nội dung chương trình. HS: viết chương trình, biên dịch, chạy thử và kiểm tra chương trình. GV: Hướng dẫn HS chỉnh sửa chương trình ở câu a để đưa ra chỉ số của các phần tử có cùng giá trị lớn nhất: GV: Nếu muốn tìm phần tử nhỏ nhất, cần sửa chỗ nào? HS: Sửa lại: A[i] > A[j] thành A[i] < A[j] GV: Nếu muốn tìm phần tử lớn nhất (có nhiều phần tử lớn nhất) với chỉ số lớn nhất thì ta sửa chỗ nào? HS: Sửa: for i:= 2 to n do thành for i:= n - 1 downto 1 do GV: Nếu muốn CT ở câu a đưa ra các chỉ số của các phần tử có giá trị lớn nhất thì ta cần phải thêm lệnh gì? Vị trí nào? HS: Cần thêm lệnh in ra các chỉ số có giá trị bằng giá trị lớn nhất tìm được vào vị trí sau khi tìm được giá trị lớn nhất. GV: Yêu cầu HS viết chương trình hoàn thiện cho câu b. GV: Chiếu CT đã chỉnh sửa lên bảng. HS: Đối chiếu với CT mà HS tự chỉnh sửa. Bài 1: SGK tr.63 a/ Tìm hiểu và chạy thử chương trình: program Sum1; uses crt; const nmax = 100; type IntArray=Array[1 . . nmax] of integer; var A : IntArray; s, n, i, k : integer; BEGIN Clrscr; 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; Write(‘Nhap k = ‘); readln(k); S := 0; For i := 1 to n do If A[i] mod k = 0 then s := s + A[i]; Writeln(‘Tong can tinh la: ‘, s); Readln END. b/ Đưa các câu lệnh sau vào những vị trí cần thiết để sửa đổi chương trình ở câu a để chương trình thực hiện đếm số lượng số dương và đếm số lượng số âm của mảng A: posi, neg: integer; posi := 0; neg := 0; if A[i] > 0 then posi := posi + 1 else if A[i] < 0 then neg := neg + 1; writeln(posi:4, neg:4); *Chương trình được sửa như sau: program Sum1b; uses crt; const nmax = 100; type IntArray=Array[1 . . nmax] of integer; var A : IntArray; n, i, posi, neg: integer; BEGIN Clrscr; 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; posi := 0; neg := 0; For i := 1 to n do if A[i] > 0 then posi := posi + 1 else if A[i] < 0 then neg := neg + 1; writeln(posi:4, neg:4); Readln END. Bài 2: SGK tr.64 a/ Tìm hiểu và chạy thử chương trình: (SGK) b/ Chỉnh sửa chương trình để đưa ra chỉ số của các phần tử có cùng giá trị lớn nhất. *Chương trình được sửa như sau: PROGRAM Max_Element_b; uses crt; const nmax = 100; type IntArray=Array[1 . .nmax] of integer; var A : IntArray; n, i, j : integer; BEGIN write(‘Nhap n = ‘); readln(n); for i:= 1 to n do begin write(‘Phan tu thu ‘, i, ‘=’); readln(A[i]); end; j := 1; for i:= 2 to n do if A[i] > A[j] then j:=i; for i:= 1 to n do if A[i] = A[j] then write(i:4); readln END. 4.Tổng kết nội dung, đánh giá cuối bài: Một số thuật toán cơ bản: Tính tổng các phần tử thỏa mãn điều kiện nào đó; Đếm các phần tử thỏa mãn điều kiện nào đó; Tìm phần tử lớn nhất, nhỏ nhất. 5.Dặn dò, kế hoạch học tập tiết sau: -BT: Viết chương trình nhập một mảng một chiều A[1 . . 10] và nhập một số x. Đếm số lượng phần tử trong A có giá trị bằng x. -Xem trước nội dung Bài tập và thực hành số 4. 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 3_T23.doc