intTypePromotion=1
zunia.vn Tuyển sinh 2024 dành cho Gen-Z zunia.vn zunia.vn
ADSENSE

Chương IV : KIỂU DỮ LIỆU CÓ CẤU TRÚC

Chia sẻ: Paradise3 Paradise3 | Ngày: | Loại File: PDF | Số trang:11

90
lượt xem
9
download
 
  Download Vui lòng tải xuống để xem tài liệu đầy đủ

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ử của 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 .

Chủ đề:
Lưu

Nội dung Text: Chương IV : KIỂU DỮ LIỆU CÓ CẤU TRÚC

  1. Chương IV : KIỂU DỮ LIỆU CÓ CẤU TRÚC Bài 11 : KIỂU MẢNG I. MỤC ĐÍCH, YÊU CẦU :  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ử của 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 :  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 . III. LƯU Ý SƯ PHẠM :  Cần cho học sinh 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, học sinh 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ố. IV. NỘI DUNG BÀI GIẢNG : HOẠT ĐỘNG CỦA GIÁO VIÊN VÀ HỌC NỘI DUNG SINH Ổ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, giáo viên đưa ra một số vấn
  2. đề cần giải quyết như sau : Có thể sử dụng ví dụ trong SGK để Với những kiểu dữ liệu như đã biết, làm thế nào học sinh dễ theo dõi, gõ trước để : chương trình để có thể sử dụng cho - Lưu trữ và xử lý một dãy số ? 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 các phương án để trả lời cho 3 câu hỏi trên . Trong lập trình thường có 2 loại GV : Các ngôn ngữ lập trình thường cung cấp mảng : - Mảng một chiều . một số kiểu dữ liệu được xây dựng từ những - Mảng hai chiều . 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ố 1. Kiểu mảng một chiều kiểu dữ liệu trong ngôn ngữ Pascal để trả lời 3 - Mảng một chiều là một dãy hữu câu hỏi trên . hạn các phần tử có cùng kiểu, mảng được đặt tên và mỗi phần tử mang GV : Đưa ra ví dụ, cần lập lập trình xử lý một một chỉ số. Để mô tả mảng một dãy số nguyên, hãy tìm cách lưu trữ một dãy số chiều ta cần xác định kiểu của các phần tử và cách đánh chỉ số các nguyên trong khi lập trình ? phần tử . Bằng cách nào để lưu trữ được thông tin dưới Với mảng một chiều ta quan tâm dạng bảng khi lập trình ? đến : - Tên mảng một chiều . HS : Đưa ra ý kiến . - Số lượng phần tử trong mảng GV : Đánh giá ý kiến của học sinh, sau đó đưa . ra mục đích của việc sử dụng cấu trúc mảng - Kiểu dữ liệu của phần tử . trong chương trình . - Cách khai báo biến mảng một chiều . GV : Đưa ra khái niệm mảng một chiều và một - Cách truy cập vào từng phần số yếu tố liên quan trong lập trình nói chung . tử của mảng . Xét ví dụ : Nhập vào nhiệt độ trung
  3. bình mỗi ngày trong tuần . Tính và đưa ra màn hình nhiệt độ trung bình GV : Đi sâu phân tích hai chương trình để cho của cả tuần và đếm số ngày có nhiệt học sinh nhận thấy sự tiện lợi khi sử dụng mảng độ lớn hơn nhiệt độ trung bình này . . Quan sát hai chương trình viết bằng ngôn ngữ Pascal cùng để giải bài toán trên . - Chương trình 1 : Không sử HS : Trong khi giáo viên phân tích hai chương dụng kiểu mảng . trình, học sinh sẽ đưa ra ý kiến nhận xét về 2 - Chương trình 2 : Sử dụng chương trình. kiểu mảng một chiều . a> Khai báo mảng một chiều Trong ngôn ngữ Pascal, mảng một chiều được khai báo bằng hai cách như sau : Cách 1 : GV : Đưa ra cách khai báo mảng một chiều Var : Array[kiểu chỉ trong ngôn ngữ Pascal, giải thích ý nghĩa của số] of ; các từ khóa mới . Cách 2 : GV : Khai báo bằng cách nào tiện lợi hơn ? Type = Array [] of ; Var : HS : Thường thì học sinh trả lời cách 1 tiện lợi ; hơn ? Trong đó : - Type là từ khóa dùng để khai GV : Tùy trường hợp cụ thể mà ta dùng cách 1 báo biến, Array là từ khóa để hay cách 2 nhưng thông thường ta sử dụng cách khai báo mảng . 1. - Kiểu chỉ số thường là đoạn số nguyên liên tục có n1..n2, với n1 là chỉ số đầu và n2 là chỉ số cuối. GV : Sử dụng một sồ hình ảnh trực quan minh - Kiểu thành phần là kiểu dữ liệu họa cho học sinh cấu trúc mảng và chỉ số của của phần tử mảng . phần tử - Để truy cập vào phần tử mảng ta viết : Chỉ 1 2 3 4 5 6 7 8
  4. - [Chỉ số] số Giá Ví d ụ : 53 81 62 18 26 41 24 53 A[20] Truy cập phần tử mang chỉ số trị 20 trong mảng A . Ví d ụ : Khai báo biến mảng thông qua kiểu mảng : Type ArrayInteger=Array[1..100] of Integer; ArrayReal=Array[1.50] of Real; Đưa ra một số khai báo mảng trong Pascal . Var A : Array[1..50]; B : Array[1..50] of Real; Khai báo mảng trực tiếp : Var A : Array[1..100] of Integer ; B : Arrat[1..50] of Real ; b> Một số ví dụ : Ví dụ 1 : Tìm phần tử lớn nhất của một dãy số nguyên . - Input : Số nguyên dương N và GV : Đưa ra ví dụ . dãy số A1, A2, ….., AN HS : Xây dựng thuật toán để giải bài toán (thuật - Output : Chỉ số và giá trị của số toán đã học ở lớp 10) . lớn nhất trong dãy - Ý tưởng : + Đặt số A1 là số lớn nhất (max) GV soạn sẵn chương trình và cho học sinh quan + Cho i lặp từ 2 đến N, nếu sát chương trình . A[i]> thì đổi max = A[i] vả lưu lại vị trí i . Chương trình như sau : Nếu có nhiều thời gian, giáo viên sẽ tiến hành soạn chương trình từ đầu để học sinh có thể dễ Program timmax ; dàng nhận ra các thao tác cần phải thực hiện khi Uses crt ; viết chương trình . var a : array[1..250] of integer ; n,i,max,csmax : Integer ; Begin
  5. clrscr ; Write('Nhap n = ') ; Readln(n) ; For i := 1 to n do Begin Write('a[',i,'] = ') ; readln(a[i]) ; End ; 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 . Ví dụ 2 : Sắp xếp dãy số nguyên GV : Đưa ra ví dụ, nhắc lại ý tưởng của thuật theo bằng thuật toán tráo đổi . - Input : Số nguyên dương N và toán . dãy số A1, A2, …, AN - Output : Dãy A được sắp xếp HS : Xây dựng thuật toán để giải bài toán (thuật theo thứ tự không giảm . toán đã học ở lớp 10) . - Ý tưởng : + Đổi để đưa số lớn nhất về vị trí cuối cùng . GV soạn sẵn chương trình và cho học sinh + Làm tương tự đối với những quan sát chương trình . số còn lại . Chương trình như sau : Nếu có thời gian, giáo viên sẽ tiến hành soạn chương trình từ đầu để học sinh có thể dễ dàng Program sapxep ; nhận ra việc chuyển đổi ngôn ngữ từ ngôn ngữ Uses crt ; thuật toán sang ngôn ngữ lập trình . var A : Array[1..250] of integer ;
  6. 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 ; End . Writeln('chi so ptu lon nhat : ',csmax); readln ; End . Ví dụ 3 : Tìm kiếm nhị phân . GV : Đưa ra ví dụ, nhắc lại ý tưởng của thuật - Input : Dãy số A1, toán . HS : Xây dựng thuật toán để giải bài toán (thuật A2,………, AN đã được sắp toán đã học ở lớp 10) . xếp tăng dần . - Output : Có hay không chỉ số i mà A[i] = k hoặc thông GV soạn sẵn chương trình và cho học sinh quan báo không tìm thấy .
  7. - Ý tưởng : sát chương trình . Xem lại thuật toán tìm kiếm nhị phân trong SGK lớp 10 . Nếu có thời gian, giáo viên sẽ tiến hành soạn Chương trình như sau : chương trình từ đầu để học sinh có thể dễ dàng nhận ra việc chuyển đổi ngôn ngữ từ ngôn ngữ Program sapxep ; thuật toán sang ngôn ngữ lập trình . Uses crt ; var A : Array[1..250] of integer ; n,i,k : Integer ; dau,cuoi,giua : Integer ; TK : boolean ; Begin clrscr ; 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); dau := 1 ; cuoi := n ; TK := false ; while (dau k then cuoi := giua - 1 Else dau := giua + 1 ; End ; If TK then write('Chi so la : ',giua) else write(' Khong tim thay '); readln ; End .
  8. GV : Quay lại ví dụ về 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 2 chiều trong lập trình . 2. Kiểu mảng 2 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 tâm đế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 hai chiều . - Cách truy cập vào từng phần GV : Khai báo cách nào tiện lợi hơn (tương t ự tử của mảng . mảng 1 chiều) ? a> Khai báo mảng hai chiều - Trong ngôn ngữ Pascal, mảnh hai HS : Thường thì học sinh vẫn chọn cách 1 . chiều được khai báo như sau : GV : Tùy theo trường hợp cụ thể nhưng thường Cách 1 : Khai báo trực tiếp thì cách 1 hay được dùng hơn . Var : : 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 = Array[kiểu chỉ số dòng, kiểu chỉ số cột] of ; Var : ; GV : Khi khai báo mảng 2 chiều cần chú ý điều
  9. gì ? HS : Tìm câu trả lời, GV gợi ý để các em chỉ ra Ví dụ : được chỉ số của mảng, số dòng, số cột và kiểu Khai báo biến mảng thông qua của mỗi phần tử trong mảng . kiểu mảng : Type ArrayInteger = Array[1..10,1..15] of Integer ; ArrayReal=Array[1..50,1..100] of Real ; GV : Gọi một số học sinh 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 Var A : ArrayInteger ; . B : ArrayReal ; Khai báo mảng trực tiếp : Minh họa bằng hình ảnh mảng 2 chiều và chỉ số Var A : Array[1..10,1..15] og các phần tử mảng hai chiều cũng như cách viết Integer ; truy cập phần tử mảng . B : Aarray[1..50,1..100] og Real ; Cách truy cập vào phần tử của mảng hai chiều : GV cho học sinh quan sát chương trình và giải [chỉ số dòng, chỉ số thích các lệnh trong chương trình, chú ý đi sâu cột] 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 Ví dụ : A[1,3], B[23,66],…… phần tử mảng . b> Một số ví dụ : GV nên soạn sẵn chương trình và cho các em Ví dụ 1 : quan sát chương trình, và chạy thử chương trình Chương trình sau đưa ra màn hình trên máy để các em tiện theo dõi . bảng cửu chương . Program cuuchuong; Program Timkiem; Uses crt; Uses crt ; var A : Array[1..100,1..100] of Integer; var A : Array[1..9,1..9] of Integer ; i,j,n,m : Byte ; i, j : Byte ; k,d : integer ;
  10. Begin Begin Clrscr ; Clrscr ; Writeln('Bang cuu chuong 1 -> 9 : Write(' Nhap so dong, so cot cua mang : ') ; '); Readln(m,n); Writeln ; For i := 1 to m do For i := 1 to 9 do For j := 1 to n do For j := 1 to 9 do Begin A[i,j] := i*j ; Write(' A[',i,',',j,'] = '); For i := 1 to 9 do Readln(A[i,j]); Begin End ; For j := 1 to 9 do Write(a[i,j]:4); Writeln(' Mang vua nhap vao la : '); Writeln ; Writeln; Writeln ; For i := 1 to m do End ; Begin Readln ; For j := 1 to n do End . Write(a[i,j]:4) ; Writeln; Writeln; Ví d ụ 2 : Chương trình sau nhập vào một End; mảng 2 chiều và số nguyên k, sau đó in ra các phần tử có giá trị nhỏ Write(' Nhap gia tri k : '); hơn k của mảng . Readln(k) ; d := 0 ; For i := 1 to m do For j := 1 to n do If a[i,j] < k then Begin write('So nho hon ',k,' la '); write(a[i,j]:8); d := d+1 ; End ; If d = 0 then Write('Khong co ptu nao nho hon ',k); readln; End .
  11. V. CỦNG CỐ:  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 chia bảng thành 4 phần đồng thời gọi 4 học sinh lên bảng viết lại các cách khai báo, truy xuất, và hiển thị để nhập dữ liệu .  Ra bài tập về nhà .
ADSENSE

CÓ THỂ BẠN MUỐN DOWNLOAD

 

Đồng bộ tài khoản
2=>2