Kỹ năng: Cài đặt được thuật toán của một số bài toán đơn giản với kiểu dữ liệu mảng một chiều Thực hiện được khai báo mảng, truy cập, tính toán các phần tử của mảng 3.. Thái độ: Có[r]
Trang 1
Ngày soạn : 25/01/2010
Ngày dạy : 04/01/2010
Tiết :20
§11 KIỂU MẢNG (TIẾT 1)
I MỤC TIÊU
1 Kiến thức
- Biết được một kiểu dữ liệu mới là kiểu mảng một chiều Biết được một loại biến có chỉ số
- Biết cấu trúc tạo kiểu mảng một chiều và cách khai báo biến khiểu mảng một chiều
2 Kĩ năng
- Tạo được kiểu mảng một chiều và sử dụng biến mảng một chiều trong ngôn ngữ lập trình Pascal để giải quyết một số bài toán cụ thể
3 Thái độ
- Góp phần rèn luyện tác phong, tư duy lập trình: Tự giác, tich cực, chủ động và sáng tạo trong tìm kiếm kiến thức
II ĐỒ DÙNG DẠY HỌC
- Giáo án, SGK, SGV,
2 Chuẩn bị của học sinh
- Sách giáo khoa, vở ghi
3 Nội dung ghi bảng
1 Kiểu mảng một chiều
VD: SGK_53
Chương trình minh họa:
Program nhietdotuan;
Var t1,t2,t3,t4,t5,t6,t7,tb:real;
dem:integer;
Begin
Write(‘Nhap vao nhiet do 7 ngay: ’); readln(t1,t2,t3,t4,t5,t6,t7);
tb:=(t1+t2+t3+t4+t5+t6+t7)/7;
dem:=0;
if t1>tb then dem:=dem+1;
if t2>tb then dem:=dem+1;
if t3>tb then dem:=dem+1;
if t4>tb then dem:=dem+1;
if t5>tb then dem:=dem+1;
if t6>tb then dem:=dem+1;
if t7>tb then dem:=dem+1;
Trang 2
writeln(‘Nhiet do trung binh tuan ’,tb); writeln(‘So ngay nhiet do trung binh cao hon nhiet do trung binh tuan’,dem); readln; end. Mảng một chiều là dãy hữu hạn các phần tử có cùng kiểu dữ liệu Các phần tử trong mảng có cùng chung một tên và phân biệt nhau bởi chỉ số Để mô tả mảng một chiều cần xác định được kiểu của các phần tử và cách đánh số các phần tử của nó a Khai báo TYPE tên_km= Array[kiểu_cs] Of kiểu_thành_phần; + Kiểu chii số thường là kiểu số nguyên (hoặc đoạn kí tự) liên tục, có dạng n1 n2 với n1 và n2 là các biểu thức nguyên (hoặc kí tự) xác ddingj chỉ số đầu và chỉ số cuối của mảng + Kiểu thành phần: Là kiểu dữ liệu chung của mọi phần tử trong mảng + Khai báo biến mảng 1 chiều: Var Tên_biến: Tên_kiểu_mảng; + Tham chiếu đến từng phần tử: Tên_biến[chỉ số]; III HOẠT ĐỘNG DẠY-HỌC 1 Ổn định tổ chức Kiểm tra sĩ số: Lớp - Sĩ số Ngày dạy Vắng Tên HS vắng 11A1 – 39 / / 2010
11A2 – 41 / / 2010
11A3 – 44 / / 2010
11A4 – 49 / / 2010
11A5 – 50 / / 2010
11A6 – 47 / / 2010
11A7 – 44 / / 2010
11A8 – 46 / / 2010
11A9 – 47 / / 2010
11A10 – 51 / / 2010
11A11 – 41 / / 2010
2 Kiểm tra bài cũ
- Lồng vào bài
3 Bài mới.
Hoạt động 1: Tìm hiểu ý nghĩa của mảng một chiều.
HOẠT ĐỘNG CỦA GIÁO VIÊN HOẠT ĐỘNG CỦA HỌC SINH
1 Nêu đề bài và chương trình ví dụ lên bảng
- Hỏi: Khi N lớn thì chương trình trên có những
hạn chế như thế nào?
- Dẫn dắt: Để khắc phục những hạn chế trên,
1 Quan sát trên bảng, suy nghĩ và trả lời
- Phải khai báo quá nhiều biến Chương trình phải viết rất dài
Trang 3
người ta thường ghép chung 7 biến trên thành
một dãy và đặt cho nó chung một tên và đánh cho
một phần tử một chỉ số
2 Yêu cầu học sinh tham khảo sách giáo khoa và
hỏi: Em hiểu như thế nào về mảng một chiều?
- Hỏi: Để mô tả mảng một chiều, ta cần xác định
những yếu tố nào?
2 Nghiên cứu sách giáo khoa để trả lời
- Mảng một chiều là dãy hữu hạn các phần tử có cùng kiểu dữ liệu Các phần
tử trong mảng có cùng chung một tên và phân biệt nhau bởi chỉ số
- Để mô tả mảng một chiều cần xác định được kiểu của các phần tử và cách đánh
số các phần tử của nó
Hoạt động 2: Tạo kiểu mảng một chiều và khai báo biến mảng.
HOẠT ĐỘNG CỦA GIÁO VIÊN HOẠT ĐỘNG CỦA HỌC SINH
1 Yêu cầu học sinh nghiên cứu sách giáo khoa
và cho biết cách tạo kiểu dữ liệu mảng một chiều
trong ngôn ngữ lập trình Pascal
- Tìm một ví dụ để minh họa
- Gọi học sinh khác, hỏi: Ý nghĩa của lệnh bạn
vừa viết?
- Chiếu lên bảng một số khai báo kiểu mảng một
chiều
Type
Arrayr=array[1 200] of real;
Arrayr=array[byte] of real;
Arrayb=array[-100 0] of boolean;
- Hỏi: Những khai báo nào đúng?
2 Yêu cầu học sinh cho biết cách khai báo biến
và một ví dụ khai báo một biến mảng ứng với
kiểu dữ liệu vừa tạo
- Gọi học sinh khác, hỏi: Ý nghĩa của lệnh bạn
vừa viết?
- Dung lượng bộ nhớ của biến a đã chiếm là bao
nhiêu?
- Chú ý cho học sinh về cách đặt tên kiểu dữ liệu
và tên biến, tránh nhầm lẫn
3 Giới thiệu cách tham chiếu đến từng phần tử
1 Tham khảo sách giáo khoa và trả lời
- TYPE tên_km= Array[kiểu_cs] Of kiểu_thành_phần;
- Ví dụ: Type mmc=array[1 100] of integer;
- Tạo một kiểu dữ liệu mới có tên mmc, gồm 100 phần tử, có kiểu nguyên
- Quan sát bảng và chọn khai báo đúng
Arrayr=array[1 200] of real;
Arrayb=array[-100 0] of boolean;
2 Tham khảo sách giáo khoa và trả lời
- VAR tên_biến:tên_km;
- Ví dụ: Var a:mmc;
- Khai báo một biến mảng một chiều
- a đã chiếm 200 byte trong bộ nhớ
3 Theo dõi hướng dẫn của giáo viên và độc lập suy nghĩ để trả lời
Trang 4
của mảng một chiều Yêu cầu học sinh lấy một ví
dụ
a[1] là phần tử ở vị trí 1 của mảng a a[i] là phần tử ở vị trí i của mảng a
4 Củng cố và dặn dò
- Cách tạo kiểu mảng một chiều và cách khai báo biến
TYPE tên_kiểu_mảng = Array[kiểu_chỉ_số] Of kiểu_thành_phần;
VAR tên_biến:tên_kiểu_mảng;
- Tham chiếu đến từng phần tử: Tên_biến[chỉ số]
- Trả lời các câu hỏi 1-4 trang 79
- Đọc trước nội dung về kiểu mảng một chiều phần b
IV RÚT KINH NGHIỆM TIẾT DẠY
Tổ trưởng duyệt
Ngày tháng 1 năm 2010
Phạm Anh Quý
Giáo viên soạn
( Chữ ký, Họ tên)
Giáp Văn Khiêm
Trang 5
Ngày soạn : 25/01/2010 Ngày dạy : 06/01/2010 Tiết :21 §11 KIỂU MẢNG ( TIẾT 2 ) I MỤC TIÊU: 1 Kiến thức: Học sinh sau tiết học sẽ: Nắm được khái niệm mảng 1 chiều Hiểu cách khai báo và truy cập đến các phần tử của mảng 2 Kỹ năng: Cài đặt được thuật toán của một số bài toán đơn giản với kiểu dữ liệu mảng một chiều Thực hiện được khai báo mảng, truy cập, tính toán các phần tử của mảng 3 Thái độ: Có tư duy đúng đắn trong việc áp dụng mảng 1 chiều để giải các bài toán đơn giản Tạo lòng ham muốn giải được một số bài tập tính toán đơn giản bằng ngôn ngữ Pascal II ĐỒ DÙNG DẠY HỌC 1 Giáo viên: − Sách giáo viên, giáo án, SGK,
2 Học sinh: − Vở ghi, SGK III PHƯƠNG PHÁP: Phương pháp thuyết trình, vấn đáp, kết hợp tạo tình huống có vấn đề IV HOẠT ĐỘNG DẠY HỌC 1 Ổn định tổ chức Kiểm tra sĩ số: Lớp - Sĩ số Ngày dạy Vắng Tên HS vắng 11A1 – 39 / / 2010
11A2 – 41 / / 2010
11A3 – 44 / / 2010
11A4 – 49 / / 2010
11A5 – 50 / / 2010
11A6 – 47 / / 2010
11A7 – 44 / / 2010
11A8 – 46 / / 2010
11A9 – 47 / / 2010
11A10 – 51 / / 2010
11A11 – 41 / / 2010
Trang 6
2 Kiểm tra bài cũ
− Mảng một chiều là gì?
− Khai báo cho bài toán sau: Cho dãy A gồm n phần tử có giá trị nguyên dương Sau
đó đếm và đưa ra có bao nhiêu số chẵn, bao nhiêu số lẻ trong dãy
3 Bài mới.
Hoạt động 1: Trình bày ví dụ 1 SGK trang 56
HOẠT ĐỘNG CỦA GIÁO VIÊN HOẠT ĐỘNG CỦA HỌC SINH Nêu nội dung bài toán ví dụ 1
Trình bày Input và Output của bài toán
* Ý tưởng của thuật toán
+ Đặt số A1 là số lớn nhất (max)
+ Cho i lặp từ 2 đến N, nếu A[i]> A[1] thì
đổi max = A[i] và lưu lại vị trí i
* Thuật toán:
B1: Nhập N và dãy A1, A2,…, AN;
B2: Max←A1; i←2;
B3: Nếu i>N thì đưa ra Max rồi kết thúc;
B4:
B4.1: Nếu Ai>Max thì Max← Ai;
B4.2: i←i+1 rồi quay lại bước 3
− Biến i dùng để làm gì?
− Ý nghĩa của bước 3
− Có sử dụng vòng lặp không?
− Khi nào thì vòng lặp dừng lại?
* Chương trình như sau :
Program timmax ;
Uses crt ;
var a : array[1 250] of integer ;
n,i,max,csmax : Integer ;
Begin
clrscr ;
Write('Nhap n = ') ;
Readln(n) ;
For i := 1 to n do
Begin
Write('a[',i,'] = ') ;
readln(a[i]) ;
End ;
- Input : Số nguyên dương N và dãy
số A1, A2, … , AN
- Output : Chỉ số và giá trị của số lớn
nhất trong dãy
− Để thực hiện lần lượt từng phần tử từ
vị trí thứ 2 đến vị trí thứ n
− Để kết thúc thuật toán sau khi đã duyệt xong (Tính dừng của thuật toán)
− Có
− Khi i=N+1 thì vòng lặp sẽ dừng lại
Trang 7
max := a[i] ;
csmax := 1 ;
For i := 2 to n do
If a[i] > max then
Begin
max := a[i] ;
csmax :=i ;
End ;
Writeln('Gia tri lon nhat : ',max) ;
Writeln('chi so ptu lon nhat : ',csmax) ;
Readln ;
End
Cho HS chạy thử thuật toán với bộ dữ liệu: 5 1
7 6 3 15 8 4
Hoạt động 2: trình bày ví dụ 3 trong SGK trang 58.
HOẠT ĐỘNG CỦA GIÁO VIÊN HOẠT ĐỘNG CỦA HỌC SINH
Ví dụ 3 : Tìm kiếm nhị phân
Gọi HS xác định Input và Output của bài toán?
* Thuật toán:
Bước 1: Nhập N, các số hạng A1, A2, …, AN,
và khóa k;
Bước 2: Dau 1; Cuoi N;
2
Dau Cuoi Giua
Bước 4: Nếu A Giua = k thì thông báo chỉ số
Giua, rồi kết thúc;
Bước 5: Nếu A Giua > k thì đặt Cuoi = Giua – 1
rồi chuyển đến bước 7;
Bước 6: Dau Giua + 1;
Bước 7: Nếu Dau > Cuoi thì thông báo dãy A
không có số hạng có giá trị bằng k, rồi kết thúc;
Bước 8: Quay lại bước 3.
Gọi HS lên bảng viết phần khai báo và nhập dữ
liệu cho bài toán?
Chương trình như sau :
dau := 1 ; cuoi := n ;
TK := false ;
while (dau <= cuoi) and Not TK Do
Begin
Input: Dãy A là dãy tăng gồm N số
nguyên dương A1, A2, …, AN, số
nguyên k.
Output: Chỉ số i mà A i = k hoặc thông
báo “Khong tim thay” nếu không có
số hạng nào của dãy A có giá trị bằng
k.
Program sapxep ; Uses crt ;
var A : Array[1 250] of integer ; n,i,k : Integer ;
dau,cuoi,giua : Integer ;
TK : boolean ; Begin
clrscr ;
Trang 8
giua := (dau+cuoi) div 2 ;
If A[giua] = k then TK := true
Else
If a[giua]>k then cuoi := giua - 1
Else dau := giua + 1 ;
End ;
Sau khi đã tìm ra được số cần tìm kết quả đã
được hiện thị trên màn hình chưa?
Cho một bộ dữ liệu cụ thể và yêu cầu HS chạy
chương trình với bộ dữ liệu đó
Write('Nhap so ptu mang n = ') ; Readln(n) ;
For i := 1 to n do Begin
Write('A[',i,'] = ') ; readln(A[i]) ; End ;
Write('nhap so can tim k : ') ; Readln(k);
Kết quả chưa hiển thị được trên màn hình, ta phải dùng thủ tục để đưa dữ liệu
đó ra màn hình
If TK then write('Chi so la : ',giua) else write(' Khong tim thay ');
readln ; End
4 Củng cố và dặn dò
- Thuật toán tráo đổi giá trị của hai phần tử, sử dụng biến trung gian để lưu giá trị tạm thời.
- Đối với thuật toán tìm kiếm nhị phân, mảng phải được sắp xếp có thứ tự (dãy tăng hoặc
dãy giảm)
- Về nhà làm các bài tập 5,6 SGK_79 và chuẩn bị ví dụ 2 SGK_57.
V RÚT KINH NGHIỆM TIẾT DẠY
Tổ trưởng duyệt
Ngày tháng 1 năm 2010
Phạm Anh Quý
Giáo viên soạn
( Chữ ký, Họ tên)
Giáp Văn Khiêm
Trang 9
Ngày soạn : 30/01/2010 Ngày dạy : 11/01/2010 Tiết :22 §11 KIỂU MẢNG (TIẾT 3) I MỤC TIÊU: 1 Kiến thức: Học sinh sau tiết học sẽ: Nắm được khái niệm mảng 1 chiều Hiểu cách khai báo và truy cập đến các phần tử của mảng 2 Kỹ năng: Cài đặt được thuật toán của một số bài toán đơn giản với kiểu dữ liệu mảng một chiều Thực hiện được khai báo mảng, truy cập, tính toán các phần tử của mảng 3 Thái độ: Có tư duy đúng đắn trong việc áp dụng mảng 1 chiều để giải các bài toán đơn giản Tạo lòng ham muốn giải được một số bài tập tính toán đơn giản bằng ngôn ngữ Pascal II ĐỒ DÙNG DẠY HỌC 1 Giáo viên: − Sách giáo viên, giáo án, SGK,
2 Học sinh: − Vở ghi, SGK III PHƯƠNG PHÁP: Phương pháp thuyết trình, vấn đáp, kết hợp tạo tình huống có vấn đề IV HOẠT ĐỘNG DẠY HỌC 2 Ổn định tổ chức Kiểm tra sĩ số: Lớp - Sĩ số Ngày dạy Vắng Tên HS vắng 11A1 – 39 / / 2010
11A2 – 41 / / 2010
11A3 – 44 / / 2010
11A4 – 49 / / 2010
11A5 – 50 / / 2010
11A6 – 47 / / 2010
11A7 – 44 / / 2010
11A8 – 46 / / 2010
11A9 – 47 / / 2010
11A10 – 51 / / 2010
11A11 – 41 / / 2010
Trang 10
2 Kiểm tra bài cũ
Trình bày cách khai báo gián tiếp kiểu dữ liệu mảng một chiều trong Turbo Pascal Có khai báo sau, cho biết tên của kiểu dữ liệu mới, kiểu mảng đó có bao nhiêu phần tử, mỗi phần tử của mảng thuộc kiểu gì, và tên của các mảng sẽ dùng trong chương trình là gì?
Type diem = array[1 15] of byte; Var A, mang: diem;
3 Bài mới.
Hoạt động 1: Trình bày ví dụ 2 trong SGK trang 57
HOẠT ĐỘNG CỦA GIÁO VIÊN HOẠT ĐỘNG CỦA HỌC SINH
Ví dụ 2 : Sắp xếp dãy số nguyên bằng thuật toán
tráo đổi
Trình Input và Output của bài toán?
Việc sắp xếp dãy số là việc hoán vị các số đó sao
cho chúng tạo thành một dãy tăng dần hoặc giảm
dần Chúng ta có thể liên tưởng tới công việc xếp
hàng ở mỗi buổi chào cờ
* Ý tưởng :
+ Đổi để đưa số lớn nhất về vị trí cuối cùng
+ Làm tương tự đối với những số còn lại
* Thuật toán:
Gọi HS lên bảng viết phần khai báo và phần nhập
dữ liệu cho chương trình?
GV: Hoàn thiện chương trình
For j := n downto 2 do
Begin
For i := 1 to j-1 do
If A[i] > A[i+1] then
Begin
tg := A[i] ;
A[i] := A[i+1] ;
A[i+1] := tg ;
End ;
End ;
Writeln('day sau khi sap xep : ') ;
For i := 1 to n do
- Input : Số nguyên dương N và dãy
số A1, A2, …, AN
- Output : Dãy A được sắp xếp theo
thứ tự không giảm
Program sapxep ; Uses crt ;
var A : Array[1 250] of integer ; n,i,j,tg : Integer ;
Begin clrscr ; Write('Nhap so phan tu mang n = ') ; Readln(n) ;
For i := 1 to n do Begin
Write('A[',i,'] = ') ; readln(A[i]) ; End ;
Trang 11
write(a[i]:8) ;
readln ;
End
Writeln('chi so ptu lon nhat : ',csmax);
readln ;
End
- Trong thuật toán cần duyệt qua bao nhiêu lần?
- Mỗi lượt thực hiện trên đoạn nào của dãy số?
- Câu lệnh nào trong chương trình thể hiện hai
yêu cầu trên?
- Mỗi lượt duyệt thực hiện các thao tác gì?
- Câu lệnh nào thực hiện việc tráo đổi?
Thuật toán cần duyệt n! lần
Trên đoạn n-1 phần tử
Câu lệnh: For j := n downto 2 do Begin
For i := 1 to j-1 do Đưa giá trị lớn nhất về cuối dãy
Câu lệnh: If A[i] > A[i+1] then Begin
tg := A[i] ; A[i] := A[i+1] ; A[i+1] := tg ; End ;
Hoạt động 2: thực hiện với các bộ số cụ thể
- Mô phỏng thuật toán với bộ dữ liệu:
6 1 5 3 7 8 10 7 12 4
Thực hiện theo yêu cầu.
Củng cố và dặn dò
- Thuật toán tráo đổi giá trị của hai phần tử, sử dụng biến trung gian để lưu giá trị tạm thời.
- Về nhà làm các bài tập 7 SGK_79 và chuẩn bị bài tập thực hành 3.
V RÚT KINH NGHIỆM TIẾT DẠY
Tổ trưởng duyệt
Ngày tháng 1 năm 2010 ( Chữ ký, Họ tên)Giáo viên soạn
Trang 12
Ngày soạn: 05/01/2010 Ngày giảng:13/01/2010 Tiết PPCT: 23 BÀI THỰC HÀNH SỐ 3 (tiết 1) I MỤC TIÊU 1 Kiến thức - Giới thiệu cho học sinh cách lưu trữ mảng một chiều trên máy tính và các thao tác với mảng một chiều 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 một chiều 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ử 3 Thái độ - Góp phần rèn luyện tác phong, tư duy lập trình: Tự giác, tich cực, chủ động và sáng tạo trong tìm kiếm kiến thức II ĐỒ DÙNG DẠY HỌC 1 Chuẩn bị của giáo viên - Phòng máy vi tính, giáo án, SGK 2 Chuẩn bị của học sinh - Sách giáo khoa 3 Nội dung ghi bảng – Nhắc lại cách mô tả mảng một chiều, cách khai báo, cách tham chiếu III HOẠT ĐỘNG DẠY-HỌC 1 Ổn định tổ chức Kiểm tra sĩ số: Lớp - Sĩ số Ngày dạy Vắng Tên HS vắng 11A1 – 38 / / 2010
11A2 – 41 / / 2010
11A3 – 44 / / 2010
11A4 – 49 / / 2010
11A5 – 50 / / 2010
11A6 – 47 / / 2010
11A7 – 44 / / 2010
11A8 – 46 / / 2010
11A – 47 / / 2010