TÌM PHẦN TỬ LỚN NHẤT CỦA DÃY SỐ NGUYÊN

1: - BAI 1: - BAI
BAI

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

c

hươ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