Hãy viết chơng trình đa ra tổng các phần tử của từng hàng.. + Input: + Output: * Chơng trình mẫu: Hs: Trả lời Gv: Nhận xét, đối tợng trong thuật toán là một số nguyên, trong bài tập này
Trang 1Bài tập
(T23, 24)
I Mục đích - yêu cầu
- Củng cố lại các kiến thức về mảng
- Chữa các bài tập trong sách giáo khoa, rèn kĩ năng phân tích bài toán, kĩ năng vận dụng lý thuyết vào bài tập
- Trang bị các kiến thức cớ bản cho các giờ thực hành tiếp sắp tới
II Lên lớp
1 ổ n định lớp
2 Bài mới
* Cú pháp khai báo
+ Mảng một chiều:
- Khai báo trực tiếp
Var <tên biến mảng>:array[kiểu chỉ
sô] of <kiểu phần tử>;
- Khai báo gián tiếp:
Type <tên kiểu mảng>=array[kiểu chỉ
số] of <kiểu phần tử>;
Var <tên biến mảng>:<tên kiểu mảng>;
+ Mảng hai chiều:
- Khai báo trực tiếp
Var <tên biến mảng>:array[kiểu chỉ sô
hàng,kiểu chỉ số cột] of <kiểu phần tử>;
- Khai báo gián tiếp:
Type <tên kiểu mảng>=array[kiểu chỉ
số hàng, kiểu chỉ số cột] of <kiểu phần
tử>;
Var <tên biến mảng>:<tên kiểu mảng>;
Gv: Nhắc lại các kiến thức cơ bản của bài: cách khai bao biến mảng, mục
đích, ý nghĩa của các thành phần Gv: Ghi lên bảng cách khai báo mảng một chiều, mảng hai chiều
Gv: Giải đáp các thắc mắc về các câu hỏi lý thuyết trong sách giáo khoa và sách bài tập
Trang 2Bài 5: Sách giáo khoa
+ Input: N, và dãy số a1, a2, ,an
+ Output: dãy số trên có phải là cấp số
cộng hay không
* Chơng trình chuẩn
Program b5;
Uses crt;
Var A:array[1 1000] of integer;
D, i: integer;
Begin
Writeln(‘moi ban nhap so phan tu’);
Readln(n);
For i:= 1 to n do
Begin
Write(‘ban nhap vao so hang thu’,i,’:’);
Write(‘A[‘,i,’]=’);
Readln(a[i]);
End;
D:=A[2]-A[1];
For i:=3 to n do
If A[i] - A[i-1]<> d then
Writeln(‘day so tren khong la day so
cong’)
Else
Writeln(‘day so tren la cap so cong’);
For i:=1 to n do
Write(A[i]:4);
Readln;
End
Bài 6:
Gv: yêu cầu học sinh xác định bài toán
Gv: Thế nào là một cấp số cộng ? Hs: Trả lời
Gv: giả sử ta có D= A[1] – A[2]
=> dãy trên là cấp số cộng nếu thoả mãn điều kiện:
A[i] = A[1] + (i-1)d Gv: Gọi học sinh lên làm bài tập
Gv: Nhận xét những mặt đợc và những mặt cha đợc trong cách trình bày của học sinh
Gv: Yêu cầu học sinh xác định bài toán? Xây dựng ý tởng giải bài toán
Trang 3+ Input: Số N và dãy số nguyên a1,a2,…./…./……,an
+ Output: - Số lợng số chẵn, lẻ trong dãy
- Số lợng số nguyên trong dãy
Program b6;
Uses crt;
Var a: array[1 1000] of integer;
Sc, sl, i, j, nt, n, t: integer;
Begin
Clrscr;
Writeln(‘ moi ban nhap so phan tu cua
day’); Readln(n);
For i:=1 to n do
Begin
Write(‘moi ban nhap phan tu thu’,i,’=’);
Readln(a[i]);
End;
Write(‘ day so vua nhap la:’);
For i:=1 to n do Write(a[i]:4);
Sc:=0; Sl:=0;
For i:=1 to n do
If a[i] mod 2 = 0 then sc:=sc+1
Else sl:= sl+1;
Writeln(‘ trong day co ‘,sc,’ so chan’);
Writeln(‘trong day co ‘,sl,’ so le’);
Nt:=0;
For i:=1 to n do
Begin
T:=0;
For j:=2 to a[i] div 2 do
If a[i] mod j = 0 then t:= t + 1;
Gv: Biểu thức điều kiện nào để kiểm tra một số là số chẵn hay lẻ ?
Hs: Trả lời Gv: Đa ra câu lệnh sau:
If a[i] mod 2 = then writeln(‘ day la
so chan’) Else writeln(‘ day la so le’);
- Để làm đợc việc trên thì ta phải duyệt từ đầu dãy đễn cuối dãy số, nên
ta dùng lệnh: For – do
- Khi điều kiện trên thoả mãn thì đó là
số chẵn ngợc lại thì là số lẻ Nh vậy ta
sẽ dùng 2 biến: Sc, Sl để đếm số chẵn,
số lẻ khi điều kiện thoả mãn
Gv: Ta có thể kết hợp ý b) vào đoạn chơng trình này không?
Hs: Đợc
Gv: Phân tích những nét chung giữa hai ý
Gv: Em nào có thể nếu cho thầy thuật toán kiểm tra một số N có phải là số nguyên tố hay không?
Trang 4If t=0 then
Begin
Writeln(‘ So ‘,a[i],’ la so nguyen to’);
Nt:=nt+1;
End;
End;
Writeln(‘ trong day co ‘,nt,’ so nguyen
to’);
Readln;
End
Bài 7:
Program b7;
Var n, i: Integer;
F, F1, F2: integer;
Begin
Writeln(‘Tim so hang n cua day Phi –
bo – na – xi, N = ‘);
Readln(n);
F1:= 1;
F2:=1;
For i:= 3 to n do
Begin
F:= f1+ f2;
F1:= f2;
F2:= f;
End;
Writeln(f);
Readln;
End
Bài 8: Cho mảng hai chiều m, n gồm các
số nguyên Hãy viết chơng trình đa ra
tổng các phần tử của từng hàng
+ Input:
+ Output:
* Chơng trình mẫu:
Hs: Trả lời Gv: Nhận xét, đối tợng trong thuật toán là một số nguyên, trong bài tập này đó là kiểm tra một dãy các số nguyên
Gv: Đa ra chơng trình mẫu, giải thích
ý nghĩa của từng biến, từng câu lệnh
có trong chơng trình
Trang 5Program b8;
Uses crt;
Var ma:array[1 100, 1 100] of integer;
J, i, m, n, t: integer;
Begin
Write(‘ moi ban nhap so hang m = ‘);
Readln(m);
Write(‘ moi ban nhap so cot n = ‘);
Readln(n);
For i:= 1 to m do
For j:= 1 to n do
Begin
Write(‘ moi ban nhap phan tu
a[‘,i,’,’,j, ’] = ‘);
Readln(a[i,j]);
End;
For i:= 1 to m do
Begin
For j:= 1 to n do
Write(a[i,j]: 4);
Writeln;
End;
For I:= 1 to m do
Begin
T:=0;
For j:=1 to n do t:= t+ a[i,j];
Writeln(‘tong hang thu ‘,i, ’la :‘, t:4);
End;
Readln;
End
Bài 9: Cho mảng hai chiều m, n gồm các
số nguyên Viết chơng trình tìm giá trị lớn
nhất nhỏ nhất của mảng
+ Input: Mảng 2 chiều m,n
+ Output: Max, Min
* Chơng trình mẫu
Program b9;
Uses crt;
Var a: array[1 100,1 50] of integer;
Gv: Giải thích ý nghĩa của từng câu lệnh, từng vòng For - do
Gv: Chúng ta đã có thuật toán tìm giá trị lớn nhất, nhỏ nhất đối với mảng một chiều Tơng tự nh vậy ta có thể vận dụng đối với mảng 2 chiều
Ta sử dụng 2 biến: Max Min Gán: Max:=A[1,j];
Min :=A[1,j];
Trang 6Max, min, i, j, m , n :integer;
Begin
Clrscr;
Writeln(‘moi ban nhap so hang m =’);
Readln(m);
Writeln(‘moi ban nhap so cot n = ‘);
Readln(n);
For i:=1 to m do
For j:=1 to n do
Begin
Write(‘moi ban nhap phan tu
a[‘,i,’,’,j,’] =’);
Readln(a[i,j]);
End;
For i:=1 to m do
Begin
For j:=1 to n do
Write(a[i,j]:4);
Writeln;
End;
Max:= a[1,j]; min:=a[1,j];
For i:= 1 to m do
Begin
For j:=1 to n do
begin
If max>a[i,j] then max:=a[i,j];
If min <a[i,j] then min:=a[i,j];
End;
End;
Writeln(‘gia tri lon nhat la’, max);
Writeln(‘gia tri nho nhat la’, min);
Readln;
End
Bài 10: Cho mảng 2 chiều m, n gồm các
số nguyên Hãy viết chơng trình tính tổng
các phần tử của từng hàng
* Xác định bài toán
+ Input: mảng hai chiều m, n, gồm các số
nguyên
+ Output: tổng của từng hàng
* Chơng trình mẫu
Program b10;
Trang 7Uses crt;
Var a: array[1 100,1 100] of integer;
S, i, j, m, n :integer;
Begin
Clrscr;
Write(‘moi ban nhap so hang m = ‘);
Readln(m);
Write(‘moi ban nhap so cot n = ‘);
Readln(n);
For i:=1 to m do
For j:=1 to n do
Begin
Write(‘moi ban nhap phan tu a[‘,i,’,’,j,’]
=’);
Readln(a[i,j]);
End;
For i:=1 to m do
Begin
For j:=1 to n do
Write(a[i,j]:4);
Writeln;
End;
For i:=1 to m do
Begin
S:=0;
For j:= 1 to n do
S:= s+ a[i,j];
Writeln(‘tong cac phan tu hang thu’,
i, ‘ la’, s:2);
End;
Readln;
End
Bài 11: Cho dãy n số nguyên
a Tìm giá trị lớn nhất, nhỏ nhất của dãy
số
b Sắp xếp dãy số theo chiều tăng dần,
giảm dần
c Đếm xem trong dãy số trên có bao
nhiêu số le
d Đếm xem trong dãy số trên có bao
nhiêu số nguyên tố
3 Củng cố
- Cú pháp khai báo mảng, ý nghĩa
- Làm các bài tập liên quan đến mảng
Trang 8- Xem tríc bµi thùc hµnh.
4 Rót kinh nghiÖm
Trang 9
Bài thực hành 3, 4
(T 25, 26)
I Mục đích – yêu cầu
- Nâng cao kĩ năng sử dụng một số câu lệnh và một số kiểu dữ liệ thông qua việc tìm hiểu, chạy thử các chơng trình có sẵn
- Biết giải một số bài toán tính toán, tìm kiếm đơn giản trên máy tính
- Biết nhận xét, phân tích, đề xuất thuật toán giải bài toán sao cho chơng trình chạy nhanh hơn
- Làm quen với dữ liệu có cấu trúc và bài toán sắp xếp
II Chuẩn bị thực hành
- Chia lớp thành các nhóm nhỏ
- Yêu cầu học sinh xem trớc nội dung thực hành ở nhà
- Giáo viên chuẩn bị phòng máy, các máy tính đợc cài các chơng trình cần thiết
III Nội dung thực hành.
Bài 1: Cho dãy n số nguyên Hãy sắp xếp dãy số trên thành dãy tăng dần, giảm dần Gv: Thuật toán này các em đã đợc làm quen, giờ hãy vận dụng để viết thành
ch-ơng trình hoàn chỉnh
Gv: Quan sát học sinh làm bài, giải đáp các thắc mắc trong qua trình lập trình Gv: Nhận xét bài làm của học sinh
Gv: Chạy chơng trình mẫu đã chuẩn bị, giải thích ý nghĩa của từng biến, từng câu lệnh
Bài 2: Cho mảng 2 chiều m hàng, n cột Hãy viết chơng trình nhập và đa mảng ra màn hình Đa ra tổng các phần tử trên từng hành
Trang 10đề kiểm tra thực hành một tiết
(t 27)
Đề 01
Cho mảng một chiều n số nguyên Viết chơng trình sắp xếp mảng trên thành dãy tăng dần
Đề 02
Cho mảng một chiều n số nguyên Viết chơng trình sắp xếp mảng trên thành dãy giảm dần
Đề 03
Cho mảng một chiều n số nguyên Viết chơng trình tìm giá trị lớn nhất của mảng
số trên
Đề 04
Cho mảng một chiều n số nguyên Viết chơng trình tìm giá trị nhỏ nhất của mảng
số trên
Đề 05
Cho mảg một chiều n số nguyên Viết chơng trình đếm xem trong mảng có bao nhiêu số lẻ, chẵn
Đề 06
Cho mảng một chiều n số nguyên Viết chơng trình đếm xem trong mảng có bao nhiêu số 2
Đề 07
Cho mảng 2 chiều m, n gồm các số nguyên Viết chơng trình đa ra tổng các phần
tử của mảng
Đề 08
Cho mảng 2 chiều m, n gồm các số nguyên Viết chơng trình tìm giá trị lớn nhất của mảng
Đề 09
Cho mảng 2 chiều m, n gồm các số nguyên Viết chơng trình tìm giá trị nhỏ nhất của mảng
Đề 10
Cho mảng 2 chiều m, n gồm các số nguyên Viết chơng trình đếm xem trong mảng
có bao nhiêu số lẻ, chăn
Đề 11
Trang 11Cho mảg một chiều n số nguyên Viết chơng trình đếm xem trong mảng có bao nhiêu số nguyên tố
Đề 12
Cho mảg một chiều n số nguyên Viết chơng trình tính tổng các số lẻ có trong dãy
Đề 13
Cho mảg một chiều n số nguyên Viết chơng trình tính tổng các số chẵn có trong dãy
Đề 14
Cho mảng 2 chiều m, n gồm các số nguyên Viết chơng trình đếm xem trong mảng
có bao nhiêu số nguyên tố
Đề 15
Cho mảng 2 chiều m, n gồm các số nguyên Viết chơng trình tính tổng các phần tử của từng hàng
Đề 16
Cho mảng 2 chiều m, n gồm các số nguyên Viết chơng trình tính tổng các phần tử của từng cột
Đề 17
Cho mảng 2 chiều m, n gồm các số nguyên Viết chơng trình tìm giá trị nhỏ nhất của từng cột
Đề 18
Cho mảng 2 chiều m, n gồm các số nguyên Viết chơng trình tìm giá trị nhỏ nhất của từng hàng
Đề 19
Cho mảng 2 chiều m, n gồm các số nguyên Viết chơng trình tìm giá trị lớn nhất của từng hàng
Đề 20
Cho mảng 2 chiều m, n gồm các số nguyên Viết chơng trình tìm giá trị lớn nhất của từng cột
Trang 12Bài 12
Kiểu xâu
(T 28)
I Mục đích – yêu cầu
- Biết xâu là một dãy kí tự (có thể coi xâu là mảng một chiều)
- Biết cách khai báo xâu, biết cách truy cập phần tử của xâu
- Sử dụng một số thủ tục, hàm thông dụng về xâu
- Cái đặt đợc một số chơng trình đơn giản có sử dụng xâu
II Lên lớp
1 ổ n định lớp
2 Bài mới
Gv: Trong giờ trớc chúng ta đã cùng tìm
hiểu một kiểu dữ liệu cơ bản trong lập
trình, đó là kiểu mảng Tuy nhiên khi đi
giải quyết một bài toán không chỉ có
kiểu dữ liệu số mà còn có kiểu dữ liệu
phi số, đó là dạng kí tự, dữ liệu kiểu xâu
là một dãy các kí tự
* Xâu là một dãy các kí tự trong bản mã
ASCII, mỗi kí tự là một phần tử của xâu.
Số lợng phân tử trong xâu đợc gọi là độ
dài của xâu Xâu có độ dài bằng 0 gọi là
xâu rỗng.
Gv: Đa ra ví dụ:
‘2008 la nam Mau Ty’
Các em quan sát ví dụ và nhận xét trên,
thấy các kí tự có đặc điểm gì?
Gv: Giữa các từ một dấu cách, vậy đó có
phải là phần tử của xâu không?
Gv: Từ nhận xét và phân tích ví dụ, các
em thấy kiểu dữ liệu này giống với kiểu
dữ liệu nào đã học?
* Vậy ta có thể xem xâu là mảng một
Hs: nghe giảng và ghi bài
Hs: Săp xếp thành một dãy
Hs: Có
Hs: Kiểu mảng một chiều
Trang 13chiều mà mỗi phần tử là một kí tự Các
kí tự của xâu đợc đánh số thứ tự, thờng
bắt đầu từ 1.
Gv: Nh vậy các thao tác khi làm việc với
mảng một chiều đều có thể áp dụng khi
làm việc với kiểu xâu
1 Phần khai báo
* Cú pháp:
Var <tên biến>: string[độ dài lớn nhất
của xâu];
* Ví dụ:
- Var hoten: string[12];
- Var chuthich: string;
Nếu khai báo nh vậy thì độ dài lớn
nhất của xâu ngầm định là 255 kí tự
* Chú ý: Tên biến đợc khai báo là kiểu
xâu, nhng mỗi một phần tử trong đó là
một kí tự và có kiểu dữ liệu là CHAR.
Gv: Giải thích cụ thể, so sánh với mảng
một chiều đã học
2 Các thao tác xử lý xâu
a Phép ghép xâu: Kí hiệu là dấu cộng
(+)
Gv: Lấy ví dụ minh hoạ
b Các phép so sánh: =, <>, <, >, <=,
>= Các phép tính so sánh có độ u tiên
thấp hơn phép ghép xâu và tuân theo
quy tắc:
+ Xâu A là lớn hơn xâu B nếu nh kí tự
đầu tiên khác nhau giữa chúng kể từ trái
sang trong xâu A có mã ASCII lớn hơn.
+ Nêu A và B là các xâu có độ dài
khác nhau và A là đoạn đầu của B thì A
là nhỏ hơn B.
+ Hai xâu đợc gọi là bằng nhau nếu
chúng giống nhau hoàn toàn.
Hs: Nghe giảng, tổng hợp kiến thức theo
ý hiểu của mình Cách tham chiếu đến từng phần tử trong xâu nh thế nào
Hs: Ghi bài Đặt câu hỏi yêu cầu giáo viên giải đáp
Hs: nghe giảng, lấy ví dụ và tổng hợp lại các ý chính
Trang 14c Thủ tục DELETE(st, vt, n) thực hiện việc xoá n kí tự từ xâu st kể từ vị trí vt.
Ví dụ
d Thủ tục insert(s1, s2, vt) chèn xâu s1 vào xâu s2 băt đầu từ vị trí vt
‘.net’ ‘Vnexpress’ insert(s1, s2, 9); ‘vnexpress.net’
‘Bac Son’ ‘Thi tran ’ Delete(s1, s2,10); ‘Thi tran Bac Son’
e Hàm COPY(S, vt, n) tạo xâu n kí tự liên tiếp bắt đầu từ vị trí vt của xâu S
f Hàm length(s) cho giá trị là độ dài xâu S
g Hàm POS(s1,s2) cho vị trí xuất hiện đầu tiên của xâu s1 trong xâu s2
h Hàm Upcase(ch) cho chữ cai in hoa ứng với chữ cáI trong ch
3 Củng cố
- Cách khai báo kiểu xâu
- So sánh sự giống và khác nhau giữa xâu và mảng một chiều
- Nhớ ý nghĩa của các thủ tục và hàm thao tác với xâu, phân biệt hàm và thủ tục
4 Rút kinh nghiệm