Bạn đang xem bản rút gọn của tài liệu. Xem và tải ngay bản đầy đủ của tài liệu tại đây (157.62 KB, 9 trang )
<span class='text_page_counter'>(1)</span>Bộ môn: Tin học Bài 11: KIỂU MẢNG. Ngày soạn: ____/_____/2007 Tiết CT: ______. I. MỤC ĐÍCH VÀ YÊU CẦU CỦA BÀI GIẢNG. -. Hiểu khái niệm mảng một chiều và hai chiều. Hiểu cách khai báo và truy cập đến các phần tử mả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.. II. PHƯƠNG PHÁP, PHƯƠNG TIỆN. III.. Phương pháp: Thuyết trình, vấn đáp Phương tiện: Máy chiếu, máy tính, phông chiếu hoặc bảng. LƯU Ý SƯ PHẠM -. Cần cho HS thấy cần phải có một kiểu dữ liệu mới ích lởi của kiểu dữ liệu đó, có thể minh họa bằng hình ảnh Khi làm việc với mảng, HS khó hiểu nhất vẫn là cách truy xuất tới các phần tử của mảng. Cần làm rõ các khái niệm như: đánh số các phần tử của mảng, chỉ số, kiểu chỉ số.. NỘI DUNG. HOẠT ĐỘNG CỦA GIÁO VIÊN VÀ HỌC SINH NỘI DUNG BÀI GIẢNG Ổn định lớp: Chào thầy cô Cán bộ lớp báo cáo sĩ số. Chỉnh đốn trang phục Trước khi vào bài, GV đưa ra một số vấn đề cần giải quyết như sau: Với những kiểu dữ liệu như đã biết, làm thế nào để: Có thể sử dụng ví dụ trong SGK để HS dễ theo dõi, gõ trước chươngt trình Lưu trữ và xử lí một dãy số? để có thể sử dụng cho các phần tiếp theo. Lưu trữ và xử lí họ và tên của một người? Lưu trữ và xử lí bảng kết quả thi tốt nghiệp? HS: đưa ra phương án trả lời cho 3 câu hỏi trên GV: các NNLT thường cung cấp một số kiểu dữ liệu được GV: Võ Quốc Dũng. Trang 1. Lop11.com.
<span class='text_page_counter'>(2)</span> Bộ môn: Tin học. HOẠT ĐỘNG CỦA GIÁO VIÊN VÀ HỌC SINH NỘI DUNG BÀI GIẢNG xây dựng từ những kiểu dữ liệu chuẩn gọi là kiểu dữ liệu có cấu trúc. Chương này chúng ta sẽ tìm hiểu một số kiểu dữ liệu trong Trong lập trình thường có 2 loại mảng: Mảng một chiều. ngôn ngữ Pascal để trả lời 3 câu hỏi trên. Mảng hai chiều. GV: Đưa ra ví dụ, cần lập trình xử lí một dãy số nguyên, hãy 1. Kiểu mảng một chiều: Mảng một chiều là dãy hữu hạn các phần tử có cùng kiểu, mảng được tìm cách lưu trữ một dãy số nguyên trong lập trình? đặt tên va 2mỗi phần tử mang một chỉ số. Để mô tả mảng một chiều ta cần Bằng cách nào để lưu trữ thông tin dưới dạng bảng khi lập xác định kiểu của phần tử và cách đánh chỉ số các phần tử. Với mảng một chiều ta quan tâm đến: trình? HS: Đưa ra ý kiến. Tên mảng một chiều Số lượng phần tử trong mảng GV: đánh giá ý kiến của HS sau đó đưa ra mục đích của việc Kiểu dữ liệu của phần tử sử dụng cấu trúc mảng trong chương trình. Cách khai báo biến mảng một chiều Cách truy cập vào từng phần tử của mảng GV:Đưa ra khái niệm mảng một 1 chiều và một số yêu cầu liên quan trong lập trình nói chung. GV: Đi sâu và phân tích hai chương trình để cho HS nhận Xét ví dụ: Nhập vào nhiệt độ trung bình của mỗi ngày trong tuần. Tính và thấy sự tiện lợi khi sử dụng mảng đưa ra màn hình nhiệt độ trung bình của cả tuần và đém số ngày có nhiệt HS: trong khi GV phân tích hai chương trình, HS đưa ra ý độ lớn hơn nhiệt độ trung bình này. kiến nhận xét 2 chương trình Quan sát hai chương trình viết nằng ngôn ngữ Pascal cùng để giải bài toán trên. Chương trình 1: Không sử dụng kiểu mảng Chương trình 2 : Sử dụng kiểu mảng một chiều a) Khai báo mảng một chiều: GV: Đưa ra cách khai báo mảng một chiều trong ngôn ngữ Trong ngôn ngữ Pascal, mảng một chiều được khai báo hai cách như Pascal, giải thích ý nghĩa của các từ khóa mới. sau: GV: Võ Quốc Dũng. Trang 9. Lop11.com.
<span class='text_page_counter'>(3)</span> Bộ môn: Tin học. HOẠT ĐỘNG CỦA GIÁO VIÊN VÀ HỌC SINH GV: Khai báo bằng cách nào tiện lợi hơn? HS: Thường thì HS trả lời cách 1 tiện lợi hơn.. NỘI DUNG BÀI GIẢNG. Cách 1: Var <Tên mảng> : Array[kiểu dữ liệu số] of <kiểu phần tử>; Cách 2: GV: Tùy trường hợp cụ thể mà ta dùng cách 1 hay cách 2 Type<Tên kiểu mảng> = Array[<kiểu chỉ số>] of <kiểu phần tử>; nhưng thông thường ta dùng cách 1. Var<Ten mảng>: <tên kiểu mảng>; GV: Sử dụng một số hình ảnh trực quan để minh họa cho HS Trong đó Type là khóa dùng để khai báo biến, Array là từ khóa dùng để khai cấu trúc mảng và chỉ số của phần tử báo mảng. Chỉ 1 2 3 4 5 6 7 8 Kiểu chỉ số thường là d0oạn số nguyên liên tục có n1…n2, với n1 là số chỉ số đầu và n2 là chỉ số cuối. Giá 53 81 62 18 26 41 24 53 Kiểu thành phần là kiểu dữ liệu của phần tử mảng. trị Để truy cập vào phần tử mảng, ta viết: <Tên biến mảng>[Chỉ sô] Ví dụ: A[20] Truy cập phần tử mảng chỉ số 20 trong mảng A Đưa ra một số khai báo mảng trong Pascal Ví dụ: Khai báo biến mảng thông qua kiểu mảng: Type ArrayInteger = Array[1…100] OfInteger; ArrayReal = Array[1…50] Of Real; Var A : Arrayainteger; B : ArrayReal; Khai báo mảng trực tiếp: Var A : Array[1…100] OfInteger; B : ArrayReal = Array[1…50] Of Real; b) Một số ví dụ: Ví dụ 1: Tím phần tử lớn nhất củamột dãy các số nguyên Input: Số nguyên dương N và dãy số A1, A2,…AN GV: Đưa ra ví dụ. Output: Chỉ số và giá trị của số lớn nhát trong dãy Ý tưởng HS: Xay dựng thuật toán để giải bài toán ( thuật toán đã học GV: Võ Quốc Dũng. Trang 7. Lop11.com.
<span class='text_page_counter'>(4)</span> HOẠT ĐỘNG CỦA GIÁO VIÊN VÀ HỌC SINH lớp 10).. NỘI DUNG BÀI GIẢNG Đặt số A1 là số lớn nhất (max) Cho I lặp từ 2 đến N, nếu A[i] > max thì đổi max = A[i] và lưu lại vị trí i GV: soạn sẵn chương trình và cho HS quan sát chương trình Chương trình như sau: Program timmax; Nếu có thời gian, GV sẽ tiến hành soạn chương trình từ đầu uses crt; để HS có thể dễ dàng nhận ra các thao tác cần phải thực hiện Var a: array[1..250] of integer; N, I, max, csmax : Integer; khi viết chương trình. Begin Clrscr; Write(‘Nhap n= ’); Readln(N); For i:= 1 to N do begin write (‘A[‘I’]=’); readln(a[i]); end; max := A[1]; 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 phan tu lon nhat:’,csmax); readln; end. Ví dụ 2: Sắp xếp dãy số nguyên theo bằng thuật toán trao đổi. 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 Trang 6. Lop11.com.
<span class='text_page_counter'>(5)</span> Bộ môn: Tin học. HOẠT ĐỘNG CỦA GIÁO VIÊN VÀ HỌC SINH GV: Đưa ra ví dụ, nhắc lại ý tưởng của thuật toán. HS: Xây dựng thuật toán để giải bài toán (thuật toán đã học ở lớp 10) GV: Soạn sẵn chương trình và cho HS quan sát chương trình Nếu có thời gian, GV sẽ tiến hành soạn chương trình từ đầu để HS dễ dàng nhận ra việc chuyển đổi ngôn ngữ từ ngôn ngữ thuật toán sang ngôn ngữ lập trình.. GV: Võ Quốc Dũng. NỘI DUNG BÀI GIẢNG Ý tưởng: Đổi để đưa số lớn nhất về vị trí cuối cùng Làm tương tự đối với số còn lại Chương trình như sau: 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; 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 write(a[i]:8); readln Trang 7. Lop11.com.
<span class='text_page_counter'>(6)</span> HOẠT ĐỘNG CỦA GIÁO VIÊN VÀ HỌC SINH. NỘI DUNG BÀI GIẢNG. End. Ví dụ 3: Tìm kiếm nhị phân Input: dãy số A1, A2,…,AN đã được sắp xếp tăng dần ¯ Output : có hay không chỉ số I mà A[i] = k hoặc thông báo không tìm GV: Đưa ra ví dụ, nhắc lại ý tưởng thuật toán. thấy HS: xây dựng thuật toán để giải bài toán (thuật toán đã học ở ¯ Ý tưởng: lớp 10). Xem lại thuật toán tìm kiếm nhị phân trong SKG lớp 10 GV soạn sẵn chương trình và cho HS quan sat chương trình Chương trình như sau: Nếu có nhiều thời gian, GV sẽ tin61 hành soan chương trình Program sapxep; từ đầu để HS có thể dễ dàng nhận ra việc chuyển đổi ngôn Var A: Array[1…250] of Integer; ngữ từ ngôn ngữ thuật toán sang ngôn ngữ lập trình. n, i, k: Integer; TK : boolean; 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; Write(‘nhap gia tri can tim k:’); Readln(K); dau := 1; cuoi := n; TK := false; While(dau<=cuoi) and Not TK Do Begin giua :=(dau + cuoi) div 2; if a[giua] > k then tk := true else if a[giua] > k then cuoi := giua -1 Trang 6. Lop11.com.
<span class='text_page_counter'>(7)</span> Bộ môn: Tin học. HOẠT ĐỘNG CỦA GIÁO VIÊN VÀ HỌC SINH. NỘI DUNG BÀI GIẢNG else dau := giua + 1; end; if TK then write (‘chi so la:’ giua) else write (‘khong tim thay’); readln. GV quay lại ví dụ về nhu cầu lưu trữ dữ liệu dạng bảng để các em nhận ra nhu cầu phải sử dụng mảng hai chiều trong lập trình.. GV: khi khai báo mảng 2 chiều cần chú ý điều gì? HS: Tìm câu trả lời, GV gợi ý để các em chỉ ra được chỉ số của mảng, số dòng, số cột và kiểu của mỗi phần tử trong GV: Võ Quốc Dũng. end. 2. Kiểu mảng hai chiều: ¯ Mảng hai chiều là một bảng các phần tử cùng kiểu Với mảng hai chiều ta quan tam đến: ¯ Tên kiểu mảng hai chiều ¯ Số lượng phần tử của mỗi chiều trong mảng ¯ Kiểu dữ liệu của phần tử ¯ Cách khai báo biến mảng 2 chiều ¯ Cách truy cập vào từng phần tử của mảng a) khai báo mảng hai chiều ¯ Trong ngôn ngữ Pascal, mảng hai chiều được khai báo như sau: Cách 1: Khai báo tực tiếp Var <tên mảng> : Array [kiểu chỉ số dòng, kiểu chỉ số cột of < kiểu phần tử>; Cách 2: khai báo gián tiếp thông qua khai báo kiểu mảng Type <tên kiểu mảng> = Array [kiểu chỉ số dòng, kiểu chỉ số cột of < kiểu phần tử>; Var <tên mảng> : <tên kiểu mảng>; Ví dụ Khai báo biến mảng thông qua kiểu mảng: Type ArrayInteger = Array[1…10,1…15] of Integer; ArrayReal = Array[1..50, 1…100] ofReal; Var A : ArrayInteger; B: ArrauyReal; Trang 7. Lop11.com.
<span class='text_page_counter'>(8)</span> HOẠT ĐỘNG CỦA GIÁO VIÊN VÀ HỌC SINH mảng.. NỘI DUNG BÀI GIẢNG. GV: gọi một số HS lên khai báo một số biến mảng một chiều theo yêu cầu của giáo viên Minh họa bằng hình ảnh mảng 2 chiều và chỉ số các phần tử mảng hai chiều cũng như cách viết truy cập phần tử mảng. GV cho HS quan sát chương trình và giải thích các lệnh trong chương trình, chú ý đi sâu vào các lệnh lặp để các em nhận ra thường thì ta sử dụng vòng lặp for – do để duyệt qua các phần tử mảng. GV nên soạn sẵn chương trình và cho các em quan sát chương trình và chạy thử chươ8ng trình tren máy để các em tiện theo dõi. Program Timkiem; Uses crt; Var A : Array[1..100, 1…100] of Integer; i,j, n, m: byte; k, d:integer; begin clrscr; write(‘nhap so dong so cot cua mang:’); readln(m,n); for i := 1 to m do for j := 1 to n do begin. Khai báo mảng trự tiếp: Var A : Array[1..10,1…15] of Integer; B : Array[1..50,1…100] of Real; Cách truy cập vào phần tử của mảng hai chiều: <tên mảng>[chỉ số dòng, chỉ số cột] Ví dụ: A[1,3], B[23,66]; b) một số ví dụ: Ví dụ: Chương trình sau đưa ra màn hình bảng cửu chương. Program cuuchuong; Uses crt; Var A : Array[1..9,1…9] of Integer; i, j : Byte; begin clrscr; for i:= 1 to 9 do for j := 1 to 9 do A[i,j] := i*j; For i := 1 to 9 do Begin For j := 1to 9 do Write (a[i,j]:4; Writeln; Writeln; End; Readln End. Ví dụ 2 Chương trình sau nhập vào một mảng 2 chiều và số nguyên k, sau đó in ra các phần tử có giá trị nhỏ hơn k của mảng. Trang 6. Lop11.com.
<span class='text_page_counter'>(9)</span> Bộ môn: Tin học. HOẠT ĐỘNG CỦA GIÁO VIÊN VÀ HỌC SINH write(‘A[‘,i,’,’,j’]=’); readln(A[i,j]) end; write(‘mảng vua nhap vao la:’); writeln; for i:= 1to n do write(a[i,j]:4); writeln; writeln; end; write (‘nhap gia tri k:’); readln (k); d := 0; for i := 1 to m do for j := 1 to n do if a[i,j] < then begin write (a[i,j]:8); d := d + 1; end; if d = 0 then write (‘khong co phan tu nho hon’,k); readln end.. NỘI DUNG BÀI GIẢNG. IV. CỦNG CỐ DẶN DÒ. -. Nhắc lại một số khái niệm mới. Nhắc lại cấu trúc câu lệnh bằng cách thia bảng thành 4 phần đồng thời gọi 4 HS lên bảng viết lại các cách thông báo, truy xuất và hiển thị để nhập dữ liệu Ra bài tập về nhà. GV: Võ Quốc Dũng. Trang 7. Lop11.com.
<span class='text_page_counter'>(10)</span>