TÌM PHẦN TỬ LỚN NHẤT CỦA DÃY SỐ NGUYÊN
1: Tìm phần tử lớn nhất của dãy số nguyên.
GV: Yêu cầu học sinh xác định bài toán.
-
Input : Số nguyên dương N và dãy số A1, A2,
HS:
Tìm input và output:
….., AN
-
Output : Chỉ số và giá trị của số lớn nhất trong
Input : số nguyên dương n, dãy số nguyên: a
1
,a
2
,
…, a
n
.
dãy
Output: giá trị lớn nhất của dãy số.
-
Ý tưởng :
+ Đặt số A
1
là số lớn nhất (max)
+ Cho i lặp từ 2 đến N, nếu A[i]> thì đổi max
= A[i] vả lưu lại vị trí i .
GV: Lấy ví dụ cụ thể:
Chương trình:
có dãy 5 số: 2 5 4 -6 10
Const nmax=250;
5
Type mang=array[1..nmax] of integer;
5
Var n,I,max:integer;
5 10
A:mang;
GV: Yêu cầu học sinh viết chương trình qua
Begin
hướng dẫn thuật toán của giáo viên.
Write('nhap so phan tu:'); readln(n);
HS:
Khai báo mảng 1 chiều A
For i:=1 to n do begin
Nhập số phần tử.
Write('phan tu thu',I,'la:');
Nhập giá trị mỗi phần tử bằng câu lệnh for.
Readln(A[i]);
Viết lệnh theo thuật toán: cho giá trị lớn
End;
nhất là phần tử ban đầu, xét từ phần tử thứ 2 đến
Max:=A[1];
hết nếu có phần tử lớn hơn thì cho giá trị lớn
For i:=2 to n do if A[i]>max then Max:=A[i];
nhất là phần tử lớn hơn đó.
Writeln('phan tu lon nhat:',max);
HS:
Thể hiện bằng
chương trình.
Readln
End.
HS:
Tìm input và output:
Ví dụ 2 : Sắp xếp dãy số nguyên bằng thuật toán
Input: số nguyên dương n, dãy số nguyên: a
1
,a
2
,
tráo đổi .
Output: dãy A là dãy không giảm.
…, AN
GV: Lấy ví dụ dãy số: -3 0 -7 7 9 3
-
Output : Dãy A được sắp xếp theo thứ tự
Có 2 đĩa A,B trên hai giá tráo đổi vị trí thông
không giảm .
qua giá thứ 3:
-
Ý tưởng :
+ Đổi để đưa số lớn nhất về vị trí cuối cùng .
A B
+ Làm tương tự đối với những số còn lại .
1 2 3
Chương trình như sau :
GV: Tóm lại ta có ý tưởng thuật toán. Diễn
Const amax=250;
giảng ý tưởng.
Type mang=array[1.nmax] of integer;
GV: Yêu cầu học sinh dự vào ý tưởng viết
Var n,I,j,t:integer;
chương trình.
A:mang;
Begin
Write('nhap so phan tu:'); readln(n);
For i:=1 to n do begin
Viết lệnh theo thuật toán: nếu phần tử đứng
Write('phan tu thu:',I,'la:');
trước lớn hơn phần tử đứng sau thì ta đổi chổ
readln(A[i]);
chúng bằng một biến trung gian.
end;
Chương trình hoàn chỉnh.
for j:=n downto 2 do
for i:=1 to j-1 do
if A[i]>A[i+1] then begin
t:=A[i];
A[i]:=A[i+1];
A[i+1]:=t;
End;
Writeln('day da sap:');
For i:=1 to n do write(A[i]:4);
Readln
End.
.Củng cố:
-Ý tưởng tìm giá trị lớn nhất dãy và sắp xếp dãy.
.Dặn dò bài tập về nhà:
-Đọc trước nội dung bài toán mảng 1 chiều SGK/58.
.Rút kinh nghiệm bổ sung:
...
------
Tiết : 21
Ngày soạn :
TIẾT 3