1. Trang chủ
  2. » Cao đẳng - Đại học

Giáo án giảng dạy môn Tin học 11 - Bài 11: Kiểu mảng

8 13 0

Đang tải... (xem toàn văn)

THÔNG TIN TÀI LIỆU

Thông tin cơ bản

Định dạng
Số trang 8
Dung lượng 101,41 KB

Các công cụ chuyển đổi và chỉnh sửa cho tài liệu này

Nội dung

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]

Trang 1

Chương IV: Kiểu dữ 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:

1 Kiến thức

- Biết được một kiểu dữ liệu mới là kiểu mảng 1 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ử của mảng

2 Kỹ nă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

- Tạo được kiểu mảng một chiều và sử dụng biến mảng một chiều trong ngôn ngữ lập trình Pascal để giả quyết 1 số bài toán cụ thể

II Phương pháp, phương tiện dạy học:

1 Phương pháp: Thuyết trình, vấn đáp

2 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:

1 ổn định lớp và kiểm tra sĩ số

2 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

3 Bài mới:

Hoạt động của giáo viên và học sinh Nội dung ghi bảng

- GV: Cho học sinh làm ví dụ trong sgk:

Nhập vào nhiệt độ trung bình của mỗi ngày

trong tuần tính và in ra màn hình nhiệt độ

trung bình của 1 tuần và số lượng ngày trong

tuần có nhiệt độ cao hơn nhiệt độ trung bình

tính được

Trang 2

- GV: Hãy cho biết input và output của bài

toán

-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 do cua 7 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 do trung binh cua tuan la’,

tb:4:2);

Writeln(‘so luong ngay co nhiet do cao hon

nhiet do trung binh la’,dem:3);

Readln;

End

- GV: Trong bài toán trên, số lượng ngày tính

là 7 ngày Nếu ta cần tính số lượng ngày là N

ngày thì chương trình trên sẽ có hạn chế gì?

- HS: Khai báo nhiều biến

Chương trình viết rất dài

* Diễn giải: Để khắc phục những hạn chế

trên , người ta ghép 7 biến trên thành một dãy

và đặt nó chung chung một tên và đánh cho

1 Kiểu mảng một chiều

- 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ử trong mảng có cùng chung một tên và phân biệt với nhau bởi chỉ số

Trang 3

mỗi phần tử trên một chỉ số Đó là mảng một

chiều

- GV: Tham khảo sgk và cho biết thế nào là

mảng một chiều?

- HS: Đọc sgk và trả lời

- Hỏi: Để mô tả mảng một chiều ta cần xác

định yếu tố nào?

GV: Đưa ra cách khai báo mảng một chiều

trong NNLT Pascal, giải thích ý nghĩa các từ

khoá mới

GV: Khai báo bằng cách nào tiện lợi hơn?

HS: Thường trả lời cách một

GV: Tuỳ từng trường hợp cụ thể mà ta dùng

cách một hay cách hai, thường thì sử dụng

cách một nhiều hơn

GV: Đưa ra một số khai báo mảng trong

Pascal, đưa ra ví dụ:

GV: Khai báo cách nào tiện lợi hơn?(tương

tự mảng một chiều)

HS : Chọn cách 1

GV: Tuỳ theo từng trường hợp cụ thể nhưng

thương thì cách 1 hay được dùng hơn

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 GV

- Với mảng một chiều ta quan tâm đến:

+ Tên mảng một chiều + Số lượng phần tử trong mảng + Kiểu dữ liệu phần tử

+ Cách khai báo mảng một chiều + Cách truy cập vào từng phần tử của 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ử>;

* Ví dụ:

Var M1:array [1 5] of integer;

- Khai báo mảng có tên biến mảng là M1 gồm 5 phần tử thuộc kiểu nguyên ứng với các chỉ số 1, 2, 3, 4, 5 nghĩa là M1[1], M1[2], M1[3], M1[4], M1[5]

Cách 2: Khai báo gián tiếp 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>;

* Ví dụ:

Type M1= array [1 5] of integer;

Var a: M1;

* Giải thích

- Type là từ khoá dùng để khai báo biến

- Array là từ khoá để khai báo mảng

- 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

(n1<= n2)

Trang 4

- GV: Cho một số khai báo mảng sau

Type

Manga= array [1 200] of real;

Mangb = array [byte] of real;

Mangc = array [-100 0] of real ;

Mangd = array[ 1 100] of real;

- Hỏi: Hãy cho biết khai báo mảng nào

đúng?

- Hỏi: ở ví dụ này, yêu cầu ta phải làm những

việc gì?

- HS: Có 2 việc phải làm: Nhập dãy A gồm N

phần tử, và in dãy đó ra màn hình

- Hỏi: Xác định Input và output của bài toán?

- HS: Input: Số nguyên dương N ( N<100)

Output: Hiển thị dãy ra màn hình

- Hỏi: Ta cần khai báo những gì?

- HS: Khai báo mảng 1 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- do

- Hỏi: Để nhập phần tử thứ i của mảng A từ

- 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ứ 3 của mảng M1

- A[i] là phần tử ở vị trí thứ i của mảng A

B Một số ví dụ.

Ví dụ 1: Viết chương trình nhập vào một dãy A gồm N số nguyên (N <100) Hãy hiển thị dãy A ra màn hình

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 do 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 do Write(a[i],’ ‘);

Readln;

End.

Trang 5

bàn phím ta viết lệnh thế nào?

- 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ác phần tử của mảng A

ta thực hiện lệnh nào?

- HS: Kết hợp giữa For- do và write(A[i]) ;

- HS: Viết chương trình theo hướng dẫn của

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 của bài toán

- HS: Trả lời câu hỏi

- GV: Hướng dẫn học sinh dựa vào ví dụ 1 để

giải quyết ví dụ 2:

- HS: Viết chương trình theo sự hướng dẫn

của giáo viên

- Hỏi: ở ví dụ 2 có yêu cầu gì mới?

- 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 nhất của một dãy số đã

học trong 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 đi so sánh giá trị lớn nhất

này với các số hạng còn lại trong 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

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 ra 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ó trong dãy A

Gợi ý:

Input: số nguyên N và các phần tử,

A1, A2, AN

Output: - Hiển thi mảng A ra màn hình

- Giá trị lớn nhât Max và vị trí của

số đó trong mảng A

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 do Begin

Write(‘Nhap a[‘,i,’]= ’);

readln(a[i]);

End;

Write(‘Cac phan tu cua mang la ‘);

Trang 6

For- do

- Hỏi: Vậy biến chỉ số i chạy từ giá trị nào:

- HS: Biến chỉ số i nhận giá trị từ 2 đến N.

- GV: Hướng dẫn học sinh viết chương trình,

kiểm tra và giải thích cho học sinh hiểu

những lệnh này

- HS: Học sinh viết chương trình.

- GV: Nhắc lại thuật toán cho học sinh

B1: Nhập N và dãy số nguyên

B2: M  N

B3: Nếu M< 2 thì đưa ra dãy đã được sắp

xếp rồi kết thúc

B4: M  M-1; i 0

B5: i i+1;

b6: Nếu i> M thì quay lại B3

B7: Nếu ai > ai+1 thì tráo đổi ai và ai+1 cho

nhau

b8: Quay lại B5

For i:=1 to n do Write(a[i],’ ‘);

writeln;

Max:=a[1] ; vitri :=1;

For i:=2 to n do

If a[i]> Max then Begin

Max:=a[i] ; 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 một

dãy gồm N số nguyên ( N< 100).In dãy số

ra màn hình Sắp xếp dãy theo thứ tự không giảm bằng phương pháp tráo đổi

program vi_du3;

Uses crt;

var a:array[1 100] of integer;

i,j,n,tam:integer;

begin

clrscr;

Write(‘Nhap n : ’);readln(n);

For i:=1 to n do Begin

Write(‘Nhap a[‘,i,’]= ’);

readln(a[i]);

End;

Write(‘mang A vua nhap la: ‘);

For i:=1 to n do Write(a[i],’ ‘);writeln;

For j:=n downto 2 do For i:=1 to j-1 do

If a[i]>a[i+1] then Begin

Tam:=a[i];

a[i:=a[i+1];

Trang 7

- Hỏi: ở ví dụ náy ta có thể áp dụng thuật

toán nào?

- HS: Thuật toán tìm kiếm tuần tự

- Hỏi: Có thể áp dụng thuạt toán tìm kiếm

nhị phân được không?

- HS: áp dụng được nếu dãy A đã được sắp

xếp theo thứ tự tăng dần

- Hỏi: Vậy để áp dụng ví dụ 4 vào thuật toán

timg kiếm nhị phân ta phải làm gì?

- HS: Phải sắp xếp dãy A theo thứ tự tăng

dần

- GV: Cho HS áp dụng ví dụ 2 hãy viết đoạn

chương trình nhập vào dãy A và sắp xếp dãy

A theo thứ tự tăng dần

- GV: Nhắc lại thuật toán tìm kiếm nhị phân

đã học trong chương trình lớp 10

- Hỏi: Khi nào thuật toán dừng

- HS: Khi Dau> Cuoi

- Hỏi: Điều này có nghĩa là gì?

- HS: Nghĩa là khi Dau <= Cuoi thì thuật toán

vẫn còn tiếp tục

- Hỏi: Trong ví dụ này ta dùng cấu trúc lặp

nào?

- HS: Dùng cấu trúc lặp với số lần chưa bíêt

trước

- GV: Hãy viết lại câu lệnh While- do

a[i+1]:=tam;

End;

Writeln(‘Day sau khi sap xep: );

For i:=1 to n do Write(a[i],’ ‘);

Readln;

End

Ví dụ 4: Viết chương trình nhập vào một

dãy số gồm N số nguyên (n<100).in dãy

số đó ra màn hình Nhập vào một số nguyên k bất kỳ Tìm xem trong dãy A có

số hạng nào có giá trị bằng k hay không? Nếu có hãy cho biết vị trí của nó

program vi_du4;

Uses crt;

var a:array[1 100] of integer;

i,j,n,tam,k, dau, cuoi:integer;

begin

clrscr;

Write(‘Nhap n : ’);readln(n);

For i:=1 to n do Begin

Write(‘Nhap a[‘,i,’]= ’);

readln(a[i]);

End;

Write(‘Cac phan tu cua day vua nhap la: ‘); For i:=1 to n do

Write(a[i],’ ‘);writeln;

For j:=n downto 2 do For i:=1 to j-1 do

If a[i]>a[i+1] then Begin

Tam:=a[i];

a[i:=a[i+1];

a[i+1]:=tam;

End;

Writeln(‘Day sau khi sap xep: );

For i:=1 to n do Write(a[i],’ ‘);

Write(‘Nhap so cam tim: ‘);readln(k);

Trang 8

- HS: trả lời câu hỏi

- GV: Cho học sinh viết chương trình

-

Dau := 1 ; Cuoi := n ; Giua := (Dau + Cuoi) DIV 2 ; While (dau<=cuoi) and not(a[giua]=k]) do begin

Giua := (Dau + Cuoi) DIV 2 ;

If a[giua] > k then Cuoi := Giua  1 ;

If a[giua]< k then Dau := Giua + 1 ; 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 bằng 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 dữ 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 một chiều A gồm N phần tử nguyên Đưa các giá trị của mảng A ra 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 ra màn hình

b Tính tổng các số âm, dương, chẵn, lẻ trong dãy A Đưa kết quả ra màn hình

c tính tổng các số chẵn ở vị trí lẻ có trong dãy A Đưa kết quả ra màn hình

d Tính tổng các số lẻ ở vị trí chẵn trong dãy A Đưa kết quả ra màn hình

Ngày đăng: 01/04/2021, 21:58

🧩 Sản phẩm bạn có thể quan tâm

w