Các em hãy mở sách giáo khoa trang 79 trong phần

Một phần của tài liệu GIAO AN HK I TIN HOC 11 (Trang 73 - 81)

khoa trang 79 trong phần câu hỏi và bài tập.

? Hãy kiểm tra xem dãy A có phải là một cấp số cộng hay không và thông báo kết quả ra màn hình ?

? Input của bài này là gì ?

? Output của bài này là gì a) Hãy cho biết có bao nhiêu số lượng số chẳn và số lẽ trong dãy.

b) Hãy cho biết có bao nhiêu số lượng số nguyên tố trong dãy.

? Ở bài này ta khai báo một mảng A gồm bao nhiêu phần tử ? + Để dãy A trên là 1 cấp số cộng thì ta có điều kiện : A[ i ] – A[ i -1 ] = d. với 1< i < N ) + Nhập từ bàn phím số nguyên dương N ( N < 100 ) và dãy A gồm N số nguyên A1, A2 , ... AN . + Số lượng số chẳn , số lẽ trong dãy và số lượng số nguyên tố trong dãy. + Mảng A gồm 100 phần tử 5/- VCT nhập từ bàn phím số nguyên dương N ( N < 100 ) và dãy A gồm N số nguyên A1, A2 , ... AN . có giá trị tuyệt đối không lớn hơn 1000. Hãy cho biết dãy A có phải là một cấp số cộng hay không và thông báo kết quả ra màn hình.

Lấy d = A[2 ] – A[ 1 ].

Khi đó, dãy A là cấp số cộng nếu thoả mãn điều kiện.

A[ i ] = A[ 1 ] + ( i – 1 ) d . ( Hoặc điều kiện A[ i ] – A[ i -1 ] = d. với 1< i < N )

Dùng một vòng lặp theo biến đếm i để kiểm tra xem mỗi A[ i ] có thoả mãn điều kiện nói trên hay không, chỉ cần phát hiện được 1 phần tử của A không thoả mãn là kết luận được dãy A không phải là cấp số cộng.

6/- VCT nhập từ bàn phím số nguyên dương N ( N < 100 ) và dãy A gồm N số nguyên A1, A2 , ... AN . có giá trị tuyệt đối không lớn hơn 1000. Hãy đưa ra những thông tin sau :

a) Số lượng số chẳn và số lẽ trong dãy. b) Số lượng số nguyên tố trong dãy.

Program Baitap6_chuong4 ;

uses crt ;

Var A : Array[ 1.. 100 ] of integer ; N, i, u, so_nt, so_chan : Integer ;

Begin

clrscr ;

so_nt := 0 ; so_chan := 0 ; { input }

Write(‘So phan tu cua day A (N<= 100, N = ’) ;

 Bài Tập Kiểu Mảng

- Để đếm số lượng số lẽ thì ta chỉ cần đếm số lượng số chẳn , rồi sau đó lấy N – so_chan.

-Ta sử dụng cấu trúc lặp While – do.

? Vậy điều kiện While – do cho số chẳn như thế nào ? ? Vậy điều kiện While – do cho số nguyên tố như thế nào ?

- Nếu u = 2 là số nguyên tố, do đó u là 1 biến trung gian để diễn tả điều kiện While- do.

+ Dãy F là dãy Phi- bô-na-xi nếu : F0 = 0 ; F1 = 1 ; FN = F N- 1 + F N-2 ? Vậy F2 ? ? Vậy F3 ? . + ( N< 0 ) or ( N > 100 ) + ( u <= sqrt(A[ i ])) and (( A[ i ] mod u ) <> u ) + F2 = F 1 + F 0 + F3 = F 2 + F 1 Readln(N) ; While ( N< 0 ) or ( N > 100 ) Do Begin

Writeln(‘ Nhap lai, So phan tu cua day A (N<= 100, N = ’) ; Readln(N) ; End; For i := 1 to N do Begin Write(‘A[ ‘, i, ‘ ]= ‘ ) ; Readln(A[ i ]) ; I f A[ i ] mod 2 = 0 then So_chan := so_chan +1 ; I f A[ i ] > 1 then Begin u := 2 ;

While ( u <= sqrt(A[ i ])) and

(( A[ i ] mod u ) <> u ) do U := u + 1 ; If u > sqrt(A[ i ] ) then So_nt := so_nt + 1 ; End ; End ; { output }

Writeln(‘ so luong so chan:’, so_chan) ; Writeln(‘ so luong so le :’, N - so_chan) ; Writeln(‘ so luong so nguyen to :’, so_nt) ;

Readln ;

End. (adsbygoogle = window.adsbygoogle || []).push({});

7/- Dãy F là dãy Phi- bô-na-xi nếu : F0 = 0 ; F1 = 1 ; FN = F N- 1 + F N- 2

với N >=2.

VCT nhập vào từ bàn phím số nguyên dương N và đưa ra màn hình số hạng thứ N của dãy Phi- bô-na-xi. Chương trình của bạn thực hiện được với giá trị lớn nhất của N là bao nhiêu ?

 Bài Tập Kiểu Mảng

? Input của bài này là gì ? ? Output của bài này là gì ?

? Chương trình của bạn thực hiện được với giá trị lớn nhất của N là bao nhiêu ?

9/- VCT tính số lần xuất hiện của các ký tự từ A đến Z là bao nhiêu ?

( giả sử nhập vào : ABCA là chữ A xuất hiện 2 lần) Program sapxep ; Uses crt ; Const n =10 ; Var MC : Array[1..N] of Char ; I : integer ; Ch :char ; Begin Clrscr; For ch := ‘A’ to ‘Z’ do MC[ i ] := 0 ; For i := 1 to 100 do { đọc ký tự và đếm} Begin

Write(‘nhap vao cac ki tu ’);

+ Nhập vào số nguyên dương N. + Số hạng thứ N của dãy Phi- bô-na- xi. Program Phi_bo_na-xi ; Uses crt ; Var N, i : Word ; F1 , F2 , F : Word ; Begin Clrscr;

Write(‘Tim so hang thu N cua dãy Phi- bo-na-xi, N= ‘) ; Readln(N) ; F0 := 0 ; F1 = 1 ; F2 = 1 ; For i := 3 to N do Begin Fi = F i - 1 + F i - 2 F := Fi End ;

Writeln(‘So hang thu N ‘ F ) ; Readln ;

End.

Một số bài tập bổ sung(mở rộng) :

8/- VCT sắp xếp các phần tử của mảng theo 1 trật tự tăng hoặ giảm dần ( các phần tử được nhập vào từ bàn phím )

Program sapxep ; Uses crt ;

Const n =10 ;

Var MI : Array[1..N] of integer ; T, I, J : integer ; Begin Clrscr; For i := 1 to N do Begin Write(‘MI[‘, i, ‘ ]=’) ; Readln(MI[ i ]) ; End ; For i := 1 to N -1 do For j := I+1 to N do Begin

 Bài Tập Kiểu Mảng Readln(ch) ; Ch := upcase(ch) ; MC[ch ] := MC[ ch ] + 1 ; End ; For ch := ‘A’ to ‘Z’ do If MC[ ch ] > 0 then Writeln(‘ so chu so ‘, ch , ‘=’ , MC[ ch ] :4 ) ; Readln ; End. Begin T := MI[ i ] ; MI[ i ] := MI[ j ] ; MI[ j ] := T ; End ; End ;

Writeln(‘Sau khi sap xep ‘) ;

For i := 1 to N do Write(MI[ I ]:5) ; Readln ; End. 10/- VCT in lên màn hình bảng chữ cái từ A đến Z ? 11/- VCT in lên màn hình bảng cửu chương (2 đến 10 ) 12/- VCT in lên màn hình 10 số hạng đầu tiên của dãy Fibonaxi như sau : biết : F(1) = F( 2) = 1

F[ i ] = F[ i –1 ] + F[ i –2 ] ;

4. Củng cố :(4’)

- Khi viết chương trình nếu biến là kiểu số thực thì chú ý cách xuất ra màn hình theo dạng có quy cách. Khi viết chương trình cần chú ý các dấu trong các lệnh Pascal.

5. Dặn dò :(1’)

- Học bài và làm thêm các bài tập còn lại trong SGK trang 79 và trong sách bài tập. - - Chuẩn bị tiếp Bài Tập Và Thực Hành 4 trong SGK trang 65.

Hoà Lợi,ngày……Tháng ……Năm 2008

Bài Tập Và Thực Hành 4

Tuần: 13 Ngày soạn: 10/10/08 Tiết: 26 Ngày Dạy: / /

Bài Tập Và Thực Hành 4 (adsbygoogle = window.adsbygoogle || []).push({});

I/- Mục đích – yêu cầu :

 Về kiến thức :

+ Làm quen với dữ liệu có cấu trúc và bài toán sắp xếp.

+ Củng cố cho HS những kiến thức và kĩ năng đã có khi lập trình với kiểu dữ liệu mảng. + Củng cố cho HS 1 thuật toán sắp xếp các các phần tử của 1 dãy ( bằng tráo đổi) và kĩ năng diễn đạt thuật toán này bằng chương trình sử dụng dữ liệu kiểu mảng.

 Về kỹ năng :

+ Rèn luyện cho HS 1 ý thức cần có của người lập trình là viết chương trình với khối lượng tính toán ít nhất có thể được.

 Về thái độ :

+ Góp phần hình thành và rèn luyện tư duy lập trình, tác phong của người lập trình.

II/- Chuẩn bị :

 GV : + Phải có giáo án và bài tập thực hành 4.

+ Chuẩn bị sẳn chương trình ở bài 1 và bài 2 trên đĩa ( đĩa cứng của từng máy hay đĩa mềm) và cung cấp cho 1 số HS vào những thời điểm thích hợp.

+ Phân nhóm để thực hành.

 HS : + Đọc trước sách giáo khoa ở nhà để chuẩn bị cho bài tập và thực hành 4.  PP : + Hướng dẫn và phát vấn kết hợp với gợi mở.

III/- Hoạt động dạy học :

1. Ổn định lớp : Kiểm tra sĩ số (1’)

2. Kiểm tra bài cũ :

- Trước khi vào phòng máy tính để thực hành và sau khi ra khỏi phòng máy thì chúng ta cần phải làm gì?

3. Nội dung bài tập và thực hành :

TG Hoạt Động Của GV Hoạt Động Của HS Nội Dung Ghi Bài

Tiết

26 + Trước hết chúng ta mở máytính bằng cách ấn nút power để tính bằng cách ấn nút power để khởi động máy tính.

- Sau khi khởi động máy tính xong ta Start Program

Pascal7.

Input của bài này là gì ? + Nhập vào dãy số nguyên n.

Bài 1 :

a) Hãy tìm hiểu và chạy thử chương trình thực hiện thuật toán sắp xếp dãy số nguyên bằng thuật toán tráo đổi với các giá trị khác nhau của n dưới đây. Qua đó, nhận xét về thời gain chạy chương trình.

(* Ctrình giải bài toán sắp xếp*)

Bài Tập Và Thực Hành 4

Output của bài này là gì ? + Chương trình ở bài 1a chỉ khác với chương trình ở § 11, mục 1b, ví dụ 2 ở chỗ dãy số nguyên không nhập từ bàn phím mà được máy tạo ra ngẫu nhiên một cách nhanh chóng.

+ Có thể yêu cầu HS sửa lại một chỗ để có chương trình sắp xếp các phần tử theo thứ tự không tăng, cho phép HS chạy thử để kiểm tra kết quả. (adsbygoogle = window.adsbygoogle || []).push({});

Đoạn chương trình nào thể hiện một lần tráo đổi giá trị của hai phần tử liền kề của mảng ? + Qua bài thực hành số 3 (bài 1b) em đã biết cách đếm số lượng các số trong mảng thoả mãn 1 điều kiện nào đó, bằng cách tăng biến đếm mỗi lần gặp 1 phần tử như vậy khi duyệt tất cả các phần tử.

Ở đây chúng ta có thể tăng biến Dem để đếm mỗi khi ra lệnh tráo đổi hay không ? để lảm điều đó phải đặt câu lệnh tăng biến Dem ở đâu ?

Khai báo biến Dem như thế nào ? Nếu dãy có N phần tử, tính xem số lần tráo đổi không thể vượt quá số nào ?

Khởi tạo biến Dem như thế nào? Phân tích và cho HS chạy thử chương trình để thấy sự khác nhau giữa việc đặt lệnh khởi tạo (Dem := 0) ở 3 vị trí khác nhau :

+ Dãy số nguyên n đã được sắp xếp.

+ If A[i] > A[ i + 1 ]

Then

Begin (* tráo đổi Ai và Ai + 1*) T := A[ i ] ; A[ i ] := A[ i + 1 ] ; A[ i + 1 ] := T ; End ; + Được + Đặt ở sau lệnh : Begin T := A[ i ] ; A[ i ] := A[ i + 1 ] ; A[ i + 1 ] := T ; Dem := Dem + 1 ; End ;

+Var Dem :Integer + Không thể vượt quá n phần tử.

Program sapxep ;

Uses crt ;

Const Nmax =250 ;

Type ArrInt = Array [1 .. Nmax ] of

integer ; Var n, i, j, y : integer ; A : ArrInt ; Begin Clrscr ; randomize ; Write(‘nhap n ‘) ;

Readln(n) ; { tạo ngẩu nhiên mảng gồm n số nguyên}

For i:= 1 to n do

A[i] := random(300) – random(300) ;

For i := 1 to n do

Write(A[i] :5) ;(* in mảng vừa tạo*) Writeln ;

For j := N Downto 2 do For i := 1 to j - 1 do

If A[i] > A[ i + 1 ] Then

Begin (* tráo đổi Ai và Ai + 1*)

T := A[ i ] ;

A[ i ] := A[ i + 1 ] ; A[ i + 1 ] := T ; End ;

Writeln(‘ Day so da duoc xap xep’) ;

For i := 1 to n do

Write(A[i] :5) Readln ;

End.

b) Khai báo thêm biến Dem và bổ sung vào chương trình những câu lệnh cần thiết để biến Dem tính số lần thực hiện tráo đổi trong thuật toán. Đưa kết quả tìm được ra màn hình. (adsbygoogle = window.adsbygoogle || []).push({});

? ?

? ?

Bài Tập Và Thực Hành 4

- Trước câu lệnh đầu tiên của đoạn lệnh sắp xếp(For j := N

Downto 2 do )

- Ngay trước câu lệnh thể hiện 1 lần duyệt(For i := 1 to j –1 do)

- Ngay trước câu lệnh đầu tiên của đoạn lệnh tráo đổi(A[ i + 1 ] := T )

+ Khuyến khích HS giỏi VCT cài đặt thuật toán sắp xếp khác. + Bài này đưa cho HS 1 bài toán tính tổng i phần tử đầu tiên của 1 mảng tương ứng với mỗi giá trị của i và hai cách giải quyết khác nhau kèm theo sự phân tích so sánh 2 cách đó. GV cần làm cho HS biết với cùng 1 bài toán có thể cài đặt những ctrình khác nhau(những thuật toán khác nhau), người lập trình luôn phải có ý thức chọn cách cài đặt sao cho số phép toán máy tính thực hiện càng ít càng tốt. Trong ctrình thứ 2 việc tính tổng của i phần tử đã tận dụng được kết quả của việc tính tổng i –1 phần tử có sẵn ở bước trước do vậy giảm được số phép tính mà máy tính cần thực hiện so với ctrình thứ nhất. Cụ thể là vòng lặp For – do tính tổng i phần tử đầu tiên đã được thay thế chỉ bởi 1 lệnh gán : B[ i ] := B[ i -1 ] + A[ i ];

Bài 2 : Hãy đọc và tìm hiểu những phân tích để VCT giải bài toán : Cho mảng A gồm n phần tử. Hãy VCT tạo mảng B[1..n ], trong đó B[i] là tổng của i phần tử đầu tiên của A.

Program SubSum ;

Const Nmax =100 ;

Type MyArray = array [1 .. Nmax ]

of integer ;

Var n, i, j : integer ; A,B : MyArray ;

Begin

Randomize ;

Write(‘nhap so luong phan tu cua day so, n ‘) ;

Readln(n) ;

For i:= 1 to n do

A[i] := random(300) – random(300) ; For i := 1 to n do Write(A[i] :5) ; (*bắt đầu tạo B*) For i:= 1 to n do Begin B[ i ] := 0 ; For j:= 1 to i do B[ i ] := B[ i ] + A[ j ] ;

End ; (* kết thúc việc tạo B *)

For i:= 1 to n do Write(B[ i ]:6) Readln ;

Bài Tập Và Thực Hành 4

+ Khi sửa đổi lại chương trình các em cần save lại bằng một tên khác, rồi mới tiến hành sửa đổi chương trình.

Để ý rằng ta có hệ thức sau :

B[ 1 ] = A[ 1 ] ;

B[ i ] := B[ i-1 ] + A[ i ]; 1< i <= n. Do đó, ta thay đoạn chương trình từ chú thích { Bat dau toa B } đến { ket thuc tao B } bởi hai lệnh sau :

B[ 1 ] = A[ 1 ] ;

For i:= 2 to n do

B[ i ] := B[ i-1 ] + A[ i ] ; (adsbygoogle = window.adsbygoogle || []).push({});

Với 2 lệnh này,máy chỉ phải thực hiện n –1 phép cộng, trong khi với đoạn chương trình trên máy phải thực hiện 2 ) 1 (n+ n phép cộng.

Nhờ việc phân tích như trên ta có thể tiết kiệm được một lượng tính toán đáng kể.

Tuy tốc độ tính toán của máy tính nhanh nhưng có giới hạn. Do đó, trong khi viết chương trình, ta nên tìm cách sao cho chương trình thực hiện càng ít phép toán càng tốt.

4. Củng cố :(4’)

- Cần nắm rõ cấu trúc của mảng một chiều, hai chiều và câu lệnh lặp.

- Cần phân biệt các dấu : . , ; : khi tham gia viết chương trình.

- Cách sửa lỗi chương trình cũng như cách thực hiện chương trình.

5. Dặn dò :(1’)

- Các em về nhà viết lại các chương trình đơn giản và thử lại với nhiều bộ dữ liệu khác nhau.Sau đó quan sát kết quả trên màn hình.

- Khi ra khởi phòng phải tắt máy tính, tắt quạt, tắt đèn và đậy tất cả các máy tính lại.

- Về nhà chúng ta xem lại các chương trình đã học và thực hành để chuẩn bị Kiểm Tra 1 Tiết Thực Hành .

Hoà Lợi,ngày……Tháng ……Năm 2008 Duyệt

Bài Tập Và Thực Hành 4

Tuần : 14 Ngày soạn : 04/11/07 Tiết 27

Một phần của tài liệu GIAO AN HK I TIN HOC 11 (Trang 73 - 81)