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]
(1)Tuần:
Ngày soạn: 21/09/2015 Tiết - - 3: CÂU LỆNH CÓ CẤU TRÚC: IF THEN, FOR DO,… A.MỤC TIÊU
1.Kiến thức: Học sinh nắm lệnh có cấu trúc, làm tập sữ dụng lệnh có cấu trúc
2.Kỹ năng: Rèn kỹ viết câu lệnh xác, kỹ vận dụng câu lẹnh vào bài toán cụ thể
3.Thái độ: Học sinh tích cực xác viết câu lệnh, biết vận dụng vào toán thực tế
B PHƯƠNG PHÁP Nêu vấn đề, gợi mở
C 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âu lệnh D TIẾN TRÌNH LÊN LỚP Ổn định: Sĩ số
2 Kiểm tra cũ: Kiểm tra việc nắm câu lệnh Bài
I CÂU LỆNH ĐIỀU KIỆN (RẼ NHÁNH) 1.1 Lệnh IF
Cú pháp:
(1) Dạng thiếu: IF B THEN S;
(2) Dạng đủ : IF B THEN S1 ELSE S2; Sơ đồ thực hiện:
Chú ý: Khi sử dụng câu lệnh IF đứng trước từ khố ELSE khơng có dấu chấm phẩy (;). 1.2 Lệnh CASE
Cú pháp:
Dạng 1 Dạng 2
CASE B OF Const 1: S1;
Const 2:
CASE B OF Const 1: S1;
Const 2: (2)
B
+
-S1 S2
(1)
R B
+
-S
(2)S2;
Const n: Sn;
END;
S2;
Const n: Sn;
ELSE Sn+1; END; Trong đó:
B: Biểu thức kiểu vô hướng đếm kiểu nguyên, kiểu logic, kiểu ký tự, kiểu liệt kê
Const i: Hằng thứ i, giá trị hằng, giá trị (phân cách dấu phẩy) đoạn (dùng hai dấu chấm để phân cách giá trị đầu giá trị cuối)
Giá trị biểu thức giá trị tập i (i=1¸n) phải có kiểu Khi gặp lệnh CASE, chương trình kiểm tra:
- Nếu giá trị biểu thức B nằm tập const i máy thực lệnh Si tương ứng
- Ngược lại:
+ Đối với dạng 1: Khơng làm + Đối với dạng 2: thực lệnh Sn+1
II CÂU LỆNH LẶP
2.1 Vòng lặp biết trước số lần lặp Có hai dạng sau:
Dạng tiến
FOR <biến đếm>:=<giá trị Min> TO <giá trị Max> DO S; Dạng lùi
FOR <biến đếm>:=<giá trị Max> DOWNTO <giá trị Min> DO S; Sơ đồ thực vòng lặp FOR:
Chú ý: Khi sử dụng câu lệnh lặp FOR cần ý điểm sau:
Không nên tuỳ tiện thay đổi giá trị biến đếm bên vịng lặp FOR làm có thể khơng kiểm sốt biến đếm.
Giá trị Max Min câu lệnh FOR xác định vào đầu vòng lặp Do đó cho dù vịng lặp ta có thay đổi giá trị số lần lặp không thay đổi.
Dạng tiến
Biến đếm:=Min
Biến đếm<=Max
+
-Thoát
S; INC(Biến đếm);
Dạng lùi
Biến đếm:=Max
Biến đếm>=Max
+
-Thoát
(3)2.2 Vòng lặp chưa biết trước số lần lặp
Dạng REPEAT Dạng WHILE Repeat
S; Until B;
While B Do S;
Ý nghĩa:
Dạng REPEAT: Lặp lại công việc S biểu thức B=TRUE (đúng) dừng. Dạng WHILE: Trong biểu thức B=TRUE (đúng) tiếp tục thực công việc S.
Bài tập 1: Viết chương trình nhập vào số nguyên kiểm tra xem số vừa nhập số chẵn hay số lẻ
Uses crt; Var x:integer; Begin
Write('Nhap vao mot so nguyen : '); Readln(x); If x MOD 2=0 Then
Writeln('So vua nhap vao la so chan') Else
Writeln('So vua nhap vao la so le'); Readln;
End
Bài tập 2: Viết chương trình giải phương trình bậc ax+b=0 Uses Crt;
Var a,b,x : real; Begin
Write('a = '); Readln(a); Write('b = '); Readln(b);
If a = Then { Nếu a }
If b = Then { Trường hợp a = b = } Writeln('Phuong trinh co vo so nghiem') Else { Trường hợp a=0 b }
Writeln('Phuong trinh vo nghiem') Repeat
S
B
đ
-Thoát
While
B đú ng +
(4)
Else { Trường hợp a } Begin
x:= -b/a;
Writeln('Phuong trinh co nghiem la :',x:0:2); End;
Readln; End
Bài tập 3: Viết chương trình nhập vào tuổi người cho biết người thiếu niên, niên, trung niên hay lão niên Biết rằng: tuổi nhỏ 18 thiếu niên, từ 18 đến 39 niên, từ 40 đến 60 trung niên lớn 60 lão niên
Program bai3; Uses crt;
Var tuoi:Byte; Begin
Write(Nhap vao tuoi cua mot nguoi:'); Readln(tuoi); Case tuoi Of
1 17: Writeln(Nguoi la thieu nien');
18 39: Writeln(Nguoi la nien'); 40 60: Writeln(Nguoi la trung nien'); Else Writeln(Nguoi la lao nien'); End;
Readln; End.
4 CỦNG CỐ
Hãy nêu giống khác hai dạng lệnh lặp Repeat Until While 5 HƯỚNG DẪN, DẶN DÒ
Bài tập nhà
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ố ngun từ bàn phím Hãy tính in hình tổng số vừa nhập vào
Ý tưởng:
Bài tập 3: Viết chương trình tính số Pi với độ xác Epsilon, biết: Pi/4 = 1-1/3+1/5-1/7+
Ý tưởng:
Ta thấy rằng, mẫu số số lẻ có qui luật: 2*i+1 với i=1, ,n Do ta dùng i làm biến chạy
Vì tính số Pi với độ xác Epsilon nên khơng biết trước cụ thể số lần lặp, ta phải dùng vịng lặp WHILE REPEAT Có nghĩa phải lặp t=4/(2*i+1) Epsilon dừng
Dùng phương pháp cộng dồn Cho vòng lặp FOR chạy từ tới N, ứng với lần lặp thứ i, ta nhập vào số nguyên X đồng thời cộng dồn X vào biến S
(5)Tuần:
Ngày soạn: 28/09/2015 Tiết - – 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âu lệnh có cấu trúc giải tập 2.Kỹ năng: Rèn kỹ vận dụng câu lệnh có cấu trúc vào giải tốn
3.Thái độ: Học sinh tích cực thực hành, linh họat vận dụng vào thực tế B PHƯƠNG PHÁP
Thực hành
C CHUẨN BỊ CỦA THẦY VÀ TRÒ Gv: Bài tập thực hành
Hs: Làm tập nhà D TIẾN TRÌNH LÊN LỚP Ổn định: Sĩ số
2 Kiểm tra cũ: Kiểm tra việc nắm câu lệnh Bài
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ừ đến n thực hiên phép công dồn I vào biến S in giá trị tỏng S
Cách 1: Dùng vòng lặp FOR. Program TinhTong;
Uses crt;
Var N,i,S:integer; Begin
Clrscr;
Write('Nhap vao gia tri cua N :'); Readln(N); S:=0;
For i:=1 to N S:=S+i; Writeln('Ket qua la :',S); Readln;
End
Cách 2: Dùng vòng lặp REPEAT. Program TinhTong;
Uses crt;
Var N,i,S:integer; Begin
Clrscr;
Write('Nhap vao gia tri cua N :'); Readln(N); S:=0; i:=1;
Repeat
(6)Writeln('Ket qua la :',S); Readln;
End
Cách 3: Dùng vòng lặp WHILE. Program TinhTong;
Uses crt;
Var N,i,S:integer; Begin
Clrscr;
Write('Nhap vao gia tri cua N :'); Readln(N); S:=0; i:=1;
While i<=N Do Begin
S:=S+i; i:=i+1; End;
Writeln('Ket qua la :',S); Readln;
End
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 in hình tổng số vừa nhập vào
Ý tưởng:
Dùng phương pháp cộng dồn Cho vòng lặp FOR chạy từ tới N, ứng với lần lặp thứ i, ta nhập vào số nguyên X đồng thời cộng dồn X vào biến S
Program Tong; Uses crt;
Var N,S,i,X : Integer; Begin
Clrscr; S:=0; For i:=1 To n Do
Begin
Write('Nhap so nguyen X= '); Readln(X); S:=S+X;
End;
Writeln(‘Tong cac so duoc nhap vao la: ‘,S); Readln;
End
Bài tập 3: Viết chương trình nhập vào số nguyên gặp số kết thúc Hãy đếm xem có số chẵn vừa nhập vào
Ý tưởng:
Bài tốn khơng biết xác số lần lặp nên ta khơng thể dùng vịng lặp FOR Vì phải nhập vào số nguyên N trước, sau kiểm tra xem N=0? Do ta nên dùng vịng lặp REPEAT
(7)Uses crt;
Var N,dem : Integer; Begin
Clrscr; dem:=0; Repeat
Write('Nhap vao mot so nguyen N= '); Readln(N); If N MOD = Then dem:=dem+1;
Until N=0;
Writeln(‘Cac so chan duoc nhap vao la: ‘,dem); Readln;
End
Bài tập 4: Viết chương trình tính số Pi với độ xác Epsilon, biết: Pi/4 = 1-1/3+1/5-1/7+
Ý tưởng:
Ta thấy rằng, mẫu số số lẻ có qui luật: 2*i+1 với i=1, ,n Do ta dùng i làm biến chạy
Vì tính số Pi với độ xác Epsilon nên khơng biết trước cụ thể số lần lặp, ta phải dùng vịng lặp WHILE REPEAT Có nghĩa phải lặp t=4/(2*i+1) Epsilon dừng
Uses Crt;
Const Epsilon=1E-4; Var Pi,t:real;
i,s:Integer; Begin
Pi:=4; i:=1; s:=-1; t:=4/(2*i+1);
While t>Epsilon Do Begin
Pi:=Pi+s*t; s:=-s; i:=i+1; t:=4/(2*i+1); End;
Writeln('So Pi = ',Pi:0:4); Readln;
End
Bài tập 5: Viết chương trình nhập vào số nguyên N In hình tất ước số N Ý tưởng:
Cho biến i chạy từ tới N Nếu N MOD i=0 viết i hình Uses Crt;
Var N,i : Integer; Begin
Clrscr;
Write('Nhap so nguyen N= '); Readln(N); For i:=1 To N Do
If N MOD i=0 ThenWrite(i:5); Readln;
(8)4.CÚNG CỐ: Nhận xét thực hành 5 HƯỚNG DẪN VỀ NHÀ
Bài tập1: Viết chương trình tìm USCLN BSCNN số a, b nhập vào từ bàn phím Ý tưởng:
- Tìm USCLN: Lấy số lớn trừ số nhỏ a=b 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 số có chữ số abc cho: abc = a3 + b3 + c3.
Ý tưởng:
Dùng phương pháp vét cạn Ta biết rằng: a có giá trị từ 19 (vì a số hàng trăm), b,c có giá trị từ 09 Ta dùng vòng lặp FOR lồng để duyệt qua tất trường hợp a,b,c
Ứng với abc, ta kiểm tra: Nếu 100.a + 10.b + c = a3 + b3 + c3 in abc
********************************************************* Tuần:
Ngày soạn: 4/10/2015 Tiết - – 9: CÁC CÂU LỆNH CÓ CẤU TRÚC (Tiếp theo)
A.MỤC TIÊU
1.Kiến thức: Học sinh nắm lệnh có cấu trúc, làm tập sữ dụng lệnh có cấu trúc
2.Kỹ năng: Rèn kỹ viết câu lệnh xác, kỹ vận dụng câu lệnh vào bài toán cụ thể
3.Thái độ: Học sinh tích cực xác viết câu lệnh, biết vận dụng vào toán thực tế
B PHƯƠNG PHÁP Nêu vấn đề, gợi mở
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âu lệnh D TIẾN TRÌNH LÊN LỚP Ổn định: Sĩ số
2 Kiểm tra cũ: Kiểm tra việc nắm câu lệnh Bài
Bài tập 1: Viết chương trình tìm USCLN BSCNN số a, b nhập vào từ bàn phím Ý tưởng:
- Tìm USCLN: Lấy số lớn trừ số nhỏ a=b dừng Lúc đó: USCLN=a - BSCNN(a,b) = a*b DIV USCLN(a,b)
Uses crt;
Var a,b,aa,bb:integer; Begin
Write('Nhap a : '); Readln(a); Write('Nhap b : '); Readln(b); aa:=a; bb:=b;
(9)Begin
If aa>bb Then aa:=aa-bb Else bb:=bb-aa; End;
Writeln('USCLN= ',aa);
Writeln('BSCNN= ',a*b DIV aa); Readln;
End
Bài tập 2: Viết chương trình tìm số có chữ số abc cho: abc = a3 + b3 + c3.
Ý tưởng:
Dùng phương pháp vét cạn Ta biết rằng: a có giá trị từ 19 (vì a số hàng trăm), b,c có giá trị từ 09 Ta dùng vòng lặp FOR lồng để duyệt qua tất trường hợp a,b,c
Ứng với abc, ta kiểm tra: Nếu 100.a + 10.b + c = a3 + b3 + c3 in abc
Uses crt;
Var a,b,c : Word; Begin
For a:=1 To Do
For b:=0 To Do
For c:=0 To Do
If (100*a + 10*b + c)=(a*a*a + b*b*b + c*c*c) Then Writeln(a,b,c); Readln;
End
Bài tập 3: Viết chương trình nhập vào số tự nhiên N thơng báo lên hình số có phải là số ngun tố hay khơng
Ý tưởng:
N số nguyên tố N khơng có ước số từ N div Từ định nghĩa ta đưa giải thuật:
- Đếm số ước số N từ N div lưu vào biến d - Nếu d=0 N số nguyên tố
Uses crt;
Var N,i,d : Word; Begin
If N<2 Then Writeln(N,’ khong phai la so nguyen to’) Else
Begin
{Đếm số ước số} d:=0;
For i:=2 To N div Do
If N MOD i=0 Thend:=d+1; {Kiểm tra}
If d=0 Then Writeln(N,’ la so nguyen to’) Else Writeln(N,’ khong phai la so nguyen to’); End;
(10)End
Bài tập 4: Viết chương trình giải phương trình bậc hai: ax2 + bx + c = 0, a0.
Gợi ý:
- Tính Delta=b*b-4*a*c - Biện luận:
Delta<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ó nghiệm phân biệt: x1,2 = (-bSQRT(Delta))/(2*a)
4.CỦNG CỐ:
Khi ta sữ dụng câu lệnh lặp While
cần lưu ý trước else khơng có dấu ; cần ý khia báo kiểu 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 lên ngày, tháng, năm hôm sau
Gợi ý:
Biện luận theo tháng Gom tháng thành 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) tháng (có 28 29 ngày tùy theo năm nhuận)
Dùng lệnh lựa chọn: CASE thang OF 1,3,5,7,8,10,12: 4,6,9,11: 2: END;
Bài tập 2: Viết chương trình in hình giá trị bảng mã ASCII từ 0255 Gợi ý:
Cho biến i chạy từ 255 In hình i CHR(i)
*************************************************** Tuần:
Ngày soạn:11/10/2015 Tiết 10 - 11 – 12: THỰC HÀNH (Tiếp theo)
A.MỤC TIÊU
1.Kiến thức: Học sinh vận dụng câu lệnh có cấu trúc giải tập 2.Kỹ năng: Rèn kỹ vận dụng câu lệnh có cấu trúc vào giải tốn 3.Thái độ: Học sinh tích cực thực hành, linh họat vận dụng vào thự tế B PHƯƠNG PHÁP
Thực hành
C CHUẨN BỊ CỦA THẦY VÀ TRÒ Gv: Bài tập thực hành
Hs: Làm tập nhà D TIẾN TRÌNH LÊN LỚP Ổn định: Sĩ số
(11)Bà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 số giây cũng nhập từ bàn phím Hãy in kết sau cọng xong
Gợi ý:
- Gọi số giây 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 giây:=giây MOD 60 - Nếu phút60 thì: giờ:=giờ + phút DIV 60 phút:=phút MOD 60 Bài tập 2: Viết chương trình tìm Max, Min số: a, b, c, d.
Bài tập 3: Viết chương trình in hình số nguyên từ đến 100 cho 10 số thì xuống dịng
Gợi ý:
Cho biến i chạy từ 100 In hình i kiểm tra: i MOD 10=0 WRITELN Bài tập 4: Viết chương trình in hình bảng cữu chương.
Gợi ý:
Dùng vòng lặp FOR lồng nhau: i số bảng cữu chương (2 9), j số thứ tự bảng cữu chương (1 10)
For i:=2 To Do
For j:=1 To 10 Do Writeln(i,’x’,j,’=’,i*j); Bài tập 5: Viết chương trình để tìm lời giải cho toán sau:
Trong giỏ vừa thỏ vừa gà, Một trăm cẳng bốn ba đầu
Hỏi có gà thỏ?
Bài tập 6: Viết chương trình để tìm lời giải cho tốn sau: Trăm trâu trăm bó cỏ
Bó lại cho trịn Trâu đứng ăn năm Trâu nằm ăn ba
Năm trâu nghé ăn
Hỏi có 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 số ngun từ bàn phím gặp số nguyên tố kết thúc nhập Tính tổng số chẵn trung bình cọng số lẻ
Gợi ý:
Dùng vòng lặp REPEAT UNTIL NTo; để nhập Trong đó, NTo biến kiểu Boolean để kiểm tra số nhập vào có phải số ngun tố hay khơng
Bài tập 8: Viết chương trình nhập vào số nguyên dương Hãy thơng báo lên hình số có chữ số tổng chữ số số
Gợi ý:
Dùng vịng lặp WHILE Trong N>0 thì: lấy chữ số cuối N để tính phép tốn MOD 10, sau bỏ bớt chữ số cuối N phép toán DIV 10
4 CỦNG CỐ:
Nhận xét thực hành 5 HƯỚNG DẪN, DẶN DÒ
(12)Bài tập 10: Viết chương trình phân tích số thừa số nguyên tố Ví dụ: N=100 in hình:
100 | 50 | 25 | 5 | |
Bài tập 11: Số hoàn thiện số tự nhiên có tổng ước (khơng kể nó) Viết chương trình kiểm tra xem số nhập vào từ bàn phím có phải số hồn thiện hay khơng? Ví dụ: 6, 28 số hoàn thiện
Gợi ý:
- Tính tổng ước số N: từ N div lưu vào biến S - Nếu S=N N số hồn thiện
*************************************************** Tuần:
Ngày soạn: 19/10/2015 Tiết 13 - 14 – 15: THỰC HÀNH ( Tiếp theo)
A.MỤC TIÊU
1.Kiến thức: Học sinh biết vận dụng câu lệnh có cấu trúc giải tập
2.Kỹ năng: Rèn kỹ vận dụng câu lệnh có cấu trúc For…do, While If then vào giải tốn
3.Thái độ: Học sinh tích cực thực hành, linh họat vận dụng vào thực tế B PHƯƠNG PHÁP
Thực hành
C CHUẨN BỊ CỦA THẦY VÀ TRÒ Gv: Bài tập thực hành
Hs: Làm tập nhà D TIẾN TRÌNH LÊN LỚP Ổn định: Sĩ số
2 Kiểm tra cũ: Kiểm tra việc nắm câu lệnh Bài
Bài tập 1: nhap so x,y từ bàn phím In man hinh tat ca cac so chan chia het cho tu x toi y Đếm cac so chan chia het cho tu x toi y
Hướng dẫn : - Cho biến đếm chạy từ x đến y
- Nếu có số I chia hết cho in hinh só I - Dùng biến d để đếm số chăn chia hết cho
Chương trình: var x,y,i,dem:integer; begin
write('nhap so duong x,y (x<y):'); readln(x,y); for i:=x to y
(13)writeln('co ',dem,' so chan chia het cho tu x toi y, la:'); for i:= x to y
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 tốn sau: Trăm trâu trăm bó cỏ
Bó lại cho trịn Trâu đứng ăn năm Trâu nằm ăn ba
Năm trâu nghé ăn
Hỏi có trâu đứng, trâu nằm, trâu nghé? Chương trình:
var d,n,g:integer; begin
for d:=1 to 20 for n:=1 to 33 for g:=1 to 98 if d*5+n*3+g=100
then writeln('Trau dung:',d,' trau nam:',n,' trau gia:',g); readln;
end
Bài tập
Viết chương trình nhập số tự nhiên x, y từ bàn phím, in hình: a) Tất ước chung lớn x y
b) Tổng bình phương ước chung c) BCNN x y
Hướng dẫn :
-cho i chạy từ x đến y, có số x số y chia hết cho số i I ước chung cua x va y,
-dùng biến S để lưu giá trị cộng dồn i*i vào để tính tổng bình phương
- có số a khơng chia hết cho x y tăng a lên A BCNN x y Chương trình:
var a,x,y,i,s:integer; begin
write('nhap vao x y:');readln(x,y); s:=0; a:=1;
write('cac uoc so la: ') ; for i:=1 to x
if (x mod i=0) and (y mod i = 0) then begin
write(i,' '); s:=s+ i*i; end;
writeln;
(14)while (a mod x<>0) or (a mod y<> 0) a:=a+1;
writeln('BCNN: ',a); readln
Bài tập
Viết chương trình nhập từ bàn phím hai số nguyên dương a, b từ bàn phím, in hình rút gọn đến tối giản cho phân số a / b
Hướng dẫn :
- Nhập vào tử t mẫu m phân số, gán a:=t;b:=m;
- Dùng vịng lặp repeat until để tìm UCLN hai số t m - Chia a/b cho UCLN
Chương trình:
var t,m,i,a,b,u: integer; begin
writeln('nhap tu va mau:'); write('tu ='); readln(t); write('mau='); readln(m); a:=t;b:=m;
repeat
if t>m then t:=t-m; if m>t then m:=m-t; until m=t ;
writeln('phan so toi gian la: ',trunc(a/m),'/',trunc(b/m)); readln
end
Bài tập Nhập số nguyên x n Viết chương trình tính giá trị x lũy thừa n.
Hướng dẫn : Nhập vào số x n, gán I biến gt Nhân dồn số x vào biến gt và dung vòng lặp While để tăng biếm đếm i
Chương trình: var a,i :integer; n,gt: real; begin
write('nhap x va n: ');readln(x,n); i:=1;
gt:=1;
while i<=n begin
gt:=gt*x; i:=i+1; end;
writeln('',a,' luy thua ',n:4:0,' bang: ',gt:4:0); readln
end
4 CỦNG CỐ:
(15)Bài tập Viết chương trình nhập số nguyên n từ bàn phím (n < 100), in hình tổng ước số số lượng ước n
Bài tập
Bạn Tý có T đồng đem gởi ngân hàng với lãi suất tháng L % Sau tháng tiền lãi nhập vào để tính lãi suất tháng sau Hỏi sau N tháng, số tiền bạn Tý tăng lên đồng?
Hãy viết chương trình để giải toán trên, với T, L, N số nhập từ bàn phím ***************************************************
Tuần:
Ngày soạn: 26/10/2015 Tiết 16 - 17 – 18 : THỰC HÀNH ( Tiếp theo)
A.MỤC TIÊU
1.Kiến thức: Học sinh biết vận dụng câu lệnh có cấu trúc giải tập
2.Kỹ năng: Rèn kỹ vận dụng câu lệnh có cấu trúc For…do, While If then vào giải tốn
3.Thái độ: Học sinh tích cực thực hành, linh họat vận dụng vào thực tế B PHƯƠNG PHÁP
Thực hành
C CHUẨN BỊ CỦA THẦY VÀ TRÒ Gv: Bài tập thực hành
Hs: Làm tập nhà D TIẾN TRÌNH LÊN LỚP Ổn định: Sĩ số
2 Kiểm tra cũ: Kiểm tra việc nắm câu lệnh Bài
Bài tập 1:
Viết chương trình in số lẻ nhỏ n ( Với n nhập) a Hướng dẫn:
- Sử dụng kiến thức số lẻ Số lẻ sau số trước cộng với - Cho biến i có giá trị ban đầu
- Dùng vòng lặp while với điều kiện i < n công việc bên in i tăng i lên b Mã chương trình:
Program In_So_Le; uses crt;
var i,n:integer; begin
clrscr;
write('Nhap so n: ');readln(n); i:=1;
while i<=n begin
write(i:3,', '); i:=i+2;
end; readln
end
Nhận xét:
(16)- Trong vòng lặp while thiết phải có câu lệnh làm thay đổi điều kiện lặp Ở i:=i+2 Nếu khơng có dẫn đến trường hợp lặp vơ hạn Chương trình chạy mà khơng có lối (Khơng khỏi vòng lặp được)
Bài tập 2:
Viết chương trình tính n! với n! định nghĩa sau: - n! = với n =
- n! = 1.2.3 n (Tích n số từ đến n)
Yêu cầu: Sử dụng vòng lặp với số lần chưa biết trước: a Hướng dẫn:
- Có thể viết lại: n! = n.(n-1) 3.2.1 - Lặp gt = gt*n; n = n-1 với điều kiện n>0 b Mã chương trình:
Program Giai_Thua_while; uses crt;
var n, gt:longint; begin
clrscr;
write('Nhap n: ');readln(n); gt:=1;
while n>0 begin
gt:=gt*n; n:=n-1; end;
writeln('Giai thua cua n la: ',gt); readln
end
c Nhận xét: Tiết kiệm biến i để chạy làm thay đổi n nên xuất xuất câu chung chung “Giai thua cua n la:”
Bài tập 3:
Viết chương trình tính n! với n! định nghĩa sau: - n!! = với n =
- n!! = 1.3.5 n với n lẻ - n!! = 2.4.6 n với n chẵn
Yêu cầu: Sử dụng vòng lặp với số lần chưa biết trước: a Hướng dẫn:
- Hai số chẵn liên tiếp Hai số lẻ liên tiếp - Thực tính giai thừa đơn với bước nhảy
b Mã chương trình: Program Giai_thua_kep; uses crt;
var n,gt:longint; begin
write('Nhap n: ');readln(n); gt:=1;
while n>0 begin
gt:=gt*n; n:=n-2; end;
(17)end
c Nhận xét:
- Với thuật toán ta không cần xét n chẵn hay lẻ Bài tập 4:
Viết chương trình để tìm số nguyên tố khoang từ x đến y X, y số nhâp từ bàn phím
a Hướng dẫn: b Mã chương trình:
var d,x,y,i,j:integer; nt:boolean; begin
write('nhap x y:');readln(x,y); d:=0;
for i:=x to y do begin
if i>1 then nt:=true else nt:=false; if x>2 then for j:=2 to i-1 do
if i mod j =0 then nt:=false;
if nt then begin writeln(i); d:=d+1; end; end;
readln end. Bài tập 5
Viết chương trình tìm ước chung lớn (UCLN) hai số với yêu cầu sử dụng thuật toán Euclid
Thuật toán Euclid: Nếu a chia hết cho b (a chia b dư 0) UCLN(a,b) b Nếu a chia b dư r UCLN(a,b) = UCLN(b,r)
a.Hướng dẫn:
- Nhập a, b gán r = a mod b
- Lặp với điều kiện r <> 0: b = r, a = b, r = a mod b b.Mã chương trình:
Program UCLN; uses crt;
var a,b,r:byte; begin
clrscr;
writeln('CHUONG TRINH TIM UCLN CUA HAI SO'); write('Nhap a: ');readln(a);
write('Nhap b: ');readln(b); r:=a mod b;
while r<> begin
b:=r; a:=b;
r:=a mod b; end;
(18)end Bài tập 6
Dãy Fibonacy có hai phần tử đầu 1, Các phần tử sau tổng hai phần tử đứng trước nó: 1, 1, 2, 3, 5, 8, 13, 21,
Viết chương trình in dãy Fibonacy có phần tử lớn nhỏ n? a.Hướng dẫn:
- Cần hai biến F_1 F có giá trị đầu 1, - Thực lặp F >= n
- Do yêu cầu in số bé n nên in cần thêm lệnh kiểm tra b.Mã chương trình:
Program Fi_Bo_na_xi; Var n, F_2,F_1, F: Longint; Begin
Write('Nhap n: ');Readln(n); F_1:=1; F_2:=1;
Write(F_2,';',F_1,';'); Repeat
F:=F_2+F_1;
if F< n then Write(F,';'); F_2:=F_1; F_1:=F; Until F>n;
Readln; End
Nhận xét: Giữa Repeat until chứa nhiều lệnh mà khơng cần ghép.
Hãy phát triển tập theo hướng in phần tử dãy lớn bé n theo hướng phần tử thứ k dãy
4 CỦNG CỐ:
Nhận xét thực hành 5 HƯỚNG DẪN, DẶN DÒ
Bài tập Viết chương trình tính tổng số chẵn từ m đến n với m, n số nguyên nhập từ bàn phím
Bài tập Viết chương trình nhập vào số tự nhiên n (n > 5) từ bàn phím: a In hình số nguyên tố nhỏ n
b Phân tích n thành tổng số nguyên tố
************** ************************************* Tuần:
Ngày soạn:02/11/2015 Tiết 19 - 20 – 21: CHƯƠNG TRÌNH CON: THỦ TỤC VÀ HÀM A.MỤC TIÊU
1.Kiến thức: Học sinh nắm khái niệm chương trình con, biết cách vận dụng chương trình
2.Kỹ năng: Rèn kỹ viết tốn sữ dụng chương trình con 3.Thái độ: Hoc sinh thấy 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
(19)D TIẾN TRÌNH LÊN LỚP Ổn định: Sĩ số
2 Kiểm tra cũ: Kiểm tra việc nắm câu lệnh Bài
I KHÁI NIỆM VỀ CHƯƠNG TRÌNH CON
Chương trình (CTC) đoạn chương trình thực trọn vẹn hay chức Trong Turbo Pascal, có dạng CTC:
Thủ tục (PROCEDURE): Dùng để thực hay nhiều nhiệm vụ
Hàm (FUNCTION): Trả giá trị (có kiểu vơ hướng, kiểu string kiểu trỏ) Hàm sử dụng biểu thức
Ngoài ra, Pascal cho phép CTC lồng vào
II CẤU TRÚC CHUNG CỦA MỘT CHƯƠNG TRÌNH CĨ SỬ DỤNG CTC PROGRAM Tên_chương_trình;
USES CRT; CONST .; TYPE ; VAR .;
PROCEDURE THUTUC[(Các tham số)]; [Khai báo Const, Type, Var]
BEGIN
END;
FUNCTION HAM[(Các tham số)]:<Kiểu liệu>; [Khai báo Const, Type, Var]
BEGIN
HAM:=<Giá trị>; END;
BEGIN {Chương trình chính}
THUTUC[( )]; A:= HAM[( )]; END
Chú ý: Trong trình xây dựng CTC, nên dùng thủ tục/hàm?
Dùng hàm Dùng thủ tục
- Kết toán trả giá trị nhất (kiểu vô hướng, kiểu string hoặc kiểu trỏ).
- Lời gọi CTC cần nằm biểu thức tính tốn
- Kết tốn khơng trả giá trị nào trả nhiều giá trị trả về kiểu liệu có cấu trúc (Array, Record, File).
- Lời gọi CTC khơng nằm biểu thức tính tốn
Ví dụ 1: Viết CTC để tính n! = 1.2 n
Ý tưởng: Vì tốn trả giá trị nên ta dùng hàm. Function GiaiThua(n:Word):Word;
(20)Begin P:=1;
For i:=1 To n Do P:=P*i; GiaiThua:=P;
End;
CHÚ Ý: Trong ví dụ trên:
n, x, y gọi tham trị (khơng có từ khóa var đứng trước) sau khỏi CTC giá trị khơng bị thay đổi
xx, yy gọi tham biến (có từ khóa var đứng trước) sau khỏi CTC giá trị bị thay đổi
III BIẾN TỒN CỤC VÀ BIẾN ĐỊA PHƯƠNG
Biến toàn cục: biến khai báo chương trình Các biến có tác dụng nơi tồn chương trình
Biến địa phương: biến khai báo CTC Các biến có tác dụng phạm vi CTC mà thơi
Chú ý: Trong CTC, biến tồn cục trùng tên với biến địa phương biến địa phương ưu tiên
Ví dụ:1
Program KhaoSatBien;
Var a,b: Integer; {biến toàn cục} Procedure ThuBien;
Var a: Integer; {biến địa phương} Begin
a:=10;
Writeln(‘A=’,a,’B=’,b); End;
Begin
a:=50; b:=200;
ThuBien; {A=10 B=200}
Writeln(‘A=’,a,’B=’,b); {A=50 B=200} End
Bài tập 2: Viết hàm LOWCASE( c:char):char; để đổi chữ hoa c thành chữ thường Ý tưởng:
Trong bảng mã ASCII, số thứ tự chữ hoa nhỏ số thứ tự chữ thường 32 Vì ta dùng hàm CHR ORD để chuyển đổi
Uses crt; Var ch:Char;
Function LOWCASE(c:Char):Char; Begin
If c IN [‘A’ ’Z’] Then LOWCASE:=CHR(ORD(c)+32) Else LOWCASE:=c;
End; Begin
(21)Readln; End
Bài tập 3: Viết thủ tục để hoán đổi hai gía trị x,y cho Var a,b:Real;
Function Swap(Var x,y:Real); Var Tam:Real;
Begin
Tam:=x; x:=y; y:=Tam; End;
Begin
Write(‘Nhap a=’); Readln(a); Write(‘Nhap b=’); Readln(b); Swap(a,b);
Writeln(‘Cac so sau hoan doi: a=‘, a:0:2,’ b=’,b:0:2); Readln;
End
4.CŨNG CỐ:
Chương trình gì? phải viết chương trình Hãy nêu sựu giống nahu khác hai chương trình Prcedure Function
5.HƯỚNG DẪN, DẶN DÒ
Bà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 thừa số nguyên tố Bài tập 3: Viết hàm tìm BSCNN số nguyên a,b khai báo sau:
Function BSCNN (a,b:word ):word ;
*********************************************************** Tuần:
Ngày soạn: 9/11/2015
Tiết 22 - 23 – 24: THỰC HÀNH: CHƯƠNG TRÌNH CON A.MỤC TIÊU
1.Kiến thức: Học sinh vận dụng cách viết chương trình vào làm tập 2.Kỹ năng: Rèn kỹ viết chương trình con
3.Thái độ: Hoc sinh thấy cần thiết phải viết chương trình con B PHƯƠNG PHÁP
Thực hành
C CHUẨN BỊ CỦA THẦY VÀ TRÒ Gv: Bài tập thực hành
Hs: Làm tập nhà D TIẾN TRÌNH LÊN LỚP Ổn định: Sĩ số
2 Kiểm tra cũ: Kiểm tra học sinh làm tập nhà Bài
Bài 1: Viết chương trình tìm diện tích hình chữ nhật biết kích thước hai cạnh Program Bai1;
(22){ }
procedure tinhdientich(a,b:real;var S:real); Begin
S:= a*b; end;
{ }
Write(‘ Nhap vao kich thuoc hinh chu nhat ‘); Readln(dai,rong);
Tinhdientich(dai,rong,dientich);
Write(‘dien ich hinh chu nhat la:’, dientich); end
Bà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 số đối gương hay khơng? ( số đối gương gọi số Palindrome, số mà viết chữ số theo ngược lạivẫn đuwocj nó) Ví dụ, 12521 gọi số đối gương
Program Bai2; Var x,L:longint; ok:Boolean;
Function sochuso(a:longint):byte; var p:byte;
begin p:=0;
While a>0 Begin
a:=a div 10; inc(P): end; sochuso:=p; end;
Function DG(a:longint;L:byte):boolean; var i,j:byte;
m;array[1 10] 0f byte; begin
For i:=L downto Begin
m[i]:=a mod 10; a:=a div 10; end;
i:=1; j:=L; DG:=false; While i<j Begin
(23)dec(j); end;
DG:=true; end;
BEGIN
write(‘ nhap so x =’); readln(x);
L:=sochuso(x); ok:=DG(x,L);
if 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 tính số ước số nguyên dương. Sữ dụng chương trình tìm số ngun dương khơng vượt số nguyên dương h cho trước (h<=5000) có số lượng ước nhiều
program bai3; cosnt h= 5000;
var x,max_sl,p:integer;
Function sl_uoc(a:integer):integer; Var i, sl:integer;
Begin sl:=1;
For i:=2 to a div if a mod i= then inc(sl);
sl+uoc:=sl+1; end;
BEGIN
max_sl:=0; For x:= to h Begin
p:=sl_uoc(x);
if p>max_sl then max_sl:=p; end;
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); readln;
END
4.CŨNG CỐ
(24)Bài tập 2: Lập hàm đệ qui để tính dãy Fibonaci: F(n) = {F , n=1Ún=2
(n −1)+F(n −2) , n>2
******************************************************** Tuần:
Ngày soạn: 16/11/2015 Tiết 25 - 26 – 27: CHƯƠNG TRÌNH CON A.MỤC TIÊU
1.Kiến thức: Học sinh nắm chương trình sữ dụng thuật tóan đệ quy 2.Kỹ năng: Rèn kỹ viết tốn sữ dụng chương trình đệ quy 3.Thái độ: Hoc sinh thấy quan trọng chương trình đệ 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 D TIẾN TRÌNH LÊN LỚP
1 Ổn định: Sĩ số
2 Kiểm tra cũ: Kiểm tra việc nắm câu lệnh Bài
IV ĐỆ QUI
4.1 Khái niệm đệ qui
Trong chương trình, CTC gọi CTC khác vào làm việc Nếu CTC gọi lại gọi đệ qui
4.2 Phương pháp thiết kế giải thuật đệ qui Tham số hóa tốn
Tìm trường hợp suy biến
Phân tích trường hợp chung (đưa tốn loại nhỏ hơn) Ví dụ: Viết hàm đệ qui để tính n! = 1.2 n
Tham số hóa: n! = Factorial(n);
Factorial(0) = (trường hợp suy biến)
Factorial(n) = n*Factorial(n-1) (trường hợp chung) Function Factorial(N:integer):Longint;
Begin
If N=0 Then Factorial:=1
Else Factorial:=N*factorial(N-1); { lời gọi đệ qui } End;
4.3 Giải thuật quay lui Bài toán:
Hãy xây dựng giá trị gồm n thành phần (x1, ,xn) từ tập hữu hạn cho trước
(25)Giả sử xác định k-1 phần tử dãy: x1, ,xk-1 Ta cần xác định phần tử
thứ k Phần tử xác định theo cách sau:
- Giả sử Tk: tập tất giá trị mà phần tử xk nhận Vì tập Tk hữu hạn nên ta
có thể đặt nk số phần tử Tk theo thứ tự đó, tức ta thành lập ánh xạ 1-1
từ tập Tk lên tập {1, 2, , nk}
- Xét j{1, 2, , nk} Ta nói “j chấp nhận được” ta bổ sung phần tử thứ j
trong Tk với tư cách phần tử xk vào dãy x1, ,xk-1 để dãy x1, ,xk
- Nếu k=n: Bộ (x1, ,xk) thỏa mãn yêu cầu B, thu nhận
- Nếu k<n: Ta thực tiếp trình trên, tức phải bổ sung tiếp phần tử xk+1 vào
dãy x1, ,xk
Sau thủ tục đệ qui cho giải thuật quay lui: Procedure THU(k:Integer);
Var j:Integer; Begin
For j:=1 To nk Do
If <j chấp nhận được> Then Begin
<Xác định xk theo j>;
If k=n Then <Ghi nhận giá trị> Else THU(k+1); {Quay lui}
End; End;
Ví dụ 1: Liệt kê dãy nhị phân có độ dài n Program DayNhiPhan;
Var b:Array[1 20] Of 1; {Dãy nhị phân có độ dài tối đa 20} n:Byte;
Procedure InKetQua; Var i:Byte;
Begin
For i:=1 To n Do Write(b[i]); Writeln;
End;
Procedure THU(k:Byte); Var j:Byte;
Begin
For j:=0 To Do {Tập giá trị dãy nhị phân} Begin
b[k]:= j;
If k=n Then InKetQua Else THU(k+1); {Quay lui} End;
End; Begin
(26)THU(1); Readln; End
Bài tập 2: Viết hàm XMU(x:Real;n:Byte):Real; để tính giá trị xn.
Var x:Real;
n:Byte;
Function XMU(x:Real;n:Byte):Real; Var i:Byte; S:Rea;
Begin S:=1;
For i:=1 To n Do S:=S*x; XMU:=S;
End; Begin
Write(‘Nhap x=’); Readln(x); Write(‘Nhap n=’); Readln(n);
Writeln(‘x mu n = ‘, XMU(x,n):0:2); Readln;
End
Bài tập 3: Viết thủ tục PHANTICH(n:Integer); để phân tích số nguyên n thừa số nguyên tố Uses crt;
Var n:Integer;
Procedure PHANTICH(n:Integer); Var i:Integer;
Begin i:=2;
While n<>1 Do Begin
While n MOD i=0 Do Begin
Writeln(n:5,'|',i:2); n:=n Div i;
End; i:=i+1; End;
Writeln(n:5,'|'); End;
Begin
Write('Nhap n='); Readln(n); PHANTICH(n);
Readln; End
4.CŨNG CỐ:
Thế chương trình đệ quy ?
Hãy cho biết cấu trúc chương trình đệ quy 5.HƯỚNG DẪN, DẶN DÒ
Bài tập 1: Viết hàm tìm BSCNN số nguyên a,b khai báo sau: Function BSCNN (a,b:word ):word ;
(27)Bài tập 3: Viết hàm đệ quy để tính: S1 = 1+2 +3+ +n ;
*************************************************** Tuần:
Ngày soạn: 24/11/2015
Tiết 28- 29 - 30: THỰC HÀNH CHƯƠNG TRÌNH CON( Tiếp theo) A.MỤC TIÊU
1.Kiến thức: Học sinh vận dụng cách viết chương trình vào làm tập 2.Kỹ năng: Rèn kỹ viết chương trình con
3.Thái độ: Hoc sinh thấy cần thiết phải viết chương trình con B PHƯƠNG PHÁP
Thực hành
C CHUẨN BỊ CỦA THẦY VÀ TRÒ Gv: Bài tập thực hành
Hs: Làm tập nhà D TIẾN TRÌNH LÊN LỚP Ổn định: Sĩ số
2 Kiểm tra cũ: Kiểm tra học sinh làm tập nhà Bài
Bài 1: Hoán vị dãy {1,2,3 ,N} dãy N số nguyên khác có giá trị thuộc tập số nguyên từ đến N Ví dụ dãy P={5,9,1,8,2,6,4,7,3} hóan vị dãy {1,2,3,4,5,6,7,8,9} Người ta xây dựng bảng nghịch hoán vị P={p1,p2,p3 pn} dãy T= {t1,t2, tN} theo quy
tắc, ti số phần tử P đứng bên trái số i P lớn hon i (1<=i<=N)
Hướng dẫn: Trước hết, tìm xem số i nằm vị trí hốn vị P Giả sử i phần tử thứ j của P
Duyệt dãy P từ vị trí thứ đến vị trí thứ j-1, đếm số lượng phần tử lớn số i Số lượng giá trị ti cần tìm
Giải:
Program bai1; const max = 20;
type m1 = array[1 max] of integer; var n:byte;
p,t:m1;
Procedure nhap_input; var i:byte;
Begin
write(‘nhap so nguyn duong n<20’); readln(n);
begin
write(‘P[‘,i:2,’]=’); readln(P[i]); end;
(28)Begin
for i:=1 to n write(m[i]:4); end;
Function tinh(p:m;i:byte):byte; var k,j,dem:byte;
Begin j:=1;
while p[j] <>i then inc(j); dem:=0;
for k:= to j-1 if p[k] >i then inc(dem); tinh:=dem; end;
Procedure thuchien; var i:byte;
Begin
for i:= to n t[i]:= tinh(p,i); end;
BEGIN
nhap_input; thuchien; hien_output; readln; END.
Bài 2: Bài tốn hay trị chơi tháp Hà Nội nhà sư Tương truyền đền lớn tai Bénares ( Ấn Độ) có để đồng có cọc kim cương Thượng đế khai sinh giới xếp 64 đĩa vàng cọc với đường kính giảm dần Ngày đêm nhà sư dịch chuyển đĩa sang cọc khác với nguyên tắc sau: + Mỗi lần dịch chuyển đĩa
+Một đĩa dịch chuyển từ cọc sang cọc khác
+Không đem đĩa đĩa khác có đường kính nhỏ Và ngày tận đến 64 đĩa vàng dịhc chuyển để làm việc phải 58 tỉ năm!
Giải
Program thap_HN; var n;integer;
Procedure Dichuyen(n,C1,C2,C3;Integer); Begin
if n= then
writeln(‘C1’,C1) else
(29)Dichuyen(n-1,C1,C3,C2); Dichuyen(1,C1,C2,C3); Dichuyen(n-1,C3,C2,C1); end;
end; end;
BEGIN
write(‘Nhap n’); readln(n);
writeln(‘ chuong trinh dich chuyen dia nhu sau’); Dichuyen(N,1,2,3);
readln; END.
4.CŨNG CỐ:
Nhận xét thực hành 5.HƯỚNG DẪN, DẶN DÒ
Bài tập 1: Viết chương trình in hình hốn vị n số nguyên đầu tiên.
Bài 2: Xây dựng hàm daonguoc(n:word) có giá trị trả hàm số nguyên có bằng cách lấy đảo ngược chữ số n Ví dụ đảo ngược số 12305 có kết 50321
********************************************* Tuần:
Ngày soạn: 30/11/2015 Tiết 31-32-33: MẢNG MỘT CHIỀU (DÃY SỐ)
A MỤC TIÊU
1.Kiến thức: Học sinh nắm cách viết liệu dạng mảng chiều, làm toán mảng chiều
2.Kỹ năng:Có kỹ phân tích tốn, viết câu lệnh xác
3.Thái độ: Học sinh tích cực, tự giác, hứng thú giải tốn mảng B PHƯƠNG PHÁP: Thuyết trình, gợi mở, vấn đáp
C CHUẨN BỊ CỦA THẦY VÀ TRÒ GV: Giáo án, phấn màu vẽ sơ đồ
HS: Ôn tập câu lệnh D TIẾN TRÌNH LÊN LỚP 1 Ổn định: Sĩ số
2.Kiểm tra cũ: 3 Bài
DỮ LIỆU KIỂU MẢNG (ARRAY) I KHAI BÁO MẢNG
Cú pháp:
TYPE<Kiểu mảng> = ARRAY [chỉ số] OF <Kiểu liệu>; VAR <Biến mảng>:<Kiểu mảng>;
hoặc khai báo trực tiếp:
VAR <Biến mảng> : ARRAY [chỉ số] OF <Kiểu liệu>; Ví dụ:
TYPE Mangnguyen = Array[1 100] of Integer;
(30)MangKytu = Array[Byte] of Char; VAR A: Mangnguyen;
M: Matrix; C: MangKytu; hoặc:
VAR A: Array[1 100] of Integer; C: Array[Byte] of Char; II XUẤT NHẬP TRÊN DỮ LIỆU KIỂU MẢNG
- Để truy cập đến phần tử thứ k mảng chiều A, ta sử dụng cú pháp: A[k] - Để truy cập đến phần tử (i,j) mảng hai chiều M, ta sử dụng cú pháp: M[i,j]
- Có thể sử dụng thủ tục READ(LN)/WRITE(LN) phần tử biến kiểu mảng
BÀI TẬP MẪU
Bài tập 1:Viết chương trình tìm giá trị lớn mảng chứa số nguyên gồm N phần tử Ý tưởng:
- Cho số lớn số đầu tiên: Max:=a[1]
- Duyệt qua phần tử a[i], với i chạy từ tới N: Nếu a[i]>Max thay Max:=a[i]; Program Bai1;
Uses Crt;
Type Mang = ARRAY[1 50] Of Integer; Var A:Mang;
N,i,Max:Integer; Begin
{Nhập mảng}
Write(‘Nhap N=’); Readln(N); For i:=1 To N Do
Begin
Write(‘A[‘,i,’]=’); Readln(A[i]); End;
{Tìm phần tử lớn nhất} Max:=A[1];
For i:=2 To N Do
If Max<A[i] Then Max:=A[i]; {In kết hình}
Writeln(‘Phan tu lon nhat cua mang: ’, Max); Readln;
End.
Bài tập 2:Viết chương trình tính tổng bình phương số âm mảng gồm N phần tử Ý tưởng:
Duyệt qua tất phần tử A[i] mảng: Nếu A[i]<0 cộng dồn (A[i])2 vào biến S.
(31)Type Mang = ARRAY[1 50] Of Integer; Var A:Mang;
N,i,S:Integer; Begin
{Nhập mảng}
Write(‘Nhap N=’); Readln(N); For i:=1 To N Do
Begin
Write(‘A[‘,i,’]=’); Readln(A[i]); End;
{Tính tổng} S:=0;
For i:=1 To N Do
If A[i]<0 Then S:=S+A[i]*A[i]; {In kết hình}
Writeln(‘S= ’, S); Readln;
End.
Bài tập 3: Viết chương trình nhập vào mảng gồm N số nguyên Sắp xếp lại mảng theo thứ tự tăng dần in kết hình
Ý tưởng:
Cho biến i chạy từ đến N-1, đồng thời cho biến j chạy từ i+1 đến N: Nếu A[i]>A[j] đổi chổ A[i], A[j]
Program bai3; Uses Crt;
Type Mang = ARRAY[1 50] Of Integer; Var A:Mang;
N,i,j,Tam:Integer; Begin
{Nhập mảng}
Write(‘Nhap N=’); Readln(N); For i:=1 To N Do
Begin
Write(‘A[‘,i,’]=’); Readln(A[i]); End;
{Sắp xếp}
For i:=1 To N-1 Do
For j:=i+1 To N Do If A[i]>A[j] Then
Begin
Tam:=A[i]; A[i]:=A[j]; A[j]:=Tam; End;
{In kết hình}
(32)For i:=1 To N Do Write(A[i]:5); Readln;
End.
4 CŨNG CỐ:Nhắc lại cách khai báo kiểu mảng chiều, muốn truy xuất phần tử thứ i ta làm ? cần lưu ý ghi hai phần tử liên tiếp phải có khỏng trắng
5 HƯỚNG DẪN , DẶN DÒ
Bài 1:Nhập n số thực từ bàn phím vào mảng, tính trung bình cộng số này.
Bai 2:Viết chương trình nhập vào mảng A gồm N số nguyên nhập thêm vào số nguyên X Hãy kiểm tra xem phần tử X có mảng A hay không?
B i 3:à Cho mảng số nguyên gồm n phần tử Tìm dãy gồm m phần tử (mn) cho
dãy có tổng lớn (Dãy dãy phần tử liên tiếp mảng)
*****************************************************************************
Tuần:
Ngày soạn: 07/12/2015 Tiết 34-35-36: THỰC HÀNH: MẢNG MỘT CHIỀU
1.Kiến thức: Học sinh vận dụng kiến thức học làm toán mảng chiều 2.Kỹ năng: Có kỹ thưch hành máy nhanh, xác
3.Thái độ: Học sinh tích cực, tự giác, hứng thú tỷong thực hành B PHƯƠNG PHÁP: Thuyết trình, gợi mở, vấn đáp
C CHUẨN BỊ CỦA THẦY VÀ TRỊ GV: Bài tập, phịng máy
HS: Làm tập nhà D TIẾN TRÌNH LÊN LỚP 1 Ổn định: Sĩ số
2 Thực hành
Bài tập 1: Viết chương trình nhập vào mảng A gồm N số nguyên nhập thêm vào số nguyên X Hãy kiểm tra xem phần tử X có mảng A hay khơng?
Ý tưởng:
Dùng thuật tốn tìm kiếm So sánh x với phần tử mảng A Thuật toán dừng lại x=A[i] i>N
Nếu x=A[i] vị trí cần tìm i, ngược lại kết tìm (khơng tìm thấy) Program Bài 1;
Uses Crt;
Type Mang = ARRAY[1 50] Of Integer; Var A:Mang;
N,i,x:Integer;
Function TimKiem(x, N: Integer; A:Mang):Integer; Var i:Integer;
Begin I:=1;
While (I <= N) and (X<>A[I]) I:=I+1; If I <= N Then Timkiem:=I Else Timkiem:=0; End;
(33){Nhập mảng}
Write(‘Nhap N=’); Readln(N); For i:=1 To N Do
Begin
Write(‘A[‘,i,’]=’); Readln(A[i]); End;
Write(‘Nhap X=’); Readln(x); {Kết tìm kiếm}
If TimKiem(X,N,A)<>0 Then
Writeln(‘Vi tri cua X mang la:’, TimKiem(X,N,A)) Else Writeln(‘X khong co mang.’);
Readln; End
Bài tập 2: Giả sử mảng A xếp theo thứ tự tăng dần Viết hàm để kiểm tra xem phần tử X có mảng A hay khơng?
Ý tưởng:
So sánh x với phần tử mảng A[giua] Nếu x=A[giua] dừng (vị trí cần tìm số phần tử mảng) Ngược lại, x>A[giua] tìm đoạn sau mảng [giua+1,cuoi], ngược lại tìm đoạn đầu mảng [dau,giua-1]
Bài tập 3: Cho mảng số nguyên gồm n phần tử Tìm dãy gồm m phần tử (mn) cho dãy có tổng lớn (Dãy dãy phần tử liên tiếp mảng)
Program Bai3; Uses Crt;
Type Mang=ARRAY[1 50] Of Integer; Var A:Mang;
n,m,i,j,k:Byte; S,Max:Integer; Begin
Write('So phan tu cua mang: n= '); Readln(n); For i:=1 To n Do
Begin
Write('a[',i,']='); Readln(a[i]); End;
Write('Nhap so phan tu cua day con: m= '); Readln(m); k:=1; {Vị trí phần tử dãy con}
{Giả sử m phần tử mảng A dãy có tổng lớn nhất} Max:=0;
For i:=1 To m Do Max:=Max+A[i]; {Tìm dãy khác}
For i:=2 To n-m+1 Do Begin
{Tính tổng dãy thứ i} S:=0;
For j:=i To i+m-1 Do S:=S+A[j];
(34)Begin
Max:=S; {Thay tổng mới}
k:=i; {Thay vị trí dãy mới} End;
End;
Writeln('Day co tong lon nhat la:'); For i:=k To k+m-1 Do Write(A[i]:5); Readln;
End. Bài 4:
Nhập n số thực từ bàn phím vào mảng, tính trung bình cộng số Program Bai4;
Uses CRT; Var i,n : Integer; s : Real;
a : Array[1 100] of Real; Begin
ClrScr;
Write( ‘ Ban muon nhap bao nhieu PT cho mang : ‘ ); Readln(n);
For i := to n Begin
Write( ‘ PT A[ ‘ , i , ‘ ]= ’ ); Readln(a[i]);
End; s := 0;
For i := to n s := s + a[i];
Write( ‘ Trung binh cong cua day so = ‘ , s / n : : ); Readln;
End
3.CŨNG CỐ: Nhận xét thực hành 4.HƯỚNG DẪN DẶN DÒ
5.1 Viết chương trình nhập vào dãy n số a[1], a[2], , a[n] in hình thông tin sau:
- Tổng phần tử dãy
- Số lượng số dương tổng số dương dãy - Số lượng số âm tổng số âm dãy
- Trung bình cộng dãy
5.2 Viết chương trình nhập vào dãy n số a[1], a[2], , a[n] in hình thơng tin sau:
- Số hạng dương lớn dãy số (vị trí) - Số hạng dương nhỏ dãy số (vị trí) - Số hạng âm lớn dãy số (vị trí) - Số hạng âm nhỏ dãy số (vị trí)
****************************************************** Tuần:
Ngày soạn: 14/12/2015 Tiết 37-38-39: THỰC HÀNH: MẢNG MỘT CHIỀU(TT)
(35)2.Kỹ năng:Có kỹ phân tích tốn, viết câu lệnh xác
3.Thái độ: Học sinh tích cực, tự giác, hứng thú giải toán mảng B PHƯƠNG PHÁP: Thuyết trình, gợi mở, vấn đáp
C CHUẨN BỊ CỦA THẦY VÀ TRÒ GV: Giáo án, phấn màu vẽ sơ đồ
HS: Ôn tập câu lệnh D TIẾN TRÌNH LÊN LỚP 1 Ổn định: Sĩ số
2.Kiểm tra cũ:
Bài tập 1: Viết chương trình in hình tam giác Pascal Ví dụ, với n=4 in hình sau:
1
1
1 3
1
Ý tưởng:
Tam giác Pascal tạo theo qui luật sau: + Mỗi dòng bắt đầu kết thúc số
+ Phần tử thứ j dòng k nhận cách cộng phần tử thứ j-1 j dòng thứ k-1 Program Bai1;
Uses Crt;
Var Dong:Array[0 20] Of Byte; n,i,j:Byte;
Begin
Write('n= '); Readln(n); Clrscr;
Dong[0]:=1;
Writeln(Dong[0]:4);
{Khoi tao gia tri cua dong} For i:=1 To n Do Dong[i]:=0; {Voi moi dong i}
For i:=1 To n Do Begin
For j:=i DownTo Do Begin
Dong[j]:=Dong[j-1]+Dong[j]; Write(Dong[j]:4);
End;
Writeln(Dong[i]:4); End;
Readln; End.
Bài tập 2: Viết chương trình nhập vào mảng số nguyên A, B đại diện cho tập hợp (khơng thể có phần tử trùng tập hợp) Trong trình nhập, phải kiểm tra: phần tử vừa nhập vào có mảng khơng bổ sung vào mảng In hình phần tử giao tập hợp A, B
Ý tưởng:
(36)Program Bai2; Uses Crt;
Type Mang=ARRAY[1 50] Of Integer; Var A,B:Mang;
n,m:Byte;
Function KiemTra(x:Integer; n:Byte; A:Mang):Boolean; Var i:Byte; Found:Boolean;
Begin
Kiemtra:=False; i:=1;
While (i<=n) AND (not Found) Do
If x=A[i] Then Found:=True Else i:=i+1; KiemTra:=Found;
End;
Procedure NhapMang(Var n:Byte; Var A:Mang); Var ch:Char;
x:Integer; Begin
n:=0; Repeat
Write('x='); Readln(x);
If not KiemTra(x,n,A) Then Begin
n:=n+1; A[n]:=x; End;
Writeln('An ESC de ket thuc nhap!'); ch:=Readkey;
Until ch=#27; End;
Procedure GiaoAB(n:Byte; A:Mang;m:Byte; B:Mang); Var i:Byte;
Begin
For i:=1 To n Do
If KiemTra(A[i],m,B) Then Write(A[i]:4); End;
Begin Clrscr;
Writeln('Nhap mang A: '); NhapMang(n,A);
Writeln('Nhap mang B: '); NhapMang(m,B);
Writeln('Giao cua mang A&B la: '); GiaoAB(n,A,m,B);
Readln; End.
Bài tập 3: Nhập vào mảng số nguyên a/ Xếp lại mảng theo thứ tự giảm dần
b/ Nhập vào số ngun từ bàn phím Chèn số vào mảng cho mảng có thứ tự giảm dần (khơng xếp lại mảng)
Gợi ý:
(37)- Đẩy phần tử từ vị trí i tới n sang phải vị trí - Gán: A[i]=x;
4 CŨNG CỐ: Học sinh nhắc lại thuật toán xếp dãy tăng dần 5 HƯỚNG DẪN, DẶN DÒ
Bài tập 1: Cho mảng số nguyên: Mảng A có m phần tử, mảng B có n phần tử a/ Sắp xếp lại mảng theo thứ tự giảm dần
b/ Trộn mảng lại thành mảng C cho mảng C có thứ tự giảm dần (Không xếp lại mảng C)
Gợi ý:
- Dùng số i,j để duyệt qua phần tử mảng A, B k số cho mảng C - Trong (i<=m) (j<=n) thì:
{Tức đồng thời dãy A, B chưa duyệt hết} + Nếu A[i]>B[j] thì: C[k]:=A[i]; i:=i+1;
+ Ngược lại: C[k]:=B[j]; j:=j+1;
- Nếu dãy hết trước đem phần lại dãy bổ sung vào cuối dãy C
Bài tập 2: Viết chương trình nhập vào dãy số nguyên a1, a2, , an Tìm dãy {a} dãy tăng dần dài (có số phần tử lớn nhất) in hình dãy
*************************************************************** Tuần:
Ngày soạn: 21/12/2015 Tiết 40-41-42: THỰC HÀNH (Tiếp theo)
1.Kiến thức: Học sinh vận dụng kiến thức học làm toán mảng chiều 2.Kỹ năng: Có kỹ thực hành máy nhanh, xác
3.Thái độ: Học sinh tích cực, tự giác, hứng thú thực hành B PHƯƠNG PHÁP: Thuyết trình, gợi mở, vấn đáp
C CHUẨN BỊ CỦA THẦY VÀ TRỊ GV: Bài tập, phịng máy
HS: Làm tập nhà D TIẾN TRÌNH LÊN LỚP 1 Ổn định: Sĩ số
2 Thực hành
Bài tập 1: Cho mảng số nguyên: Mảng A có m phần tử, mảng B có n phần tử a/ Sắp xếp lại mảng theo thứ tự giảm dần
b/ Trộn mảng lại thành mảng C cho mảng C có thứ tự giảm dần (Khơng xếp lại mảng C)
Gợi ý:
- Dùng số i,j để duyệt qua phần tử mảng A, B k số cho mảng C - Trong (i<=m) (j<=n) thì:
{Tức đồng thời dãy A, B chưa duyệt hết} + Nếu A[i]>B[j] thì: C[k]:=A[i]; i:=i+1;
+ Ngược lại: C[k]:=B[j]; j:=j+1;
- Nếu dãy hết trước đem phần cịn lại dãy bổ sung vào cuối dãy C
(38)Bài 3:Hãy nghiên cứu quy luật tạo bảng số sau lập chương trình để in bảng số Cho biết số phần tử N dòng phần tử dịng đựợc nhập từ bàn phím
1 12
-2 -4
21 13
-13 -6 11
17
10 Bài 3:
Program Inbang;
Var A:Array [1 16] of integer; N,I,p,q;Integer;
BEGIN Repeat
Write(‘Cho biet hang dau co may so’); Readln(N);
Until N<=16; For i:=1 to N Begin
Write(‘A[‘,i,’]=’); Readln(A[i]); End;
p;=1; q:=5; While N>0 Begin
For i:=1 to N Begin
Gotoxy(p+6*i,q); Write(A[i]:6);
If i<N then A[i]:=A[i+1]-A[i]; End;
Writeln;
n:=n-1; q:=q+1; p:=p+3; end;
Readln; END
4.CŨNG CỐ: Nhận xét giừo thực hành 5 HƯỚNG DẪN DẶN DÒ
Bài 1: Dãy số Fibonaci dãy số
1 13 21
được xác định sau: a1=a2 =1
An = an-1+an-2 với n>=3
Lập chương trình tìm in số Fibonaci nhỏ số K cho trước
Bài 2: Viết chương trình nhập vào mảng a gồm 10 phần tử nguyên, sau đó, nhập giá trị x. Tìm mảng a có phần tử có giá trị với x hiển thị lên hình vị trí mảng a
(39)Tuần:
Ngày soạn: 10/11/2014 Tiết 43-44 -45: XÂU KÍ TỰ ( STRING)
1.Kiến thức: Học sinh năm cấu trúc liệu kiểu xâu, biết viết chương trình xữ lí tốn xâu kí tự
2.Kỹ năng: Có kĩ phân tích tốn, sữ dụng xác thủ tục xữ lí xâu kí tự 3.Thái độ: Học sinh tích cực, tự giác, hứng thú học
B PHƯƠNG PHÁP: Thuyết trình, gợi mở, vấn đáp C CHUẨN BỊ CỦA THẦY VÀ TRỊ
GV: Bài tập, phịng máy HS: Làm tập nhà D TIẾN TRÌNH LÊN LỚP 1 Ổn định: Sĩ số
2 Bài mới
XÂU KÝ TỰ (STRING) I KHAI BÁO KIỂU STRING
TYPETênKiểu = STRING[Max]; VAR Tên biến : TênKiểu; khai báo biến trực tiếp:
VAR Tên biến : STRING[Max];
Trong Max số ký tự tối đa chứa chuỗi (Max [0,255]) Nếu khơng có khai báo [Max] số ký tự mặ mặc định chuỗi 255
Ví dụ:
Type Hoten = String[30]; St80 = String[80]; Var Name : Hoten;
Line : St80;
St : String; {St có tối đa 255 ký tự} II TRUY XUẤT DỮ LIỆU KIỂU STRING
- Có thể sử dụng thủ tục xuất nhập Write, Writeln, Readln để truy xuất biến kiểu String
- Để truy xuất đến ký tự thứ k xâu ký tự, ta sử dụng cú pháp sau: Tênbiến[k] III CÁC PHÉP TOÁN TRÊN XÂU KÝ TỰ
3.1 Phép nối xâu: +
3.2 Các phép toán quan hệ: =, <>, <, <=, >, >=.
Chú ý: Các phép toán quan hệ so sánh theo thứ tự từ điển. IV CÁC THỦ TỤC VÀ HÀM VẾ XÂU KÝ TỰ
4.1 Hàm lấy chiều dài xây ký tự
LENGTH(St : String):Integer;
4.2 Hàm COPY(St : String; Pos, Num: Byte): String;
(40)Kiểm tra xâu SubSt có nằm xâu St hay khơng? Nếu xâu SubSt nằm xâu St hàm trả vị trí xâu SubSt xâu St, ngược lại hàm trả giá trị
4.4 Thủ tục DELETE(Var St:String; Pos, Num: Byte); Xoá xâu St Num ký tự vị trí Pos
4.5 Thủ tục INSERT(SubSt: String; Var St: String; Pos: Byte); Chèn xâu SubSt vào xâu St bắt đầu vị trí Pos
4.6 Thủ tục STR(Num; Var St:String);
Đổi số nguyên hay thực Num thành dạng xâu ký tự, kết lưu vào biến St 4.7 Thủ tục VAL(St:String; Var Num; Var Code:Integer);
Đổi xâu số St thành số gán kết lưu vào biến Num Nếu việc chuyển đổi thành cơng biến Code có giá trị 0, ngược lại biến Code có giá trị khác (vị trí lỗi)
BÀI TẬP MẪU
Bài tập 1: Viết chương trình nhập vào xâu ký tự từ bàn phím Đổi xâu ký tự sang chữ in hoa in kết hình
Ví dụ :Xâu abcdAbcD cho xâu ABCDABCD Uses Crt;
Var St:String; i:Byte; Begin
Write(‘Nhap xau St: ‘); Readln(St);
For i:=1 to length(St) St[i]:=Upcase(St[i]); Write(‘Xau ket qua: ‘, St);
Readln; End
Bài tập 2: Viết chương trình nhập vào xâu ký tự từ bàn phím Đổi xâu ký tự sang chữ thường in kết hình
Ví dụ :Xâu abCdAbcD cho xâu abcdabcd Uses Crt;
Var St:String; i:Byte; Begin
Write(‘Nhap xau St: ‘); Readln(St); For i:=1 to length(St)
If St[i] IN [‘A’ ’Z’] Then St[i]:=CHR(ORD(St[i])+32); Write(‘Xau ket qua: ‘, St);
Readln; End
Bài tập 3: Viết chương trình đếm số ký tự chữ số xâu ký tự nhập vào từ bàn phím Uses Crt;
Var St:String; i,d:Byte; Begin
Write(‘Nhap xau St: ‘); Readln(St); For i:=1 to length(St)
If St[i] IN [‘0’ ’9’] Then d:=d+1; Write(‘So ky tu chu so xau: ‘, d); Readln;
(41)Bài tập 4: Viết chương trình nhập vào xâu ký tự từ bàn phím Tìm xâu đảo ngược xâu in kết hình theo cách: Đệ qui khơng đệ qui
Ý tưởng:
- Nếu xâu St có ký tự xâu đảo = St
- Ngược lại: Xâu đảo = Ký tự cuối + Đệ qui(Phần lại xâu St) Uses Crt;
Var St:String;
{Giải thuật không đệ qui}
Function XauDao(St:String):String; Var S:String;
i:Byte; Begin
S:=’’;
For i:=Length(St) DowTo Do S:=S+St[i]; XauDao:=S;
End;
{Giải thuật đệ qui}
Function DeQui(St:String):String; Begin
If Length(St)<=1 Then DeQui:=St
Else DeQui:=St[Length(St)] + DeQui(Copy(St,1,Length(St)-1)); End;
Begin
Write(‘Nhap xau St: ‘); Readln(St); Write(‘Xau dao nguoc: ‘, XauDao(St)); Readln;
End
IV CŨNG CỐ : Học sinh nhắc lại thủ tục đổi chữ thường sang chữ hoa Muốn đổi chữ hoa sang chữ thường ta làm nào?
V HƯỚNG DẪN DẶN DÒ
Bài tập 1: Viết chương trình nhập vào xâu ký tự từ bàn phím Thơng báo lên hình chữ có xâu số lượng chúng ( Không phân biệt chữ hoa hay chữ thường)
Bài tập 2: Viết chương trình xóa ký tự chữ số xâu ký tự nhập vào từ bàn phím
************************************************** Tuần:
Ngày soạn: / /2013 Tiết 46-47 -48: THỰC HÀNH: XÂU KÍ TỰ
1.Kiến thức: Học sinh vận dụng phép tốn xữ lí xâu kí tự để làm tập 2.Kỹ năng: Có kĩ phân tích tốn, vận dụng thự hành máy
3.Thái độ: Học sinh tích cực, tự giác, hứng thú thực hành B PHƯƠNG PHÁP: nêu vấn đè, gợi mỡ
C CHUẨN BỊ CỦA THẦY VÀ TRÒ GV: Bài tập, phòng máy
HS: Làm tập nhà D TIẾN TRÌNH LÊN LỚP 1 Ổn định: Sĩ số
(42)Bài tập 1: Viết chương trình nhập vào xâu ký tự từ bàn phím Thơng báo lên hình chữ có xâu số lượng chúng ( Không phân biệt chữ hoa hay chữ thường)
Ý tưởng:
- Dùng mảng dem với số chữ để lưu trữ số lượng chữ xâu
- Duyệt qua tất ký tự xâu St: Nếu ký tự chữ tăng biến mảng dem[St[i]] lên đơn vị
Uses Crt;
Var St:String;
dem: Array[‘A’ ’Z’] Of Byte; i:Byte;
ch:Char; Begin
Write(‘Nhap xau St: ‘); Readln(St); {Khởi tạo mảng}
For ch:=’A’ To ‘Z’ Do dem[ch]:=0; {Duyệt xâu}
For i:=1 To Length(St) Do
If Upcase(St[i]) IN [‘A’ ’Z’] Then Inc(dem[Upcase(St[i])]); {Liệt kê ký tự hình}
For ch:=’A’ To ‘Z’ Do
If dem[ch]>0 Then Writeln(ch,’ : ’,dem[ch]); Readln;
End
Bài tập 2: Viết chương trình xóa ký tự chữ số xâu ký tự nhập vào từ bàn phím
Uses Crt;
Var St:String;
{Hàm POSNUM kiểm tra xem xâu St có ký tự chữ số hay khơng? Nếu có, hàm trả vị trí ký tự chữ số, ngược lại hàm trả giá trị 0}
Function POSNUM(St:String):Byte; Var OK:Boolean;
i:Byte; Begin
OK:=False; i:=1;
While (i<=Length(St)) AND (Not OK) Do If St[i] IN [‘0’ ’9’] Then OK:=True Else i:=i+1;
If OK Then POSNUM:=i Else POSNUM:=0; End;
Begin
Write(‘Nhap xau St: ‘); Readln(St);
While POSNUM(St)<>0 Do Delete(St,POSNUM(St),1); Write(‘Xau sau xoa: ‘,St);
(43)Bài tập 3: Viết chương trình nhập vào xâu ký tự từ bàn phím Tìm in hình từ có độ dài lớn xâu
Gợi ý:
Tách từ để so sánh
IV CŨNG CỐ: Nhận xét thực hành V.HƯỚNG DẪN, DẶN DÒ
Bài tập 1: Viết chương trình nhập xâu vào từ bàn phím thơng báo lên hình xâu có phải đối xứng không theo cách: Đệ qui không đệ qui (Ví dụ: abba, abcba xâu đối xứng)
Gợi ý:
- Nếu xâu Length(st)<=1 st xâu đối xứng - Ngược lại:
+ Nếu st[1]<>st[Length(st)] st khơng đối xứng
+ Ngược lại: Gọi đệ qui với xâu st sau bỏ ký tự đầu ký tự cuối ******************************************************* Tuần:
Ngày soạn: / /2014 Tiết 49-50 -51: THỰC HÀNH XÂU KÍ TỰ ( STRING)
1.Kiến thức: Học sinh năm cấu trúc liệu kiểu xâu, biết viết chương trình xữ lí tốn xâu kí tự
2.Kỹ năng: Có kĩ phân tích tốn, sữ dụng xác thủ tục xữ lí xâu kí tự 3.Thái độ: Học sinh tích cực, tự giác, hứng thú học
B PHƯƠNG PHÁP: Thuyết trình, gợi mở, vấn đáp C CHUẨN BỊ CỦA THẦY VÀ TRÒ
GV: Bài tập, phòng máy HS: Làm tập nhà D TIẾN TRÌNH LÊN LỚP 1 Ổn định: Sĩ số
2 Bài mới
Bài 1: Viết chương trình tìm vị trí xuất chuổi S1 chuổi S ? Dữ liệu vào: Chuổi s chuổi s1.
Kết ra: Các v ị trí tìm thấy s1 s. Ví dụ:
Input Output
Test ‘aaahocjhochoc’
‘hoc’ 11
Test ‘adddddee’ ‘dd’
Giải
var s,s1:string; begin
readln(s); readln(s1);
while pos(s1,s)>0 then begin
write(pos(s1,s):4); s[pos(s1,s)]:=chr(1); end;
(44)Bài 2:
Nhập vào chuổi sau xuất từ dài chuỗi Dữ liệu vào: chuổi
Kết ra: từ dài chuỗi Ví dụ:
Input Output
Test Tran Nguyen dao Nguyen Test Tran quang dao bgggg quang
bgggg Giải
var s,s1:string;
a:array[1 128]of string; i,j,max:integer;
begin readln(s);
while s[1]=#32 delete(s,1,1);
while s[length(s)]=#32 delete(s,length(s),1); while pos(#32#32,s)>0 delete(s,pos(#32#32,s),1); j:=1;
for i:=1 to length(s) begin
if s[i]<>#32 then a[j]:=a[j]+s[i] else inc(j);
end;
max:=length(a[1]); for i:=1 to j
if length(a[i])>max then max:=length(a[i]); writeln('(cac) tu dai nhat: (co ',max,' ky tu:)'); for i:=1 to j
if length(a[i])=max then writeln(a[i]); readln;
end Bài 3:
Bờm cuội học sinh giỏi tin học thường liên lạc với thư điện tử (Email) Nhưng thư mà hai bạn gởi cho toàn dãy chữ số liền Cả hai bạn có chương trình mã hố số thành ký tự ngược lại giải mã số thành ký tự, theo qui định hai bạn chuyển ký tự định gởi thành số thứ tự ký tự bảng mã ASCII (ví dụ : A:65; B:66) từ chữ thường máy chuyển thành chữ hoa mã hố thành số.(ví dụ: aA65, bB66) Sau mã hố chuyển thư Người nhận có chương trình để giải mã số thành ký tự in hoa (vdụ: 6566326768AB CD) Em viết
a) Chương trình để mã hố xâu ký tự thành chữ số Ví dụ:
Input Output
Di an che? 68733265783267726963 b) Chương trình để giải mã chuổi số thành ký tự
Ví duï:
Input Output
(45)Giải
a Mahoa.pas uses crt;
var s:string; i:integer; begin clrscr;
writeln('Nhap chuoi can ma hoa:'); readln(s);
writeln('Ma hoa cac so la:'); for i:=1 to length(s)
begin
s[i]:=upcase(s[i]); write(ord(s[i])); end;
readln; end
b Giaima.pas uses crt;
var s,s2:string; ch:char; i,x,d:integer; begin
clrscr;
writeln('Nhap chuoi so mat ma:'); readln(s);
writeln('Giai ma chuoi so tren la:'); while length(s)>0
begin
s2:=copy(s,1,2); {lay moi lan ky tu dau tien} delete(s,1,2); {xoa ky tu da lay di}
val(s2,x,i); {chuyen so x}
write(chr(x)); {chuyen ma asscii} end;
readln; end
IV CŨNG CỐ: Khi muốn xữ lí xâu kí tự mà ta cần chuyển từ kí tự số sang kí tự chữ hoặc ngược lại ta cần chuyển theo số thứu tự chữ bảng mã Asci
V HƯỚNG DẪN DẶN DÒ
Về nhà làm tập sau
Bài tập 1: Viết chương trình đảo ngược thứ tự từ xâu nhập vào từ bàn phím Ví dụ: Xâu Nguyen Van An thành An Van Nguyen
Gợi ý:
Tách từ nối vào đầu xâu
Bài tập 2: Viết chương trình nhập vào xâu ký tự s1 s2 Kiểm tra xem xâu s2 xuất lần xâu s1 (Lưu ý: length(s2)<= length(s1))
Gợi ý:
(46)Tuần:
Ngày soạn: / /2014 Tiết 52-53 -54: THỰC HÀNH
1.Kiến thức: Học sinh vận dụng phép tốn xữ lí xâu kí tự để làm tập 2.Kỹ năng: Có kĩ phân tích tốn, vận dụng thự hành máy
3.Thái độ: Học sinh tích cực, tự giác, hứng thú thực hành B PHƯƠNG PHÁP: nêu vấn đè, gợi mỡ
C CHUẨN BỊ CỦA THẦY VÀ TRÒ GV: Bài tập, phòng máy
HS: Làm tập nhà D TIẾN TRÌNH LÊN LỚP 1 Ổn định: Sĩ số
2 Thực hành
Bài tập 1: Viết chương trình nhập vào dịng văn bản, hiệu chỉnh văn theo yêu cầu sau in văn sau hiệu chỉnh hình:
a Xóa tất ký tự trắng thừa
b Trước dấu câu khơng có ký tự trắng, sau dấu câu có ký tự trắng c Đầu câu in hoa
Bài tập 2: Viết chương trình thực phép nhân số nguyên lớn Gợi ý:
- Viết hàm để nhân số lớn với số có chữ số - Áp dụng hàm tính tổng số lớn (xem tập 10)
Bài 3: Viết chương trình nhập vào từ bàn phím xâu ký tự in hình xâu ký tự ngược tương ứng Ví dụ: nhập ‘TRUNG TAM KTTHHN GIO LINH’
‘HNIL OIG NHHTTK MAT GNURT’ Program DaoChuoi;
Uses CRT;
Var Cau : String[80]; i : Byte;
Begin
Write(‘ Nhap vao mot cau : ‘); Readln(Cau);
For i := Length(Cau) DownTo Write(Cau[i]);
Readln; End
Bài 4: Hiển thị chuỗi chuỗi mẹ nhập từ bàn phím, vị trí số ký tự hiển thị cũng nhập từ bàn phím
Program SubString; Uses CRT;
Var St : String; Pos, Len : Byte; Begin
Write(‘ Nhap vao mot chuoi : ‘); Readln(St);
Write(‘ Muon hien thi xau tu vi tri nao : ‘); Readln(Pos);
Write(‘ Do dai xau ky tu : ‘); Readln(Len); Write(‘ Xau ky tu la : ‘,Copy(St, Pos, Len));
Readln; End
(47)Var i : Byte; Begin
For i := Length(s) s[i] := UPCASE(s[i]); CHUHOA := s; End;
(******************************) Function CHUTHUONG(s : String) : String; Var i : Byte;
Begin
For i := Length(s) If s[i] In ['A' 'Z'] then
s[i] := Chr(Ord(s[i]) + 32); CHUTHUONG := s; End;
End
IV CŨNG CỐ: Nhận xét thực hành V HƯỚNG DẪN DẶN DÒ
Bài tập 1: Viết chương trình để nén giải nén xâu ký tự