Kiểu mảng một chiều: b.Một số ví dụ: Ví dụ 1: Tìm phần tử lớn nhất của dãy số nguyên Input nhập: Số nguyên dương N Max then Begin max:=A[i]; csmax:=i; End; writeln'Gia tri lon nhat cua d[r]
(1)GIÁO ÁN TIN HỌC 11 Bài 11: KIỂU MẢNG A./ MỤC TIÊU: Học sinh hiểu: - Kiểu mảng là kiểu liệu có cấu trúc - Khái niệm mảng chiều và hai chiều - Mảng chiều là dãy hữu hạn các phần tử cùng kiểu - Thuật toán tìm kiếm, xếp Kỹ năng: - Nhận biết các thành phần mảng - Cách khai báo mảng chiều, mảng hai chiều - Cách tham chiếu các phần tử mảng Yêu cầu: - Học sinh nắm vững các kiểu liệu Pascal; - Nắm vững các lệnh cấu trúc rẽ nhánh và lặp B./ PHÂN TIẾT: Tiết 1: Phần 1a Tiết 2, 3: Phần 1b Tiết 4: Phần C./ CHUẨN BỊ: Máy chiếu, máy vi tính D/ KIỂM TRA BÀI CŨ: D./ BÀI MỚI: Tiết 1: HOẠT ĐỘNG - GV: Hỏi hs các kiểu liệu đã học - HS: Trả lời các kiểu liệu chuẩn đã học - GV: Các ngôn ngữ lập trình thường cung cấp số kiểu liệu xây dựng từ kiểu liệu chuẩn gọi là kiểu liệu có cấu trúc Trong đó kiểu mảng là kiểu liệu có cấu trúc Vậy nào là mảng chiều? GV: Đưa khái niệm, và cách xây dựng kiểu mảng HS: Quan sát, lắng nghe và ghi chép NỘI DUNG Kiểu mảng chiều: * Mảng chiều là dãy hữu hạn các phần tử cùng kiểu Mảng đặt tên và phần tử nó Để mô tả mảng chiều cần xác định kiểu các phần tử và cách đánh số các phần tử nó * Để xây dựng và sử dụng kiểu mảng chiều cần xác định: +Tên mảng chiều +Số lượng phần tử +Cách khai báo biến mảng +Cách tham chiếu đến phần tử *Xét các ví dụ sau: Ví dụ (SGK trang 53-54) mô tả cách dùng cấu trúc rẽ GV: Hoàng Lê Minh Trung tâm KTTH – HN Ninh sơn Lop11.com (2) GV: Phân tích hai ví dụ SGK để HS nhận thấy tiện lợi sử dụng mảng Trong phân tích hai ví dụ và đặt câu hỏi? HS: Trả lời câu hỏi GV, và đưa ý kiến nhận xét hai chương trình GV: Đưa hai cách khái báo mảng chiều ngôn ngữ Pascal, giải thích ý nghĩa các từ khóa Gv: Khai báo mảng cách nào thì thuận tiện hơn? HS: Trả lời GV: Nhận xét GV: Đưa các ví dụ và gọi HS nhận xét HS: Quan sát và trả lời GV: Hướng dẫn tham chiếu đến các phần tử mảng, và đưa ví dụ Ví dụ: Cho mảng gồm phần tử: Chỉ số A 30 50 10 HS: Quan sát lắng nghe và trả lời nhánh Ví dụ (SGK trang 54) mô tả cách dùng kiểu liệu mảng a Khai báo: Có cách: - Cách 1: Khai báo trực tiếp biến mảng chiều: Var <tên biến mảng>: Array[kiểu số] of <kiểu phần tử>; - Cách 2: Khai báo gián tiếp gián tiếp biến mảng qua kiểu mảng chiều: Type <tên kiểu mảng> = Array[kiểu số] of <kiểu phần tử>; Var <tên biến mảng>: <tên kiểu mảng>; Trong đó: - Kiểu số là đoạn số nguyên liên tục có dạng n1 n với n1,n2 là các các biểu thức xác định số đầu và số cuối (n1<= n2) - Kiểu phần tử là kiểu các phần tử mảng * Ví dụ: Các khai báo biến sau đây là hợp lệ - Khai báo biến mảng thông qua kiểu mảng: Type Arrint=array[1 100] of integer; A = array[1 n] of integer; ArrBoolean =Array[-n+1 n+1] of Boolean; ArrReal=array[1 max] of Real; Var Mang1: Arrint; Mang2: ArrReal; Trong đó n và Max là các nguyên - Khai báo trực tiếp: Var A: Array[1 100] of integer; B: Array[1 10] og integer; * Để tham chiếu đến phần tử mảng chiều ta cần xác định: <tên biến mảng>[chỉ số] Áa Ví dụ: Cho mảng gồm phần tử: Giá trị phần tử thứ và thứ là: A[1]=30; A[4]=2; E./ CỦNG CỐ: - Cách khai báo mảng chiều - Cách tham chiếu phần tử mảng - Cách nhập liệu cho mảng F./ DẶN DÒ: - Xem trước các ví dụ SGK - Ra bài tập GV: Hoàng Lê Minh Trung tâm KTTH – HN Ninh sơn Lop11.com (3) Tiết 3-4: Bài 11: KIỂU MẢNG(tiếp theo) A./ KIỂM TRA BÀI CŨ: B./ BÀI MỚI: HOẠT ĐỘNG GV: Đưa ví dụ HS: Nêu thuật toán tìm phần tử lớn đã học lớp 10 Các bước: B1: Nhập N và dãy A1,A2, ,AN B2: Max A1, i2; B3: Nếu i>n thì đưa giá trị Max và kết thúc; B4: B4.1: Nếu Ai > Max thì Max Ai B4.2: i i+1 Quay lại B3 GV: Giải thích chương trình cho h ọc sinh hiểu? HS: Lắng nghe, quan sát GV: Chương trình tìm giá trị lớn dãy Vậy tìm giá trị nhỏ dãy ta làm nào? HS: Trả lời câu hỏi GV: Hướng dẫn Min := A[1]; csmin :=1; for i:=2 to N If A[i] < Min then Begin Min:=A[i]; csmin:=i; End; GV: Đưa ví dụ HS: Nêu thuật toán xếp đã học lớp 10 NỘI DUNG Kiểu mảng chiều: b.Một số ví dụ: Ví dụ 1: Tìm phần tử lớn dãy số nguyên Input (nhập): Số nguyên dương N(<=250) và dãy số nguyên dương A1,A2,…AN MỗI số không vượt quá 500 Output(xuất): Chỉ số và giá trị lớn dãy số đã cho Chương trình viết sau: Program Timmax; USES Crt; Const Nmax = 250; Type ArrInt = array[1 Nmax] of integer; Var N, i, Max, csmax : integer; A: ArrInt; BEGIN clrscr; Write('Nhap so phan tu cua day so, N = '); Readln(N); for i:=1 to N Begin write('Phan tu thu ', i, ' ='); readln(A[i]); end; Max := A[1]; csmax :=1; for i:=2 to N If A[i]> Max then Begin max:=A[i]; csmax:=i; End; writeln('Gia tri lon nhat cua day la: ', Max); writeln('Chi so phan tu lon nhat la: ', csmax); readln END Ví dụ 2: Sắp xếp dãy số nguyên thật toán tráo đổi - Input: Số nguyên dương N và dãy số A1, A2, …, AN GV: Hoàng Lê Minh Trung tâm KTTH – HN Ninh sơn Lop11.com (4) - Output: Dãy số A xếp theo thứ tự tăng GV: Hướng dẫn Đổi chỗ để đưa số lớn vị trí cuối cùng Làm tương tự các số còn lại Chương trình: Program Sapxep; USES Crt; Const Nmax = 250; Type ArrInt = array[1 NMax] of integer; GV: Giải thích chương trình cho Var N, i, j, t : integer; h ọc sinh hiểu? A: ArrInt; HS: Lắng nghe, quan sát BEGIN clrscr; Write('Nhap so phan tu cua day so, N = '); readln(N); For i:=1 to n Begin Write('Phan tu thu ', i,' = '); Readln(A[i]); End; writeln('Day so da cho la: '); For i:= to N Write(A[i]:4); writeln; For j:= N downto GV: Sắp xếp giảm dần thì ta thực for i:= to j -1 nào? if A[i] > A[i+1] then HS: Trả lời câu hỏi Begin GV: Hướng dẫn t:=A[i]; A[i]:=A[i+1]; A[i+1]:=t; End; writeln('Day so duoc sap xep la: '); For i:= to N Write(A[i]:4); readln END GV: Đưa ví dụ HS: Nêu thuật toán tìm đã học lớp 10 GV: Giải thích chương trình Ví dụ 3: Tìm kiếm nhị phân Input: Dãy số A1, A2, …, AN đã xếp tăng dần (N <= 250) Output: Chỉ số i mà A[i] = thông báo “Không tìm thấy ” Nếu không có A[i] nào dãy k Chương trình: Program tk_nhiphan; Uses Crt; Const Nmax = 250; Type ArrInt = array[1 NMax] of integer; Var N, i, k, t, dau, cuoi, giua : integer; GV: Hoàng Lê Minh Trung tâm KTTH – HN Ninh sơn Lop11.com (5) A: ArrInt; thay: Boolean; GV: Nếu dãy không xếp thì chương trình tìm kiếm nhị phân có đúng không? HS: Trả lời BEGIN clrscr; Write('Nhap so phan tu cua day so, N = '); readln(N); Writeln('Nhap cac phan tu theo thu tu tang dan'); For i:=1 to n Begin Write('Phan tu thu ', i,' = '); Readln(A[i]); End; writeln; write('Nhap gia tri can tim , k = '); readln(k); dau:=1; cuoi:=N; thay:=false; While (dau<=cuoi) and not (thay) begin giua:=(dau + cuoi) div 2; if A[giua] = k then thay:= true else if A[giua] > k then cuoi:= giua - else dau:=giua + 1; end; if thay then writeln('Chi so tim duoc la', giua) else writeln('Khong tim thay'); readln END C./ CỦNG CỐ: - Cách nhập và xuất liệu mảng, các thao tác với mảng - Các lệnh cấu trúc rẽ nhánh và lặp D./ DẶN DÒ: - Xem bài thực hành số 3, SGK - Ra bài tập nhà GV: Hoàng Lê Minh Trung tâm KTTH – HN Ninh sơn Lop11.com (6)