Bạn đang xem bản rút gọn của tài liệu. Xem và tải ngay bản đầy đủ của tài liệu tại đây (137.31 KB, 7 trang )
<span class='text_page_counter'>(1)</span><div class='page_container' data-page=1>
<b>Ngày soạn 15/01/2009 </b>
(TIẾT 1)
<i><b>A. MỤC TIÊU: </b></i>
- Kiểu mảng là một kiểu dữ liệu có cấu trúc, rất cần thiết và hữu ích trong nhiều chương
trình.
- Mảng một chiều là một dãy hữu hạn các phần tử cùng kiểu.
- Có thể truy xuất (hay thao tác) trên mỗi phần tử của mảng, trong việc làm đó mỗi phần
tử của mảng được xác định bởi tên của mảng và chỉ số tương ứng của phần tử này.
- Các ngơn ngữ lập trình thơng dụng cho phép người lập trình xây dựng kiểu dữ liệu
mảng một chiều.
- Có hai cách khai báo: trực tiếp và gián tiếp.
- Nhận biết được các thành phần trong khai báo kiểu mảng một chiều.
- Nhận biết định danh của một phần tử xuất hiện trong một chương trình.
- Biết cách viết khai báo mảng đơn giản với chỉ số kiểu miền con của kiểu nguyên.
- 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ột chiều.
- Thực hiện khai báo mảng, truy cập, tính tốn các phần tử mảng.
- Tiếp tục xây dựng lịng ham thích lập trình, nhằm giải quyết các bài tốn bằng MTĐT.
- Tiếp tục rèn luyện các phẩm chất cần thiết người lập trình.
<b>B. PHƯƠNG PHÁP:</b>
<b>C. CHUẨN BỊ CỦA GIÁO VIÊN, HỌC SINH:</b>
1. Chuẩn bị của giáo viên: giáo án, phấn, bút, sổ điểm, SGK, dụng cụ trực quan, chương
trình minh họa.
2. Chuẩn bị của học sinh: SGK, vở, bút.
<b>D. TIẾN TRÌNH LÊN LỚP:</b>
<b>I. Ổn định:</b>
<b>II. Kiểm tra bài cũ: </b>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 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
<b>GV: gọi 2 hs lên bảng</b>
<b>HS1: viết chương trình nhập </b>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 tuần.
<b>HS2:</b> viết chương trình tính số lượng ngày trong tuần có nhiệt độ cao hơn nhiệt độ trung
bình tính được.
<b>II. Bài mới:</b>
<i><b>1. Đặt vấn đề</b></i>: các kiểu nguyên, thực, kí tự gọi chung là kiểu vơ hướng chuẩn. đó những
kiểu dữ liệu đơn giản. Như ta đã biết, trong TP từ những câu lệnh nào đó, ta có thể xây dựng
những câu lệnh có cấu trúc phức tạp hơn. Sau đây về mặt dữ liệu ta cũng có thể tính cấu trúc
tương tự, các kiểu dữ liệu phức tạp hơn được xây dựng từ các dữ liệu đơn giản.
<i><b>2. Triển khai bài:</b></i>
<i><b>Hoạt động 1: Tìm hiểu Ví dụ</b></i>
<b>Hoạt động thầy và trò</b> <b>Nội dung bài học</b>
<b>GV:</b> Dựa vào những kiến thức đã
học hãy giải quyết bài toán trên.
Hỏi:
- Input:
- Output:
- Giải thuật:
Nếu như có nhiều 1 tháng, 1 năm
thì sao???
Chúng ta khai báo 365 biến???
<b>GV: </b>Nhập vào dãy n số nguyên.
Tính tổng các số vừa nhập.
- Bài toán này đã được giải quyết,
tuy nhiên giá trị được nhập vào sẽ
- Nếu thêm điều kiện cho bài toán:
in ra các giá trị dương <sub></sub> không thực
hiện được.
- Với các kiểu dữ liệu đã học làm
thế nào để:
Lưu trữ và xử lý một dãy số?
Lưu trữ và xử lý họ và tên một
người?
Lưu trữ và xử lý bảng kết quả thi
tốt nghiệp?
- Nếu như vậy thì làm cho chương
trình phức tạp với nhiều biến và
chương trình tính cũng q dài. Để
khắc phục khó khăn đó, TP sử dụng
mảng một chiều
<b>I. Mảng một chiều:</b>
<b>* Ví dụ:</b>
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
- Chương trình:
Var t1,t2,t3,t4,t5,t6,t7,tb:real;
dem:integer;
Begin
Write('Nhap nhiet do 7 ngay: ');
Readln(t1,t2,t3,t4,t5,t6,t7);
tb:=(t1+t2+t3+t4+t5+t6+t7)/7;
dem:=0;
if t1>tb then dem:=dem+1;
if t2>tb then dem:=dem+1;
if t3>tb then dem:=dem+1;
if t4>tb then dem:=dem+1;
if t5>tb then dem:=dem+1;
if t6>tb then dem:=dem+1;
if t7>tb then dem:=dem+1;
Writeln('Nhiet do tbinh: ',tb);
Writeln('So ngay :',dem);
readln;
End.
<b>Hoạt động 2: Tìm hiểu khái niệm mảng 1 chiều</b>
<b>Hoạt động thầy và trò</b> <b>Nội dung bài học</b>
<b>T</b>
<b>25</b> <b>20.5 22 30.5 31 21 26.5</b>
<b>a. Khái niệm:</b>
<b>1</b> <b>2</b> <b>3</b> <b>4</b> <b>5</b> <b>6</b> <b>7</b>
- Tên của dãy này là gì?
- Dãy T gồm bao nhiêu số?
- Các số đó có kiểu dữ liệu là kiểu gì?
- Để lấy một giá trị trong dãy đó ta làm thế
nào?
<b>GV: </b>Dựa vào ví dụ trên hãy khái niệm mảng
1 chiều?
<b>HS </b>trả lời.
<b>GV:</b> Dựa vào khái niệm kiểu mảng 1 chiều
em nào có thể cho biết khi khai báo kiểu
mảng thì xác định được những gì?
<b>HS:</b> dựa vào khái niệm để có thể trả lời.
mỗi phần tử của nó có một chỉ số.
<b>* Với mảng một chiều xác định:</b>
- Tên mảng một chiều;
- Số lượng phần tử;
- Kiểu dữ liệu của phần tử;
- Các khai báo biến mảng;
- Cách tham chiếu đến phần tử
<b>Hoạt động 3: Tìm hiểu cách khai báo mảng 1 chiều</b>
<b>Hoạt động thầy và trò</b> <b>Nội dung bài học</b>
<b>GV: </b>Hãy nêu cú pháp khai báo biến?
<b>Hs: </b>Trả lời.
<b>GV: </b>khai báo trên Pascal như sau:
<b>Var a:array[1..10] of integer;</b>
<b>Begin</b>
<b>End.</b>
Dịch chương trình trên.
<b>HS: </b>chú ý quan sát.
<b>GV: </b>Gọi HS nhận xét khai báo đó.
- Dịch có báo lỗi khơng?
- Biến a này khai báo có giống các biến
khác bình thương khai báo khơng?
<b>HS: </b>chú ý và trả lời câu hỏi.
<b>GV: </b>cung cấp cú pháp khai báo trực tiếp
và giải thích.
<b>HS: </b>chú ý nghe giảng và ghi bài.
<b>GV: </b>Để lập trình giải bài tốn trên ta có
thể khai báo như sau:
Var T: Array[1..7] of Real;
Hoặc: Type nhietdo = Array[1..7] of
Real;
Var T:nhietdo;
<b>GV:</b> Nêu 2 cách khai báo và giải thích .
<b>HS:</b> chú ý để có thể vận dụng khai báo
cho các bài tốn.
<b>GV:</b> Hãy ghi 1 số khai báo mảng 1 chiều
<b>b. Khai báo:</b>
<i><b>- Trực tiếp:</b></i>
Var <tên biến mảng>: Array[kiểu chỉ số] of
<Kiểu phần tử>;
<i><b>- Gián tiếp:</b></i>
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>;
<b>Trong đó:</b>
- Kiểu chỉ số:là kiểu miền con, là đoạn số
nguyên liên tục.
- Kiểu phần tử là kiểu phần tử mảng, là
những kiểu dữ liệu đơn giản.
<i><b>Ví dụ</b></i>
hợp lệ. Kiểm tra 1 số học sinh.
<b>HS:</b> ghi 1 số khai báo vào giấy nháp.
<b>GV:</b> có thể thực hiện khai báo trên máy
để thực hiện cho học sinh thấy khai báo đó
có hợp lệ hay không?
<b>GV:</b> đưa ra khai báo, gọi học sinh nhận
Var nguyen:array[1..n] of byte;
<b>HS:</b> số phần tử mảng chưa xác định.
<b>GV:</b> Vậy làm thế nào để có thể xác định
số phần tử mảng nếu dùng khai báo đó
<b>HS:</b> n có giá trị, khai báo hằng cho biến
n.
Const n=100;
Var nguyen:array[1..n] of byte;
<b>GV:</b>
- Cho biết tên của kiểu dữ liệu mới?
- Kiểu mảng đó có bao nhiêu phần tử?
- Mỗi phần tử của mảng thuộc kiểu gì?
- Cho biết tên của các mảng sẽ dùng trong
chương trình?
<b>HS:</b> trả lời các câu hỏi.
<b>Hoạt động 4: Tìm hiểu cách tham chiếu đến một phần tử mảng 1 chiều</b>
<b>Hoạt động thầy và trò</b> <b>Nội dung bài học</b>
<b>GV:</b> Để tham chiếu đến 1 phần tử trong
mảng ta dùng cú pháp sau:
<b><tên biến mảng>[chỉ số]</b>
<b>HS:</b> Chú ý lắng nghe và ghi bài.
<b>GV:</b> Cho ví dụ sau:
<b>T</b>
<b>25</b> <b>20.5 22 30.5 31 21 26.5</b>
<b>1</b> <b>2</b> <b>3</b> <b>4</b> <b>5</b> <b>6</b> <b>7</b>
T[3]: có nghĩa là gì?
T[3]=?
T[6]=?
<b>HS:</b> dựa và cú pháp và dựa vào dãy số để
trả lời.
<b>c. Tham chiếu đến phần tử của mảng:</b>
<b><tên biến mảng>[chỉ số]</b>
<b>Hoạt động 5: Tìm hiểu cách nhập xuất dữ liệu trên mảng 1 chiều</b>
các giá trị cho mảng và in mảng.
<b>VD:</b>
+ Nhập phần tử thứ 1 của mảng:
Nhiều phần tử?
Readln(T[2],T[5],T[7]);
+ Mảng T, nhập vào 7 phần tử
For i:=1 To 7 Do
Begin
Write(‘Nhap nhiet do ngay thu ’,i,’:’);
Readln(A[i]);
End;
<b>HS:</b> đưa ra cách nhập giá trị cho trường hợp tổng
quát (n phần tử).
- Trường hợp các giá trị của mảng có điều kiện
thì cần phải thực hiện ntn? (VD các phần tử của
mảng phải là số dương)
For i:=1 To 10 Do
Repeat
Write(‘A[’,i,’]=’);Readln(A[i]);
Until A[i] >0;
- Trường hợp khống chế số lượng phần tử của
mảng? <sub></sub> Sử dụng Repeat
<b>GV:</b> Để in ra màn hình phần tử đầu tiên của
mảng T ghi thế nào?
Write(T[1];)
<b> VD: </b>
For i:=1 To 7 Do Write(T[i]:3);
- trường hợp in ra có chỉ rõ phần tử thứ mấy của
mảng:
For i:=1 To 10 Do
Write(‘A[‘,i,’]=’,A[i]:3);
<b>- Nhập:</b>
<b>Read /Readln/(<tên biến mảng> [chỉ </b>
<b>số ]);</b>
<b>Đoạn chương trình nhập mảng 1</b>
<b>chiều gồm n phần tử:</b>
Write('nhap so phan tu cua mang: ');
Readln(n);
For i:=1 to n do
Begin
Write('Nhap phan tu thu ',i,':
');
Readln(<tên biến mảng>a[i]);
End;
<b>- Xuất: </b>
<b>Write/Writeln(<tên biến mảng>[chỉ</b>
<b>số]);</b>
<b>Đoạn chương trình in mảng 1 chiều</b>
<b>gồm n phần tử: </b>
For i:=1 to n do
Write(<tên biến mảng>[i],’ ‘);
<b>Hoạt động 6: Viết chương trình ví dụ</b>
<b>Hoạt động thầy và trò</b> <b>Nội dung bài học</b>
<b>GV:</b> Kết hợp các phần khai báo,
nhập mảng đã thực hiện ở trên để nói
cách viết chương trình.
<b>HS:</b> chú ý nghe giảng.
<b>GV:</b> Để biết được số ngày có nhiết
độ lớn hơn nhiệt độ trung bình ta làm
thế nào?
<b>HS:</b> liên hệ kiến thức đã học trả lời
câu hỏi:
For i:= 1 to n do
If T[i]>tb then dem:=dem+1;
<b>GV:</b> thực hiện chương trình trên
Pascal để học sinh quan sát kết quả.
HS: chú ý trên máy chiếu.
<b>độ trung bình tính được</b>
<b>Chương trình:</b>
Var T : Array[1..366] of Real;
Tong, tb:Real; i,n,dem:byte;
Begin
Write(‘Nhap so ngay: ’); Readln(n);
Tong:=0;
For i:= 1 to n do
Begin
Write(‘Nhap nhiet do ngay ’, i,’: ’);
Readln(T[i]);
Tong:=Tong+T[i];
End;
Tb:=tong/n; dem:=0;
For i:= 1 to n do
If T[i]>tb then dem:=dem+1;
Writeln('Nhiet do tbinh: ',tb);
Writeln('So ngay :',dem);
readln;
End.
<b>IV. Củng cố:</b>
- Khái niệm kiểu mảng?
- Khai báo?
- Tham chiếu đến 1 phần tử mảng 1 chiều?
<b>V. Dặn dò, hướng dẫn học sinh học tập ở nhà</b>
- Làm bài tập về nhà
Viết chương trình cho máy làm những việc sau:
a. Nhận vào mảng A [1..n] (n > 9), các phần tử là số thực lớn hơn -2 và nhỏ hơn 2.
c. So sánh số phần tử dương với số phần tử âm của mảng.
d. Tìm phần tử nhỏ nhất và lớn nhất của mảng. Chỉ ra vị trí và giá trị của chúng.
e. Tính a[1] + a[2]2<sub> + a[3]</sub>3<sub> + ... + a[n]</sub>n
- Học kỹ bài để có thể chọn cấu trúc trong khi viết chương trình
<b>Duyệt của Tổ trưởng CM/ Hiệu trưởng :</b>