S: Xây dựng thuật toán để giải bài toán (thuật

Một phần của tài liệu GIÁO ÁN TIN HỌC LỚP 11 (Trang 25 - 28)

III. LƯU Ý SƯ PHẠ M:

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ó 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 .

Một phần của tài liệu GIÁO ÁN TIN HỌC LỚP 11 (Trang 25 - 28)