C¸c phÇn tö trong - HS: Khai b¸o nhiÒu biÕn m¶ng cã cïng chung mét tªn vµ ph©n biÖt Chương trình viết rất dài víi nhau bëi chØ sè * DiÔn gi¶i: §Ó kh¾c phôc nh÷ng h¹n chÕ trên , người ta [r]
(1)Trường THPT Vĩnh Bảo Gi¸o ¸n Tin Häc líp 11 Chương IV: Kiểu liệu có cấu trúc Ngµy so¹n: 26/12/2009 Ngµy d¹y: TiÕt 20, 21: Bµi 11: KiÓu m¶ng I Môc tiªu: KiÕn thøc - BiÕt ®îc mét kiÓu d÷ liÖu míi lµ kiÓu m¶ng chiÒu BiÕt mét lo¹i biÕn cã chØ sè - HiÓu kh¸i niÖm m¶ng mét chiÒu, - BiÕt cÊu tróc t¹o kiÓu m¶ng mét chiÒu - Hiểu cách khai báo và truy cập đến các phần tử mảng Kü n¨ng - Cài đặt thuật toán số bài toán đơn giản với kiểu liệu mảng 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 - T¹o ®îc kiÓu m¶ng mét chiÒu vµ sö dông biÕn m¶ng mét chiÒu ng«n ng÷ lập trình Pascal để giả số bài toán cụ thể II Phương pháp, phương tiện dạy học: Phương pháp: Thuyết trình, vấn đáp Phương tiện: Máy tính, máy chiếu, phông chiếu và bảng III Néi dung bµi gi¶ng: ổn định lớp và kiểm tra sĩ số KiÓm tra bµi cò: Viết chương trình tính: a S= 12 + 22 + .+ n2 víi n ®îc nhËp vµo tõ bµn phÝm b S= 13 + 33 + + n3 víi n ®îc nhËp vµo tõ bµn phÝm Bµi míi: Hoạt động giáo viên và học sinh Néi dung ghi b¶ng - GV: Cho häc sinh lµm vÝ dô sgk: Nhập vào nhiệt độ trung bình ngày tuần tính và in màn hình nhiệt độ trung bình tuần và số lượng ngày tuần có nhiệt độ cao nhiệt độ trung bình tÝnh ®îc Gi¸o Viªn: TrÇn ThÞ H»ng Lop11.com Tæ: To¸n- Tin (2) Trường THPT Vĩnh Bảo - GV: H·y cho biÕt input vµ output cña bµi to¸n Gi¸o ¸n Tin Häc líp 11 -HS: Input: t2, t3, t4, t5, t6, t7, cn, Output: tb và giá trị đếm - GV: Gợi ý để học sinh viết chương trình Var t2, t3, t4, t5, t6, t7, cn,tb: real; Dem: byte; Begin Write(‘nhap vµo nhiet cua ngay’); Readln(t2, t3, t4, t5, t6, t7, cn); Tb:=( t2+t3+t4+t5+t6+ t7+ cn)/7; Dem:=0; If t2>tb then dem:=dem+1; If t3>tb then dem:=dem+2; If t4>tb then dem:=dem+3; If t5>tb then dem:=dem+4; If t6>tb then dem:=dem+5; If t7>tb then dem:=dem+6; If cn>tb then dem:=dem+7; Writeln (‘nhiet trung binh cua tuan la’, tb:4:2); Writeln(‘so luong co nhiet cao hon nhiet trung binh la’,dem:3); Readln; End - GV: Trong bài toán trên, số lượng ngày tính là ngày Nếu ta cần tính số lượng ngày là N Kiểu mảng chiều ngày thì chương trình trên có hạn chế gì? - M¶ng mét chiÒu lµ mét d·y h÷u h¹n c¸c phÇn tö cã cïng kiÓu C¸c phÇn tö - HS: Khai b¸o nhiÒu biÕn m¶ng cã cïng chung mét tªn vµ ph©n biÖt Chương trình viết dài víi bëi chØ sè * DiÔn gi¶i: §Ó kh¾c phôc nh÷ng h¹n chÕ trên , người ta ghép biến trên thành dãy và đặt nó chung chung tên và đánh cho Gi¸o Viªn: TrÇn ThÞ H»ng Lop11.com Tæ: To¸n- Tin (3) Trường THPT Vĩnh Bảo Gi¸o ¸n Tin Häc líp 11 phần tử trên số Đó là mảng - Với mảng chiều ta quan tâm đến: chiÒu + Tªn m¶ng mét chiÒu - GV: Tham khảo sgk và cho biết nào là + Số lượng phần tử mảng m¶ng mét chiÒu? + KiÓu d÷ liÖu phÇn tö - HS: §äc sgk vµ tr¶ lêi + C¸ch khai b¸o m¶ng mét chiÒu - Hái: §Ó m« t¶ m¶ng mét chiÒu ta cÇn x¸c + C¸ch truy cËp vµo tõng phÇn tö cña định yếu tố nào? m¶ng 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: 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ö>; GV: §a c¸ch khai b¸o m¶ng mét chiÒu * VÝ dô: NNLT Pascal, gi¶i thÝch ý nghÜa c¸c tõ Var M1:array [1 5] of integer; kho¸ míi - Khai b¸o m¶ng cã tªn biÕn m¶ng lµ M1 GV: Khai b¸o b»ng c¸ch nµo tiÖn lîi h¬n? gåm phÇn tö thuéc kiÓu nguyªn øng víi HS: Thường trả lời cách c¸c chØ sè 1, 2, 3, 4, nghÜa lµ M1[1], GV: Tuỳ trường hợp cụ thể mà ta dùng M1[2], M1[3], M1[4], M1[5] cách hay cách hai, thường thì sử dụng C¸ch 2: Khai b¸o gi¸n tiÕp c¸ch mét nhiÒu h¬n 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>; GV: §a mét sè khai b¸o m¶ng * VÝ dô: Pascal, ®a vÝ dô: Type M1= array [1 5] of integer; GV: Khai báo cách nào tiện lợi hơn?(tương Var a: M1; tù m¶ng mét chiÒu) * Gi¶i thÝch HS : Chän c¸ch - Type là từ khoá dùng để khai báo biến GV: Tuỳ theo trường hợp cụ thể - Array là từ khoá để khai báo mảng thương thì cách hay dùng GV: Gọi số HS lên khai báo số biến - Kiểu số thường là đoạn số nguyên liªn tôc cã n1 n2, víi n1 lµ chØ sè ®Çu vµ m¶ng mét chiÒu theo yªu cÇu cña GV n2 lµ chØ sè cuèi (n1<= n2) Gi¸o Viªn: TrÇn ThÞ H»ng 13 Lop11.com Tæ: To¸n- Tin (4) Trường THPT Vĩnh Bảo Gi¸o ¸n Tin Häc líp 11 - KiÓu thµnh phÇn lµ kiÓu d÷ liÖu cña phÇn tö m¶ng -§Ó truy cËp vµo phÇn tö m¶ng, ta viÕt: <Tªn biÕn m¶ng>[ChØ sè] VÝ dô - M1[3] lµ phÇn tö ë vÞ trÝ thø cña m¶ng M1 - GV: Cho mét sè khai b¸o m¶ng sau - A[i] lµ phÇn tö ë vÞ trÝ thø i cña m¶ng A Type Manga= array [1 200] of real; Mangb = array [byte] of real; Mangc = array [-100 0] of real ; Mangd = array[ 100] of real; - Hái: H·y cho biÕt khai b¸o m¶ng nµo B Mét sè vÝ dô đúng? Ví dụ 1: Viết chương trình nhập vào - Hái: ë vÝ dô nµy, yªu cÇu ta ph¶i lµm nh÷ng d·y A gåm N sè nguyªn (N <100) H·y viÖc g×? hiÓn thÞ d·y A mµn h×nh - HS: Cã viÖc ph¶i lµm: NhËp d·y A gåm N phần tử, và in dãy đó màn hình - Hỏi: Xác định Input và output bài toán? - HS: Input: Số nguyên dương N ( N<100) Output: HiÓn thÞ d·y mµn h×nh - Hái: Ta cÇn khai b¸o nh÷ng g×? - HS: Khai b¸o m¶ng chiÒu vµ c¸c biªn liªn quan - GV: Yªu cÇu häc sinh viÕt khai b¸o m¶ng, vµ c¸c biÕn cã liªn quan? - HS: Var A: array [1 100] of integer ; i, n: Byte; - Hái: §Ó nhËp ®îc mét d·y gåm N phÇn tö ta ph¶i sö dông lÖnh nµo? - HS: Ta sö dông lÖnh For- - Hái: §Ó nhËp phÇn tö thø i cña m¶ng A tõ Gi¸o Viªn: TrÇn ThÞ H»ng 13 Lop11.com program vi_du1; Uses crt; var a:array[1 100] of integer; i, n:integer; begin Write(‘Nhap so phan tu cua mang n = ’); readln(n); For i:=1 to n Begin Write(‘Nhap a[‘,i,’]= ’); readln(a[i]); End; {hoÆc write (‘ nhap ph©n tu thu’,i,’=’) ; readln(A[i]) ; Write(‘Cac phan tu cua mang A la: ‘); For i:=1 to n Write(a[i],’ ‘); Readln; End Tæ: To¸n- Tin (5) Trường THPT Vĩnh Bảo bµn phÝm ta viÕt lÖnh thÕ nµo? Gi¸o ¸n Tin Häc líp 11 - HS: Ta viÕt Readln (A[i]) ; - GV: Hướng dẫn học sinh viết tiếp đoạn nhËp c¸c phÇn tö cña m¶ng - Hỏi: Để đọc tất các phần tử mảng A ta thùc hiÖn lÖnh nµo? - HS: KÕt hîp gi÷a For- vµ write(A[i]) ; - HS: Viết chương trình theo hướng dẫn gi¸o viªn - GV: Cã thÓ dïng m¸y chiÕu minh ho¹ chương trình để học sinh thấy rõ - Hỏi: Xác định input và output bài toán - HS: Tr¶ lêi c©u hái Ví dụ 2: Cho số nguyên dương N và dãy A gåm N sè nguyªn A1, A2, AN H·y hiÓn thÞ m¶ng A mµn h×nh vµ t×m gi¸ trÞ lín nhÊt cña d·y A vµ cho biÕt vÞ trÝ cña nã d·y A Gîi ý: Input: sè nguyªn N vµ c¸c phÇn tö, - GV: Hướng dẫn học sinh dựa vào ví dụ để A1, A2, AN gi¶i quyÕt vÝ dô 2: - HS: Viết chương trình theo hướng dẫn Output: - Hiển thi mảng A màn hình cña gi¸o viªn - Gi¸ trÞ lín nh©t Max vµ vÞ trÝ cña - Hái: ë vÝ dô cã yªu cÇu g× míi? số đó mảng A - HS: yªu cÇu míi: T×m gi¸ trÞ lín nhÊt Max vµ cho biÕt vÞ trÝ cña nã - GV: Gîi nhí l¹i cho häc sinh nhí l¹i thuËt toán tìm giá trị lớn dãy số đã học chương trình lớp 10 - Hái: Theo thuËt to¸n th× ®Çu tiªn ta ph¶i lµm g×? - HS: Ta cho gi¸ trÞ ®Çu tiªn cña d·y lµ sè lớn nhất, sau đó ta so sánh giá trị lớn nµy víi c¸c sè h¹ng cßn l¹i d·y A - Hái: Ta dïng nh÷ng lÖnh nµo: - HS: LÖnh g¸n Max:= A[i] ; vµ dïng lÖnh Gi¸o Viªn: TrÇn ThÞ H»ng program vi_du2; Uses crt; var a:array[1 100] of integer; i, n, max, vitri : integer; Begin Write(‘Nhap so phan tu cua mang n=’) ; readln(n); For i:=1 to n Begin Write(‘Nhap a[‘,i,’]= ’); readln(a[i]); End; Write(‘Cac phan tu cua mang la ‘); 13 Lop11.com Tæ: To¸n- Tin (6) Trường THPT Vĩnh Bảo For- Gi¸o ¸n Tin Häc líp 11 For i:=1 to n Write(a[i],’ ‘); - Hái: VËy biÕn chØ sè i ch¹y tõ gi¸ trÞ nµo: writeln; - HS: Biến số i nhận giá trị từ đến N Max:=a[1] ; vitri :=1; - GV: Hướng dẫn học sinh viết chương trình, For i:=2 to n kiÓm tra vµ gi¶i thÝch cho häc sinh hiÓu If a[i]> Max then nh÷ng lÖnh nµy Begin Max:=a[i] ; - HS: Học sinh viết chương trình vitri :=i End; Writeln(‘ gia tri lon nhat Max= ‘,Max); Writeln(‘Vi tri: ‘, vitri); Readln; End Ví dụ 3: Viết chương trình nhập vào d·y gåm N sè nguyªn ( N< 100).In d·y sè mµn h×nh S¾p xÕp d·y theo thø tù không giảm phương pháp tráo đổi - GV: Nh¾c l¹i thuËt to¸n cho häc sinh B1: NhËp N vµ d·y sè nguyªn program vi_du3; Uses crt; B3: Nếu M< thì đưa dãy đã var a:array[1 100] of integer; xÕp råi kÕt thóc i,j,n,tam:integer; B4: M M-1; i begin clrscr; B5: i i+1; Write(‘Nhap n : ’);readln(n); b6: NÕu i> M th× quay l¹i B3 For i:=1 to n B7: Nếu > ai+1 thì tráo đổi và ai+1 cho Begin Write(‘Nhap a[‘,i,’]= ’); b8: Quay l¹i B5 readln(a[i]); End; Write(‘mang A vua nhap la: ‘); For i:=1 to n Write(a[i],’ ‘);writeln; For j:=n downto For i:=1 to j-1 If a[i]>a[i+1] then Begin Tam:=a[i]; a[i:=a[i+1]; B2: M N Gi¸o Viªn: TrÇn ThÞ H»ng 13 Lop11.com Tæ: To¸n- Tin (7) Trường THPT Vĩnh Bảo Gi¸o ¸n Tin Häc líp 11 a[i+1]:=tam; End; Writeln(‘Day sau sap xep: ); For i:=1 to n Write(a[i],’ ‘); Readln; End Ví dụ 4: Viết chương trình nhập vào d·y sè gåm N sè nguyªn (n<100).in d·y - Hái: ë vÝ dô n¸y ta cã thÓ ¸p dông thuËt số đó màn hình Nhập vào số to¸n nµo? nguyªn k bÊt kú T×m xem d·y A cã - HS: ThuËt to¸n t×m kiÕm tuÇn tù sè h¹ng nµo cã gi¸ trÞ b»ng k hay kh«ng? - Hái: Cã thÓ ¸p dông thu¹t to¸n t×m kiÕm NÕu cã h·y cho biÕt vÞ trÝ cña nã nhÞ ph©n ®îc kh«ng? program vi_du4; - HS: áp dụng dãy A đã Uses crt; var a:array[1 100] of integer; xÕp theo thø tù t¨ng dÇn i,j,n,tam,k, dau, cuoi:integer; - Hỏi: Vậy để áp dụng ví dụ vào thuật toán begin timg kiÕm nhÞ ph©n ta ph¶i lµm g×? clrscr; - HS: Ph¶i s¾p xÕp d·y A theo thø tù t¨ng Write(‘Nhap n : ’);readln(n); dÇn For i:=1 to n - GV: Cho HS ¸p dông vÝ dô h·y viÕt ®o¹n Begin Write(‘Nhap a[‘,i,’]= ’); chương trình nhập vào dãy A và xếp dãy readln(a[i]); A theo thø tù t¨ng dÇn End; - GV: Nh¾c l¹i thuËt to¸n t×m kiÕm nhÞ ph©n Write(‘Cac phan tu cua day vua nhap la: ‘); đã học chương trình lớp 10 For i:=1 to n - Hái: Khi nµo thuËt to¸n dõng Write(a[i],’ ‘);writeln; For j:=n downto - HS: Khi Dau> Cuoi For i:=1 to j-1 - Hái: §iÒu nµy cã nghÜa lµ g×? If a[i]>a[i+1] then - HS: NghÜa lµ Dau <= Cuoi th× thuËt to¸n Begin vÉn cßn tiÕp tôc Tam:=a[i]; a[i:=a[i+1]; - Hái: Trong vÝ dô nµy ta dïng cÊu tróc lÆp a[i+1]:=tam; nµo? End; - HS: Dïng cÊu tróc lÆp víi sè lÇn cha bݪt Writeln(‘Day sau sap xep: ); trước For i:=1 to n - GV: H·y viÕt l¹i c©u lÖnh While- Write(a[i],’ ‘); Write(‘Nhap so cam tim: ‘);readln(k); Gi¸o Viªn: TrÇn ThÞ H»ng 13 Lop11.com Tæ: To¸n- Tin (8) Trường THPT Vĩnh Bảo - HS: tr¶ lêi c©u hái Gi¸o ¸n Tin Häc líp 11 Dau := ; Cuoi := n ; - GV: Cho học sinh viết chương trình Giua := (Dau + Cuoi) DIV ; While (dau<=cuoi) and not(a[giua]=k]) - begin Giua := (Dau + Cuoi) DIV ; If a[giua] > k then Cuoi := Giua ; If a[giua]< k then Dau := Giua + ; End; If dau > cuoi then Write( ‘ day khong chua ‘,k) Else Write( k, ‘ Nam o vi tri : ‘, giua); Readln; End 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 cách chia bảng thành bốn phần đồng thời gọi 4HS lên bảng viết lại các cách khai báo,truy xuất, và hiển thị để nhập liệu - Ra bµi tËp vÒ nhµ * Mét sè bµi tËp vÒ nhµ Bài 1: Viết chương trình nhập vào mảng chiều A gồm N phần tử nguyên Đưa các giá trÞ cña m¶ng A mµn h×nh a TÝnh tæng c¸c phÇn tö cña m¶ng A §a kÕt qu¶ cña tæng mµn h×nh b Tính tổng các số âm, dương, chẵn, lẻ dãy A Đưa kết màn hình c tÝnh tæng c¸c sè ch½n ë vÞ trÝ lÎ cã d·y A §a kÕt qu¶ mµn h×nh d TÝnh tæng c¸c sè lÎ ë vÞ trÝ ch½n d·y A §a kÕt qu¶ mµn h×nh Gi¸o Viªn: TrÇn ThÞ H»ng 13 Lop11.com Tæ: To¸n- Tin (9)