Bài tập 1:Viết chương trình tìm giá trị lớn nhất của một mảng chứa các số nguyên gồm N phần tử... CŨNG CỐ:Nhắc lại cách khai báo kiểu mảng một chiều, muốn truy xuất phần tử thứ i ta làm [r]
Trang 1C CHUẨN BỊ CỦA THẦY VÀ TRÒ
Gv: Giáo án, tài liệu tham khảo
Hs: Ôn tập các câu lệnh cơ bản
-S
Trang 2
S 2 ;
Const n:
S n ; END;
S 2 ;
Const n:
S n ; ELSE S n+1 ; END;
Giá trị của biểu thức và giá trị của tập hằng i (i=1¸n) phải có cùng kiểu
Khi gặp lệnh CASE, chương trình sẽ kiểm tra:
- Nếu giá trị của biểu thức B nằm trong tập hằng const i thì máy sẽ thực hiện lệnh Si tương ứng
- Ngược lại:
+ Đối với dạng 1: Không làm gì cả
+ Đối với dạng 2: thực hiện lệnh Sn+1
FOR <biến đếm>:=<giá trị Max> DOWNTO <giá trị Min> DO S;
Sơ đồ thực hiện vòng lặp FOR:
Chú ý: Khi sử dụng câu lệnh lặp FOR cần chú ý các điểm sau:
Không nên tuỳ tiện thay đổi giá trị của biến đếm bên trong vòng lặp FOR vì làm như vậy có thể sẽ không kiểm soát được biến đếm.
Giá trị Max và Min trong câu lệnh FOR sẽ được xác định ngay khi vào đầu vòng lặp Do đó cho dù trong vòng lặp ta có thay đổi giá trị của nó thì số lần lặp cũng không thay đổi.
Trang 32.2 Vòng lặp chưa biết trước số lần lặp
Repeat S;
Until B;
While B Do S;
Ý nghĩa:
Dạng REPEAT: Lặp lại công việc S cho đến khi biểu thức B=TRUE (đúng) thì dừng.
Dạng WHILE: Trong khi biểu thức B=TRUE (đúng) thì tiếp tục thực hiện công việc S.
Bài tập 1: Viết chương trình nhập vào một số nguyên và kiểm tra xem số vừa nhập là số chẵnhay số lẻ
Thoát
While
B
đú ng +
-Thoát
S;
Trang 4Writeln('Phuong trinh vo nghiem')Else { Trường hợp a 0 }
1 17: Writeln(Nguoi nay la thieu nien');
18 39: Writeln(Nguoi nay la thanh nien');
40 60: Writeln(Nguoi nay la trung nien');
Else Writeln(Nguoi nay la lao nien');
Bài tập 1: Viết chương trình tính tổng S = 1+2+ +N
Bài tập 2: Viết chương trình nhập vào N số nguyên từ bàn phím Hãy tính và in ra màn hình tổngcủa các số vừa được nhập vào
Vì tính số Pi với độ chính xác Epsilon nên không biết trước được cụ thể số lần lặp, do đó
ta phải dùng vòng lặp WHILE hoặc REPEAT Có nghĩa là phải lặp cho tới khi t=4/(2*i+1) Epsilon thì dừng
Dùng phương pháp cộng dồn Cho vòng lặp FOR chạy từ 1 tới N, ứng với lần lặp thứ i, tanhập vào số nguyên X và đồng thời cộng dồn X vào biến S
**********************************************************
Trang 5Ngày soạn: 28/09/2015
Tiết 4 - 5 – 6: THỰC HÀNH CÂU LỆNH CÓ CẤU TRÚC
A.MỤC TIÊU
1.Kiến thức: Học sinh biết vận dụng các câu lệnh có cấu trúc trong khi giải bài tập
2.Kỹ năng: Rèn kỹ năng vận dụng câu lệnh có cấu trúc vào giải các bài toán
3.Thái độ: Học sinh tích cực trong thực hành, linh họat khi vận dụng vào thực tế
Bài tập 1: Viết chương trình tính tổng S = 1+2+ +N
Hướng dẫn: Cho giá trị S ban đầu băng 0, biếm đếm I chạy từ 1 đến n và thực hiên phép công
dồn I vào biến S rồi in ra giá trị tỏng S
Trang 6Bài tập 2: Viết chương trình nhập vào N số nguyên từ bàn phím Hãy tính và in ra màn hình tổng
của các số vừa được nhập vào
Bài tập 3: Viết chương trình nhập vào các số nguyên cho đến khi nào gặp số 0 thì kết thúc Hãy
đếm xem có bao nhiêu số chẵn vừa được nhập vào
Ý tưởng:
Bài toán này không biết chính xác số lần lặp nên ta không thể dùng vòng lặp FOR Vì phảinhập vào số nguyên N trước, sau đó mới kiểm tra xem N=0? Do đó ta nên dùng vòng lặpREPEAT
Program Nhapso;
Trang 7Write('Nhap vao mot so nguyen N= '); Readln(N);
If N MOD 2 = 0 Then dem:=dem+1;
Vì tính số Pi với độ chính xác Epsilon nên không biết trước được cụ thể số lần lặp, do đó
ta phải dùng vòng lặp WHILE hoặc REPEAT Có nghĩa là phải lặp cho tới khi t=4/(2*i+1) Epsilon thì dừng
Trang 84.CÚNG CỐ: Nhận xét giờ thực hành
5 HƯỚNG DẪN VỀ NHÀ
Bài tập1: Viết chương trình tìm USCLN và BSCNN của 2 số a, b được nhập vào từ bàn phím
Ý tưởng:
- Tìm USCLN: Lấy số lớn trừ số nhỏ cho đến khi a=b thì dừng Lúc đó: USCLN=a
- BSCNN(a,b) = a*b DIV USCLN(a,b)
Bài tập 2: Viết chương trình tìm các số có 3 chữ số abc sao cho: abc = a3 + b3 + c3
Ý tưởng:
Dùng phương pháp vét cạn Ta biết rằng: a có thể có giá trị từ 19 (vì a là số hàng trăm),b,c có thể có giá trị từ 09 Ta sẽ dùng 3 vòng lặp FOR lồng nhau để duyệt qua tất cả các trườnghợp của a,b,c
Ứng với mỗi bộ abc, ta sẽ kiểm tra: Nếu 100.a + 10.b + c = a3 + b3 + c3 thì in ra bộ abc đó
C CHUẨN BỊ CỦA THẦY VÀ TRÒ
Gv: Giáo án, phấn màu viết sơ đồ
Hs: Ôn tập các câu lệnh cơ bản
- Tìm USCLN: Lấy số lớn trừ số nhỏ cho đến khi a=b thì dừng Lúc đó: USCLN=a
- BSCNN(a,b) = a*b DIV USCLN(a,b)
Trang 9Ứng với mỗi bộ abc, ta sẽ kiểm tra: Nếu 100.a + 10.b + c = a3 + b3 + c3 thì in ra bộ abc đó Uses crt;
Var a,b,c : Word;
Bài tập 3: Viết chương trình nhập vào số tự nhiên N rồi thông báo lên màn hình số đó có phải là
số nguyên tố hay không
For i:=2 To N div 2 Do
If N MOD i=0 Thend:=d+1;
Trang 10Delta<0: Phương trình vô nghiệm.
Delta=0: Phương trình có nghiệm kép: x = -b/(2*a)
Delta>0: Phương trình có 2 nghiệm phân biệt: x1,2 = (-bSQRT(Delta))/(2*a)
4.CỦNG CỐ:
Khi nào thì ta sữ dụng câu lệnh lặp While do
cần lưu ý trước else không có dấu ; cần chú ý khi khia báo kiểu dữ liệu
5 HƯỚNG DẪN, DẶN DÒ
Bài tập 1: Viết chương trình nhập vào ngày, tháng, năm Máy sẽ hiện lên ngày, tháng, năm hômsau
Gợi ý:
Biện luận theo tháng Gom tháng thành 3 nhóm: tháng có 31 ngày (1,3,5,7,8,10,12), tháng
có 30 ngày (4,6,9,11) và tháng 2 (có 28 hoặc 29 ngày tùy theo năm nhuận)
1.Kiến thức: Học sinh vận dụng các câu lệnh có cấu trúc trong giải bài tập
2.Kỹ năng: Rèn kỹ năng vận dụng câu lệnh có cấu trúc vào giải các bài toán
3.Thái độ: Học sinh tích cực trong thực hành, linh họat khi vận dụng vào thự tế
Trang 11Bài tập 1: Viết chương trình nhập vào từ bàn phím: giờ, phút, giây Cọng thêm một số giây cũng
được nhập từ bàn phím Hãy in ra kết quả sau khi cọng xong
Gợi ý:
- Gọi số giây được cộng thêm là: ss Gán giây:=giây+ss
- Nếu giây60 thì: phút:=phút + giây DIV 60 và giây:=giây MOD 60
- Nếu phút60 thì: giờ:=giờ + phút DIV 60 và phút:=phút MOD 60
Bài tập 2: Viết chương trình tìm Max, Min của 4 số: a, b, c, d.
Bài tập 3: Viết chương trình in ra màn hình các số nguyên từ 1 đến 100 sao cho cứ 10 số thì
xuống dòng
Gợi ý:
Cho biến i chạy từ 1 100 In ra màn hình i và kiểm tra: nếu i MOD 10=0 thì WRITELN
Bài tập 4: Viết chương trình in ra màn hình bảng cữu chương.
Bài tập 5: Viết chương trình để tìm lời giải cho bài toán sau:
Trong giỏ vừa thỏ vừa gà,Một trăm cái cẳng bốn ba cái đầu
Hỏi có mấy gà mấy thỏ?
Bài tập 6: Viết chương trình để tìm lời giải cho bài toán sau:
Trăm trâu trăm bó cỏ
Bó lại cho trònTrâu đứng ăn nămTrâu nằm ăn baNăm trâu nghé ăn một
Hỏi có bao nhiêu trâu đứng, trâu nằm, trâu nghé?
Bài tập 7: Viết chương trình nhập vào các số nguyên từ bàn phím cho đến khi nào gặp số nguyên
tố thì kết thúc nhập Tính tổng các số chẵn và trung bình cọng các số lẻ
Gợi ý:
Dùng vòng lặp REPEAT UNTIL NTo; để nhập Trong đó, NTo là biến kiểu Boolean đểkiểm tra số được nhập vào có phải là số nguyên tố hay không
Bài tập 8: Viết chương trình nhập vào một số nguyên dương Hãy thông báo lên màn hình số đó
có bao nhiêu chữ số và tổng các chữ số của số đó
Trang 12Bài tập 10: Viết chương trình phân tích một số ra thừa số nguyên tố Ví dụ: N=100 sẽ in ra mànhình:
Bài tập 11: Số hoàn thiện là số tự nhiên có tổng các ước của nó (không kể chính nó) bằng chính
nó Viết chương trình kiểm tra xem một số được nhập vào từ bàn phím có phải là số hoàn thiệnhay không? Ví dụ: 6, 28 là các số hoàn thiện
Gợi ý:
- Tính tổng các ước số của N: từ 1 N div 2 lưu vào biến S
- Nếu S=N thì N là số hoàn thiện
1.Kiến thức: Học sinh biết vận dụng các câu lệnh có cấu trúc trong khi giải bài tập
2.Kỹ năng: Rèn kỹ năng vận dụng câu lệnh có cấu trúc For…do, While do và If then vào giải
Bài tập 1: nhap 2 so x,y từ bàn phím In ra man hinh tat ca cac so chan chia het cho 3 tu x toi y Đếm
cac so chan chia het cho 3 tu x toi y
Hướng dẫn : - Cho biến đếm chạy từ x đến y
- Nếu có số I nào chia hết cho 6 thì in ra màn hinh các só I đó
- Dùng biến d để đếm các số chăn chia hết cho 3
Trang 13writeln('co ',dem,' so chan chia het cho 3 tu x toi y, do la:');
for i:= x to y do
if i mod 6=0 then write(i,',');
readln
end
Bài tập 2: Viết chương trình để tìm lời giải cho bài toán sau:
Trăm trâu trăm bó cỏ
Bó lại cho trònTrâu đứng ăn nămTrâu nằm ăn baNăm trâu nghé ăn một
Hỏi có bao nhiêu trâu đứng, trâu nằm, trâu nghé?
Viết chương trình nhập 2 số tự nhiên x, y từ bàn phím, in ra màn hình:
a) Tất cả các ước chung lớn hơn 0 của x và y
b) Tổng các bình phương của các ước chung đó
c) BCNN của x và y
Hướng dẫn :
-cho i chạy từ x đến y, nếu có số x và số y cùng chia hết cho số i thì I là ước chung cua
x va y,-dùng biến S để lưu các giá trị cộng dồn của i*i vào để tính tổng bình phương
- trong khi có số a nào không chia hết cho x và y thì tăng a lên A là BCNN của x và y
Trang 14while (a mod x<>0) or (a mod y<> 0) do
- Nhập vào tử t và mẫu m của phân số, gán a:=t;b:=m;
- Dùng vòng lặp repeat until để tìm UCLN của hai số t và m.
- Chia a/b cho UCLN đó
Bài tập 5 Nhập 2 số nguyên x và n bất kỳ Viết chương trình tính giá trị của x lũy thừa n.
Hướng dẫn : Nhập vào số x và n, gán I bằng 1 và biến gt bằng 1 Nhân dồn số x vào biến gt và
dung vòng lặp While do để tăng biếm đếm i
Trang 15Bài tập 6 Viết chương trình nhập số nguyên n từ bàn phím (n < 100), in ra màn hình tổng các ước
số và số lượng ước của n
Bài tập 7
Bạn Tý có T đồng đem gởi ngân hàng với lãi suất hằng tháng là L % Sau mỗi tháng tiền lãi được nhập vào để tính lãi suất tháng sau Hỏi sau N tháng, số tiền của bạn Tý sẽ được tăng lên bao nhiêu đồng?
Hãy viết chương trình để giải bài toán trên, với T, L, N là các số nhập từ bàn phím
1.Kiến thức: Học sinh biết vận dụng các câu lệnh có cấu trúc trong khi giải bài tập
2.Kỹ năng: Rèn kỹ năng vận dụng câu lệnh có cấu trúc For…do, While do và If then vào giải
- Sử dụng kiến thức số lẻ đầu tiên bằng 1 Số lẻ sau bằng số trước cộng với 2
- Cho biến i có giá trị ban đầu bằng 1
- Dùng vòng lặp while do với điều kiện i < n và công việc bên trong là in i và tăng i lên 2
Trang 16- Trong vòng lặp while nhất thiết phải có một câu lệnh làm thay đổi điều kiện lặp Ở đây lài:=i+2 Nếu không có sẽ dẫn đến trường hợp lặp vô hạn Chương trình chạy mãi mà không có lối
ra (Không thoát ra khỏi vòng lặp được)
c Nhận xét: Tiết kiệm được một biến i để chạy nhưng làm thay đổi n nên khi xuất ra chỉ có thể
xuất một câu chung chung “Giai thua cua n la:”
- Hai số chẵn liên tiếp hơn kém nhau 2 Hai số lẻ liên tiếp cũng vậy
- Thực hiện tính như giai thừa đơn nhưng với bước nhảy là 2
Trang 17if i mod j =0 then nt:=false;
if nt then begin writeln(i); d:=d+1; end;
Thuật toán Euclid: Nếu a chia hết cho b (a chia b dư 0) thì UCLN(a,b) bằng b
Nếu a chia b dư r thì UCLN(a,b) = UCLN(b,r)
Trang 18- Cần hai biến F_1 và F có giá trị đầu là 1, 1.
- Thực hiện lặp cho đến khi F >= n
- Do yêu cầu chỉ in các số bé hơn n nên khi in cần thêm một lệnh kiểm tra
Nhận xét: Giữa Repeat until có thể chứa nhiều lệnh mà không cần ghép.
Hãy phát triển bài tập theo hướng chỉ in một phần tử trong dãy lớn nhất nhưng bé hơn n hoặc theohướng phần tử thứ k của dãy
2.Kỹ năng: Rèn kỹ năng viết các bài toán sữ dụng chương trình con
3.Thái độ: Hoc sinh thấy được sự cần thiết phải viết chương trình con
B PHƯƠNG PHÁP
Nêu vấn đề, gợi mở, vấn đáp
C CHUẨN BỊ CỦA THẦY VÀ TRÒ
Gv: Giáo án, phấn màu viết sơ đồ
Hs: Ôn tập các câu lênh có cấu trúc
Trang 19D TIẾN TRÌNH LÊN LỚP
1 Ổn định: Sĩ số
2 Kiểm tra bài cũ: Kiểm tra việc nắm các câu lệnh
3 Bài mới
I KHÁI NIỆM VỀ CHƯƠNG TRÌNH CON
Chương trình con (CTC) là một đoạn chương trình thực hiện trọn vẹn hay một chức năngnào đó Trong Turbo Pascal, có 2 dạng CTC:
Thủ tục (PROCEDURE): Dùng để thực hiện một hay nhiều nhiệm vụ nào đó
Hàm (FUNCTION): Trả về một giá trị nào đó (có kiểu vô hướng, kiểu string hoặc kiểucon trỏ) Hàm có thể sử dụng trong các biểu thức
Ngoài ra, trong Pascal còn cho phép các CTC lồng vào nhau
II CẤU TRÚC CHUNG CỦA MỘT CHƯƠNG TRÌNH CÓ SỬ DỤNG CTC
PROCEDURE THUTUC[(Các tham số)];
[Khai báo Const, Type, Var]
BEGIN
END;
FUNCTION HAM[(Các tham số)]:<Kiểu dữ liệu>;
[Khai báo Const, Type, Var]
- Kết quả của bài toán trả về 1 giá trị duy
nhất (kiểu vô hướng, kiểu string hoặc
- Lời gọi CTC không nằm trong các biểuthức tính toán
Ví dụ 1: Viết CTC để tính n! = 1.2 n
Ý tưởng: Vì bài toán này trả về 1 giá trị duy nhất nên ta dùng hàm.
Function GiaiThua(n:Word):Word;
Var P, i:Word;
Trang 20III BIẾN TOÀN CỤC VÀ BIẾN ĐỊA PHƯƠNG
Biến toàn cục: là các biến được khai báo trong chương trình chính Các biến này có tác
dụng ở mọi nơi trong toàn bộ chương trình
Biến địa phương: là các biến được khai báo trong các CTC Các biến này chỉ có tác dụng
Trong bảng mã ASCII, số thứ tự của chữ cái hoa nhỏ hơn số thứ tự của chữ cái thường là
32 Vì vậy ta có thể dùng 2 hàm CHR và ORD để chuyển đổi
Trang 21Bài tập 1: Viết hàm XMU(x:Real;n:Byte):Real; để tính giá trị xn.
Bài tập 2: Viết thủ tục PHANTICH(n:Integer); để phân tích số nguyên n ra thừa số nguyên tố.Bài tập 3: Viết hàm tìm BSCNN của 2 số nguyên a,b được khai báo như sau:
Function BSCNN (a,b:word ):word ;
1.Kiến thức: Học sinh vận dụng được cách viết chương trình con vào làm các bài tập
2.Kỹ năng: Rèn kỹ năng viết chương trình con
3.Thái độ: Hoc sinh thấy được sự cần thiết phải viết chương trình con
Trang 22Bài 2:Nhập từ bàn phím số nguyên dương N(0<N<=10000) Viết chương trình kiểm tra xem số
đó có phải là số đối gương hay không? ( số đối gương gọi là số Palindrome, đó là số mà khi viếtcác chữ số của nó theo ngược lạivẫn đuwocj chính nó) Ví dụ, 12521 gọi là số đối gương
Trang 23if ok then write(x, ‘ doi guong’)
else write(x, ‘ khong la doi guong’);
readln;
END
Bài 3: Viết chương trình xây dựng chương trình con tính số các ước của một số nguyên dương.
Sữ dụng chương trình con này tìm những số nguyên dương không vượt quá số nguyên dương hcho trước (h<=5000) có số lượng các ước nhiều nhất
Writeln(‘ so uoc nhieu nhat la:’,max_sl);
Writeln(‘ cac so co’,Max-sl,’ uoc la:’);
If sl_uoc(x) = max_sl then write(x:8);
Trang 24Bài tập 2: Lập hàm đệ qui để tính dãy Fibonaci:
1.Kiến thức: Học sinh nắm được chương trình con sữ dụng thuật tóan đệ quy
2.Kỹ năng: Rèn kỹ năng viết các bài toán sữ dụng chương trình con đệ quy
3.Thái độ: Hoc sinh thấy được sự quan trọng của chương trình con đệ quy
B PHƯƠNG PHÁP
Nêu vấn đề, gợi mở, vấn đáp
C CHUẨN BỊ CỦA THẦY VÀ TRÒ
Gv: Giáo án, phấn màu viết sơ đồ
Hs: Ôn tập cách viết chương trình con
4.1 Khái niệm đệ qui
Trong một chương trình, một CTC có thể gọi một CTC khác vào làm việc Nếu như CTC
đó gọi lại chính nó thì gọi là sự đệ qui.
4.2 Phương pháp thiết kế giải thuật đệ qui
Tham số hóa bài toán
Tìm trường hợp suy biến
Phân tích các trường hợp chung (đưa về các bài toán cùng loại nhưng nhỏ hơn)
Ví dụ: Viết hàm đệ qui để tính n! = 1.2 n
Tham số hóa: n! = Factorial(n);
Factorial(n) = n*Factorial(n-1) (trường hợp chung)
Trang 25Giả sử đã xác định được k-1 phần tử đầu tiên của dãy: x1, ,xk-1 Ta cần xác định phần tửthứ k Phần tử này được xác định theo cách sau:
- Giả sử Tk: tập tất cả các giá trị mà phần tử xk có thể nhận được Vì tập Tk hữu hạn nên ta
có thể đặt nk là số phần tử của Tk theo một thứ tự nào đó, tức là ta có thể thành lập một ánh xạ 1-1
từ tập Tk lên tập {1, 2, , nk}
- Xét j{1, 2, , nk} Ta nói rằng “j chấp nhận được” nếu ta có thể bổ sung phần tử thứ j
trong Tk với tư cách là phần tử xk vào trong dãy x1, ,xk-1 để được dãy x1, ,xk
- Nếu k=n: Bộ (x1, ,xk) thỏa mãn yêu cầu B, do đó bộ này được thu nhận
- Nếu k<n: Ta thực hiện tiếp quá trình trên, tức là phải bổ sung tiếp các phần tử xk+1 vàodãy x1, ,xk
Sau đây là thủ tục đệ qui cho giải thuật quay lui:
If k=n Then <Ghi nhận một bộ giá trị>
Else THU(k+1); {Quay lui}
End;
End;
Begin
Write(‘n = ‘); Readln(n);