Phát triển chương trình bằng cách tinh chế từng bước Một bài toán ta có thể đưa ra nhiều cách giải khác nhau, song là một giáo viên thì chúng ta cần giúp học sinh viết chương trình làm s[r]
Trang 1A Đặt vấn đề
1 Lý do
nay ta các trên ! " tranh # ngành công
con
ngành công thông tin Ngày xa 5 con ) không !*7 không
vi tính thì coi là không !*7 không - / khi %< => máy
vi tính
các bài D & mà thôi ?
Là
D phân tích, I 17 J2 1 hoá, khái quát hoá L !# và !M là phát
giáo khoa > 0 =R cho * sinh # cách phân tích / trình Vì / * sinh
nhà
2 Cơ sở thực tiễn
Trong quá trình =" tôi / L O các em * sinh W !'2 các em
giây có
! hàng > phút mà " có 0 cho 6 K2& sai Song G N tâm 2
Ngôn
#2 !8 & quan tâm và chính !3 có #2 2\ sách do #2 tác
“ các bước giải một bài toán cho lớp bài toán trên máy vi tính” %< => G ngôn N / trình pascal
B- Giải quyết các vấn đề
[C pháp C & & các bài toán trong tin * không B dùng !0
Trang 2tin ra (Output)
trên ngôn N pascal thì ' các :
1 Xác !d các bài toán
2 Tìm 2/ toán
3 C trình
4 " <7 %< !I chC trình
I- Xác định bài toán
1 Khái niệm bài toán
Trong quá trình
liên > & K2 các bài toán Trong 28 %\ là 1 29 các bài toán mà ta
Song
C trình / L là cao L- Nên ! các bài toán vào & cho các
em
ta !* !# @ xác !d nó : A->B
Trong
& bài toán
- B là 6 2/ W> tiêu ' !" !1 hay cái & tìm, & làm ra khi 6 thúc bài toán
- Là suy
J A ! B
2 Bài toán trên máy vi tính
Bài toán trên máy mang !' !Y các tính L Y bài toán I quát trên,
- A: là !a thông tin vào (Input )
- B: là ! thông tin ra( Output)
- : là ch phép !I J A ! B
3 Một số ví dụ
Ví => 1: Tính = tích hình N
/-Ta ' xác !d cho bài toán:
+ Thông tin vào: #2 dài là " a, #2 8 là " b
+ Thông tin ra: n K2& = tích khi !a a,b vào
+ Các thông tin ' thông tin
- F' l1 ! a,b vào ( cho a=3,b=4)
- áp => công h tính = tích hình N / a*b
Trang 3- n K2& in ra là 12.
Ví => 2: Cho 2 %\ , nhiên a, b Tìm %\ chung L Y chúng
Các b các !d bài toán:
+ Xác !d thông tin vào: hai %\ , nhiên a,b
+ Xác
d là Y a và d là Y b
d là %\ L trong / các chung Y a, b + Xác !d các thao tác thông tin
Xây =, N2 " các thao tác cho phép tính !1 d J a và b
Nh/ a =16 b= 24 -> d =8
Ví => 3: Tìm L & các %\ nguyên \ trong các %\ nguyên N !1 / vào
J bàn phím:
+ Xác
mc!d thông tin ra: Các %\ nguyên \ ( chia cho nó và %\ 1)
II- Tìm thuật toán
tìm ra !1 Output bài toán
W8 bài toán ta có 4 cách 0 2/ toán: Các xác !d G ) 7 /
Ví dụ: Tìm %\ chung L Y 2 %\ nguyên =C a,b ta có 0 &
G các cách trên
Cách 1: Các b ước xác định bài toán bằng lời:
- B 1: 4/ 2 %\ nguyên dC là a,b
- ] 2: So sánh giá d a và b 4 2 a G b thì sang b 3, 1 "
a khác b thì sang b 4
- ] 3: Tìm !1 %\ chung là a và 6 thúc chC trình
- B 4: 4 2 a C b thì %\ chung L là a và quay O "
2 41 " %\ chung là b và quay O " 2
Cách 2: Giải bài toán bằng sơ đồ
- Có hình thoi 0 các thao tác so sánh
- Hình N / 0 các phép tính toán, các câu
- Hình ôvan 0 U !'2 và 6 thúc
- Các
Trang 4a=b !(
sai
Z( Sai
a<>b
Cách 3: Dùng ngôn N r trình
]U !'2
4/ a, b
While a khác b
IF a>b then thay a :=a -b Else thay b:=b-a;
n thúc in ra USCLN (a,b)
Cách 4: chC trình hoàn B (dùng ngôn N pascal)
PROGRAM USCLN;
USES CRT;
VAR
a,b, :integer;
BEGIN
CLRSCR;
WRITE('nhap 2 gia tri m,n=');READLN(a,b);
Begin
a, b
UCLN là a
END
b:= b - a a:= b - a
Trang 5WHILE m<>n DO
IF a>b THEN a:=a –b
else b:=b-a;
WRITELN('uoc so chung lon nhat cua 2 so’,a:5);
READLN
END.
III- Viết chương trình
F/ trình là dùng ngôn N máy vi tính > 0 nào (ngôn N Pascal) !0
= k & 2/ toán, L2 trúc =N 2 thành câu !0 máy tính có 0 ,
1 Kỹ năng lập trình
- Rèn 2 !1 cho * sinh 6} D cài !M thành công các 2/ toán G
- ZS * là 6} D thì B có 0 có !1 thông qua rèn 2 tích
, Kinh
trên máy tính có 0 cho 6 KY @
-2 Phát triển chương trình bằng cách tinh chế từng bước
viên thì chúng ta ' giúp * sinh C trình làm sao ng) xem nhìn vào có 0 =k 02 !1 bài toán !3 là gì ? Do !3 tinh B các b cho bài toán trong máy tính là C pháp khoa *7 có \ giúp ta phân tích các
phC pháp phát 0 =' =' !0 20 các ý O ra thành C trình hoàn
B-3 Phương pháp tinh chế từng bước
W8 chC trình U !'2 !1 G ) , ^ ` 0
%, phân tích I 0 Y ng) / trình !1 0
O J b sau các câu !1 phân tích chi C7 G N ) khác nhau C h %, phân tích công thành các r chi C
=k 02 và B xác C- Song ngôn N / rình pascal ng) / trình có 0
!a ra C pháp tinh B J b là 0 t duy & K2 L !# bài toán J trên 52\ trong !3 các là h # ngôn N / trình làm sao cho bài toán !a ra !1 C pháp / trình \ 27 sáng
Trang 6%<-4 Ví dụ
Tìm L & các %\ nguyên \ trong các %\ nguyên N !1 / vào J bàn phím
a Tinh chế lần 1
- FL 2 /
NT= [ ] ^!0 h các %\ nguyên \ tìm !1`
S = [2, N] ^/ các %\ ' xét )
- Tìm %\ !'2 tiên trong S !a vào NT
-
- Q\ !'2 tiên còn " Y S là %\ nguyên \- P > quá trình cho ! khi S=[]
- c2L NT
b Tinh chế lần 2
]U !'2
NT: = [ ]
S = [2, N]
Repeat
Tìm %\ !'2 tiên trong S
NT:= NT+ [S0]
0 Until S=[ ];
c2L NT;
n thúc;
c Tinh chế lấn 3 ( chương trình hoàn chỉnh)
Program nguyen_to;
Const
N=100;
Type
nguyen=1 N;
var
NT, S:set of nguyen;
s0,I:integer;
begin
NT:=[]; S:=[2 N];S0:=2;
repeat
while not (S0 in S) do
S0:=S0+1; NT:=NT+[S0];I:=S0;
While I<=N do
Begin
s:=S-[i];I:=I+S0;
Trang 7End;
until S=[];
for I:= 1 to n do
If I in Nt then Write(I:4);
readln
end
d Tinh chế lần 4 Rõ ràng L2 trúc =N 2 / 1 Set of nguyen tuy =k 02
linh
Program nguyen_to;
Const
N=100;
var
a:array[1 N] of boolean;
i,j:integer;
begin
a[1]:=false;
for i:=2 to N do a[i]:=true;
for i:= 2 to N div 2 do
for j:= 2 to N div i do
a[i*j]:=false;
for i:= 1 to N do
if a[i] then
write(i:3);
readln
end
e Tinh chế lần 5
Trong ngôn
N<10000
dùng nh sau:
Program nguyen_to;
uses crt;
var
i,j,k,n:integer;
begin
repeat
write('nhap n=');readln(n);
until n>= 2;
for i:= 2 to n do
begin
k:=0;
Trang 8for j:= 2 to trunc(sqrt(i)) do
if i mod j=0 then k:= 1;
if k=0 then write(i:3);
end;
readln
end
./ !3 là 6} D / trình ) / trình có 0 tinh B C trình
IV- Chạy Thử , thay đổi, kiểm tra chương trình
1 Chạy thử
W8 C trình !S xong ch U !S " !1 trên máy vi tính !0 cho
Ví dụ: Tìm %\ L trong 3 %\ a,b,c nguyên =C !1 / vào J bàn
phím
F' 1: Program tim_so;
uses crt;
var
a,b,c:integer;
begin
clrscr;
write('nhap 3 so=');readln(a,b,c);
if a<b then a:=b
else if a<c then a:=c;
write('so lon nhat la ',a);
readln
End
. chC trình này " !1 song ! %\ có lúc !(7 có lúc sai 2g 28 vào lúc / giá d a,b,c{ 2 ta / h , a=5,b=7,c=9
Thì %A cho ta 6 K2& %\ L là 7 / thì sai hoàn toàn}
Do !3 ng) / trình ' & cách tìm 9 - QN 9 7 ! #2 B
" chC trình là 6} D quan * Y ) / trình ./ => trên
!0 6 K2& luôn !( thì ta có 0 " chC trình
F' 2: Program tim_so;
uses crt;
var
a,b,c,t:integer;
begin
clrscr;
Trang 9write('nhap 3 so=');readln(a,b,c);
t:=a;
if t<b then t:=b;
if t<c then t:=c;
write('so lon nhat la ',t);
readln
End
4 2 /
2 Phân loại lỗi và cách sửa lỗi
-
2/ toán sai, tìm 2/ toán khác + làm " J !'2
Ví dụ: C trình tính I S= (n !1 / vào J
n
1
3
1 2
1
bàn phím)
* sinh C trình khai báo S 28 6 02 =N 2 nguyên thì
C trình %A không , !1 phép toán tính I- Do / !0 ,
!1 phép toán thì khai báo S là 28 6 02 =N 2
, F9 # trình , [& xem " 2/ toán, phân tích " J trên 52\ =
!0 !M " cho !( 2/ toán
Ví dụ chC trình & C trình / L ax+b=0 a,b !1
/ vào J bàn phím
program ptb1;
var
a,b:real;
begin
write('nhap cac he so=');readln(a,b);
if a<>0 then
writeln('moi so deu la nghiem');
else
if b=0 then writeln('phuong trinh co nghiem',-b/a:4:2)
else
Trang 10writeln('phuong trinh vo nghiem') readln
end
. C trình trên hoàn toàn có 0 " !1 song 6 K2& %A không
6 K2& !( nh yêu '2 :
program ptb1;
var
a,b:real;
begin
write('nhap cac he so=');readln(a,b);
if a<>0 then
if b=0 then
writeln('phuong trinh vo nghiem')
else
writeln('phuong trinh co nghiem',-b/a:4:2)
else
writeln('moi so deu la nghiem');
readln
end
- F9 # cú pháp: " cho !( cú pháp Y ngôn N / trình
mà mình ! %<
=>-Ví
TO thì %A không có
+-3 Kiểm tra
Có
tìm
ý:
- 4 2 6O !'2 G 8 chC trình(test ) r nh các giá d !M
^!H là =k d 9
L` Làm #2 các 8 test ng & ! =" tránh M ! M " các 8 test C
, Nên
!, Y chC trình
4 Thay đổi chương trình
W8 C trình !S xong, !S " < \ , & K2 !( bài toán
mà ta mong
Trang 11quan
Ví
tam giác hay không PJ !3 ta có 0 20 nó sang =" là các " !3 thoã mãn tam giác cân, !#2 hay là tính = tích Y tam giác !3-
- Tính I cho N %\ nguyên !'2 tiên !1 / vào J bàn phím PJ !3 ta có 0 0 khai tính giai J7 tìm %\ nguyên \7 !8 dài Y dãy %\ !37 tính trung bình 8 cho dãy %\
-
- Tính tin
- Tính 20 20 ChC trình có 0 %< !I
- Tính trong sáng: =k !*7 =k
02 Tính N2 2 " C trình nhanh và \ ít dung 1 8 # không gian và ) gian
Tóm
!1 phân ra #2 công con !0 J !3 !a ra !1 phC pháp \
2- Song ) / trình ' rèn 2 !0 có ý h # các K2 !d liên quan
và
Mà
C- Kết thúc vấn đề
trong
ng1 " là cho các 6 K2& khác nhau Z #2 !3 h r cho L ) / trình
Bài toán cho 6 K2& sai là do #2 nguyên nhân mà tôi !S trình bày O
' nh
+ * 6 02 =N 2 sai
+ 6 K2& in ra O =" có quy cách và không quy cách
+ Phép gán sai ví => bài toán tính I ban !'2 ta & gán S:=0; 2 gán S:= 1; thì cho 6 K2& sai Hay Bài toán tính tích thì phép gán & 1 O
" ban !'2 S:=1;
Trang 12./ !0 & K2 !1 bài toán trên máy tính ! < %< => ngôn N
/ trình pascal nói chung và Y 8 nói riêng Z0 nâng cao L 1 =" chúng ta không B =" lý 2 suông mà ' & 6 1 , hành Z0
Tóm
2# !" Z@ ) \ 1 C trình toán !S * ! N ' nào
các C trình này so cách tính tay O 9 nào
giáo
! còn #2 2 sót Mong / !1 %, góp ý Y các ' cô giáo cùng
" bè !0 !1 hoàn
C--Tôi xin chân thành cảm ơn !
B?n ph? ,ngày 1 tháng12 năm 2010
Người viết
4> H?ng Thuý