III. LƯU Ý SƯ PHẠ M:
H S: Xây dựng thuật toán để giải bài toán (thuật
toán đã học ở lớp 10) .
GV soạn sẵn chương trình và cho học sinh quan sát
chương trình .
Nếu có nhiều thời gian, giáo viên sẽ tiến hành soạn chương trình từ đầu để học sinh có thể dễ dàng nhận ra các thao tác cần phải thực hiện khi viết
sau :
Cách 1 :
Var <Tên mảng> : Array[kiểu chỉ số] of <kiểu phần tử> ;
Cách 2 :
Type <Tên kiểu mảng> = Array [<kiểu chỉ số>] of <kiểu phần tử> ;
Var <Tên mảng> : <tên kiểu mảng> ;
Trong đó :
- Type là từ khóa dùng để khai báo
biến, Array là từ khóa để 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. - 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ụ :
A[20] Truy cập phần tử mang chỉ số 20 trong mảng A .
Ví dụ :
Khai báo biến mảng thông qua kiểu mảng : Type ArrayInteger=Array[1..100] of Integer; ArrayReal=Array[1.50] of Real; Var A : Array[1..50]; B : Array[1..50] of Real;
Khai báo mảng trực tiếp :
Var A : Array[1..100] of Integer ; B : Arrat[1..50] of Real ;
b> Một số ví dụ :
Ví dụ 1 : Tìm phần tử lớn nhất của một
dãy số nguyên .
- Input : Số nguyên dương N và dãy
số A1, A2, ….., AN
- Output : Chỉ số và giá trị của số
chương trình .
GV : Đưa ra ví dụ, nhắc lại ý tưởng của thuật toán .
HS : Xây dựng thuật toán để giải bài toán (thuật
toán đã học ở lớp 10) .
GV soạn sẵn chương trình và cho học sinh quan sát chương trình .
Nếu có thời gian, giáo viên sẽ tiến hành soạn chương trình từ đầu để học sinh có thể dễ dàng nhận ra việc chuyển đổi ngôn ngữ từ ngôn ngữ thuật tốn sang ngơn ngữ lập trình .
- Ý tưởng :
+ Đặt số A1 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 .
Chương trình như sau :
Program timmax ; Uses crt ;
var a : array[1..250] of integer ; n,i,max,csmax : Integer ; Begin clrscr ; Write('Nhap n = ') ; Readln(n) ; For i := 1 to n do Begin Write('a[',i,'] = ') ; readln(a[i]) ; End ; max := a[i] ; csmax := 1 ; For i := 2 to n do If a[i] > max then Begin
max := a[i] ; csmax :=i ; End ;
Writeln('Gia tri lon nhat : ',max) ; Writeln('chi so ptu lon nhat : ',csmax) ;
Readln ; End .
Ví dụ 2 : Sắp xếp dãy số nguyên theo
bằng thuật toán tráo đổi .
- Input : Số nguyên dương N và dãy
số A1, A2, …, AN
- Output : Dãy A được sắp xếp theo
thứ tự không giảm . - Ý tưởng :
+ Đổi để đưa số lớn nhất về vị trí cuối cùng .
+ Làm tương tự đối với những số còn lại .
GV : Đưa ra ví dụ, nhắc lại ý tưởng của thuật tốn . HS : Xây dựng thuật toán để giải bài toán (thuật
toán đã học ở lớp 10) .
GV soạn sẵn chương trình và cho học sinh quan sát
chương trình .
Nếu có thời gian, giáo viên sẽ tiến hành soạn chương trình từ đầu để học sinh có thể dễ dàng nhận ra việc chuyển đổi ngôn ngữ từ ngôn ngữ thuật tốn sang ngơn ngữ lập trình .
Chương trình như sau :
Program sapxep ; Uses crt ;
var A : Array[1..250] of integer ; n,i,j,tg : Integer ;
Begin clrscr ;
Write('Nhap so phan tu mang n = ') ; Readln(n) ; For i := 1 to n do Begin Write('A[',i,'] = ') ; readln(A[i]) ; End ; For j := n downto 2 do Begin For i := 1 to j-1 do If A[i] > A[i+1] then Begin tg := A[i] ; A[i] := A[i+1] ; A[i+1] := tg ; End ; End ;
Writeln('day sau khi sap xep : ') ; For i := 1 to n do
write(a[i]:8) ; readln ; End .
Writeln('chi so ptu lon nhat : ',csmax); readln ;
End .
Ví dụ 3 : Tìm kiếm nhị phân .
- Input : Dãy số A1, A2,………,
AN đã được sắp xếp tăng dần . - Output : Có hay khơng chỉ số i
mà A[i] = k hoặc thơng báo khơng tìm thấy .
- Ý tưởng :
Xem lại thuật tốn tìm kiếm nhị phân trong SGK lớp 10 .
GV : Quay lại ví dụ về lưu trữ dữ liệu dạng bảng
để các em nhận ra nhu cầu phải sử dụng mảng 2 chiều trong lập trình .
GV : Khai báo cách nào tiện lợi hơn (tương tự
mảng 1 chiều) ?
Chương trình như sau :
Program sapxep ; Uses crt ;
var A : Array[1..250] of integer ; n,i,k : Integer ;
dau,cuoi,giua : Integer ; TK : boolean ;
Begin clrscr ;
Write('Nhap so ptu mang n = ') ; Readln(n) ; For i := 1 to n do Begin Write('A[',i,'] = ') ; readln(A[i]) ; End ;
Write('nhap so can tim k : ') ; Readln(k);
dau := 1 ; cuoi := n ; TK := false ;
while (dau <= cuoi) and Not TK Do Begin
giua := (dau+cuoi) div 2 ; If A[giua] = k then TK := true Else
If a[giua]>k then cuoi := giua - 1 Else dau := giua + 1 ;
End ;
If TK then write('Chi so la : ',giua) else write(' Khong tim thay '); readln ;
End .