Giáo án Tin 11 bài tập và thực hành 2

Đư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);

Bạn đang xem nội dung tài liệu Giáo án Tin học 11 tiết 23: Bài tập và thực hành số 3, để tải tài liệu về máy bạn click vào nút DOWNLOAD ở trên

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

Câu 1: Hãy cho biết sự giống và khác nhau của hai dạng câu lệnh if - then.
Trả lời:
1. Sự giống và khác nhau của hai dạng câu lệnh if-thenHai dạng cầu lệnh if-then như sau:

a) Dạng thiếu


If<điều kiện> then <câu lệnh>;
if <điều kiện> then <câu lệnh 1 >else <câu lệnh 2 > ;trong đó:Điều kiện biểu thức quan hệ hoặc lôgic.Câu lệnh, câu lệnh 1, câu lệnh 2 là một câu lệnh của Pascal.Giống nhau: đều cùng là câu lệnh rẽ nhánh và khi gặp một điều kiện nào đó thì chọn lựa thực hiện thao tác thích hợp.

Khác nhau: Trong câu lệnh if-then dạng thiếu, nếu điều kiện không đúng thì thoát khỏi cấu trúc rẽ nhánh, thực hiện câu lệnh tiếp theo của chương trình, còn trong câu if-then dạng đủ, nếu điều kiện không đúng thì thực hiện công việc 2, sau đó mói thoát khỏi cấu trúc rẽ nhánh, thực hiện câu lệnh tiếp theo cùa chương trình.

Câu 2: Câu lệnh ghép là gì? Tại sao phải có câu lệnh ghép?


Trả lờiCâu lệnh ghép là một câu lệnh được hợp thành từ nhiều câu lệnh thành phần (đơn hoặc kép). Câu lệnh ghép nhằm thực hiện thao tác gồm nhiều thao tác thành phần. Mỗi thao tác thành phần tương ứng với một câu lệnh đơn hoặc câu lệnh ghép khác. Về mặt ngôn ngữ lập trình, câu lệnh ghép là một trong các yếu tố để tạo khả năng chương trình có cấu trúc.Câu lệnh ghép trong Pascal.

Begin<các câu lệnh>

End;

Câu 3: Có thể dùng câu lệnh while-đo để thay cho câu lệnh for-do được không? Nếu được, hãy thực hiện điều đỏ với chương trình.


Trả lờiCó thể thay thế đoạn chương trình chứa câu lệnh for-đo (dạng lặp tiến) for <biến đếm>:= <giá trị đầu> to <giá trị cuối> do <câu lệnh>;bằng đoạn chương trình chứa câu lệnh while-do như sau:

i:= <giá trị đầu>;while <i< = <giá trị cuối> dobegin<câu lệnh>;<tăng i một đơn vị>,

end;

Như vậy, chương trình tính Tong_la viết bằng lệnh for-do

program Tong__la;uses crt;var S:real,a, N: integer;beginclrscr;write('Hay nhap gia tri a vao!'); readln(a);S:= 1.0/a;for N:=1 to 100 do S: = S+1.0/ (a+N); writeln('Tong S la:', S:8:4); readln;

End.

được viết lại bằng lệnh while-do như sau:

Program Tong_la;uses crt;var S:real;a, N: integer;Beginclrscr;write('Hay nhap gia tri a vao!'); readln(a);S:= 1.0/a;N:= 1;while N<=100 do beginS:= s + 1.0/(a+N);N:= N + 1; end;writeln('Tong s la:', S:8:4); readln;

End.

Câu 4: Viết câu lệnh if tính:



Trả lời

if sqr(x) + sqr(y)<= 1 then z:= sqr(x) + sqr (v)
else
if y >= X then z:= X + y else z:= 0.5;

b)


if sqr (x-a)+sqr (y-b) <= sqr(r)then z:= abs (x)ì+afc)S(y/) else z:= X + y; 

Câu 5: Lập trình tính:


Trả lời:
a) program Tong_5a,uses crt,var y: real;n: byte;Beginclrscry : 0;for n :=1 to 50 doy : = y + n / ( n +1 ) ;writeln('Tong y la: y:0:18);readln ;

End.

Nếu biến y khai báo theo kiểu extended thì chương trình tính tổng y sẽ là như sau:($e+, N+}

program Tong_5a;uses crt;var y: real;n :byte;Begin clrscr;y : = 0 ;for n:= 1 to 50 doy:= y + n/(n+1);writeln('Tong y la: y:0:18);readln

End.

b) 

program Tong_5b;uses crt;var n: longint;e, sh: real;Beginclrscr;sh:= 1/2,n: = 2 ;e:= 2 + sh;while sh>= 2*1E-16 dobegininc (n) ,sh: = sh*(1/n) ,e:= e + sh;end;writeln('Gia tri e(n)la: ',e:10:6);readln

End.

Câu 6: Lập trình để giải bài toán cổ sau:


Vừa gà vừa chó.Bó lại cho tròn.Ba mươi sáu con,Một trăm chân chằn.

Hỏi bao nhiêu con mỗi loại?


Trả lời
program Tim_ga_cho;uses crt;var ga, cho: integer;Beginclrscr;for cho:= 1 to 24 dobeginga:= 3 6 - cho,if ga + 2*cho = 50 then writeln('Ga:',ga,' Cho:',cho); end;readln

End.

Câu 7: Nhập từ bàn phím tuổi của cha và con (tuổi của cha hơn tuổi con ít nhất là 25). Đưa ra màn hình bao nhiêu năm nữa thì tuổi cha gấp đôi tuổi con.


Trả lờiChương trình về tuổi cha và tuổi con:

program tuoi_cha_con;uses crt;var tuoicha, tuoicon, nam: longint;beginclrscr;write('Nhap tuoi cha va con(tuoicha-tuoicon>=25) ;readln(tuoicha,tuoicon); nam:= 0;while tuoicha<>2*tuoicon do begintuoicha:= tuoicha + tuoicon := tuoicon + 1; nam:= nam +1;end;writeln ( ' Sau ' , nam, ' nam, tuoi cha gap doi tuoi con' );readln

End.

Câu 8: Một người gửi tiết kiệm không kì hạn với số tiền A đồng với lãi suất 0,2% mỗi tháng. Hỏi sau bao nhiêu tháng, người đó rút tiền thì sẽ nhận được số tiền là bao nhiêu. Biết rằng tiền gửi tiết kiệm không ki hạn không được tính cộng vào vốn.


Trả lờiChương trình gửi tiền tiết kiệm

program Gui_tiet_kiem;uses crt;const laisuat = 0.002;var tiengui, tienrutve, luu: real;thang : integer;Beginclrscr;write ('Nhap vao so tien gui:'),readln(tiengui);luu:= tiengui;write('So tien co khi rut ve: ’);readln(tienrutve);thang : = 0 ;while Tiengui < tienrutve> do begintiengui:= tiengui + tiengui* laisuat ; thang:= thang + 1 ;end;write('Gui',luu: 0 : 0, ' dong, sau thang, thang');writeln('se nhan duoc so tien',tienrutve:0 : 0,' dong');readln

End .

Khi chạy chương trình, với số tiền gửi ban đầu là 20000000 đồng. Muốn có được số tiền sau khi rút về là 25000000 đồng thì phải mất 112 tháng.Kết quả chương trình cho như hình 25 dưới đây:

Video liên quan

Chủ đề