Giáo án Tin học 8 Trường THCS Nguyễn trãi. TIẾT 56, 57: LÀM VIỆCVỚIDÃYSỐ I. Mục tiêu: - Học sinh biết được khái niệm mảng một chiều; - Biết cách khai báo mảng, nhập, in, truy cập các phần tử của mảng; - Hiểu thuật toán tìm số lớn nhất, nhỏ nhất của một dãy số. II. Phương pháp: - Đặt vấn đề để học sinh trao đổi và đưa nhận xét. Tận dụng vốn hiểu biết “ một cách tự nhiên của học sinh - Học sinh đọc SGK, quan sát và tổng kết III. Chuẩn bị: - Giáo viên: Phấn màu, sách, chuẩn bị thêm các bài tập minh hoạ (nếu có) - Học sinh: sách, tập, viết. IV. TIẾN TRÌNH DẠY HỌC 1- Kiểm tra bài cũ: … 2- Dạy bài mới: Hoạt động của Thầy Hoạt động của học sinh Nội dung ghi bảng Hoạt động 1:Dãy số và biến mảng - Giới thiệu về dãysố và biến mảng liên quan đến hai nội dung quan trọng: Nhu cầu của biến mảng trong ngôn ngữ lập trình và thuật toán tìm số lớn nhất của một dãy số. Như các em đã biết về “thuật toán tìm số lớn nhất của một dãy số” đã được tìm hiểu ở bài 5 (ví dụ 6). Vì vậy, ta không đề cập đến việc giải quyết nhiệm vụ này ntn. Mục tiêu là Gv dẫn đến nhu cầu cần có biến mảng thông qua ví dụ 1: Viết chương trình nhập điểm kiểm tra của các HS trong một lớp và sau đó in ra màn hình. + Vì mỗi biến chỉ có thể lưu một giá trị duy nhất, để có thể nhập điểm và so sánh chúng, ta cần sử dụng nhiều biến, mỗi biến cho một HS. Trong Pascal ta cần nhiều câu lệnh khai báo và nhập dữ liệu như: Mỗi câu lệnh tương ứng với điểm của một HS. + Nếu số HS trong lớp càng nhiều thì đoạn khai báo và đọc dữ liệu trong chương trình càng dài … rất khó tránh khỏi những nhầm lẫn, sai sót. - Vậy, ta có thể sử dụng quy luật tăng hay giảm của “số thứ tự” và một vài HS nghe giảng - HS đọc ví dụ 1 - HS lắng nghe, theo dõi, ghi vở. 1. Dãysố và biến mảng: Ví dụ 1: (SGK)/ Tr 75 - Khai báo và nhập dữ liệu mỗi câu lệnh tương ứng với điểm của một HS: Var Diem_1, Diem_2, Diem_3, … : real; Read (Diem_1) ; Read (Diem_2) ; Read (Diem_3) ; … Giáo án Tin học 8 Trường THCS Nguyễn trãi. câu lệnh lặp để xử lí dữ liệu một cách đơn giản ntn ? Để giải quyết các vấn đề trên, hầu hết các ngôn ngữ lập trình đều có một kiểu dữ liệu được gọi là kiểu mảng. + Dữ liệu kiểu mảng là gì ? * Nhấn mạnh: Trong bài này, ta chỉ xét các mảng có các phần tử kiểu số nguyên hoặc số thực. - HS trả lời … - Ta có thể sử dụng quy luật tăng hay giảm của “số thứ tự” và một vài câu lệnh lặp để xử lí dữ liệu một cách đơn giản: + Với i = 1 đến 100: Hãy nhập Diem_i; + Với i = 1 đến 100: Hãy so sánh Max với Diem_i; * Dữ liệu kiểu mảng:Là một tập hợp hữu hạn các phần tử có thứ tự + Mọi phần tử đều có cùng một kiểu dữ liệu gọi là kiểu của phần tử. Việc sắp xếp thứ tự thực hiện bằng cách gán cho mỗi phần tử một chỉ số: + Biến mảng: Là khi khai báo một biến có kiểu dữ liệu là kiểu mảng. + Giá trị của biến mảng là một mảng. (tức là một dãy số: nguyên - thực có thứ tự) Hoạt động 2:Ví dụ về biến mảng - Cách khai báo biến mảng trong các ngôn ngữ lập trình có thể khác nhau, nhưng luôn cần chỉ rõ những gì ? - Cho HS đọc ví dụ, rồi hướng dẫn cách khai báo trong ngôn ngữ Pascal: Var Chieucao : array [1 50] of real; Var Tuoi : array [21 80] of integer; => Cách khai báo mảng trong Pascal ntn ? - Từ ví dụ 1, GV dẫn dắt HS cách khai báo biến mảng: Var Diem : array [1 50] of real; + Biến mảng có 50 phần tử được đánh từ 1 đến 50. Các phần tử được “đặt tên” ntn ? => Cách khai báo và sử dụng biến mảng như trên có lợi gì ? - HS lắng nghe trả lời… - HS nêu cách khai báo … - HS theo dõi lắng nghe trả lời: + Tên biến mảng [chỉ số phần tử] như Diem[1],… + Có thể thực hiện các thao tác như gán giá trị, so sánh, viết giá trị 2. Ví dụ về biến mảng: - Cách khai báo biến mảng trong các ngôn ngữ lập trình có thể khác nhau, nhưng luôn cần chỉ rõ: tên biến mảng, số lượng phần tử, kiểu dữ liệu chung của các phần tử. Ví dụ: (SGK)/ Tr 76 * Cách khai báo mảng trong Pascal: Tên mảng : array [<chỉ số đầu> <chỉ số cuối>] of <kiểu dữ liệu >; Trong đó: + Chỉ số đầu và chỉ số cuối: là 2 số nguyên hoặc biểu thức nguyên (Chỉ số đầu ≤ chỉ số cuối ); + Kiểu dữ liệu: integer hoặc real * Ví dụ 2: (SGK)/ Tr 76. - Khai báo biến mảng Diem như sau: Var Diem : array [1 50] of real; Giáo án Tin học 8 Trường THCS Nguyễn trãi. - Để thay rất nhiều câu lệnh nhập và in dữ liệu ra màn hình, ta dùng một câu lệnh nào ? ( For …do ) - Để viết giá trị của các phần tử ra màn hình người ta kết hợp giữa For …do với lệnh nào ? - Để giúp tiết kiệm rất nhiều thời gian và công sức viết chương trình, thay vì phải viết 50 câu lệnh khai báo và 50 câu lệnh nhập, ta chỉ cần viết 2 câu lệnh là đủ và kết quả đạt được như nhau. Đưa ra 1 cách khai báo cho HS rõ. => HS tự khai báo nhiều biến mảng cho các môn học ntn ? - Sau khi một mảng đã được khai báo, chúng ta có thể làmviệcvới các phần tử của nó như làmviệcvới một biến thông thường. Vậy làmviệcvới một biến thông thường ntn ? * Lưu ý HS: Sử dụng cấu trúc For … do phù hợp, dễ hiểu hơn cấu trúc While…do vì biết trước số lần lặp. * Củng cố:Làm BT 1, 2/ SGK/ Tr 79 * Dặn dò: Học Bài và làmBTVN: 3, 4/SGK/ Tr 79. ra màn hình … với Diem[1], Diem[2], …, Diem[50], - Dùng một câu lệnh lặp - … với lệnh write hoặc writeln - HS nghe và theo dõi Gv thực hiện. - HS làm theo hdẫn của GV. - … như gán giá trị, đọc giá trị và thực hiện các tính toán với các giá trị đó. - Dùng một câu lệnh lặp, có thể thay rất nhiều câu lệnh nhập và in dữ liệu ra màn hình, như: For i:= 1 to 50 do readln ( Diem [ i ] ); - Để so sánh điểm của mỗi HS với một giá trị nào đó, ta cũng chỉ cần một câu lệnh lặp, như: For i:= 1 to 50 do If Diem [ i ] > 8.0 then writeln ( ‘ Gioi ‘ ); - Để xử lí đồng thời các laọi điểm của từng môn học, ta có thể khai báo nhiều mảng: Var DiemToan : array [1 50] of real; Var DiemVan : array [1 50] of real; Var DiemLi : array [1 50] of real; hoặc: Var DiemToan, DiemVan, DiemLi : array [1 50] of real; - Khi một mảng đã được khai báo, chúng ta có thể làmviệcvới các phần tử của nó như: gán giá trị, đọc giá trị và thực hiện các tính toán với các giá trị đó. Ví dụ như: A[ 1 ]:= 5; A[ 2 ]:= 8; hoặc nhập dữ liệu từ bàn phím bằng câu lệnh: For i:= 1 to 5 do readln ( A [ i ] ); -TIẾT 57(tt): Hoạt động 3: Tìm giá trị lớn nhất và nhỏ nhất của dãysố - GV hướng dẫn HS tìm hiểu lại thuật toán tìm giá trị lớn nhất, nhỏ nhất của dãysố nguyên ( đã học ở Bài 5 ). + GV giải thích về thuật toán tìm giá trị lớn nhất của dãysố nguyên … Sau đó cho HS nhắc lại. + Cho HS thảo luận, chỉnh sửa thuật - HS nghe và nhắc lại. Tham gia chỉnh sửa thuật toán trên để tìm ra 3. Tìm giá trị lớn nhất và nhỏ nhất của dãy số: * Thuật toán tìm giá trị lớn nhất ( Max ) của dãysố nguyên nhập từ bàn phím: Bước 1: Nhập N và dãy A 1 , … , A n ; Bước 2: Max ← A 1 ; Bước 3: Với i từ 2 đến N thực hiện: Nếu Giáo án Tin học 8 Trường THCS Nguyễn trãi. toán trên để tìm ra số nhỏ nhất. - GV cho HS đọc ví dụ 3: + Để nhập các số nguyên sẽ được nhập vào, trước hết ta phải làm gì ? + Sau khi khai báo N, biến lưu các số được nhập vào như là các phần tử của một biến mảng A. Ngoài ra, cần khai báo thêm các biến nào nữa ? - GV: Trình bày phần khai báo chương trình … - GV cho HS đọc phần ghi nhớ. số nhỏ nhất. - HS đọc ví dụ 3. + HS: …trước hết ta khai báo biến N. + Cần khai báo thêm biến i làm biến đếm cho các lệnh lặp, biến Max và Min để lưu số lớn nhất, nhỏ nhất. - HS theo dõi - 4HS đọc và cả lớp nghe đọc, cùng theo dõi Max < A 1 thì Max ← A i ; Bước 4: Đưa ra màn hình giá trị Max rồi kết thúc Ví dụ 3: (SGK)/ Tr 78. * Phần khai báo chương trình có thể như sau: Program MaxMin; Uses crt; Var i, n, Max, Min : integer; A : array [1 100] of integer; {Phần thân chương trình sẽ tương tự dưới đây:} Begin Clrscr; Write ( ‘ Hay nhap do dai cua day so, N = ‘); readln (n); Writeln ( Nhap cac phan tu cua day so: m’); For i:= 1 to n do Begin Write ( ‘ a[ , i , ] = ‘); readln (a[ i ] ); End; Max:= a[1]; Min:= a[1]; For i:= 2 to n do Begin if Max < a[ i ] then Max:= a[ i ]; if Min < a[ i ] then Min:= a[ i ]; End; Write ( ‘ So lon nhat la Max = ‘ Max); Write ( ‘ So nho nhat la Min = ‘ Min); readln (n); End. ** GHI NHỚ: (SGK)/ Tr 79. 3- Dặn dò: - Về nhà học bài; - Làm các Câu hỏi và BTcòn lại: sgk/ Tr 79; - Chuẩn bị tiết sau: Bài thực hành 7. The end . đã được khai báo, chúng ta có thể làm việc với các phần tử của nó như làm việc với một biến thông thường. Vậy làm việc với một biến thông thường ntn ? *. đầu> <chỉ số cuối>] of <kiểu dữ liệu >; Trong đó: + Chỉ số đầu và chỉ số cuối: là 2 số nguyên hoặc biểu thức nguyên (Chỉ số đầu ≤ chỉ số cuối );