Giáo án môn tin 11 cả năm chương trình chuẩn 3 cột

Giáo án môn tin 11 cả năm chương trình chuẩn 3 cột

4.1/5

Tác giả: Thầy Tùng

Đăng ngày: 22 Aug 2022

Lưu về Facebook:
Hình minh họa Giáo án môn tin 11 cả năm chương trình chuẩn 3 cột

Công thức toán học không thể tải, để xem trọn bộ tài liệu hoặc in ra làm bài tập, hãy tải file word về máy bạn nhé

Tiết 1_PPCT

Ngày soạn:

Ngày dạy:

CHƯƠNG I: MỘT SỐ KHÁI NIỆM VỀ LẬP TRÌNH VÀ NGÔN NGỮ LẬP TRÌNH

BÀI 1: KHÁI NIỆM LẬP TRÌNH VÀ NGÔN NGỮ LẬP TRÌNH

A. MỤC ĐÍCH VÀ YÊU CẦU

1. Mục đích:

- Ôn lại kiến thức đã học lớp 10 về thuật toán.

- Giới thiệu các khái niệm về chương trình nguồn, chương trình dịch và chương trình đích.

- Giới thiệu một số ngôn ngữ lập trình thông dụng.

2. Yêu cầu:

- Học sinh nắm được các khái niệm cơ bản về chương trình nguồn, chương trình dịch và chương trình đích.

B. PHƯƠNG PHÁP GIẢNG DẠY

- Lấy học sinh làm trung tâm, đặt vấn đề cho các trường hợp sử dụng thực tế từ đó giúp các em nắm bắt được vấn đề tốt hơn.

- Đặt câu hỏi gợi mở giúp học sinh hiểu được vấn đề.

C. KIẾN THỨC TRỌNG TÂM

Trong bài này cần cung cấp cho học sinh các kiến thức sau:

- Các khái niệm về chương trình nguồn, chương trình dịch và chương trình đích.

- Các khái niệm thông dịch và biên dịch.

D. PHƯƠNG TIỆN DẠY HỌC

- Sử dụng máy Projector.

- Bảng đen, phấn trắng.

E. NỘI DUNG GIẢNG DẠY

I. ĐẶT VẤN ĐỀ CHO BÀI GIẢNG ( 5ph )

Thông tin được đưa vào máy tính, máy tính xử lý và cho ta kết quả như mong muốn. Vậy nhờ vào đâu mà máy tính có thể xử lý được các thông tin đó? Để máy tính có thể xử lý thông tin thì nó phải được lập trình. Bài học hôm nay ta sẽ tìm hiểu ngôn ngữ lập trình là gì và nó có mấy loại ?II. NỘI DUNG BÀI HỌC

Thời gian

Nội dung ghi bảng

Hoạt động của GV

Hoạt động của HS

10 ph

10 ph

15 ph

BÀI 1: KHÁI NIỆM LẬP TRÌNH VÀ NGÔN NGỮ LẬP TRÌNH

1. Thuật toán:

Có hai dạng để diễn tả thuật toán:

  • Liệt kê.
  • Dùng sơ đồ khối.

VD: so sánh a và b

Để giải quyết một bài toán ta thực hiện các bước sau:

    1. Xác định bài toán.
    2. Diễn tả thuật toán.
    3. Viết chương trình.
    4. Chạy và kiểm tra chương trình.

Khái niệm lập trình: Lập trình là sử dụng CTDL và các câu lệnh của ngôn ngữ lập trình cụ thể để mô tả dữ liệu và diễn đạt các thao tác thuật toán.

2. Quá trình chuyển đổi chương trình

CT dịch

CT đích

CT nguồn

* CT nguồn:

- Là CT viết trên ngôn ngữ bậc cao.

- Được nhiều người sử dụng làm công cụ lập trình.

- Thực hiện được trên nhiều loại máy tính khác nhau.

* CT dịch:

- Có chức năng chuyển đổi CT viết bằng ngôn ngữ bậc cao thành chương trình ngôn ngữ máy.

Có hai loại

Thông dịch (Interpreter): Là quá trình dịch lặp lại nhiều lần cho đến khi kết thúc chương trình.

Các bước lặp:

  1. Kiểm tra tính đúng đắn của câu lệnh tiếp theo trong chương trình nguồn.
  2. Chuyển đổi câu lệnh đó thành một hay nhiều câu lệnh tương ứng trong ngôn ngữ máy.
  3. Thực hiện các câu lệnh vừa chuyển đổi được.

Biên dịch (compiler): Là quá trình dịch lặp chỉ một lần.

Các bước lặp:

  1. Duyệt, phát hiện lỗi, kiểm tra tính đùng đắn của các câu lệnh trong CT nguồn.
  2. Dịch toàn bộ CT nguồn thành một CT đích và có thể lưu trữ để sử dụng lại khi cần thiết.

Chú ý:

+ Thông dịch không có chương trình đích để lưu trữ.

+ Biên dịch dịch có thể lưu trữ để sử dụng về sau.

* CT đích: là ngôn ngữ máy.

- Ghi bài học lên bảng.

- Trước khi tìm hiểu về ngôn ngữ lập trình, ta ôn lại phần thuật toán.

- Em nào nhắc lại khái niệm về thuật toán ?

- Có mấy dạng để diễn tả thuật toán?

- Em hãy diễn tả thuật toán so sánh 2 số a và b theo hai dạng trên?

- Như vậy muốn máy tính hiểu và xử lý thông tin chính xác mà ta nhập vào thì con người cần phải lập trình.

- Mọi bài toán có thuật toán đều có thể giải được trên máy tính điện tử, nó bao gồm các bước nào mà ta đã học?

- Bước cuối cùng đó là lập trình, lập trình là gì? em nào có thể nêu khái niệm về lập trình?

- Như sơ đồ diễn tả thuật toán trên, CTDL là cách lưu trữ giá trị a và b. Còn câu lệnh để mô tả thuật toán trong Pascal như sau:

If a > b then writeln(‘max=’,a)

Else writeln(‘max =’,b);

- Chương trình viết bằng ngôn ngữ pascal trên là ngôn ngữ bậc cao chính là chương trình nguồn. làm sao để máy tính hiểu và xử lý được thì nó phải thông qua một chương trình dịch để chuyển sang chương trình đích là ngôn ngữ máy. ta có quá trình chuyển đổi như sau:

- Em hãy nêu đặc điểm của CT nguồn?

- Em hãy nêu chức năng của CT dịch?

- Chương trình dịch có hai loại thông dịch và biên dịch. Các em xem VD trong SGK.

- Thông dịch là gì?

- Hiện nay có một số ngôn ngữ lập trình thông dụng như:

- Biên dịch là gì?

- Nêu đặc điểm của thông dịch và của biên dịch.

* Pascal, Turbo C++ là những ngôn ngữ ứng dụng trong nhà trường phục vụ học lập trình cơ sở.

* C#, C++ lập trình ứng dụng.

* ASP, ASP.net, J#, JAVA thiết kế Website...

Học sinh theo dỏi, ghi chép và trả lời.

Học sinh theo dỏi, ghi chép và trả lời.

Học sinh theo dỏi, ghi chép và trả lời.

Học sinh theo dỏi, ghi chép và trả lời.

Học sinh theo dỏi, ghi chép và trả lời.

Học sinh theo dỏi, ghi chép và trả lời.

III. CỦNG CỐ BÀI HỌC VÀ BÀI TẬP VỀ NHÀ (5 ph)

  1. Củng cố: Qua bài học HS nắm vững những kiến thức trọng tâm sau:.
  • Khái niệm lập trình.
  • Khái niệm thông dịch và biên dịch.
  1. Bài tập về nhà:
  2. Khái niệm lập trình. Khái niệm thông dịch và biên dịch.
  3. Những phát biểu nào dưới đây là sai?
    1. Output của mọi chương trình đều là chương trình trên ngôn ngữ máy.
    2. Chương trình viết bằng hợp ngữ không phải là Input hay Output của bất cứ chương trình dịch nào.
    3. Để biên soạn một chương trình trên ngôn ngữ bậc cao có thể sử dụng nhiều hệ soạn thảo văn bản khác nhau.
    4. Chương trình dịch là thành phần chính của một ngôn ngữ lập trình bậc cao.

3. Phát biểu nào dưới đây là đúng:Chương trình là dãy các lệnh được tổ chức theo các quy tắc được xác định bởi một ngôn ngữ lập trình cụ thể.

  1. Trong chế độ thông dịch mỗi câu lệnh của chương trình nguồn được dịch thành một câu lệnh của chương trình đích.
  2. Mọi bài toán đều có chương trình để giải trên máy tính.
  3. Nếu chương trình nguồn có lỗi cú pháp thì chương trình đích cũng có lỗi cú pháp.

Tiết 2_PPCT

Ngày soạn:

Ngày dạy:

BÀI 2: CÁC THÀNH PHẦN CỦA NGÔN NGỮ LẬP TRÌNH

A. MỤC ĐÍCH VÀ YÊU CẦU

1. Mục đích:

- Giúp học sinh hiểu được 3 thành phần cơ bản của ngôn ngữ lập trình: Bảng chữ cái, cú pháp và ngữ nghĩa.

- Giới thiệu các khái niệm về tên, tên chuẩn, tên dành riêng.

2. Yêu cầu:

- Học sinh chú ý học tập, tích cực xây dựng bài học.

- Học sinh phải ghi nhớ các quy tắc đặt tên, hằng và biến trong ngôn ngữ lập trình.

B. PHƯƠNG PHÁP GIẢNG DẠY

- Lấy học sinh làm trung tâm, lấy các VD cụ thể để học sinh nắm vững bài học.

C. KIẾN THỨC TRỌNG TÂM

Trong bài này cần cung cấp cho học sinh các kiến thức sau:

- 3 thành phần cơ bản của ngôn ngữ lập trình: bảng chữ cái, cú pháp và ngữ nghĩa.

- Các quy tắc đặt tên, khái niệm về biến.

D. PHƯƠNG TIỆN DẠY HỌC

- Hình ảnh minh họa.

- Bảng đen, phấn trắng.

E. KIỂM TRA BÀI CŨ ( 5ph ).

  1. Nêu khái niệm về thông dịch và biên dịch, hai thành phần này trong chươg trình dịch khác nhau ở chỗ nào?
  2. Nêu các bước thực hiện của thông dịch và biên dịch.
  3. F. NỘI DUNG GIẢNG DẠY

I. ĐẶT VẤN ĐỀ CHO BÀI GIẢNG (3ph)

Như các em đã biết, con người dùng hai loại ngôn ngữ đó là ngôn ngữ nói và ngôn ngữ viết. Để máy tính có thể làm việc được và giao tiếp được thì nó cũng cần có ngôn ngữ, đó là ngôn ngữ lập trình. Ngôn ngữ lập trình được soạn thảo trên các môi trường lập trình tương ứng như ngô ngữ Pascal được soạn thảo trên môi trường Turbo Pascal,... nhằm giải quyết các bài toán do con người yêu cầu. Vậy ngôn ngữ lập trình có những thành phần nào và nó có quy tắc không. Bài học hôm nay thầy sẽ giới thiệu cho các em hiểu rõ hơn về vấn đề này.

II. NỘI DUNG BÀI HỌC

Thời gian

Nội dung ghi bảng

Hoạt động của GV

Hoạt động của HS

12 ph

20 ph

BÀI 2: CÁC THÀNH PHẦN CỦA NGÔN NGỮ LẬP TRÌNH

1. Các thành phần cơ bản

Có 3 thành phần:

  • Chữ cái.
  • Cú pháp.
  • Ngữ nghĩa.

a) Chữ cái: Là tập các ký tự được dùng để viết chương trình.

- Ký tự là chữ cái: ‘a’...’z’,‘A’...‘Z’

- Số thập phân: 0, 1, ..., 8, 9.

- Các ký tự đặc biệt: #, $, -, +, ...

Chú ý:

- Bảng chữ cái trong các ngôn ngữ khác nhau có thể khác nhau một số ký tự:

VD: Pascal sử dụng dấu ‘’

C++ sử dụng dấu “”, \, và !

b) Cú pháp: Là bộ quy tắc để viết chương trình.

VD: ten a (không hợp lệ vì có khoảng trắng)

Var x integer; (không hợp lệ vì thiếu dấu ‘:’)

c) Ngữ nghĩa: Là xác định ý nghĩa của các tổ hợp ký tự trong chương trình.

VD: A và B nhận giá trị nguyên.

X và Y nhận giá trị thực.

Ta sử dụng phép toán trong ngôn ngữ lập trình như sau:

A+B: là cộng hai số nguyên

X+Y: là cộng hai số thực.

Chú ý: - CT sẽ phát hiện lỗi cú pháp trước, lỗi ngữ nghĩa sau.

- Khi lỗi cú pháp không còn thì chương trình mới thực hiện.

- Khi chương trình được thực hiện trên dữ liệu cụ thể thì lỗi ngữ nghĩa mới được phát hiện.

VD:

2. Một số khái niệm

a) Tên

Khái niệm: Tên là một dãy liên tiếp không quá 127 ký tự bao gồm chữ số, chữ cái hoặc dấu gạch dưới.

Quy tắc đặt tên:

  • Không có khoảng trắng.
  • Không bắt đầu bằng chữ số.
  • Không chứa ký tự đặc biệt.

VD: 43c (tên sai)

A_c (tên đúng)

Ten_f (tên đúng)

Hoa# (tên sai)

Chú ý:

- Tên dùng để quản lý và phân biệt các đối tượng trong chương trình.

- Để gợi nhớ nội dung của đối tượng.

- Tên có 3 loại:

* Tên dành riêng (từ khóa): Dùng với ý nghĩa riêng xác định. Không được sử dụng với các mục đích khác nhau. VD(SGK).

* Tên chuẩn: Dùng với ý nghĩa nhất định nào đó, có thể sử dụng với các mục đích khác nhau. VD(SGK).

* Tên do người lập trình tự đặt: Không được trùng với tên dành riêng.

b) Hằng và biến

* Hằng: Hằng là đại lượng có giá trị không thay đổi trong quá trình thực hiện chương trình.

Có 3 loại hằng:

+ Hằng số học: là các hằng số nguyên hay số thực: 3, -3, ...

+ Hằng logic: True hoặc False

+ Hằng xâu: Là chuỗi ký tự trong bảng mã ASCII, nằm trong cặp dấu nháy đơn ( ‘’ ) của Pascal.

Chú ý:

- Hằng dấu ‘’ trong Pascal là “”.

VD: ‘‘s’’ có hằng xâu là ‘s’

- Hằng số thực E được biểu diễn bởi số mũ của 10

VD: 2.1E-6 = 2 x 10­­-6.

-2.236E01 = -2.236 x 1001 = -22.36

- Có thể sử dụng hằng Hexa, cần thêm $ trước giá trị biểu diễn:

VD: $A116 = 16110

* Biến: Là đại lượng được đặt tên, dùng để lưu trữ giá trị và giá trị có thể được thay đổi trong quá trình thực hiện chương trình.

c) Chú thích

- Trong Pascal sử dụng cặp dấu {và}hoặc (*và*).

- Chú thích không ảnh hưởng đến chương trình nguồn nên chương trình dịch bỏ qua.

- Ghi bài học lên bảng.

- Em nào cho biết ngôn ngữ lập trình có mấy thành phần, những thành phần đó là gì?

- Các ký tự được sử dụng trong ngôn ngữ để viết chương trình.

- Nhìn vào bảng chữ cái các em có thấy khác với chữ cái trong ngôn ngữ tự nhiên không?

- Trong ngôn ngữ tự nhiên khi sử dụng bảng chữ cái cũng phải có cú pháp. VD về các thành phần trong câu có chủ ngữ, vị ngữ ...

- Trong ngôn ngữ lập trình cũng vậy cũng cần phải có cú pháp.

- Em nào cho thầy biết cú pháp trong ngôn ngữ lập trình dùng để làm gì?

- Cú pháp là bộ quy tắc để viết chương trình, dựa vào đó mà người lập trình và chương trình dịch biết được tổ hợp nào của các ký tự trong bảng chữ cái là hợp lệ. Các em xem các VD sau:

  • ten a
  • Var x integer;

- Ngoài cú pháp, trong ngôn ngữ lập trình còn có ngữ nghĩa.

- VD sau cho các em hiểu rõ hơn về ngữ nghĩa.

- Em nào có thể cho biết khi chương trình bắt đầu thực hiện thì chương trình dịch phát hiện lỗi cú pháp dễ dàng hơn hay khó khăn hơn ngữ nghĩa?

- Để có thể viết một chương trình không còn lỗi cú pháp ta cần chú ý một số quy tắc về cách đặt tên.

- Em nào xét xem các VD sau VD nào có cách đặt tên đúng, vì sao?

- Ngoài quy định phải đặt tên cho chương trình thì cần phải khai báo hằng và biến.

- Các em xem các VD trong SGK và giải thích các ký hiệu E trong hằng số học.

- Em nào có thể lấy một VD để làm rõ khái niệm về biến.

VD: A, B,tong là biến nguyên

A:=5; B:=6;

Tong:=A+B;

Tong:=A+B+A;

Giá trị của tổng là thay đổi.

- Đoạn chú thích trong chương trình nhằm giúp người lập trình nêu các câu dẫn mà không cần phải tuân thủ quy tắc trong ngôn ngữ lập trình.

Học sinh theo dỏi, ghi chép và trả lời.

Học sinh theo dỏi, ghi chép và trả lời.

Học sinh theo dỏi, ghi chép và trả lời.

Học sinh theo dỏi, ghi chép và trả lời.

Học sinh theo dỏi, ghi chép và trả lời.

Học sinh theo dỏi, ghi chép và trả lời.

III. CỦNG CỐ BÀI HỌC VÀ BÀI TẬP VỀ NHÀ (5 ph)

  1. Củng cố: Qua bài học HS nắm vững những kiến thức trọng tâm sau:.
  • 3 thành phần cơ bản trong ngôn ngữ lập trình.
  • Khái niệm và quy tắc đặt tên. Khái niệm và ý nghĩa sử dụng biến.

2. Bài tập về nhà: Các bài tập trong SGK.

Tiết 3_PPCT

Ngày soạn:

Ngày dạy:

CÂU HỎI VÀ BÀI TẬP

A. MỤC ĐÍCH VÀ YÊU CẦU

1. Mục đích:

- Giúp học sinh ôn lại những kiến thức đã học.

2. Yêu cầu:

- Học sinh chú ý học tập, tích cực xây dựng bài học.

- Học sinh phải chuẩn bị kiến thức ôn tại nhà.

B. PHƯƠNG PHÁP GIẢNG DẠY

- Nêu các bài tập, đặt câu hỏi gợi ý để HS nắm vững bài học.

C. NỘI DUNG GIẢNG DẠY

Câu 1: Trong chế độ biên dịch, một chương trình đã được dịch thông suốt, hệ thống không báo lỗi. Có thể khẳng định rằng ta đã có một chương trình đúng hay chưa? Tại sao?

(Chưa đúng, vì sai ngữ nghĩa).

Câu 2: Trong chế độ thông dịch, giả sử 2/3 số câu lệnh trong chương trình đã được thực hiện. Có thể khẳng định rằng như vậy chương trình không còn chứa lỗi cú pháp nữa hay không? Tại sao? (Không thể khẳng định được, vì các câu lệnh khác chưa được kiểm tra).

Câu 3: Sau khi chương trình đã được dịch thông suốt, không còn lỗi cú pháp, có cần tiếp tục hiệu chỉnh, tức là tìm và sửa lỗi trong chương trình nguồn nữa hay không? (Có: Vì cần KT ngữ nghĩa).

Câu 4: Trong một chương trình còn có lỗi cú pháp, thông thường trình biên dịch hay chương trình thông dịch phát hiện ra lỗi nhanh hơn? Vì sao?

(Trình biên dịch phát hiện lỗi nhanh hơn vì nó có nhiệm vụ phát hiện lỗi cú pháp đầu tiên).

Câu 5: Hãy chọn những biểu diễn hằng trong các biểu diễn dưới đây:

A) end B) ‘a078’ C) 78

D) *63 E) 5.63 F) -96

Câu 6: Hãy chọn những biểu diễn tên trong các biểu diễn dưới đây:

A) 75 B) abcd C) 78ab

D) ab68 E) ‘abc’ F) (xyz)

Câu 7: Hãy chọn những đáp án là từ khóa (tên dành riêng) trong Pascal:

A) begin B) ‘begin’ C) integer

D) var E) real F) end

Câu 8: Hãy chọn những đáp án là tên chuẩn trong Pascal:

A) real B) uses C) const

D) integer E) byte F) sqr

Câu 9: Trong dòng thông tin chú thích có thể chứa ký tự ngoài bảng chữ cái của ngôn ngữ hay không và tại sao? (Có thể, vì chương trình biên dịch không kiểm tra lỗi trong chú thích)

Câu 10: Hãy nêu 6 VD (6 tên) mà người dùng đặt sai trong ngôn ngữ lập trình Pascal và chỉ ra lỗi, cách sửa các tên đó sao cho đúng.

Câu 11: Bổ sung các bài tập 4, 5, 6 trong SGK Tin học 11 (trang 13).

Tiết 4_PPCT

Ngày soạn:

Ngày dạy:

CHƯƠNG II: CHƯƠNG TRÌNH ĐƠN GIẢN

BÀI 3: CẤU TRÚC CHƯƠNG TRÌNH

A. MỤC ĐÍCH VÀ YÊU CẦU

1. Mục đích:

- Giúp học sinh nắm được cấu trúc chung của một chương trình đơn giản.

- Nhận biết được các phần của một chương trình đơn giản.

2. Yêu cầu:

- Học sinh chú ý học tập, tích cực xây dựng bài học.

- Học sinh nắm được cấu trúc của một chương trình đơn giản.

- Biết cách đặt tên, khai báo biến trong chương trình.

B. PHƯƠNG PHÁP GIẢNG DẠY

- Lấy học sinh làm trung tâm, lấy các VD cụ thể để học sinh nắm vững bài học.

C. KIẾN THỨC TRỌNG TÂM

Trong bài này cần cung cấp cho học sinh các kiến thức sau:

- Cấu trúc chương trình.

- Khai báo tên, thư viện, hằng và biến trong chương trình.

D. PHƯƠNG TIỆN DẠY HỌC

- Bảng đen, phấn trắng.

E. NỘI DUNG GIẢNG DẠY

I. ĐẶT VẤN ĐỀ CHO BÀI GIẢNG

Các em đã tìm hiểu về ngôn ngữ lập trình và mỗi ngôn ngữ lập trình đều có cấu trúc để cho người lập trình viết chương trình sao cho đúng quy tắc. Trong ngôn ngữ lập trình Pascal hay C++ đều đưa ra cấu trúc riêng của nó. Ta sẽ tìm hiểu cấu trúc của nó là gì?

II. NỘI DUNG BÀI HỌC

Thời gian

Nội dung ghi bảng

Hoạt động của GV

Hoạt động của HS

15 ph

20 ph

BÀI 3: CẤU TRÚC CHƯƠNG TRÌNH

1. Cấu trúc chung

*Ngôn ngữ lập trình có 2 phần:

- Phần khai báo.

- Phần thân.

2. Các thành phần của chương trình.

a) Phần khai báo

* Khai báo tên chương trình:

Cú pháp:

Program <tên chương trình>;

Chú ý: Tên chương trình do người lập trình tự đặt theo cú pháp quy tắc của Pascal.

VD: program dtHCN;

* Khai báo thư viện

Cú pháp:

Uses <tên các thư viện>;

VD:

Uses crt;

Chú ý: Trong Pascal khi khai báo thư viện crt ta dùng lệnh clrscr trong phần thân chương trình để xóa kết quả trước của chương trình trên màn hình.

* Khai báo hằng

Cú pháp:

Const <tên hằng> = <giá trị của hằng>;

VD: Const n = 100;

Xau = ‘hang xau’;

Lg = true;

* Khai báo biến (BÀI HỌC SAU)

b) Phần thân chương trình

Cú pháp:

Begin

<dãy các câu lệnh>;

End.

VD1: đoạn thân chương trình tính tổng hai số a và b

Begin

Writeln(‘nhap a va b’); readln(a,b);

Tong:=a+b;

Writeln(‘tong cua a va b la:’,tong);

End.

3. Ví dụ chương trình đơn giản (SGK)

- Ghi bài học lên bảng.

- Trên bảng là một cấu trúc của một chương trình được viết trên ngôn ngữ lập trình Pascal. Em nào cho thấy biết phần nào là phần khai báo, phần nào là phần thân chương trình?

- Trên bảng cấu trúc chung của một chương trình đơn giản bao gồm 2 phần, đó là phần khai báo và phần thân chương trình.

- Em nào đã biết cú pháp của từng phần trong phần khai báo này không?

- Chúng ta sẽ tìm hiểu rõ về các phần này trong mục tiếp theo.

- Đối với phần khai báo em nào cho thầy ví dụ về khai báo tên chương trình tính diện tích hình chữ nhật?

- Trong phần khai báo tên có bắt buộc không?

- Mỗi ngôn ngữ lập trình đều có sẵn thư viện cung cấp một số chương trình đã được lập sẵn. Để sử dụng các chương trình đó ta khai báo thư viện chứa nó.

- Em nào lấy VD về khai báo thư viện.

- Em nào có thể nhắc lại khái niệm về hằng? Có mấy loại hằng.

- Em hãy lấy 3 VD khai báo cho 3 loại hằng khác nhau.

- Các em chú ý trong khai báo hằng thường được sử dụng cho những giá trị xuất hiện nhiều lần trong chương trình.

- Phần khai báo tiếp theo là khai báo biến. Em nào nhắc lại khái niệm biến là gì? Nó dùng để làm gì?

- Cách khai báo biến bài học sau ta sẽ nghiên cứu kỹ hơn.

- Phần thân chương trình được bắt đầu bằng từ khóa begin và kết thúc bằng từ khóa end

- Các em cho biết dấu (;) dùng để làm gì?

- Các em xem VD sau trong SGK tại sao lại không có phần khai báo biến.

- GV nhắc lại ý nghĩa của biến bằng cách nêu thêm VD bài trước đã học viết trong thân chương trình:

VD: A, B,tong là biến nguyên

A:=5; B:=6;

Tong:=A+B;

Tong:=A+B+A;

Giá trị của tổng là thay đổi.

Học sinh theo dỏi, ghi chép và trả lời.

Học sinh theo dỏi, ghi chép và trả lời.

Học sinh theo dỏi, ghi chép và trả lời.

Học sinh theo dỏi, ghi chép và trả lời.

Học sinh theo dỏi, ghi chép và trả lời.

Học sinh theo dỏi, ghi chép và trả lời.

III. CỦNG CỐ BÀI HỌC VÀ BÀI TẬP VỀ NHÀ (5 ph)

1. Củng cố: Qua bài học HS nắm vững những kiến thức trọng tâm sau:.

  • Cấu trúc chương trình.
  • Các khai báo tên chương trình, hằng, biến...

2. Bài tập về nhà:

    1. Nêu cấu trúc chung của một chương trình Pascal?
    2. Khi nào thì một chương trình không có phần khai báo? Nêu một ví dụ minh họa.
    3. Nếu khai báo thừa biến hoặc hằng; tức là khai báo các biến, hằng không dùng đến trong phần thân chương trình, chương trình dịch có báo sai không, vì sao? (Không, nhưng có lời cảnh báo không nên sử dụng thừa biến)

Tiết 5_PPCT

Ngày soạn:

Ngày dạy:

BÀI 4-5: MỘT SỐ KIỂU DỮ LIỆU CHUẨN VÀ KHAI BÁO BIẾN

A. MỤC ĐÍCH VÀ YÊU CẦU

1. Mục đích:

- Giúp học sinh nắm được một số kiểu dữ liệu chuẩn: kiểu nguyên, kiểu thực, kí tự và logic.

- Xác định được kiểu cần khai báo của dữ liệu đơn giản.

2. Yêu cầu:

- Học sinh chú ý học tập, tích cực xây dựng bài học.

- Học sinh phải ghi nhớ và hiểu các kiểu dữ liệu và biết cách khai báo biến.

B. PHƯƠNG PHÁP GIẢNG DẠY

- Lấy học sinh làm trung tâm, lấy các VD cụ thể để học sinh nắm vững bài học.

- Phát huy tính tích cực chủ động sáng tạo của học sinh.

C. KIẾN THỨC TRỌNG TÂM

Trong bài này cần cung cấp cho học sinh các kiến thức sau:

- Các kiểu dữ liệu chuẩn: kiểu nguyên, kiểu thực, kí tự và logic

- Khai báo biến.

D. PHƯƠNG TIỆN DẠY HỌC

- Bảng đen, phấn trắng.

E. KIỂM TRA BÀI CŨ ( 5ph ).

1. Nêu cấu trúc chung của chương trình Pascal.

2. Khi nào thì một chương trình không có phần khai báo? Nêu một ví dụ minh họa.

F. NỘI DUNG GIẢNG DẠY

I. ĐẶT VẤN ĐỀ CHO BÀI GIẢNG

Em nào cho biết khái niệm về dữ liệu. Như vậy dữ liệu là thông tin đã được mã hóa trong máy tính. Dữ liệu trong mỗi ngôn ngữ lập trình chỉ có một số kiểu chuẩn nhất định mặc dù thông tin rất đa dạng. Mỗi kiểu được đặc trưng bởi tên kiểu (VD biến kiểu nguyên mang giá trị là số nguyên...), miền giá trị, bộ nhớ lưu trữ, các phép toán, các hàm và thủ tục sử dụng chúng. Vậy tên của từng kiểu dữ liệu đó là gì ta sang bài học mới.

II. NỘI DUNG BÀI HỌC

Thời gian

Nội dung ghi bảng

Hoạt động của GV

Hoạt động của HS

5 ph

5 ph

5 ph

5 ph

BÀI 4-5: MỘT SỐ KIỂU DỮ LIỆU CHUẨN VÀ KHAI BÁO BIẾN (tiết 5)

1. Kiểu nguyên

Chú ý: Kiểu Byte và Word chỉ biểu diễn cho số nguyên dương.

2. Kiểu thực

3. Kiểu kí tự

Chú ý:

-Việc so sánh các kí tự được thực hiện bằng cách so sánh các mã ASCII tương ứng.

VD:

- A có mã ASCII là 65, a = 97

- B có mã ASCII là 66, b = 98

=> A < B, a < b.

4. Kiểu logic

Chú ý:

- Kiểu Logic là kiểu có thứ tự đếm được.

- Trong quá trình lập trình, người lập trình cần tìm hiểu đặc trưng của các kiểu dữ liệu chuẩn được xác định bởi bộ dịch và sử dụng để khai báo biến.

5. Khai báo biến

Cú pháp:

Var <DS biến>:<Kiểu DL>;

* Trong đó:

- DS biến: là một hoặc nhiều tên biến, mỗi biến cách nhau bởi dấu phẩy (,).

- Kiểu dữ liệu là 1 trong các kiểu chuẩn (real, integer,...) hoặc kiểu do người dùng tự định nghĩa (chương IV).

- Sau từ khóa var có thể khai báo nhiều danh sách biến khác nhau.

VD1: - Khai báo biến bài toán tính diện tích hình chữ nhật lấy giá trị vào ra giá trị nguyên:

Var a,b: integer;

dt: integer;

VD2: - Khai báo biến cho bài toán nhập 1 kí tự từ bàn phím:

Var Kitu: char;

Chú ý:

- Tên biến phải gợi nhớ.

- Tên biến không quá dài, quá ngắn.

- Khi khai báo biến phải chú ý đến phạm vi giá trị.

VD2: Trong VD1 nếu khai báo:

Var a,b: real;

dt: integer; => Là sai

- Các biến đơn chỉ chứa một giá trị tại một thời điểm.

- Các biến của kiểu dữ liệu có cấu trúc có thể chứa hơn một giá trị tại một thời điểm như biến mảng.

- Ghi bài học lên bảng.

- Trong toán học ta có các tập số gì?

- Kiểu nguyên tương ứng với tập số nào?

- Các kiểu nguyên được lưu trữ và kết quả tính toán là số đúng. Giá trị của nó là phần nguyên không có số dư hoặc số thập phân.

- Tuy nhiên tập số nguyên là vô hạn và có thứ tự, đếm được nhưng trong máy tính kiểu nguyên là hữu hạn, có thứ tự. Bảng trên là bảng kiểu nguyên.

- Kiểu số thực được lưu trữ và kết quả tính toán chỉ gần đúng với sai số không đáng kể. Miền giá trị được mở rông hơn so với kiểu số nguyên, số thực trong máy tính cũng là rời rạc và hữu hạn.

- Em nào cho thầy biết nếu phép toán sử dụng kiểu số nguyên và kiểu số thực thì kết quả cho ra kiểu gì? (Kiểu số thực).

- Kiểu kí tự có tập giá trị là các kí tự trong bảng mã ASCII, được dùng khi thông tin là các kí tự, xâu (string). Vì vậy hầu hết các ngôn ngữ lập trình đều có kiểu kí tự để làm việc với văn bản.

- Kiểu kí tự có phải là kiểu có thứ tự, đếm được không ? Dựa vào đâu để thực hiện việc so sánh các kí tự?

- Việc so sánh các kí tự được thực hiện bằng cách so sánh các mã ASCII của chúng.

- Kiểu logic trong Pascal chỉ có 2 giá trị là True (đúng) và False (sai), được dùng khi kiểm tra một điều kiện hoặc tìm giá trị của một biểu thức logic.

- Theo em kiểu logic có phải là kiểu có thứ tự đếm được không? (Là kiểu có thứ tự đếm được).

- Một số ngôn ngữ lập trình không dùng kiểu logic như C++, thay vào đó là các giá trị 0 (false), khác 0 (true).

- Em nào nhắc lại khái niệm về biến.

- Ý nghĩa sử dụng biến để làm gì?

- Trong khi khai báo biến, lưu ý về những biến là hằng số, ta nên khai báo biến hằng số bằng hàm const .

VD: Khai báo biến cho bài toán tính diện tích hình thang có chiều cao bằng 5dv:

Const cao = 5;

Var daynho,daylon: real;

- Tên biến phải gợi nhớ để người lập trình và người xem chương trình biết ý nghĩa sử dụng của biến đó.

- Khi khai báo biến phải chú ý đến phạm vị giá trị, VD biến khai báo để lưu trữ số học sinh trong lớp là kiểu byte, nhưng biến khai báo để lưu trữ học sinh trong trường là kiểu word.

VD: khai báo biến mảng

Var mang:array[1..10] of integer;

Biến mang chứa 10 giá trị tại một thời điểm.

Học sinh theo dỏi, ghi chép và trả lời.

Học sinh theo dỏi, ghi chép và trả lời.

Học sinh theo dỏi, ghi chép và trả lời.

Học sinh theo dỏi, ghi chép và trả lời.

Học sinh theo dỏi, ghi chép và trả lời.

Học sinh theo dỏi, ghi chép và trả lời.

III. CỦNG CỐ BÀI HỌC VÀ BÀI TẬP VỀ NHÀ (5 ph)

  1. Củng cố: Qua bài học HS nắm vững những kiến thức trọng tâm sau:.
  • Kiểu số nguyên, số thực, kí tự, logic.
  • Cách khai báo biến:

Var <danh sách biến>:<kiểu dữ liệu>;

2. Kiểm tra 15ph:(15 ph)

Câu 1: Hãy chọn những biểu diễn hằng trong các biểu diễn dưới đây:

A) begin B) ‘12ab’ C) -102

D) 15- E) A92 F) ‘var’

Câu 2: Hãy chọn những biểu diễn tên trong các biểu diễn dưới đây:

A) bien B) 92A C) pi

D) A92 E) ‘abc’ F) (xyz)

Câu 3: Nêu các cách khai báo biến cho bài toán tính giá trị biểu thức sau:

a) b) (trong đó hàm sin() là một biểu thức nên không khai báo).

Tiết 6_PPCT

Ngày soạn:

Ngày dạy:

BÀI 6: PHÉP TOÁN, BIỂU THỨC, CÂU LỆNH GÁN

A. MỤC ĐÍCH VÀ YÊU CẦU

1. Mục đích:

- Học sinh biết các khái niệm: Phép toán, biểu thức số học, hàm số học chuẩn, biểu thức quan hệ.

2. Yêu cầu:

- Học sinh hiểu lệnh gán.

- Viết được lệnh gán.

- Viết được các biểu thức số học và logic với các phép toán thông dụng.

B. PHƯƠNG PHÁP GIẢNG DẠY

- Lấy học sinh làm trung tâm, lấy các VD cụ thể để học sinh nắm vững bài học.

- Phát huy tính tích cực chủ động sáng tạo của học sinh.

C. KIẾN THỨC TRỌNG TÂM

Trong bài này cần cung cấp cho học sinh các kiến thức sau:

- Các phép toán.

- Các hàm số học chuẩn.

- Biểu thức quan hệ.

- Biểu thức logic.

- Câu lệnh gán.

D. PHƯƠNG TIỆN DẠY HỌC

- Bảng đen, phấn trắng.

E. KIỂM TRA BÀI CŨ ( 5ph ).

1. Nêu các kiểu dữ liệu đã học và ý nghĩa sử dụng của mỗi kiểu dữ liệu đó.

2. Khai báo biến cho bài toán tính diện tích hình tròn.

3. Sửa lỗi cho khai báo trong một bài toán sau:

Var x_y:real

3x: real;

E = 2.34;

Đáp án:

2. const pi=3.14;

var r, dt:real;

3.

Const e = 2.34; (nên khai báo hằng số)

Var x_y:real; (thiếu dấu ;)

x: real; (tên đặt sai quy tắc)

F. NỘI DUNG GIẢNG DẠY

I. ĐẶT VẤN ĐỀ CHO BÀI GIẢNG ( 5ph )

Các em đã biết các kiểu dữ liệu, cách khai báo biến. Tuy nhiên đối với dữ liệu số học thì trong Pascal có xử lý giống như các phép toán thông thường không? Như cộng, trừ nhân chia. Đặc biệt là phép chia, thì cách thực hiện các phép chia trên mỗi kiểu dữ liệu có giống nhau không? VD như phép chia số nguyên, phép chia số thực,... Bài học hôm nay ta sẽ tìm hiểu kỹ về những vấn đề trên.

II. NỘI DUNG BÀI HỌC

Thời gian

Nội dung ghi bảng

Hoạt động của GV

Hoạt động của HS

5 ph

5 ph

5 ph

5 ph

15 ph

BÀI 6: PHÉP TOÁN, BIỂU THỨC, CÂU LỆNH GÁN (tiết 6)

1. Phép toán

Chú ý:

- Kết quả của phép toán quan hệ cho giá trị logic.

- Một trong những ứng dụng của phép toán logic là để tạo ra các biểu thức phức tạp từ các quan hệ đơn giản.

VD:

  1. 7 div 4 = 1;
  2. 7 mod 4 = 3;
  3. Not(true) = false;
  4. True and False = False;
  5. True or False = True

2. Biểu thức số học

* VD về biểu thức số học:

* Mức ưu tiên các phép toán:

Chú ý:

- Các phép toán trên được thực hiện trong dấu ngoặc tròn ( ) đầu tiên.

- Phép toán IN để xác định biểu thức có trong một tập hợp không.

VD:

4 IN [1..14] => kq là True

3. Hàm số học chuẩn

*Để lập trình được thuận tiện, các ngôn ngữ lập trình đều có thư viện chứa một số chương trình tính giá trị những hàm toán học thường dung. Các chương trình như vậy gọi là các hàm chuẩn.

* Một số hàm chuẩn thường dung:

+ Các hàm kiểu thực hoặc nguyên:

- Round(x) 🡪 Cho giá trị là số nguyên gần x nhất.

- Trunc(x) 🡪 Cho giá trị là phần nguyên của x.

+ Các hàm kiểu thực:

- SQR(x) 🡪 Cho giá trị là x2.

- SQRT(x) 🡪Cho giá trị là (x>=0).

- ABS(x) 🡪Cho giá trị là

- LN(x) 🡪Cho giá trị là lnx (x>0).

- EXP(x)🡪Cho giá trị là ex.

- SIN(x) 🡪Cho giá trị là sinx.

- COS(x)🡪Cho giá trị là cosx.

VD: Biểu diễn biểu thức toán học bằng TP sau:

  1. x2 + => sqr(x) + sqrt(x).
  2. sin(3x3) + cosx =>sin(3*x*sqr(x))+cos(x).

+ Các hàm khác:

- INC(k,i): Tăng giá trị k lên i lần.

- DEC(k,i): Giảm giá trị k lên i lần.

4. Biểu thức quan hệ

Cú pháp:

* Trong đó: Biểu thức 1 Biểu thức 2 có cùng kiểu dữ liệu xâu hoặc cùng kiểu số học.

VD:

i+3 > j+1;

x >= x+1;

5. Biểu thức logic

* Biểu thức logic đơn giản là biến logic hoặc hằng logic.

* Giá trị của biểu thức logic là true hoặc false

VD:

Tập giá trị của x:

1 ≤ x ≤ 6 → (1<= x) and (x <= 6)

Điều kiện x là số chẵn không chia hết cho 4:

(x mod 2 = 0) and (x mod 4 <>0)

6. Câu lệnh gán

Cú pháp:

<tên biến> := <biểu thức>;

VD:

x := 5; (x=5)

y := 4; (y=4)

x := x+y; (x=9)

- Một số phương pháp biểu diễn thông thường:

Ý nghĩa

Biểu diễn trong TP

Cộng thêm

S := S + i

Trừ đi

S := S - i

Nhân thêm

S := S * i

Chia ho

S := S / i

Chú ý:

- Biểu thức bên phải cần được xác định giá trị trước khi gán.

- Kiểu của biểu thức bên phải dấu gán phải phù hợp với kiểu của biến gán.

- Ghi bài học lên bảng.

- Để mô tả thuật toán, mỗi ngôn ngữ lập trình đều xác định và sử dụng một số khái niệm cơ bản: Phép toán, biểu thức, gán giá trị...

- Đối với phép toán toán học và phép toán trong Pascal, các em xem trên bảng sẽ thấy có nhiều kí hiệu tương ứng là khác nhau. VD phép chia là dấu (/).

- Với ý nghĩa sử dụng các phép toán em nào có thể đưa ra đáp án cho các phép toán sau:

  1. 7 div 4 = ?;
  2. 7 mod 4 = ?;
  3. Not(true) = ?;
  4. True and False = ?;
  5. True or False = ?;

- Trong lập trình biểu thức số học là một biến kiểu số, hoặc một hằng số, hoặc các biến kiểu số và các hằng số liên kết với nhau bởi một số hữu hạn phép toán số học.

- Em nào có thể điền kết quả biểu thức TP trong các biểu thức toán học tương ứng?

- Các em chú ý về mức ưu tiên của các phép toán như sau: (bảng hình bên)

- Đối với các phép toán sẽ là không đủ quy tắc để biểu diễn các phép toán học. Do đó trong TP đưa ra các hàm số học chuẩn để thực hiện các phép toán đó.

- Ta có bảng các hàm chuẩn sau:

+ Các hàm kiểu thực hoặc nguyên:

- SQR(x) 🡪 Cho giá trị là x2.

- SQRT(x) 🡪Cho giá trị là (x>=0).

- ABS(x) 🡪Cho giá trị là

Đối với các biểu thức kết quả có thể là kiểu thực

+ Các hàm kiểu thực:

- LN(x) 🡪Cho giá trị là lnx (x>0).

- EXP(x)🡪Cho giá trị là ex.

- SIN(x) 🡪Cho giá trị là sinx.

- COS(x)🡪Cho giá trị là cosx.

- Dựa vào các hàm đã cho, em hãy biểu diễn các biểu thức sau sang dạng của TP:

  1. x2 + => ?
  2. sin(3x3) + cosx =>?

- Ngoài các hàm số học chuẩn, để sử dụng các phép toán quan hệ TP cung cấp biểu thức quan hệ theo cú pháp sau:

- Biểu thức quan hệ được thực hiện theo trình tự: Tính giá trị biểu thức trước khi thực hiện phép toán quan hệ theo mức ưu tiên của phép toán.

- Kết quả của biểu thức quan hệ là giá trị logic true hoặc false.

VD: điều kiện để điểm M(x,y) thuộc hình tròn tâm I(a,b), bán kính R là:

- Cuối cùng là câu lệnh gán, đây là một trong những lệnh cơ bản nhất của ngôn ngữ lập trình.

- Em thử nhận xét xem cách gán giá trị cho biến sau đã hợp lệ chưa?

* Khai báo:

Var a: char;

x,y : real;

* Gán:

a := x+y;

Học sinh theo dỏi, ghi chép bài học.

Học sinh theo dỏi, ghi chép và trả lời.

Học sinh theo dỏi, ghi chép và trả lời.

Học sinh theo dỏi, ghi chép và trả lời.

Học sinh theo dỏi, ghi chép và trả lời.

Học sinh theo dỏi, ghi chép và trả lời.

Học sinh theo dỏi, ghi chép và trả lời.

Học sinh theo dỏi, ghi chép và trả lời.

III. CỦNG CỐ BÀI HỌC VÀ BÀI TẬP VỀ NHÀ (5 ph)

1. Củng cố: Qua bài học HS nắm vững những kiến thức trọng tâm sau:.

- Các phép toán.

- Các hàm số học chuẩn.

- Biểu thức quan hệ.

- Biểu thức logic.

- Câu lệnh gán.

2. Bài tập về nhà:

1. Viết các biểu thức sau trong TP

a) S = (x3+ sin(x2y))2 b) c) d) e) f)

2. Viết biểu thức logic cho bài toán: điều kiện để x là số không âm và là số lẻ?

Gợi ý: (x >0) and (3 mod 2 <> 0).

3. Viết biểu thức logic cho bài toán: In ra số lượng (lấy tên biến là SL) học sinh đạt loại khá với điều kiện hoặc DT > 6.5 hoặc DV > 6.5 và DTB > 6.5.

Gợi ý: ((DT > 6.5 ) or (DV > 6.5 )) and (DTB > 6.5)

Tiết 7_PPCT

Ngày soạn:

Ngày dạy:

BÀI 7-8: CÁC THỦ TỤC VÀO/RA ĐƠN GIẢN

SOẠN THẢO, DỊCH, THỰC HIỆN VÀ HIỆU CHỈNH CHƯƠNG TRÌNH

A. MỤC ĐÍCH VÀ YÊU CẦU

1. Mục đích:

- Học sinh biết các lệnh vào/ra đơn giản để nhập dữ liệu từ bàn phím hoặc đưa dữ liệu ra màn hình.

- Viết được một số lệnh vào/ra đơn giản.

- Biết cách soạn thảo, dịch, thực hiện và hiệu chỉnh chương trình.

2. Yêu cầu:

- Học sinh hiểu các thủ tục vào/ra.

- Biết các thao tác trực tiếp trên công cụ lập trình Pascal.

- Biết xử lý các lỗi khi lập trình.

B. PHƯƠNG PHÁP GIẢNG DẠY

- Lấy học sinh làm trung tâm, lấy các VD cụ thể để học sinh nắm vững bài học.

- Phát huy tính tích cực chủ động sáng tạo của học sinh.

C. KIẾN THỨC TRỌNG TÂM

Trong bài này cần cung cấp cho học sinh các kiến thức sau:

- Các thủ tục vào/ra (Read/Readln và Write/Writeln).

- Các thao tác xử lý lỗi chương trình.

D. PHƯƠNG TIỆN DẠY HỌC

- Bảng đen, phấn trắng.

- Máy chiếu đa năng.

E. KIỂM TRA BÀI CŨ ( 5ph ).

Các bài tập đã giao về nhà.

E. NỘI DUNG GIẢNG DẠY

I. ĐẶT VẤN ĐỀ CHO BÀI GIẢNG ( 2ph )

Các em đã được tìm hiểu về các kiểu của biến, cách khai báo biến, các phương pháp biến đổi từ công thức toán học sang Pascal. Em nào có thể cho thầy biết làm thế nào để có thể xử lý các thông tin đó trên máy tính? (Thông qua ngôn ngữ lập trình Pascal để sử dụng các thủ tục và các hàm nhằm thực hiện xử lý các thông tin đó). Bài học hôm nay ta sẽ tìm hiểu về môi trường lập trình Pascal cũng như các thủ tục hay hàm đơn giản.

II. NỘI DUNG BÀI HỌC

Thời gian

Nội dung ghi bảng

Hoạt động của thầy

Hoạt động của trò

15 ph

20 ph

5 ph

BÀI 7-8: CÁC THỦ TỤC VÀO/RA, SOẠN THẢO CHƯƠNG TRÌNH... (tiết 8)

1. Nhập dữ liệu từ bàn phím

* Thủ tục nhập:

Cú pháp:

Read(<danh sách biến vào>);

hoặc

Readln(<danh sách biến vào>);

* Trong đó:

- Danh sách biến vào có thể có 1 hoặc nhiều biến, nếu nhiều biến thì mỗi biến cách nhau bởi dấu phẩy (,).

VD:

- Read(r) hoặc Readln(r); Nhập 1 giá trị cho bán kính r.

- Read(r1, r2,...) hoặc Readln(r1, r2,...); Nhập nhiều giá trị cho bán kính r.

2. Đưa dữ liệu ra màn hình

* Thủ tục xuất:

Cú pháp:

Write(<danh sách kết quả ra>);

hoặc

Writeln(<danh sách kết quả ra>);

* Trong đó:

- Write: Khi thực hiện chương trình con trỏ nằm trên dòng hiện tại.

- Writeln: Con trỏ tự động xuống dòng tiếp theo.

- Danh sách kết quả ra: Có thể là tên biến đơn, biểu thức, xâu ký tự hoặc hằng số.

- Đối với biến đơn, biểu thức, hằng số thì không có dấu nháy đơn (‘’).

VD:

- write('nhap ban kinh '); in ra : nhap ban kinh

- writeln('dien tich hinh tron co ban kinh ',r:5:2,' la',s:6:2); In ra: dien tich hinh tron co ban kinh 2.00 la 12.56.

Chú ý:

- Các thủ tục Readln hoặc Writeln có thể không có tham số.

VD: Readln; (Tạm dừng xem kq chương trình). Writeln; (Tự động đưa con trỏ xuống dòng).

- Quy cách ra:

:<độ rộng>:<số chữ số thập phân>

hoặc

:<độ rộng>

3. Soạn thảo, dịch, thực hiện và hiệu chỉnh chương trình

Thanh bảng chọn

Tên tệp CT

Dòng

Cột

*Thao tác thực hiện:

- Soạn thảo: Gõ nội dung chương trình.

- Lưu chương trình: Nhấp phím F2.

- Mở CT có sẵn trong TP: Nhấn F3

- Kiểm tra chương trình: F9.

- Biên dịch chương trình: Alt+F9.

- Chạy chương trình: Ctrl+F9.

- Đóng cửa sổ chương trình: Alt+F3.

- Thoát khỏi Pascal: Alt+X.

- Ghi bài học lên bảng.

- VD: Bài toán tính diện tích hình tròn:

program dt_hinhtron;

uses crt;

const pi=3.14;

var r,s:real;

begin

clrscr;

write('nhap ban kinh ');readln(r);

s:=pi*sqr(r);

writeln('dien tich hinh tron co ban kinh ',r:5:2,' la',s:6:2);

readln

end.

-VD trên là một chương trình đơn giản. Input của chương trình trên là gì? Để đưa thông tin vào thì thông qua câu lệnh nào? (Khi thực hiện chương trình người ta nhập giá trị bán kính thông qua câu lệnh nhập Read/Readln)

- Mỗi lần nhập giá trị cho bán kính thì giá trị đó được gán cho biến r.

- Khi nhập nhiều giá trị cho biến thì xong mỗi thao tác nhập sử dụng phím Enter để nhập giá trị tiếp theo.

- Chú ý khi nhập giá trị của biến thì phải tương ứng với kiểu của biến.

- Em nào có thể sử dụng máy tính đã có sẵn chương trình nhập giá trị cho biến r ?

- Để đưa câu dẫn 'nhap ban kinh ' và kết quả tính diện tích ra màn hình thì người ta sử dụng câu lệnh nào ? (câu lệnh xuất Write/ Writeln).

- Em nào cho thầy biết khi thực hiện chương trình thì thủ tục Write và Writeln khác nhau điểm nào?

- Em nào cho thầy biết khi thực hiện chương trình ở VD trên, thủ tục write('nhap ban kinh '); sẽ in ra như thế nào?

- Còn đối với câu lệnh writeln('dien tich hinh tron co ban kinh ',r:5:2,' la',s:6:2); sẽ in ra như thế nào nếu ta nhập bán kính bằng 2?

- Em nào cho biết hiên tượng gì sẽ xảy ra nếu câu lệnh in kết quả được thay đổi như sau: writeln('dien tich hinh tron co ban kinh ',r ,' la', s); ? In kết quả là Vì vậy Pascal đưa quy cách của kết quả ra.

VD: writeln('dien tich hinh tron co ban kinh ',r:5:2,' la',s:6:2);

- Em có nhận xét gì về cách viết trên: ( r được dành 5 vị trí trong đó có 2 vị trí dành cho chữ số thập phân, 1 vị trí cho phần nguyên và 1 vị trí cho dấu (.), còn diện tích có 6 vị trí, 2 vị trí cho phần thập phân và 3 vị trí cho phần nguyên, 1 vị trí cho dấu (.))

- Để có thể thực hiện chương trình được viết bằng ngôn ngữ lập trình thì ta cần soạn thảo chương trình trên môi trường ngôn ngữ lập trình cụ thể. Ngôn ngữ lập trình Pascal là một ví dụ và ta sẽ tìm hiểu về môi trường lập trình này

Học sinh theo dỏi, ghi chép bài học.

Học sinh theo dỏi, ghi chép và trả lời.

Học sinh theo dỏi, ghi chép và trả lời.

Học sinh theo dỏi, ghi chép và trả lời.

Học sinh theo dỏi, ghi chép và trả lời.

Học sinh theo dỏi, ghi chép và trả lời.

Học sinh theo dỏi, ghi chép và trả lời.

Học sinh theo dỏi, ghi chép và trả lời.

III. CỦNG CỐ BÀI HỌC VÀ BÀI TẬP VỀ NHÀ (3 ph)

1. Củng cố: Qua bài học HS nắm vững những kiến thức trọng tâm sau:.

- Thủ tục nhập dữ liệu: Read/Readln.

- Thủ tục xuất dữ liệu: Write/Writeln.

- Quy cách định dạng số.

2. Bài tập về nhà:

  1. Chuẩn bị bài tập và thực hành số 1.
  2. Viết các chương trình tính diện tích hình thang, tam giác biết cạnh đáy và chiều cao.
  3. Bài thực hành 3, 4, 5 trang 35 SGK.

Tiết 8,9_PPCT

Ngày soạn:

Ngày dạy:

BÀI TẬP VÀ THỰC HÀNH SỐ 1

A. MỤC ĐÍCH VÀ YÊU CẦU

1. Mục đích:

- Học sinh bước đầu lập trình được các chương trình đơn giản.

- Thao tác thành thạo trên môi trường Pascal.

2. Yêu cầu:

- Học chuẩn bị bài tập ở nhà của tiết học trước.

- Học sinh chú ý làm bài tập và thực hành.

B. PHƯƠNG PHÁP GIẢNG DẠY

- Gợi ý phương pháp lập trình đơn giản.

- Hướng dẫn học sinh biết cách hiệu chỉnh các lỗi sai khi thực hiện chương trình.

C. PHƯƠNG TIỆN DẠY HỌC

- Bảng đen, phấn trắng.

- Phòng máy.

E. NỘI DUNG GIẢNG DẠY

Bài 1: Em hãy nêu lại các thao tác lập trình trên môi trường ngôn ngữ lập trình Pascal.

Gợi ý: - Mở môi trường lập trình Pascal.

- Soạn thảo chương trình.

- Nhấp phím F9 để kiểm tra chương trình.

- Nhấp tổ hợp phím Ctrl+F9 để chạy chương trình.

- Nhập giá trị kiểm thử.

Bài 2: Soạn thảo và thực hiện chạy chương trình giải phương trình bậc 2 theo hướng dẫn trong SGK trang 34.

Bài 3: Viết chương trình nhập số a (a>0) rồi tính và đưa ra diện tích phần gạch chéo trong hình bên, kết quả làm tròn đến 4 chữ số hàng thập phân.

Gợi ý: - Xác định Input và Output

- Viết chương trình.

- Nhập thử các bộ số khác nhau.

- write('dien tich phan con lai la ',sqr(a)*pi/2:10:2);

Bài 4: Lập trình tính và đưa ra màn hình vận tốc v của một vật rơi từ độ cao h, biết rằng , trong đó g là gia tốc rơi tự do và g=9,8m/s2. Độ cao h(m) được nhập vào từ bàn phím.

Gợi ý: - Xác định Input và Output

- Viết chương trình.

- Nhập thử các bộ số khác nhau.

v := sqrt(2*g*h);

writeln(‘van toc cua vat khi cham dat la: v = ’, v:8:2,’m/s’);

Bài 5: Hãy chỉ ra 4 lỗi (ba lỗi dịch, một lỗi thực hiện) trong chương trình Pascal sau:

Var x,y,z = integer; {dong 1}

Begin {dong 2}

X := 200; {dong 3}

Y := 250 {dong 4}

Z = X*Y; {dong 5}

Write(z); {dong 6}

Readln {dong 7}

End. {dong 8}

Trả lời:

  • Lỗi 1: Dấu (=) ở dòng 1 phải đổi thành dấu (:).
  • Lỗi 2: Thiếu dấu (;) ở dòng 4.
  • Lỗi 3: Ký hiệu sai lệnh gán ở dòng 5.
  • Biểu thức X*Y không được xác định đúng vì khai báo Z có kiểu integer nên Z không thể nhận giá trị 200*250 = 500000

Bài 6: Viết chương trình tính giá trị của biểu thức 2x4 - 3x3 + 4x2 - 5x + 6.

Gợi ý: - Xác định Input và Output

- Viết chương trình.

- Nhập thử các bộ số khác nhau.

- Y := x*(x*(x*(2*x - 3) + 4) -5) + 6;

Bài 7: Viết chương trình tính giá trị của biểu thức

Gợi ý: - Xác định Input và Output

- Viết chương trình.

- Nhập thử các bộ số khác nhau.

- A = (1+z) * ((x+y/z)/(a – 1/ (1+sqr(x)*x)));

Bài 8: Viết chương trình nhập vào 2 số a, b. Sau đó hoán đổi giá trị của 2 số đó:

Gợi ý: Cho phép dùng biến trung gian.

Không dùng biến trung gian:

a := a + b;

b := a - b;

a := a - b;

Dùng biến trung gian: tam

tam:=a;

a:=b;

b:=tam;

Bài 9: Dùng các phép toán DIV và MOD để đổi thời gian từ số giây ra giờ và phút và giây với số giây nhập từ bàn phím:

Program GPGiay;

Var h,p,s: Integer;

Begin

Write('Nhap vao thoi gian s = '); Readln(s);

write(s:6,'giay duoc doi thanh: ');

P := s div 60;

S := s mod 60;

H := p div 60;

P := p mod 60;

Writeln(h:4,'gio',p:4,'phut',s:4,'giay');

Readln;

End.

Bài 10: Bài tập 8a SGK, trang 36 (câu b tương tự)

Gợi ý: Cách 1: (y<=1) and (abs(x) <= y)

Cách 2: ((y < 1) or (y = 1)) and ((abs(x) < y) or (abs(x) = y))

Chú ý: (y<=1) and (abs(x) <= 1) là sai: Giả sử A(0,7 ; 0,5) không nằm trong vùng gạch chéo.

Bài 11: Bài tập 2.24 Sách bài tập, trang 12. Đáp án đúng D.

Gợi ý: - Điều kiện để tọa độ điểm nằm trên hoặc ngoài đường tròn là: (x*x + y*y ≥ 25) nên là đáp án D và E.

- ­Vì tọa độ điểm nằm trên đường biên nên chỉ có đk (abs(x) ≤ 5) and (abs(y) ≤ 5) thỏa mãn vì có dấu bằng xảy ra.

Bài 12: BT 2.25 Sách bài tập, trang 13. Gợi ý: Tính d1, d2 🢣 d = d2 - d1. Hoặc d = (30-10)t

Bài tập tương tự: Trên đoạn đường có 2 điểm xuất phát X và Y cách xa nhau A km. Một người đi xe máy xuất phát từ điểm X với tốc độ B km/h, người đi ôtô xuất phát từ điểm Y với tốc độ C km/h (A ≥ B +C ). Hãy viết chương trình in kết quả sau bao lâu thì 2 người gặp nhau và gặp tại vị trí cách X bao xa biết rằng A, B, C được nhập từ bàn phím.

Bài 13: Bài tập 2.26 Sách bài tập, trang 13. Hiền gọi điện thoại trao đổi với Minh, cứ mỗi phút dùng điện thoại phải trả a đồng. Cuộc gọi kéo dài t phút. Hãy viết chương trình tính và đưa ra màn hình số tiền mà mẹ bạn Hiền cuối tháng phải thanh toán cho cuộc trao đổi này. Các số liệu a và t (nguyên dương) được nhập từ bàn phím.

Bài 14: Bài tập 2.27 Sách bài tập, trang 13. Theo quy định của nhà trường, mỗi trường hợp không đeo thẻ học sinh sẽ bị trừ đi 3 điểm thi đua của lớp, mỗi trường hợp nói chuyện trong lớp bị trừ 2 điểm và mỗi trường hợp đi muộn trừ 5 điểm. Sổ đầu bài ghi nhận trong tháng có t trường hợp không đeo thẻ, n trường hợp nói chuyện và m trường hợp đi muộn. Hãy nhập các dữ liệu này vào từ bàn phím và đưa ra màn hình số điểm thi đua mà lớp bị trừ trong tháng. Tất cả các dữ liệu đều là số nguyên.

Bài 15: Bài tập 2.30 Sách bài tập, trang 13. Để bù đắp thiệt hại cho nhân dân trong công tác phòng chống dịch cúm gia cầm H5N1, nhà nước hỗ trợ cho các hộ có gia cầm bị thiêu hủy theo định mức sau: mỗi con gia cầm từ một tháng tuổi trở xuống a đồng, mỗi con gia cầm trên 1 tháng tuổi và dưới 3 tháng tuổi là b đồng, từ 3 tháng tuổi trở lên là c đồng 1 con. Một hộ nông dân có đàn gia cầm n con phải thiêu hủy, trong đàn có m con dưới 3 tháng tuổi, trong số đó có k con từ 1 tháng tuổi trở xuống (0 <= k <= m <= n <= 10000). Hãy lập trình nhập dữ liệu a, b, c, m, n, k từ bàn phím, tính và đưa ra màn hình số tiền hỗ trợ nhà nước sẽ chi trả cho hộ nông dân trên. Tất cả các dữ liệu vào đều là số nguyên.

Gợi ý:

- Có k con dưới 1 tháng => có a*k đồng.

- Có m con dưới 3 tháng trong đó bao gồm cả k con dưới 1 tháng => có b*(m-k) đồng.

- Có tất cả n con trong trại nên có c*(n-m) đồng.

=> Vậy số tiền mà nhà nước phải hỗ trợ là: a*k + b*(m-k) + c*(n-m) đồng.

Bài 16: Bài tập 2.33 Sách bài tập, trang 15. Lập trình nhập từ bàn phím 2 số thực a và b, tính và đưa ra màn hình:

a) Trung bình cộng các bình phương của 2 số đó.

b) Trung bình cộng các giá trị tuyệt đối của 2 số đó.

Bài 17: Bài tập 2.39 Sách bài tập, trang 17. Cho số nguyên N có 4 chữ số. Hãy dùng các phép DIV và MOD tính tổng các chữ số của N. Dữ liệu nhập vào từ bàn phím.

Gợi ý: tong := 0;

Tong := n div 1000;

Kq := n mod 1000;

Tong := tong + (kq div 100);

Kq := kq mod 100;

Tong := tong + (kq div 10);

Kq := kq mod 10;

Tong := tong + kq;

Tiết 10_PPCT

Ngày soạn:

Ngày dạy:

BÀI TẬP VÀ KIỂM TRA 15ph

A. MỤC ĐÍCH VÀ YÊU CẦU

1. Mục đích:

Học sinh ôn lại các kiến thức đã học về các nội dung chính sau:

  1. Cấu trúc chung của một chương trình.
  2. Cách khai báo biến.
  3. Các hàm chuẩn và câu lệnh gán.

Kiểm tra 15ph nhằm đánh giá tình hình học tập của học sinh.

2. Yêu cầu:

- Học sinh đã ôn lý thuyết và làm một số bài tập có nội dung liên quan tại nhà.

- Tích cực tham gia làm bài tập.

- Học sinh trật tự khi làm bài kiểm tra.

B. PHƯƠNG PHÁP GIẢNG DẠY

- Hướng dẫn học sinh trả lời các câu hỏi trắc nghiệm. Sau mỗi lựa chọn đúng hoặc sai đều có câu hỏi vì sao.

- Một số câu hỏi tự luận để học sinh tư duy trong quá trình làm bài.

C. PHƯƠNG TIỆN DẠY HỌC

- Bảng đen, phấn trắng.

F. NỘI DUNG GIẢNG DẠY

Câu 1: Trong biểu thức bất kỳ, ngôn ngữ lập trình dùng những loại nào để xác định trình tự thực hiện các phép tính?

Trả lời:

Chỉ dùng một loại đó là dấu ngoặc tròn ().

Câu 2: Chương trình dịch Pascal sẽ cấp phát bao nhiêu byte bộ nhớ cho các biến trong khai báo sau: var a, b, c, d: integer;

x, y, z: real;

w: word;

Trả lời:

var a, b, c, d: integer; (2 byte)

x, y, z: real; (6 byte)

w: word; (2 byte)

Câu 3: Chỉ ra các lỗi trong khai báo sau:

Var i, m, n: real;

Pi = 3.14;

5x, y2: integer;

Trả lời:

Var i, m, n: real;

Pi = 3.14; (Lỗi do vị trí khai báo sai )

5x, y2: integer; (Lỗi do đặt tên sai)

Câu 4: Em có nhận xét gì về các khai báo sau? Hãy viết lại các khai báo cho hợp lý hơn.

Var p: real;

N: integer;

A: real;

K: integer;

B1: real;

C: integer;

Trả lời: Các khai báo trên là quá dài, nên gộp các biến cùng kiểu trong khai báo.

Var p, A, B1: real;

N, K, C: integer;

Câu 5: Viết lại các biểu thức sau từ dạng toán học sang dạng biểu diễn tương ứng trong Pascal:

a) b) c)

d) e) f)

Trả lời:

a) abs(x+sqr(sqr(y)))/sqrt(2*sqr(x)-4*x) b) (a+sinx)/sqrt(sqr(x)+cos(x))

c) (2*exp(x+y)+x-y*sqr(y))/(sqr(x)+sqr(y)) d) sqr(sinx)/cosx*sqr(cos(x))

e) sqrt(x+y)+abs(x*sqr(x)-1)

f) (abs(x+sqr(y)*sqr(y)))/(sqrt(2*sqr(x)-4*y))

Đề kiểm tra 15ph

Câu 1: Viết chương trình giải các bài toán sau:

a/ A = b/ B = e

Câu 2: Mỗi học sinh hãy nhập vào 2 số nguyên dương bất kỳ từ bàn phím, nêu các bước thực hiện của chương trình để đưa ra kết quả đúng. Lưu ý: giá trị nhập cho a và b không được trùng nhau.

Tiết 11_PPCT

Ngày soạn:

Ngày dạy:

BÀI 9: CẤU TRÚC RẼ NHÁNH

A. MỤC ĐÍCH VÀ YÊU CẦU

1. Mục đích:

- Học sinh hiểu nhu cầu của cấu trúc rẽ nhánh trong biểu diễn thuật toán.

- Hiểu câu lệnh rẽ nhánh (dạng thiếu và dạng đủ).

- Hiểu câu lệnh ghép.

2. Yêu cầu:

- Học sinh chú ý học tập.

- Sử dụng được cấu trúc rẽ nhánh trong mô tả thuật toán của một số bài toán đơn giản.

B. PHƯƠNG PHÁP GIẢNG DẠY

- Lấy học sinh làm trung tâm, lấy các VD cụ thể để học sinh nắm vững bài học.

- Sử dụng các mô hình như sơ đồ khối, thực hiện giải thuật trên sơ đồ khối.

C. KIẾN THỨC TRỌNG TÂM

Trong bài này cần cung cấp cho học sinh các kiến thức sau:

- Cấu trúc câu lệnh rẽ nhánh dạng thiếu và dạng đủ.

- Cấu trúc, ý nghĩa sử dụng câu lệnh ghép.

D. PHƯƠNG TIỆN DẠY HỌC

- Bảng đen, phấn trắng.

- Máy chiếu đa năng.

E. NỘI DUNG GIẢNG DẠY

I. ĐẶT VẤN ĐỀ CHO BÀI GIẢNG ( 2ph )

Trong cuộc sống các em thường gặp những tình huống lúc đúng, lúc sai. Có nhiều vấn đề mà cách giải quyết lại theo các hướng khác nhau. Đó là những trường hợp phân nhánh. Vậy thì các thông tin khi đưa vào máy tính có như vậy không? Nếu có thì máy tính xử lý thế nào? VD như trường hợp giải bài toán nghiệm của phương trình bậc 2 biện luận theo delta.

II. NỘI DUNG BÀI HỌC

Thời gian

Nội dung ghi bảng

Hoạt động của thầy

Hoạt động của trò

15 ph

20 ph

5 ph

BÀI 9: CẤU TRÚC RẼ NHÁNH (tiết 11-12)

1. Rẽ nhánh

VD1:

* Châu hẹn Ngọc: Chiều mai nếu trời không mưa thì Châu sẽ đến nhà Ngọc.

* Ngọc nói với Châu: Chiều mai nếu trời không mưa thì Ngọc sẽ đến nhà Châu, nếu trời mưa thì sẽ gọi điện cho Châu để trao đổi.

🡺 Diễn đạt dạng thiếu:

Nếu ... thì...

🡺 Diễn đạt dạng đầy đủ:

Nếu ... thì..., nếu không thì...

VD2: Giải phương trình bậc 2:

ax2 + bx + c = 0 (a ≠ 0)

* Giải thuật sơ đồ khối

2. Câu lệnh If – then

a) Dạng thiếu:

Cú pháp:

If <điều kiện> then <câu lệnh>;

b) Dạng đủ:

Cú pháp:

If <điều kiện> then <câu lệnh 1> else <câu lệnh 2>;

* Trong đó:

- DK: điều kiện là biểu thức logic.

- Câu lệnh: Là câu lệnh trong Pascal.

- Trước Else không có dấu (;).

VD: Các VD trong SGK.

3. Câu lệnh ghép

Trong quá trình giải các bài toán phức tạp, không phải chỉ thao tác với 1 câu lệnh mà có thể thao tác với nhiều câu lệnh, các câu lệnh được gộp lại và tạo thành câu lệnh ghép.

Câu lệnh ghép có dạng:

Begin

<Các câu lệnh>;

End;

VD:

If d < 0 then write(‘vo nghiem’)

else

begin

x1 := (-b-sqrt(D)) / (2*a*c);

x2 := -b/a – x1;

end;

Chú ý:

- Câu lệnh if - then có thể lồng nhau và có dạng:

Dạng 1:

If <Đk 1> then

Begin

<câu lệnh 1>;

If <Đk 2> then <câu lệnh 2>;

End

Else <câu lệnh 3>;

Dạng 2:

If <Đk 1> then <câu lệnh 1>;

If <Đk 2> then <câu lệnh 2>

Else <câu lệnh 3>;

- Ghi bài học lên bảng.

- Mời một em đọc VD trong SGK về cuộc hẹn giữa Châu và Ngọc.

- VD mà bạn vừa đọc là một VD thực tế các em thường gặp. Ở đây có 2 tình huống rõ rệt xảy ra:

* Châu hẹn Ngọc: Chiều mai nếu trời không mưa thì Châu sẽ đến nhà Ngọc.

* Ngọc nói với Châu: Chiều mai nếu trời không mưa thì Ngọc sẽ đến nhà Châu, nếu trời mưa thì sẽ gọi điện cho Châu để trao đổi.

- Như vậy 2 tình huống xảy ra cho ta 2 khả năng diễn đạt, tình huống thứ 2 diễn đạt đầy đủ hơn.

- Vậy trong toán học có các khả năng xảy ra như vậy không? Câu trả lời là có. Ta xem VD giải phương trình bậc 2:

ax2 + bx + c = 0 (a ≠ 0). Bạn nào có thể viết thuật toán trên theo sơ đồ khối hoặc liệt kê.

- Trên bảng các em thấy rõ sơ đồ thể hiện cấu trúc rẽ nhánh trường hợp có nghiệm và vô nghiệm.

- Vậy em nào biết để thực hiện bài toán rẽ nhánh trên ngôn ngữ lập trình Pascal cho phép người lập trình sử dụng câu lệnh nào ?

Đó là câu lệnh If – then.

- Tương ứng với 2 dạng thiếu và đủ ở trên, Pascal có hai dạng câu lệnh If – then như sau:

a) Dạng thiếu:

If <điều kiện> then <câu lệnh>;

b) Dạng đủ:

If <điều kiện> then <câu lệnh> else <câu lệnh 2>;

- Dang thiếu chỉ thực hiện 1 câu lệnh nếu đúng, sai thì kết thúc, Còn dạng đủ thực hiện theo 2 nhánh, nếu đúng thì thực hiện câu lệnh 1, sai thì thực hiện câu lệnh 2.

- Các em xem các VD trong sách giáo khoa và cài đặt các bài toán đó.

- Từ khóa Begin và End không chỉ dùng để bắt đầu hoặc kết thúc một chương trình mà còn dùng để bắt đầu hoặc kết thúc một dãy các câu lệnh đó là câu lệnh ghép.

- Em nào có thể viết chương trình cho bài toán giải phương trình bậc 2.

Học sinh theo dỏi, ghi chép bài học.

Học sinh theo dỏi, ghi chép và trả lời.

Học sinh theo dỏi, ghi chép và trả lời.

Học sinh theo dỏi, ghi chép và trả lời.

Học sinh theo dỏi, ghi chép và trả lời.

Học sinh theo dỏi, ghi chép và làm bài

III. CỦNG CỐ BÀI HỌC VÀ BÀI TẬP VỀ NHÀ (3 ph)

1. Củng cố: Qua bài học HS nắm vững những kiến thức trọng tâm sau:.

- Thủ tục nhập dữ liệu: Read/Readln.

- Thủ tục xuất dữ liệu: Write/Writeln.

- Quy cách định dạng số.

2. Bài tập về nhà:

  1. Tìm số lớn nhất của 2 số x, y.
  2. Giải phương trình bậc 2.
  3. Viết chương trình tìm giá trị lớn nhất của 3 số a, b, c.
  4. Viết chương trình nhập từ bàn phím một số nguyên dương, in ra màn hình kq là số chẵn hoặc số lẻ.
  5. Viết chương trình nhập từ bàn phím một số nguyên, in ra màn hình kq là số âm hoặc số dương.
  6. Tìm GTLN của 4 số a, b, c, d là những số nguyên được nhập từ bàn phím.

Gợi ý:

max:=a;

if b > max then max := b;

if c > max then max := c;

if d > max then max := d;

write('max= ', max);

  1. Nhập 3 số nguyên từ bàn phím, tính và in ra màn hình kết quả là bình phương của các số không âm và lập phương của các số âm.

Tiế 12,13_PPCT

Ngày soạn:

Ngày dạy:

BÀI 10: CẤU TRÚC LẶP

A. MỤC ĐÍCH VÀ YÊU CẦU

1. Mục đích:

- Học sinh hiểu nhu cầu của cấu trúc lặp trong biểu diễn thuật toán.

- Hiểu cấu trúc lặp với số lần lặp biết trước.

2. Yêu cầu:

- Học sinh biết cách vận dụng đúng đắn từng loại cấu trúc lặp trong từng tình huống cụ thể.

- Biết cách mô tả thuật toán trong một số bài toán đơn giản.

B. PHƯƠNG PHÁP GIẢNG DẠY

- Lấy học sinh làm trung tâm, lấy các VD cụ thể để học sinh nắm vững bài học.

- Sử dụng các mô hình như sơ đồ khối, thực hiện giải thuật trên sơ đồ khối.

C. KIẾN THỨC TRỌNG TÂM

Trong bài này cần cung cấp cho học sinh các kiến thức sau:

- Khái niệm lặp trong thuật toán.

- Cấu trúc lặp với số lần đã biết trước, câu lệnh lặp FOR-DO.

D. PHƯƠNG TIỆN DẠY HỌC

- Bảng đen, phấn trắng.

- Máy chiếu đa năng.

E. NỘI DUNG GIẢNG DẠY

I. ĐẶT VẤN ĐỀ CHO BÀI GIẢNG ( 5ph )

Các em đã bao giờ gặp các tình huống lặp chưa? Em nào có thể kể cho thầy biết một số tình huống lặp mà em biết? VD1 như chương trình tính điểm cho 50 học sinh trong lớp. Quá trình giáo viên nhập họ tên, điểm cho từng em học sinh là một quá trình lặp liên tục cho đến khi nhập đầy đủ cho 50 học sinh thì mới kết thúc. Như vậy quá trình lặp ở trên là quá trình lặp với số lần đã biết trước là 50 lần lặp. Hoặc tình huống thứ 2 là: Em thực hiện một công việc là gánh nước để đổ vào 1 thùng nước? Em có biết cần bao nhiêu thùng nước thì đủ không? Như vậy em cần phải đổ đầy thùng nước mà không biết là cần bao nhiêu gánh nước. Đó là tình huống lặp với số lần chưa biết trước? Vậy trong ngông ngữ lập trình Pascal có cung cấp cho người lập trình các công cụ để thực hiện các bài toán về lặp không? Ta sang bài học mới để tìm hiểu các công cụ này nhé!

II. NỘI DUNG BÀI HỌC

Thời gian

Nội dung ghi bảng

Hoạt động của thầy

Hoạt động của trò

10 ph

10 ph

20 ph

30 ph

BÀI 10: CẤU TRÚC LẶP (tiết 14)

1. Lặp

Cho và . Tính giá trị S

Bài 1:

Bài 2:

Cho đến khi

- Hai bài toán đều thực hiện phép lặp cộng bắt đầu từ N=0..

- Bài toán 1 thực hiện lặp với N=100.

- Bài toán 2 thực hiện phép lặp chưa biết trước số lần N, phép lặp dừng cho tới khi .

2. Lặp với số lần biết trước và câu lệnh FOR-DO

Thuật toán

Dạng lặp tiến:

Dạng lăp lùi:

Nhận xét:

- Lặp tiến: Xuất phát N=0, sau mỗi lần lặp thì N tăng lên 1 đơn vị.

- Lặp lùi: Xuất phát N=101, Sau mỗi lần lặp thì N giảm đi một đơn vị.

- Số lần lặp tiến và lặp lùi là 100 lần.

* Câu lệnh FOR-DO

Dạng lặp tiến:

FOR <biến đếm>:=<gt.đầu> TO <gt.cuối> DO <câu lệnh>;

Dạng lặp lùi:

FOR <biến đếm> := <gt.cuối> DOWNTO <gt.đầu> DO <câu lệnh>;

Trong đó:

- Biến đếm: Là biến đơn, thường có kiểu nguyên.

- gt.đầu, gt.cuối: Là các biểu thức có cùng kiểu với biến đếm.

Chú ý:

­- Giá trị của biến đếm được điều chỉnh tự động, câu lệnh sau DO không được thay đổi giá trị biến đếm.

VD1: Chương trình cài đặt cho bài toán 1 theo 2 dạng lặp (SGK)

VD2: (SGK)

- Ghi bài học lên bảng.

- Các em vừa được biết 2 VD về lặp thường thấy trong cuộc sống tự nhiên. Bây giờ ta sẽ xem xét 2 VD trong toán học trong SGK.

- Từ 2 bài toán trên em nào cho thầy biết bài thứ nhất lặp cộng bao nhiêu lần? Và xuất phát từ số hạng nào, tại số hạng này N bằng bao nhiêu?

- Còn đối với bài toán 2 lặp cộng bao nhiêu lần? Và xuất phát từ số hạng nào, tại số hạng này N bằng bao nhiêu?

=> Như vậy đối với bài toán 1 phép lặp giới hạn 100 lần, bài toán 2 phép lặp là không biết trước, nó thực hiện lặp cộng cho đến khi thỏa mãn điều kiện thì kết thúc.

- Bài học hôm nay ta nghiên cứu về phép lặp đã biết trước số lần lặp tương ứng với cấu trúc câu lệnh FOR-DO.

- Em nào có thể nêu ý tưởng thuật toán để giải bài toán 1.

- Ta có 2 cách để viết thuật toán giải bài toán 1. Đó là lặp tiến và lặp lùi.

- Em nào có thể trình bày thuật toán dưới dạng sơ đồ khối.

- Em nào có thể nhận xét về hai dạng lặp trên nó có điểm giống và khác nhau ở chỗ nào?

- Em nào cho thầy biết tương ứng với 2 dạng lặp trên thì ngôn ngữ lập trình Pascal đã cung cấp cho chúng ta câu lệnh nào?

- Đó là câu lệnh FOR-DO dùng để mô tả cho hai dạng lặp ở trên.

- Em nào có thể nêu cách thức hoạt động của câu lệnh FOR-DO?

- Câu lệnh FOR-DO được áp dụng trong bước mấy của 2 dạng thuật toán trên?

- Em nào có thể viết chương trình tương ứng với 2 dạng thuật toán đó.

Áp dụng vào thuật toán hoặc chương trình em nào có thể thực hiện chạy chương trình với a=2

- VD2: GV giúp học sinh tìm hiểu thuật toán, cài đặt chương trình và kiểm thử bằng các bộ test.

Học sinh theo dỏi, ghi chép bài học.

Học sinh theo dỏi, ghi chép và trả lời.

Học sinh theo dỏi, ghi chép và trả lời.

Học sinh theo dỏi, ghi chép và trả lời.

Học sinh theo dỏi, ghi chép và trả lời.

Học sinh theo dỏi, ghi chép và làm bài

III. CỦNG CỐ BÀI HỌC VÀ BÀI TẬP VỀ NHÀ (15 ph)

1. Củng cố: Qua bài học HS nắm vững những kiến thức trọng tâm sau:.

- Câu lệnh lặp dạng tiến: FOR <biến đếm>:=<gt.đầu> TO <gt.cuối> DO <câu lệnh>;

- Câu lệnh lặp dạng lùi: FOR <biến đếm> := <gt.cuối> DOWNTO <gt.đầu> DO <câu lệnh>;

2. Bài tập về nhà:

1. Viết chương trình nhập số nguyên dương N từ bàn phím và thực hiện các công việc sau:

    1. Đếm xem có bao nhiêu số chẵn, bao nhiêu số lẻ trong phạm vi từ 1 đến N.
    2. Tính tổng giá trị các số chẵn, số lẻ.

2. Viết chương trình tính giá trị của mỗi tổng sau, với n được nhập từ bàn phím

a) .

Dùng While - Do

S:=0; i:=1;

While i<=N Do

Begin

S:=S+i;

i:=i+1;

End;

Dùng FOR - Do

S:=0;

For i:=1 to N do S:=S+i;

b)

Gợi ý:

s:= 0;

dau:=1;

for i:=1 to n do

begin

s:=s+i*dau;

dau:=-dau;

end;

c)

Tiết 14_PPCT

Ngày soạn:

Ngày dạy:

BÀI 10: CẤU TRÚC LẶP

A. MỤC ĐÍCH VÀ YÊU CẦU

1. Mục đích:

- Học sinh hiểu nhu cầu của cấu trúc lặp trong biểu diễn thuật toán.

- Hiểu cấu trúc lặp với số lần lặp chưa biết trước, kiểm tra điều kiện trước khi lặp.

2. Yêu cầu:

- Học sinh biết cách vận dụng đúng đắn từng loại cấu trúc lặp trong từng tình huống cụ thể.

- Biết cách mô tả thuật toán trong một số bài toán đơn giản.

B. PHƯƠNG PHÁP GIẢNG DẠY

- Lấy học sinh làm trung tâm, lấy các VD cụ thể để học sinh nắm vững bài học.

- Sử dụng các mô hình như sơ đồ khối, thực hiện giải thuật trên sơ đồ khối.

C. KIẾN THỨC TRỌNG TÂM

Trong bài này cần cung cấp cho học sinh các kiến thức sau:

- Lặp với số lần chưa biết trước, câu lệnh lặp While - Do

D. PHƯƠNG TIỆN DẠY HỌC

- Bảng đen, phấn trắng.

- Máy chiếu đa năng.

E. KIỂM TRA BÀI CŨ (15ph)

1. Nêu cấu trúc câu lệnh lặp với số lần biết trước. Tại sao trong câu lệnh lặp FOR-DO người ta không cần câu lệnh thay đổi giá trị của biến chỉ số.

2. Viết chương trình tính giá trị của mỗi tổng sau, với n được nhập từ bàn phím

a) .

b)

F. NỘI DUNG GIẢNG DẠY

I. NỘI DUNG BÀI HỌC

Thời gian

Nội dung ghi bảng

Hoạt động của thầy

Hoạt động của trò

10 ph

10 ph

10 ph

BÀI 10: CẤU TRÚC LẶP (tiết 14)

Cho và . Tính giá trị S

Bài 2:

Cho đến khi

3. Lặp với số lần chưa biết trước và câu lệnh WHILE-DO

Thuật toán liệt kê:

B1: Nhập a;

B2: S:=1/a; N:=0;

B3: Nếu 1/(a+N)<0,0001 → B6;

B4: N:=N+1;

B5: S:=S+1/(a+N) → B2;

B6: In S

Cú pháp câu lệnh lặp:

While <ĐK> do <câu lệnh>;

* Trong đó:

- ĐK: Điều kiện là biểu thức logic;

- Câu lệnh:Làcâu lệnhđơn hoặc ghép.

Thuật toán theo sơ đồ khối:

Chương trình:

Program tong_2;

Var a, n : Integer;

S : Real;

Begin

Write(‘nhap a= ’); Readln(a);

S:=1/a;

N:=0;

While 1/(a+N)>=0.0001 Do

Begin

N := N + 1;

S := S + 1/(a+N);

End;

Writeln(‘tong S cua bai toan 2 la ’, S:10:2);

Readln;

End.

VD1: Tìm ƯCLN của 2 số nguyên dương M và N.

*Ý tưởng:

- Nhập và kiểm tra 2 số M và N, nếu M=N thì ƯCLN là M. Nếu không thực hiện vòng lặp gán M=M-N nếu M>N và ngược lại, cho đến khi M=N

*Thuật toán:

*Chương trình:

Program UCLN;

Var m,n : Integer;

Begin

Write(‘Nhap m va n: ’); readln(m,n);

While m<>n do

If m > n then m := m - n

Else n := n – m;

Writeln(‘UCLN = ’, M);

Readln

End.

- Ghi bài học lên bảng.

- Bài trước các em đã tìm hiểu khái niệm về lặp và lặp với số lần biết trước, bài học hôm nay ta sang phần tiếp theo là lặp với số lần chưa biết trước, ta sẽ làm việc trên bài toán 2 trong bài này số lần lặp N là chưa biết.

- Em nào có thể nêu ý tưởng giải bài toán 2?

- Em nào có thể viết thuật toán giải bài toán 2 bằng phương pháp liệt kê?

- Theo em lặp với số lần chưa biết trước có mấy dạng?

- Lặp với số lần chưa biết trước có 2 dạng:

Dạng 1:

Trong khi <ĐK> còn đúng thì thực hiện <câu lệnh>.

Dạng 2:

Thực hiện <công việc> trong khi <ĐK> còn đúng.

- Ở dạng 1: Đầu tiên kiểm tra và tính giá trị của ĐK, nếu ĐK còn đúng thì thực hiện công việc và chỉ thực hiện 1 lần. Mỗi lần thực hiện công việc có thể sẽ làm thay đổi giá trị của ĐK nên đến một lúc nào đó ĐK lặp không còn đúng nữa và vòng lặp sẽ được kết thúc.

- Theo em ĐK lặp trong bài toán 2 là gì và khi nào thì kết thúc lặp?

- Như vậy thuật toán của bài toán 2 áp dụng phương pháp lặp dạng 1. Nó kiểm tra ĐK 1/(a+N)<0,0001 trước khi thực hiện công việc lặp.

- Tương ứng với dạng 1 em nào cho biết câu lệnh lặp trong Pascal là gì?

- Theo sơ đồ khối vòng lặp While – Do thể hiện trong những bước nào?

- Theo cấu trúc lặp trong Pascal, em nào có thể viết chương trình giải bài toán 2 theo dạng 1?

- Em hãy thực hiện phép lặp với a = 9995.

B1: Nhập a = 5;

B2: Gán N=0;

B3: Thực hiện lặp:

  • 1/9995 > 0.0001:

N:=0+1=1;

S:=1/9995+1/(9996) → B3

  • 1/9996 > 0.0001:

N:=1+1=2;

S:=1/9995+1/(9996) +1/(9997) → B3

  • 1/9996>0.0001:

N:=2+1=3;

S:=1/9995+1/(9996) +1/(9997) +1/(9998) → B3

  • …….
  • 1/10000 = 0.0001:

N:=4+1=6;

S:=1/9995+1/(9996) +1/(9997) + 1/(9998) + 1/(9999) + 1/(10000) + 1/(10001) → B3

  • 1/10001 < 0.0001→ B6

Kết thúc

- Ta xem xét tiếp 2 VD sau:

VD1: Tìm ƯCLN của 2 số nguyên dương M và N.

- Em nào có thể nêu ý tưởng thực hiện bài toán?

- Em nào viết được thuật toán?

- Em nào viết chương trình thực hiện thuật trên.

- Em nào có thể thực hiện chương trình trên bằng bộ test: M=28, N=12.

Học sinh theo dỏi, ghi chép bài học.

Học sinh theo dỏi, ghi chép và trả lời.

Học sinh theo dỏi, ghi chép và trả lời.

Học sinh theo dỏi, ghi chép và trả lời.

Học sinh theo dỏi, ghi chép và trả lời.

Học sinh theo dỏi, ghi chép và làm bài

II. CỦNG CỐ BÀI HỌC VÀ BÀI TẬP VỀ NHÀ (5 ph)

1. Củng cố: Qua bài học HS nắm vững những kiến thức trọng tâm sau:

- Ý nghĩa sử dụng câu lệnh lặp với số lần chưa biết trước While – Do.

- Câu lệnh lặp While – Do.

2. Bài tập về nhà:

  1. Có thể dùng câu lệnh While-Do để thay thế cho câu lệnh For-Do được không? Nếu được, hãy thực hiện điều đó với chương trình Tong_1a.
  2. Cho số thực a. Tìm số nguyên dương N nhỏ nhất thỏa mãn:

Gợi ý: Cách 1: Dùng vòng lặp vô hạn

S := 1; N := 1;

While true do {cho vòng lặp vô hạn vì đk luôn đúng}

Begin

If s>a then break;

Inc(n);

S := s + 1/n;

End;

Cách 2: Không dùng vòng lặp vô hạn

S := 1; N := 1;

While s<=a do {cho vòng lặp giới hạn đến s=a}

Begin

Inc(n);

S := s + 1/n;

End;

Tiết 15,16_PPCT

Ngày soạn:

Ngày dạy:

BÀI TẬP VÀ THỰC HÀNH 2

A. MỤC ĐÍCH VÀ YÊU CẦU

1. Mục đích:

- Học sinh làm quen với công cụ hiệu chỉnh chương trình.

- Hiểu câu lệnh rẽ nhánh (dạng thiếu và dạng đủ).

- Thực hành các bài tập sử dụng vòng lặp biết trước và chưa biết trước.

2. Yêu cầu:

- Học sinh biết xây dựng chương trình cấu trúc rẽ nhánh, lặp.

B. PHƯƠNG PHÁP GIẢNG DẠY

- Giúp HS làm quen với cấu trúc rẽ nhánh thông qua các bài tập từ đơn giản đến phức tạp.

D. PHƯƠNG TIỆN DẠY HỌC

- Bảng đen, phấn trắng.

- Phòng máy thực hành.

E. NỘI DUNG GIẢNG DẠY

Câu 1: Bài toán Bộ số Pi-ta-go:

  • Nêu bài toán.
  • Nêu ý tưởng giải bài toán.
  • Xây dựng chương trình.
  • Thực hiện chương trình trên máy tính.
  • Thực hiện theo các bước hướng dẫn thực hành trong sách giáo khoa.

Câu 2: Viết chương trình tính giá trị của hàm:

a)

Nếu

Nếu ,

Nếu ,

Program tinhGTBT;

Var x, y, z: real;

Begin

Write(‘nhap x, y: ’);readln(x,y);

Z:= sqr(x) + sqr(y);

If z<=1 then writeln(‘z=’, z:10:2)

Else

If (z>1) and (y>=x) then writeln(‘z= ’,x+y:10:2)

Else

If y<x then writeln(‘z=’, 0.5:6:2);

Readln

End.

b)

Nếu điểm (x,y) thuộc hình tròn bán kính r (r>0), tâm (a,b).

Trong các trường hợp còn lại

Gợi ý: If (sqr(x-a) + sqr(y-b)) <= sqr(r) then Z := abs(x) + abs(y)

Else Z := x+y;

Bài 3: Viết chương trình tính các tổng sau, với N được nhập từ bàn phím:

Gợi ý:

S := 0;

For i := 1 to N do S := S + sqr(i);

Tiết 17_PPCT

Ngày soạn:

Ngày dạy:

BÀI TẬP

A. MỤC ĐÍCH VÀ YÊU CẦU

1. Mục đích:

- Thực hành câu lệnh rẽ nhánh (dạng thiếu và dạng đủ).

- Thực hành các bài tập sử dụng vòng lặp biết trước và chưa biết trước.

2. Yêu cầu:

- Học sinh tự viết chương trình cấu trúc rẽ nhánh, lặp.

B. PHƯƠNG PHÁP GIẢNG DẠY

- Giúp HS làm quen với cấu trúc rẽ nhánh thông qua các bài tập.

D. PHƯƠNG TIỆN DẠY HỌC

- Bảng đen, phấn trắng.

- Phòng máy thực hành.

E. NỘI DUNG GIẢNG DẠY

Bài 1: Viết chương trình tính các tổng sau, với N được nhập từ bàn phím:

b)

G ợi ý: S := 0;

For i := 1 to N do S := S + 1/sqr(i);

Câu 2: Lập trình giải bài toán sau: Nhập số nguyên dương N từ bàn phím. Tìm số nguyên k nhỏ nhất thỏa mãn điều kiện 3k > N. Đưa ra màn hình giá trị k và 3k.

Gợi ý: k := 0; S := 1;

Chú ý:

While S <= N do

Begin

Inc(k);

S := exp(k*ln(3));

End;

Câu 3: Viết chương trình nhập số nguyên và kiểm tra số vừa nhập là số chẵn hay số lẻ.

Gợi ý: Nếu N mod 2 = 0 thì N là số chẵn, ngược lại là số lẻ.

Câu 4: ­Viết chương trình giải phương trình bậc nhất ax + b = 0

Chương trình:

Var a,b,x : real;

Begin

Write('a = '); Readln(a);

Write('b = '); Readln(b);

If a = 0 Then

If b = 0 Then

Writeln('Phuong trinh co vo so nghiem')

Else

Writeln('Phuong trinh vo nghiem')

Else

Begin

x:= -b/a;

Writeln('Phuong trinh co nghiem la :',x:6:2); end; readln ; end.

Tiết 18_PPCT

Ngày soạn:

Ngày dạy:

KIỂM TRA 1 TIẾT

Câu 1: Viết chương trình nhập vào số nguyên dương N. In ra màn hình tất cả các ước số của N.

Câu 2: Viết chương trình nhập vào số nguyên dương N rồi thông báo lên màn hình số đó có phải là số chẵn hay không.

Câu 3: Tính tổng sau, với N được nhập vào từ bàn phím

S = 2 - 4 + 6 - 8 + ... + (-1)n+1.2n

Tiết 19_PPCT

Ngày soạn:

Ngày dạy:

CHƯƠNG II: KIỂU DỮ LIỆU CÓ CẤU TRÚC

BÀI 11: KIỂU MẢNG

A. MỤC ĐÍCH VÀ YÊU CẦU

1. Mục đích:

- Cung cấp cho học sinh kiến thức về mảng, biết mảng một chiều, biết khái báo mảng, xây dựng và sử dụng mảng một chiều.

2. Yêu cầu:

HS cần nắm được:

- Kiểu mảng là một kiểu dữ liệu có cấu trúc, rất cần thiết và hữu ích trong nhiều chương trình.

- Mảng một chiều là một dãy hữu hạn các phần tử cùng kiểu.

- Các ngôn ngữ lập trình thông dụng cho phép người lập trình xây dựng kiểu dữ liệu mảng một chiều.

B. PHƯƠNG PHÁP GIẢNG DẠY

- Lấy học sinh làm trung tâm, lấy các VD cụ thể để học sinh nắm vững bài học.

- Thuyết trình, diễn giải, hỏi đáp.

C. KIẾN THỨC TRỌNG TÂM

Trong bài này cần cung cấp cho học sinh các kiến thức sau:

- Khái niệm mảng một chiều.

- Cách khai báo mảng một chiều.

D. PHƯƠNG TIỆN DẠY HỌC

- Bảng đen, phấn trắng.

E. NỘI DUNG GIẢNG DẠY

I. ĐẶT VẤN ĐỀ CHO BÀI GIẢNG (10ph):

Ta có một ví dụ sau: Nhập vào nhiệt độ trung bình của mỗi ngày trong tuần. Tính và tin ra màn hình nhiệt độ trung bình của tuần và số lượng ngày trong tuần có nhiệt độ cao hơn nhiệt độ trung bình tính được.

Em nào cho thầy biết nếu không sử dụng mảng một chiều thì để giải bài toán này ta làm thế nào? => sử dụng câu lệnh IF-THEN.

- Chương trình minh hoạ:

Progam nhietdotuan;

Var

t1,t2,t3,t4,t5,t6,t7,tb: real;

Dem: integer;

Begin

Write(‘ nhap vao nhiet do cua 7 ngay:’); readln(t1,t2,t3,t4,t5,t6,t7);

tb:=(t1+t2+t3+t4+t5+t6+t7)/7;

Dem:=0;

If t1> tb then dem:=dem+1;

If t2> tb then dem:=dem+1;

If t3> tb then dem:=dem+1;

If t4> tb then dem:=dem+1;

If t5> tb then dem:=dem+1;

If t6> tb then dem:=dem+1;

If t7> tb then dem:=dem+1;

Writeln(‘nhiet do trung binh tuan:’,tb:4:1);

Writeln(‘so ngay nhiet do cao hon nhiet do trung binh trong tuan:’,dem:2);

Readln;

End.

=> Như vậy nếu sử dụng câu lệnh IF-THEN thì trong trường hợp tính số lượng ngày trong năm có nhiệt độ lớn hơn nhiệt độ trung bình ta làm thế nào? => Phải sử dụng nhiều câu lệnh IF-THEN, bài toán trở nên phức tạp và khó khăn hơn. Để giải quyết vấn đề này người ta đã đưa ra một kiểu dữ liệu để lưu các giá trị này, đó là kiểu dữ liệu có cấu trúc - Kiểu dữ liệu mảng. Kiểu dữ liệu mảng cho phép ta có thể truy xuất tới bất kỳ một phần tử nào có giá trị. Các thao tác trên các biến trở nên dễ dàng hơn. Vậy kiểu mảng là gì ta sang bài học mới.

II. NỘI DUNG BÀI HỌC

Thời gian

Nội dung ghi bảng

Hoạt động của thầy

Hoạt động của trò

5ph

10 ph

15 ph

BÀI 11: KIỂU MẢNG (tiết 19)

1. Kiểu mảng 1 chiều

Khái niệm: Là một dãy hữu hạn bao gồm các phần tử cùng kiểu, được đặt tên mỗi pt có chỉ số nhất định và có chiều dài nhất định.

VD1: Mảng nhiệt độ:

+ Xây dựng kiểu mảng:

.Tên kiểu mảng.

.Số lượng phần tử;

.Kiểu dữ liệu của phần tử.

.Khai báo các biến cho mảng

.Cách tham chiếu đến phần tử.

a. khai báo:

C1: Khai báo trực tiếp

Var <tên mảng> : array [kiểu chỉ số] of <kiểu phần tử>;

VD2: Khai báo mảng nhiệt độ.

Var

Nhietdo : array [1..7] of real;

C2:Khai báo gián tiếp

Type <tên kiểu mảng> = array [kiểu chỉ số] of <kiểu phần tử>;

Var <tênmảng> : <tên kiểu mảng>

VD3: Khai báo mảng nhiệt độ.

Type

Mangnhietdo = array [1..7] of real;

Var

Nhietdo : mangnhietdo;

* Chú ý:

- Kiểu chỉ số là một đoạn số nguyên liên tục n1..n2. (n1≤ n2). Cho biết số phần tử có trong mảng.

- Kiểu phần tử là kiểu của các phần tử trong mảng.

- Cách nhập và truy xuất (tham chiếu) tới các phần tử trong mảng:

+ Tham chiếu tới các phần tử của mảng được xác định bởi tên mảng cùng với chỉ số được viết trong cặp dấu ngoặc [và].

VD: Giá trị của phần tử thứ 5 trong mảng nhiệt độ là nhietdo[5] = 41.6

+ Dùng câu lệnh FOR-DO để nhập và xuất giá trị phần tử của mảng.

VD:

* Thao tác nhập nhiệt độ cho 7 ngày trong tuần:

For i:=1 to 7 do

Begin

Write (‘nhap nhiet do cua ngay thu’,i:2,’ =’); readln(nhietdo[i]);

End.

* Thao tác xuất nhiệt độ cho 7 ngày trong tuần:

For i:=1 to 7 do

Begin

Write (‘ nhiet do cua ngay thu’,i:2,’ =’, nhietdo[i]:10:2);

End.

- Thao tác gán mảng với mảng: Cho mảng A và mảng B cùng kiểu. Ta viết A:=B thì tất cả các giá trị mảng B sẽ nằm trong mảng A.

VD:

Var A,B : array[1..5] of byte;

i:byte;

Begin

For i:=1 to 5 do a[i] := i;

B:=A;

...

End.

- Thao tác gán giá trị cho mảng:

a[i] := i;

- Giáo viên viết đề bài:

- Em nào có thể nêu khái niệm về mảng.

=> Mảng là một dãy hữu hạn các phần tử, nó có tên, chỉ số phần tử và chiều dài nhất định

- VD mảng nhiệt độ có 7 phần tử, mỗi phần tử là nhiệt độ của ngày trong tuần. Chỉ số i là vị trí thứ i của phần tử trong mảng. Do đó để lưu nhiệt độ của các ngày trong tuần người ta sử dụng cấu trúc mảng như trên.

- Em nào cho thầy biết khi xây dựng kiểu mảng một chiều thì ngôn ngữ lập trình cung cấp cho người lập trình những quy tắc cho phép xây dựng mảng một chiều những vấn đề gì?

- Bất kỳ bài toán nào có sử dụng biến cũng cần phải khai báo, vậy khi dùng biến mảng một chiều thì ta cần phải khai báo. Có mấy cách khai báo?

- Cú pháp khai báo trực tiếp như thế nào?

- Em nào có thể khai báo mảng nhiệt độ đã cho ở trên?

- Trong trường hợp ta cần nhiều mảng có cùng kiểu mảng thì làm thế nào? Có phải cần khai báo nhiều lần như khai báo trực tiếp không?

Var

Nhietdo : array [1..7] of real;

Nhietdo2 : array [1..7] of real;

Nhietdo3 : array [1..7] of real;

Ta có cách khai báo gián tiếp nhằm hạn chế việc khai báo dài dòng như trên mà vẫn đảm bảo như bài toán yêu cầu.

- Em nào có thể khai báo gián tiếp cho biến mảng nhiệt độ ở trên.

- Bây giờ em nào có thể khai báo một biến mảng cho bài toán sau theo 2 cách: Khai báo một biến mảng số nguyên bất kỳ.

VD4: Khai báo biến mảng nguyên.

C1: Khai báo trực tiếp

Var m_nguyen : array[1..n] of integer;

C2: Khai báo gián tiếp

Type mang = array [1..n] of integer;

Var mang_nguyen : mang;

- Em nào có thể cho thầy biết là để đưa ra giá trị nhiệt độ của ngày thứ 5 trong mảng nhiệt độ ở trên ta làm thế nào?

- Ta có thể truy xuất bất kỳ nhiệt độ của từng phần tử trong mảng được không?

- Để nhập nhiệt độ của 7 ngày trong tuần vào mảng ta làm thế nào?

- Dùng câu lệnh FOR-DO để nhập và xuất giá trị phần tử của mảng.

- Em nào có thể viết đoạn chương trình nhập nhiệt độ của 7 ngày trong tuần?

- Tương tự em nào có thể viết đoạn chương trình xuất nhiệt độ trung bình của mỗi ngày sau khi đã nhập.

- Cho a,b là các biến có cùng một kiểu mảng và giả sử các phần tử của biến a đã được gán giá trị, khi đó ta có thể dùng lệnh gán b:=a; Sau lệnh gán này các phần tử của biến mảng b có giá trị tương ứng giống như các phần tử của biến mảng a.

Học sinh theo dỏi, ghi chép bài học.

Học sinh theo dỏi, ghi chép và trả lời.

Học sinh theo dỏi, ghi chép và trả lời.

Học sinh theo dỏi, ghi chép và trả lời.

Học sinh theo dỏi, ghi chép và trả lời.

Học sinh theo dỏi, ghi chép và làm bài

Học sinh theo dỏi, ghi chép và làm bài

III. CỦNG CỐ BÀI HỌC VÀ BÀI TẬP VỀ NHÀ (5 ph)

1. Củng cố: Qua bài học HS nắm vững những kiến thức trọng tâm sau:

+ Nguyên tắc sử dụng mảng

+ Cách khai báo và thao tác trên mảng.

2. Bài tập:

Bài 1: Tìm hiểu và viết chương trình cho bài toán sau: Nhập vào nhiệt độ trung bình của n ngày bất kỳ trong năm. Tính và tin ra màn hình nhiệt độ trung bình của n này đó và số lượng ngày trong có nhiệt độ cao hơn nhiệt độ trung bình tính được.

Bài 2: Tìm hiểu trước 2 VD tiếp theo trong sách giáo khoa.

Bài 3: Viết chương trình nhập n phần tử là các số nguyên cho mảng 1 chiều và thực hiện các công việc sau:

a) Đếm xem có bao nhiêu số chẵn, bao nhiêu số lẻ và hiển thị dãy số chẵn, dãy số lẻ trên..

b) Đếm xem có bao nhiêu số nguyên dương, số nguyên âm và hiển thị dãy các số trên.

BÀI 11: KIỂU MẢNG (tiết 20-21) - (Ngày soạn: 22/10/2009)

A. MỤC ĐÍCH VÀ YÊU CẦU

1. Mục đích:

- Củng cố và giúp HS hiểu sâu sắc hơn thuật toán tìm kiếm, sắp xếp cơ bản mà HS đã được học ở lớp 10.

- Minh hoạ, củng cố và nâng cao những hiểu biết của HS trong tiết 1 về mảng một chiều.

- Hình thành kĩ năng cơ bản về sử dụng kiểu mảng trong cài đặt chương trình.

2. Yêu cầu:

- Học sinh đã ôn lại thuật toán của lớp 10 về các phép duyệt dãy số, sắp xếp, tìm kiếm...

B. PHƯƠNG PHÁP GIẢNG DẠY

- Lấy học sinh làm trung tâm, lấy các VD cụ thể để học sinh nắm vững bài học.

- Thuyết trình, diễn giải, hỏi đáp.

C. KIẾN THỨC TRỌNG TÂM

Trong bài này cần cung cấp cho học sinh các kiến thức sau:

- Thuật toán tìm kiếm, sắp xếp.

- Biết cách thao tác trên mảng 1 chiều.

D. PHƯƠNG TIỆN DẠY HỌC

- Bảng đen, phấn trắng.

E. NỘI DUNG GIẢNG DẠY

I. KIỂM TRA BÀI CŨ (10ph):

1. Nêu 2 cách khai báo biến mảng?

2. Để nhập hoặc xuất dữ liệu trong mảng 1 chiều ta làm thế nào?

3. Viết chương trình bài: Nhập vào nhiệt độ trung bình của n ngày bất kỳ trong năm. Tính và tin ra màn hình nhiệt độ trung bình của n này đó và số lượng ngày trong có nhiệt độ cao hơn nhiệt độ trung bình tính được.

const max = 366;

type mangnd = array[1..max] of real;

var nhietdo : mangnd;

dem, i, n: byte;

tongnd, tb: real;

begin

write('nhap so ngay:'); readln(n);

tongnd:=0;

for i:=1 to n do

begin

write('nhap nhiet do ngay thu',i:2,'=');

readln(nhietdo[i]);

tongnd:=tongnd+nhietdo[i];

end;

dem:=0; tb:=tongnd/n;

for i:=1 to n do

if nhietdo[i]>tb then dem:=dem+1;

writeln('nhiet do trung binh cua',n:2,'ngay la',tb:10:2);

writeln('so ngay co nhiet do lon hon ',tb:12:2,' la:', dem:2);

readln

end.

II. NỘI DUNG BÀI HỌC

Thời gian

Nội dung ghi bảng

Hoạt động của thầy

Hoạt động của trò

- Chúng ta xét một số VD sau:

VD1: Tìm phần tử lớn nhất của dãy số nguyên.- Yêu cầu xác định bài toán: Input và output?

- Yêu cầu HS đưa ra thuật toán liệt kê đã được học ở lớp 10.

- Nhận xét và đưa ra thuật toán chính xác.

- Em nào có thể thực hiện theo thuật toán cho một bộ test sau:

N=4, a1=4,a2=2, a­3=7,a4=1.

- Yêu cầu đọc SGK và suy nghĩ về chương trình để trả lời câu hỏi.

? Trong bài này ta cần khai báo những biến nào?

­- Ta nhận thấy dãy các số nguyên nên khai báo theo kiểu biến mảng và mảng này là mảng các số nguyên có dấu. Ngoài ra chúng ta có thể khai báo một số khai báo khac nữa như: khai báo thư viện, khai báo hằng, khai báo kiểu dữ liệu mảng.

- Một em hãy lên bảng viết đoạn chương trình nhập giá trị cho các phần tử của mảng.

- t luận và vừa viết chương trình vừa giải thích. ở đây chỉ số của phần tử mang giá trị lớn nhất chúng ta sẽ chỉ ra phần tử lớn nhất cuối cùng.

? Như vậy chúng ta cần khai báo thêm một biến nào?

- Chúng ta tìm hiểu tiếp VD tiếp theo:

VD2: Sắp xếp dãy số nguyên bằng thuật toán tráo đổi.

- Yêu cầu xác định bài toán: Input và output bài toán?

- Yêu cầu nều thuật toán tráo đổi đã được học ở lớp 10.

- Từ thuật toán trên ta thực hiện bộ test sau:

Với N =4, a1=4, a2=2,a­3=7,a4=1.

B1: Nhập N=4 và a1= 4, a2=2, a­3=7,a4=1.

B2: M🡨N(M=4);

Lần 1: B3: M<2(4<2) =>sai.

B4:M🡨M-1=4-1=3, i🡨0;

B5: i🡨i+1=0+1=1.

B6: (i=1)>(M=3)=>sai

B7: (a1=4)>(a1+1=2)=>đúng nên tráo đổi a1và a2 cho nhau.=>a1=2,a2=4.

B8: Quay lại B5.

B5: i🡨 i+1=1+1=2;

B6: (i=2)>(M=4)=>sai.

B7: (a2=4)>(a3=7)=>sai.

B8: Quay lại B5.

B5: i🡨i+1=2+1=3.

B6: (i=3)>(M=3)=>sai.

B7:(a3=7)>(a3+1=1)=>đúng nên tráo đổi a3 và a4 cho nhau=>a3=1, a4=7.

B8: quay lại B5.

B5: i🡨i+1=3+1=4.

B6: (i=4)>(M=3)=>đúng nên quay lại B3.

Lần 2: …

Lần 3:…

Lần 4:…

Tương tự như cách thực hiện lần 1 ta sẽ có dãy được sắp xếp thành dãy không giảm:1 2 4 7.

? Theo các em qua thuật toán trên ta cần khai báo những biến nào?

- Nhận xét và kết luận những biến cần khai báo. Trước hết chúng ta làm quen với một thuật toán tráo đổi 2số ai và aj nhau như sau:

Tam:=ai; ai=aj; aj=tam;

Vì vậy chúng ta cần khai báo các biến sau:

N, i, tam, mảng số nguyên, j.

- Chúng ta sẽ có phần khai báo: tên chương trình, thư viện, hằng, khai báo dữ liệu mảng như ví dụ 1. yêu cầu các em tự viết vào

Học sinh theo dỏi, ghi chép bài học.

Học sinh theo dỏi, ghi chép và trả lời.

Học sinh theo dỏi, ghi chép và trả lời.

Học sinh theo dỏi, ghi chép và trả lời.

Học sinh theo dỏi, ghi chép và trả lời.

Học sinh theo dỏi, ghi chép và làm bài

Học sinh theo dỏi, ghi chép và trả lời.

Học sinh theo dỏi, ghi chép và trả lời.

III. CỦNG CỐ BÀI HỌC VÀ BÀI TẬP VỀ NHÀ (5 ph)

1. Củng cố: Qua bài học HS nắm vững những kiến thức trọng tâm sau:

+ Cách sử dụng mảng trong một số bài toán phức tạp.

+ Thao tác duyệt các phần tử trên mảng.

2. Bài tập:

Bài 1: Viết chương trình nhập vào một dãy số bất kỳ và in ra màn hình dãy số vừa nhập.

Bài 2: Tìm hiểu mảng 2 chiều.

Bài 3: Viết chương trình nhập vào n số nguyên dương rồi tính trung bình cộng và trung bình nhân của nó.

Hướng dẫn:

- Khai báo biến n,i kiểu số nguyên. Biến mảng m kiểu số nguyên để chứa dãy số nhập vào. Các biến tbc,tbn kiểu số thực để chứa kết quả.

- Sử dụng lệnh for tính tổng, tích của n số nguyên dương đó từ đó tính trung bình cộng và trung bình nhân.

Bài 4: Nhập 1 dãy số thực cho mảng a gồm n phần tử, tính trung bình cộng của các số âm.

uses crt;

const max=100;

type mang=array[1..max] of real;

var i,n,d: integer;

a:mang;

s:real;

begin

clrscr;

write('nhap so phan tu n= ');readln(n);

writeln('nhap gia tri cho mang:');

for i:=1 to n do

begin

write('a[',i,']= ');

readln(a[i]);

end;

s:=0; d:=0;

for i:=1 to n do

if a[i]<0 then

begin

inc(d);

s:=s+a[i];

end;

if d>0 then writeln('trong day co ',d:2,'so am va tong cua chung la',s:8:2)

else writeln('khong co so am nao ca');

readln

end.

Bài 5 (BT giao về nhà nhưng không sửa để dành kiểm tra 1t): Nhập 1 dãy số thực cho mảng a gồm n phần tử, hãy kiểm tra:

a) Kiểm tra là dãy số tăng hay không?

b) Dãy có phải là dãy số đan dấu không? (không xét số 0)

const max=100;

type mang=array[1..max] of real;

var i,n,d1,d2: integer;

a:mang;

begin

write('nhap so phan tu n= ');readln(n);

writeln('nhap gia tri cho mang:');

for i:=1 to n do

begin

write('a[',i,']= ');

readln(a[i]);

end;

d1:=0; d2:=0; (d1 kiểm tra dãy tăng, d2 kiểm tra dãy đan dấu)

for i:=1 to n-1 do

begin

if a[i] > a[i+1] then inc(d1);

if a[i]*a[i+1]>=0 then inc(d2);

end;

if d1=0 then writeln('la day tang')

else writeln('khong phai day tang');

if d2=0 then writeln('day dan dau')

else writeln('day khong dan dau');

readln

end.

BÀI 11: KIỂU MẢNG (tiết bổ sung không theo PPCT)

A. MỤC ĐÍCH VÀ YÊU CẦU

1. Mục đích:

- Minh hoạ, củng cố và nâng cao những hiểu biết của học về mảng 1 chiều ( cấu trúc, cách khai báo, cách tham chiếu một phần tử và ích lợi của kiểu dữ liệu này), từng bước hình thành thao tác trên mảng 2 chiều.

- Hình thành kỹ năng cơ bản về sử dụng kiểu mảng trong cài đặt chương trình.

- Rèn luyện thái độ tích độ tích cực học tập.

- Rrèn luyện tính kiên nhẫn, thích phám phá.

2. Yêu cầu:

HS cần nắm được:

- Kiểu mảng 1 chiều.

- Biết thao tác trên mảng 2 chiều.

B. PHƯƠNG PHÁP GIẢNG DẠY

- Lấy học sinh làm trung tâm, lấy các VD cụ thể để học sinh nắm vững bài học.

- Thuyết trình, diễn giải, hỏi đáp.

C. KIẾN THỨC TRỌNG TÂM

Trong bài này cần cung cấp cho học sinh các kiến thức sau:

- Khái niệm mảng 2 chiều.

- Cách khai báo mảng 2 chiều.

D. PHƯƠNG TIỆN DẠY HỌC

- Bảng đen, phấn trắng.

E. NỘI DUNG GIẢNG DẠY

I. KIỂM TRA BÀI CŨ (10ph):

Bài 1: Viết chương trình nhập vào một dãy số bất kỳ và in ra màn hình dãy số vừa nhập.

Bài 2: Viết chương trình nhập vào n số nguyên dương rồi tính trung bình cộng của nó.

Chương trình:

Program Tinh_tb;

Var n,i: integer;

tbc,tbn :real;

a:array[1..100] of integer;

Begin

Write(' nhap n>0 : ');Readln(n);

tbc:=0; tbn:=1;

For i:=1 to n do

Begin

Write('a[',i,'] >0: ');

Readln(a[i]);

Tbc:=tbc+a[i];

End;

tbc:= tbc/n;

writeln( 'trung binh cong cua day la:', tbc:8:2);

Readln

End.

II. NỘI DUNG BÀI HỌC

Thời gian

Nội dung ghi bảng

Hoạt động của thầy

Hoạt động của trò

15 ph

15 ph

BÀI 11: KIỂU MẢNG

2. Kiểu mảng hai chiều

Các yếu t­ố xác định mảng hai chiều:

+ Tên mảng một chiều.

+ Số phần tử trên một dòng và một cột.

+ Kiểu dữ liệu của phần tử.

+Cách khai báo biến mảng một chiều.

* 2 cách tạo kiểu mảng 2 chiều:

a) Khai báo:

Cách 1: Khai báo trực tiếp

Var <tên biến mảng>:array[chỉ số hang, chỉ số cột] of <kiểu phần tử>;

Cách 2: Khai báo gián tiếp

Type <Tên kiểu mảng> = array [chỉ số dòng, Chỉ số cột] Of <Kiểu phần tử>;

Var <tên mảng>:<tên kiểu mảng>;

VD: Khai báo mảng 2 chiều dùng cho bảng cửu chương:

C1:Khai báo trực tiếp:

Var Bang_CC : array [1..9,1..10] of integer;

C2: Khai báo gián tiếp

Type Mang = array [1..9,1..10] of integer;

Var Bang_CC : Mang;

Chú ý:

- Ngoài mảng 1 và 2 chiều còn có mảng nhiều chiều.

- Tham chiếu đến các phần tử: Tên_biến_mảng[chỉ_số_dòng, Chỉ_số_cột];

- Để nhập dữ liệu và xuất dữ liệu từ mảng ta sử dụng 2 vòng FOR-DO lồng nhau.

- Cách nhập dữ liệu trong mảng 2 chiều:

Writeln('nhap mang 2 chieu:');

For i:=1 to n do

For j:=1 to n do

Begin

Write('a[',i,',',j,']= ');

Readln(a[i,j]);

End;

- Cách xuất dữ liệu trong mảng 2 chiều:

Writeln(‘xuat DL mang 2 chieu:');

For i:=1 to n do

For j:=1 to n do

Begin

Write('a[',i,',',j,']= ', a[i,j]:3);

End;

b) Một số ví dụ:

VD1: Viết chương trình tính và đưa ra màn hình bảng cửu chương.(SGK)

VD2:Viết chương trình nhập vào từ bàn phím các phần tử của mảng hai chiều B gồm 5, hàng 7 cột với các phần tử là các số nguyên và một số nguyên K. Sau đó, đưa ra màn hình các phần tử của mảng có giá trị nhỏ hơn K.

- Giới thiệu VD trong SGK (trang 59): Tính và đưa ra màn hình bảng cửu chương.

- Hỏi: Sử dụng kiến thức mảng một chiều, hãy đưa ra cách lưu trữ bảng cửu chương? => Sử dụng 9 mảng một chiều, một mảng lưu một hàng của bảng.

- Hỏi tiếp: Với các lưu trữ như vậy ta cần phải khai báo bao nhiêu biến mảng? => Dùng mảng một chiều ta khai báo 9 biến mảng.

- Vậy khó khăn gì khi khai báo 9 biến mảng => Khó khăn viết chương trình nhập xuất dữ liệu dài.

- Để khắc phục khó khăn ta xem một mảng một chiều là một phần tử, ta ghép 9 mảng một chiều thành một mảng hai chiều.

- Yêu cầu HS nhận xét về mảng hai chiều => Nhận xét: Nếu xem mỗi hàng của mảng hai chiều là một phần tử thì ta có thể nói mảng hai chiều là mảng một chiều mà mỗi phần tử là mảng một chiều.

- Hỏi: Để mô tả kiểu mảng hai chiều, ta cần xác định những yếu tố chính nào?

- Em hãy nêu cách khai báo biến mảng 2 chiều.

- Để tham chiếu đến các phần tử của mảng 2 chiều ta làm thế nào?

- Em nào nêu cách nhập và xuất dữ liệu của mảng 2 chiều ?

- Vậy việc nhập và xuất dữ liệu giống trong mảng 1 chiều nhưng dùng câu lệnh FOR-DO lồng nhau.

- Các em nghiên cứu VD 1 trong sách giáo khoa và cho biết cách tính bảng cửu chương trong chương trình?

- Các em nghiên cứu VD1 trong sách giáo khoa và trả lời các câu hỏi sau:

+ Để giải bài toán trên cần loại mảng nào, vì sao?

+ Giá trị lưu trong mảng là kiểu số gì?

+ Khi cài đặt bài toán trên có cần nhập giá trị cho mảng không? Vì sao?

+ Để tính giá trị của bảng cửu chương ta làm thế nào?

+ Để in giá trị của bảng cửu chương ta làm thế nào?

- Em nào có thể viết chương trình cài đặt cho bài toán trên.

- Các em nghiên cứu VD 2: Để nhập các giá trị cho mảng ta làm thế nào?

- Để so sánh các giá trị của mảng nhỏ hơn K ta làm thế nào?

- Em nào có thể viết chương trình cài đặt cho bài toán trên.

Học sinh theo dỏi, ghi chép bài học.

Học sinh theo dỏi, ghi chép và trả lời.

Học sinh theo dỏi, ghi chép và trả lời.

Học sinh theo dỏi, ghi chép và trả lời.

Học sinh theo dỏi, ghi chép và trả lời.

Học sinh theo dỏi, ghi chép và làm bài

Học sinh theo dỏi, ghi chép và làm bài

III. CỦNG CỐ BÀI HỌC VÀ BÀI TẬP VỀ NHÀ (5 ph)

1. Củng cố: Qua bài học HS nắm vững những kiến thức trọng tâm sau:

+ Nguyên tắc sử dụng mảng 2 chiều.

+ Cách khai báo và thao tác trên mảng 2 chiều.

2. Bài tập:

Bài 1: Chuẩn bị bài thực hành số 3.

BÀI TẬP VÀ THỰC HÀNH SỐ 3 (tiết 23-24) - (Ngày soạn: 28/10/2009)

A. MỤC ĐÍCH VÀ YÊU CẦU

1. Mục đích:

- Nâng cao kĩ năng sử dụng một số câu lệnh và một số kiểu dữ liệu thông qua việc tìm kiếm, chạy thử các chương trình có sẵn.

- Biết giải một số bài toán tính toán, tìm kiếm đơn giản trên máy tính.

2. Yêu cầu:

- Học sinh nắm được các kiến thức cơ bản về mảng.

B. PHƯƠNG PHÁP GIẢNG DẠY

- Chia lớp thành 2 nhóm nếu không đủ máy, 3HS/1máy.

- Lấy điểm thực hành theo các câu hỏi ý nghĩa các câu lệnh, các ý nhỏ yêu cầu bổ sung trong SGK (ý b Bài 1, ý b Bài 2).

C. KIẾN THỨC TRỌNG TÂM

Trong bài này cần cung cấp cho học sinh các kiến thức sau:

- Ôn tập mảng 1 chiều và 2 chiều.

D. PHƯƠNG TIỆN DẠY HỌC

- Sử dụng máy Projector.

- Bảng đen, phấn trắng.

E. NỘI DUNG GIẢNG DẠY

I. NỘI DUNG BÀI HỌC

Thời gian

Nội dung ghi bảng

Hoạt động của thầy

Hoạt động của trò

40 ph

40 ph

BÀI TẬP VÀ THỰC HÀNH SỐ 3 (tiết 23-24)

Bài 1: Tạo mảng A gồm n (n<=100) số nguyên, mỗi số có trị tuyệt đối không vượt quá 300. Tính tổng các phần tử của mảng là bội số của một số nguyên dương k cho trước.

a. Hãy tìm hiểu và chạy thử chương tình sau đây:
Program sum1;

uses crt;

const nmax=100;

type myarray= array[1..max] of integer;

Var a:myarray;

S, n, i, k: integer;

Begin

Clrscr; randomize;

writeln(‘nhập 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);

writeln;

write(‘nhập k=’);readln(k);

s:=0;

For i:=1 to n do

if a[i] mod k =0 then s:=s+a[i];

Writeln(‘tổng cần tính là:’, s);

Readln

End.

b. Hãy đưa các câu lệnh sau đây vào vị trí cần thiết nhằm sửa chương trình trong câu a) để có được chương trình đưa ra các số dương và số các số âm trong mảng.

posi, neg: integer

posi:= 0; neg:=0;

if a[i] >0 then posi:=posi+1

else if a[i]<0 then neg:=neg+1;

writeln(posi:4, neg:4);

Bài 2: Viết chương trình tìm phần tử lớn nhất của mảng và đưa ra màn hình chỉ số và giá trị của phần tử tìm được. Nếu có nhiều phần tư có cùng giá trị lớn nhất thì đưa ra phần tử có chỉ số nhỏ nhất.

a. Hãy tìm hiểu chương trình sau đây:
program maxelment;

const nmax=100;

type myarray=array[1..nmax] of integer;

var a:myarray;

n, i, j: integer;

begin

writeln(‘nhập số lượng phần tử của dãy số, n=’); readln(n);

for i:=1 to n do

begin

write(‘phần tử thứ’,i,’=’);

readln(a[i]);

end;
j:=1;

for i:=2 to n do

if a[i]>a[j] then j:=i;

write(‘chi so:’,j,’gia trị:’, a[j]:4);

readln;

end.

b. Chỉnh sửa chương trình để đưa ra chỉ số lớn nhất của các phần tử có cùng giá trị lớn nhất.

- Đưa ra nội dung bài thực hành:

Tạo mảng A gồm n (n<=100) số nguyên, mỗi số có trị tuyệt đối không vượt quá 300. Tính tổng các phần tử của mảng là bội số của một số nguyên dương k cho trước.

- Yêu cầu học sinh tìm hiểu và chạy thử chương trình trên.

  • Yêu cầu một HS trả lời yêu cầu của bài toán.

- Nhận xét và yêu cầu HS thực hành sửa chương trình ở câu a)và chạy chương trình vừa sửa..

- Suy nghĩ và trả lời.

Program sum1;

uses crt;

const nmax=100;

type myarray= array[1..max] of integer;

Var a:myarray;

S, n, i, k, posi, neg: integer;

Begin

Clrscr; randomize;

writeln(‘nhập 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);

writeln;

write(‘nhập k=’);readln(k);

posi:= 0; neg:=0;

if a[i] >0 then posi:=posi+1

else if a[i]<0 thenneg:=neg+1;

writeln(posi:4, neg:4);

Readln

End.

Bài 2. Hướng dẫn HS thực hành và làm bài tập.

Bài 2: câu b:?Chương trình có cần giữ lại đoạn tìm phần tử có giá trị lớn nhất không?

? Để đưa ra tất cả các chỉ số của các phần tử đạt giá trị lớn nhất đó có cần duyệt lại tất cả các phần tử trong mảng không?

b. Ta sửa nhu sau:

for i:=2 to n do

if a[i]>=a[j] then j:=i;

  • Cần giữ lại;
  • Cần duyệt lại tất cả các phần tử của mảng để làm được việc đó.

Học sinh theo dỏi, ghi chép và trả lời.

Học sinh theo dỏi, ghi chép và trả lời.

Học sinh theo dỏi, ghi chép và trả lời.

Học sinh theo dỏi, ghi chép và trả lời.

Học sinh theo dỏi, ghi chép và trả lời.

Học sinh theo dỏi, ghi chép và trả lời.

III. CỦNG CỐ BÀI HỌC VÀ BÀI TẬP VỀ NHÀ (10 ph)

1. Củng cố:

Cho HS dừng thực hành để kiểm tra trong 5phút. Đánh giá những kết quả làm được và chưa làm được của HS.

2. Bài tập về nhà:

  1. Viết chương trình để đưa ra chỉ số của các phần tử có cùng giá trị lớn nhất.
  2. Chuẩn bị bài thực hành số 4.
  3. Viết chương trình nhập n phần tử là các số nguyên dương vào mảng 1 chiều a và đếm xem có bao nhiêu phần tử bằng k? (k được nhập từ bàn phím).

BÀI TẬP VÀ THỰC HÀNH SỐ 4 (tiết 25-26) - (Ngày soạn: 28/10/2009)

A. MỤC ĐÍCH VÀ YÊU CẦU

1. Mục đích:

- 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 một thuật toán sắp xếp các phần tử của một 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.

- Rèn luyện HS một ý 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.

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

2. Yêu cầu:

- Học sinh nghiêm túc trong quá trình thực hành.

B. PHƯƠNG PHÁP GIẢNG DẠY

- Thuyết trình, hướng dẫn thực hành.

C. PHƯƠNG TIỆN DẠY HỌC

Máy chiếu projector, phòng máy, SGK, giáo án.

E. NỘI DUNG GIẢNG DẠY

I. NỘI DUNG BÀI HỌC

Thời gian

Nội dung ghi bảng

Hoạt động của thầy

Hoạt động của trò

30 ph

30 ph ph

20 ph

BÀI TẬP VÀ THỰC HÀNH SỐ 4 (tiết 25-26)

Bài 1: 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 cac giá trị khác nhau của n dưới đây. Qua đó nhận xét về thời gian chạy của chương trình.

a. {Chương trình SGK trang 65, 66}

b. Khai báo thêm biến nguyê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.

Bài 2: Hãy đọc và tìm hiểu những phân tích để viết chương trình giải bài toán:

Cho mảng a gồm n phần tử. Hãy viết chương trình 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 subsum1;

uses crt;

const nmax=100;

type myarray= array[1..max] of integer;

Var a, b:myarray;

n, i, j: integer;

Begin

Clrscr; randomize;

writeln(‘nhập 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);

writeln;

{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 tạo b}

for i:=1 to n do write(b[i]:5);

readln;

end.

Bài 3: Viết chương trình nhập n phần tử là các số nguyên dương vào mảng 1 chiều a và đếm xem có bao nhiêu phần tử bằng k? (k được nhập từ bàn phím).

- Đưa ra nội dung bài thực hành:

- Đoạn 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?

- For j:=n dowto 2 do

For i:=1 to n j-1 do

If a[i]>a[i+1] then

Begin

T:=a[i];

A[i]:=a[i+1];

A[i+1]:=a[i];

End;

- Qua bài thực hành số 3, chúng ta thấy có thể tăng biến Dem để đếm số lần tráo đổi hay không? Để làm điều đó phải đăt câu lệnh tăng biến Dem ở đâu?

- Có thể làm được. Và ta đặt nó như sau:

Dem:integer;

Dem:=0;

For j:=n dowto 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]:=a[i];

Dem:=dem+1;

End;

- Hướng dẫn học sinh thựchành.

Bài 2:

- Thực hành theo hướng dẫn của GV.

- Để ý ta thấy có hệ thức sau:

B[1]=a[1];

B[i]=b[i-1]+a[i];

Do đó, ta có thể đổi đoạn {băt đầu tạo b} đến{kết thúc tạo b} bởi hai lệnh:

b[1]:=a[1];

for i:=2 to n do B[i]:= b[i-1]+a[i];

Bài 3: Hướng dẫn HS thực hành bổ sung.

Học sinh theo dỏi, ghi chép và trả lời.

Chú ý theo dõi SGK nội dung bài thực hành .

Học sinh theo dỏi, thực hành và trả lời.

Học sinh theo dỏi, thực hành và trả lời.

Học sinh theo dỏi, thực hành và trả lời.

III. CỦNG CỐ BÀI HỌC VÀ BÀI TẬP VỀ NHÀ (10 ph)

1. Củng cố:

Cho HS dừng thực hành để kiểm tra trong 5phút. Đánh giá những kết quả làm được và chưa làm được của HS.

2. Bài tập về nhà:

  1. Sửa chương trình bài 2 thành chương trình hoàn chỉnh khi thay đổi đoạn {băt đầu tạo b} đến {kết thúc tạo b} bởi hai lệnh:

b[1]:=a[1];

for i:=2 to n do B[i]:=b[i-1]+a[i];

  1. Chuẩn bị bài học kiểu xâu.

BÀI 12: KIỂU XÂU (tiết 27-28) - (Ngày soạn: 09/11/2009)

A. MỤC ĐÍCH VÀ YÊU CẦU

1. Mục đích:

- Học sinh biết được xâu là một dãy ký tự (có thể coi xâu là mảng một chiều).

- Biết cách khai báo xâu và truy cập phần tử của xâu.

- Sử dụng được một số thủ tục, hàm thông dụng về xâu.

- Cài đặt được một số chương trình đơn giản về xâu.

2. Yêu cầu:

- Học sinh đã nắm được kiểu mảng.

- Hình thành tư duy về thuật toán xử lý kiểu xâu.

B. PHƯƠNG PHÁP GIẢNG DẠY

- Thuyết trình, vấn đáp.

C. KIẾN THỨC TRỌNG TÂM

Trong bài này cần cung cấp cho học sinh các kiến thức sau:

- Khai báo kiểu xâu

- Các hàm và thủ tục kiểu xâu.

D. PHƯƠNG TIỆN DẠY HỌC

- Bảng đen, phấn trắng, máy chiếu đa năng.

E. NỘI DUNG GIẢNG DẠY

II. NỘI DUNG BÀI HỌC

Thời gian

Nội dung ghi bảng

Hoạt động của thầy

Hoạt động của trò

10 ph

15 ph

15 ph

40 ph

BÀI 12: KIỂU XÂU (tiết 27-28)

* Một số khái niệm:

- Xâu là một dãy ký tự trong bảng mã ASCII.

- Mỗi ký tự được gọi là một phần tử của xâu.

- Số lượng ký tự trong xâu được gọi là độ dài của xâu.

- Xâu có độ dài bằng 0 được gọi là xâu rỗng.

- Tham chiếu tới phần tử trong xâu được xác định thông qua chỉ số của phần tử xâu.

- Chỉ số phần tử trong xâu thường được đánh số là 1, 2, 3...

- Trong NNLT Pascal, tham chiếu tới phần tử của nó được viết là:

<Tên biến xâu> [chỉ số]

* Cách khai báo và thao tác trên kiểu xâu:

1. Khai báo:

Var <tên biến> : String [độ dài lớn nhất của xâu];

Trong đó:

- String: Là tên dành riêng để khai báo kiểu xâu.

VD:

Var Ten : String[10] ;

Ho_dem : String[50] ;

Que : String ;

Chú ý:

- Nếu không khai báo độ dài tối đa cho biến xâu ký tự thì độ dài ngầm định của nó là 255.

VD: Var xaumax : String;

- Hằng xâu được đặt trong cặp dấu nháy đơn ‘’.

2. Các thao tác xử lý xâu:

- Ghép xâu, nối xâu (+):

VD: S1 = ‘HA’, S2 = ‘NOI’

S = S1+S2 = ‘HA NOI’

- Các phép so sánh xâu (SGK):

* Pascal sẽ so sánh xâu theo thứ tự từ trái sang phải.

* S1 > S2 nếu ký tự đàu tiên khác nhau giữa chúng kể từ trái sang phải trong xâu S1 có mã ASCII lớn hơn.

VD: S1 = ‘aB’, S2 = ‘AB’

=> S1 > S2. vì a = 97, A = 65.

* Nếu S1 S2 thì S1 < S2.

S1 = ‘Bc’ , S2 = ‘aBcd’

=> S1 < S2

- Một số thủ tục và hàm chuẩn:

* Delete(St,vt,n): Xóa đi n ký tự bắt đầu từ vị trí vt trong xâu st

VD: St = ‘Song Hong’

Delete(St,1,5) Kết quả

St1 = ‘Hong’

* INSERT(St1, St2, vt): Chèn xâu St1 vào xâu St2 bắt đầu từ vị trí vt.

VD:

St1 = ‘vi-’

St2 = ‘May-tinh’

Insert(St1,st2,5) Kết quả

St2 = ‘May-vi-tinh’

COPY(St, vt, n): Tạo một xâu gồm n ký tự liên tiếp được lấy trong xâu St bắt đầu từ vị trí vt.

VD: St1 = ‘Xau-ky-tu’

Copy(St,5,5) Kết quả St2 = ‘ky tu’

LENGTH(St): St = ‘Tin hoc’

Length(St) Kết quả St có độ dài là 7

POS(St1, St2): Cho vị trí xuất hiện đầu tiên của xâu St1 trong xâu St2. Nếu xâu St1 không có trong xâu St2 thì cho kết quả là 0.

VD:

St2 = ‘Tin hoc’

St1 = ‘hoc’

Pos(St1,St2) Kết quả xuất hiện đầu tiên của St1 tại vị trí 5

UPCASE(Ch): Cho giá trị là ký tự in hoa ứng với ký tự Ch.

Ch:= Upcase(a) cho kết quả là ch = A

* Một số VD trong SGK:

VD1: Viết chương trình nhập vào 2 biến xâu và in ra xâu dài hơn.

VD2: Nhập vào 2 xâu ký tự và kiểm tra ký tự đầu tiên của xâu thứ nhất có trùng với ký tự cuối cùng của xâu thứ 2 không ?

- Đặt vấn đề: Để lưu trữ thông tin họ tên của một người, các kiểu dữ liệu đã học có đáp ứng được không?

- Phân tích các phương án của học sinh, từ đó đưa ra yêu cầu cần phải sử dụng một kiểu dữ liệu mới đó là kiểu xâu.

- Giới thiệu một số khái niệm và thao tác thường dùng khi làm việc với xâu ký tự trong lập trình nói chung.

- Đây là cách khai báo trong NGLT Pascal, đối với các ngôn ngữ lập trình khác có thể có cách khai báo khác.

- Nếu không khai báo độ dài tối đa cho biến xâu ký tự thì độ dài ngầm định của nó là bao nhiêu?

- Cho xâu ký tự: ‘nGuyen vaN A’. Để xử lý xâu trên cần bao nhiêu thao tác để được xâu hoàn chỉnh ‘Nguyen Van A’ ?

  • Làm sao để biết một ký tự là dấu cách ?
  • Làm thế nào để xóa đi một vài ký tự?
  • Làm thế nào để thêm một vài ký tự ?
  • Để in chữ hoa thì làm thế nào?
  • Làm thế nào để kiểm tra xâu có bao nhiêu ký tự?

=> Từ đó đưa ra một số thủ tục và hàm chuẩn.

- Ứng với mỗi thủ tục và hàm chuẩn giáo viên lấy VD cụ thể trong Pascal để các em hiểu.

- Trong các VD đã có trong Sách giáo khoa, giáo viên đặt ra các câu hỏi gợi mở để học sinh viết chương trình.

Học sinh theo dỏi, ghi chép bài học.

Học sinh theo dỏi, ghi chép và trả lời.

Học sinh theo dỏi, ghi chép và trả lời.

Học sinh theo dỏi, ghi chép và trả lời.

Học sinh theo dỏi, ghi chép và trả lời.

Học sinh theo dỏi, ghi chép và làm bài

Học sinh theo dỏi, ghi chép và làm bài

III. CỦNG CỐ BÀI HỌC VÀ BÀI TẬP VỀ NHÀ (10 ph)

1. Củng cố: Qua bài học HS nắm vững những kiến thức trọng tâm sau:

- Nhắc lại một số khái niệm xâu.

- Các thủ tục và hàm.

2. Bài tập:

Bài 1: Bài 10 (trang 80): Viết chương trình nhập từ bàn phím xâu ký tự S có độ dài không quá 100. Hãy cho biết có bao nhiêu chữ số xuất hiện trong xâu S.

Cách 1:

Write(‘Nhap xau St: ‘); Readln(St);

For i:=1 to length(St) do

If St[i] IN [‘0’..’9’] Then d:=d+1;

Write(‘So ky tu chu so trong xau: ‘, d);

Cách 2:

For i:=1 to length(St) do

If ( ‘0’ <= st[i] ) and ( s[i] <= ‘9’ ) Then d:=d+1;

Write(‘So ky tu chu so trong xau: ‘, d);

Bài 2: Viết chương trình nhập một xâu ký tự. Thực hiện thao tác sao chép xâu tại vị trí bất kỳ.

var s1,s2:string;

pos, num:integer;

begin

write('nhap xau s1: '); readln(s1);

write('vi tri ky tu can sao chep: '); readln(pos);

write('so luong ky tu can sao chep: '); readln(num);

s2:=copy(s1,pos,num);

writeln('xau moi la: ',s2);

readln

end.

Bài 3: Nhập 1 xâu, viết ra màn hình xâu dài hơn

Sử dụng câu lệnh: If length(s1) > Length(s2) then

BÀI TẬP VÀ THỰC HÀNH SỐ 5 (tiết 30-31) - (Ngày soạn: 16/11/2009)

A. MỤC ĐÍCH VÀ YÊU CẦU

1. Mục đích:

- Khắc sâu thêm phần kiến thức về lý thuyết kiểu xâu kí tự, đặc biệt là các hàm và thủ tục liên quan.

- Nắm được một số thuật toán cơ bản: tạo xâu mới, đếm số lần xuất hiện một kí tự…

- Khai báo biến kiểu xâu.

- Nhập, xuất giá trị cho biến xâu.

- Duyệt qua tất cả các kí tự của xâu.

- Sử dụng được các hàm và thủ tục chuẩn.

2. Yêu cầu:

- Tích cực chủ động trong thực hành

B. PHƯƠNG PHÁP GIẢNG DẠY

- Chia lớp thành 2 nhóm nếu không đủ máy, 3HS/1máy.

C. PHƯƠNG TIỆN DẠY HỌC

1. Chuẩn bị của giáo viên:

- Máy chiếu

2. Chuẩn bị của học sinh:

- Sách giáo khoa, bài tập ở nhà

D. NỘI DUNG GIẢNG DẠY

I. NỘI DUNG BÀI HỌC

Thời gian

Nội dung ghi bảng

Hoạt động của thầy

Hoạt động của trò

30 ph

30 ph

20

ph

BÀI TẬP VÀ THỰC HÀNH SỐ 5 (tiết 30-31)

Bài thực hành 1: Nhập vào một xâu, kiểm tra xem nó có phải là một palindrome hay không?

a) Chạy thử chương trình:

Var i, x: byte; a, p: string;

Begin

Write(‘nhap vao mot xau’);

Readln(a);

x:= length(a);

p:=’ ‘;

for i:=x downto 1 do p := p+a[i];

if a = p then write(‘xau la palidrom’)

else write(‘xau khong la palindrome’);

readln;

end.

b) Viết lại chương trình trên trong đó không dùng biến xâu p.

Cách 1:

Var i, x: byte; a: string;

Palin: boolean;

Begin

Write(‘nhap xau’); Readln(a);

x:= length(a);

palin := true;

for i:=1 to x div 2 do

if a[i]<>a[x-i+1] then palin:=false;

if palin then write(‘ la palidrom’)

else write(‘xau khong la palindrome’);

readln;

end.

Cách 2:

Var i, x: byte; a: string;

Begin

Write(‘nhap xau’); Readln(a);

x:= length(a);

i:=1;

while (i<=(x div 2)) and (a[i]=a[x-i+1]) do i:=i+1;

if i>(x div 2) then write(‘ la palidrom’)

else write(‘xau khong la palindrome’);

readln;

end.

Bài thực hành 2: Viết chương trình nhập vào một xâu kí tự S và thông báo ra màn hình số lần xuất hiện của mỗi chữ cái tiếng anh trong S (không phân biệt chữ hoa chữ thường)

Bài thực hành 3: Thay thế xâu kí tự “anh” bằng xâu “em”.

var st:string;

i, vt:integer;

begin

write('nhap xau ');readln(st);

writeln;

while pos('anh',st) <> 0 do

begin

vt:= pos('anh',st);

delete(st,vt,3);

insert('em',st,vt);

end;

write('xau moi la ',st);

readln

end.}

Bài thực hành 1:

- Tìm hiểu đề bài

- Giới thiệu nội dung đề bài lên bảng.

- Diễn giài: một xâu được gọi là palidrom nếu ta đọc các kí tư từ phải sang trái sẽ giống khi đọc từ trái sang phải (Xâu đảo)

- Yêu cầu học sinh cho hai ví dụ về xâu palidrom và một ví dụ không phải là palidrom

- Tìm hiểu chương trình gợi ý

- Chiếu chương trình lên bảng

- Hỏi: chương trình sau đây có chức năng làm gì? kết quả in ra màn hình như thế nào?

- Thực hiện chương trình để học sinh kiểm nghiệm suy luận của mình .

- Cải tiến chương trình:

- Nêu yêu cầu mới: viết lại chương trình mà không sử dụng biến trung gian p.

- Yêu cầu: nhận xét về các cặp ở vị trí đối xứng nhau trong một xâu palidrom?

- Hỏi: kí tự thứ i đối xứng với kí tự vị trí nào?

- Hỏi: cần phải so sánh bao nhiêu kí tự trong xâu để biết đươc xâu đó là palidrom?

- Hỏi: dùng cấu trúc lặp để so sánh?

- Yêu cầu học sinh viết chương trình hoàn chỉnh

- Yêu cầu học sinh nhập dữ liệu cho sẵn của giáo viên và thông báo kết quả

- Xác nhận những bài làm có kết quả đúng

Bài thực hành 2:

1. Giới thiệu đề bài:

- Chiếu nội dung đề bài lên bảng. nêu mục đích của bài toán

- Chia lớp thành hai nhóm

+ Nhóm 1: đặt câu hỏi phân tích

+ Nhóm 2: trả lời các câu hỏi phân tích

  • Theo dõi những câu hỏi phân tích của nhón 1 và trả lời câu hỏi phân tích của nhóm 2. Bổ sung và sửa sai cho cả nhóm 1 và nhóm 2.

Nhóm 1:

- Hỏi: dữ liệu vào, dữ liệu ra của bài toán?

- Nêu các nhiệm vụ chính cần thực hiện khi giải quyết bài toán

- Hỏi cấu trúc dữ liệu phải sử dụng như thế nào?

- Ta phải sử dụng hàm nào

Nhóm 2:

- Vào: một xâu S

- Ra: giải các số ứng với sụ xuất hiện của mỗi loại kí tự trong xâu

- TT:duyệt từ trái sang phải, thêm một đơn vị cho kí tự đọc được

- Cấu trúc dữ liệu: Dem[‘A’..’Z’]

- Dùng hàm Upcase()

2. Độc lập soạn chương trình vào máy :

- Nhập dữ liệu của giáo viên và thực hiện chương trình và để xem xét kết quả

- Thông báo kết quả cho giáo viên.

Bài thực hành 3:

- Hướng dẫn học sinh sử dụng các hàm Pos, Insert, và hàm Delete.

Học sinh theo dỏi, thực hành và trả lời.

Học sinh theo dỏi, thực hành và trả lời.

Học sinh theo dỏi, thực hành và trả lời.

Học sinh theo dỏi, thực hành và trả lời.

Học sinh theo dỏi, thực hành và trả lời.

Học sinh theo dỏi, thực hành và trả lời.

III. CỦNG CỐ BÀI HỌC VÀ BÀI TẬP VỀ NHÀ (10 ph)

1. Củng cố:

Một số thuật toán đơn giản liên quan đến xâu kí tự: kiểm tra một xâu đối xứng, tìm tần suất xuất hiện của các kí tự có trong xâu.

2. Bài tập về nhà:

Nhập 2 xâu ký tự S1 và S2, kiểm tra xem xâu S2 có phải là xâu đảo của xâu S1 không ?

ÔN TẬP HỌC KỲ I (tiết 32-33) - (Ngày soạn: 17/11/2009)

LÝ THUYẾT:

Câu 1: So sánh câu lệnh lặp với số lần biết trước và chưa biết trước?

Câu 2: So sánh kiểu dữ liệu mảng và kiểu xâu?

BÀI TẬP: Viết chương trình thực hiện các bài toán sau: (Cần nêu ý tưởng thuật toán trước khi viết chương trình)

Câu 1: Nhập vào một số nguyên N có 3 chữ số, sau đó in ra màn hình tổng các chữ số của N. VD: N = 123 kết quả là: 6.

Câu 2: Hoán đổi 2 số nguyên M và N theo 2 cách: dùng biến trung gian và không dùng biến trung gian.

Câu 3: Tính giá trị biểu thức:

a)

b) e

c)

Câu 4: Nhập vào độ dài hai cạnh của tam giác và góc giữa hai cạnh đó, sau đó tính và in ra màn hình diện tích của tam giác.

Gợi ý: Công thức tính diện tích tam giác: S =

Câu 5: Hãy in ra màn hình các số nguyên từ 1 đến 100 sao cho mỗi dòng có 10 chữ số.

Gợi ý: for i := 1 to 100 do

If (i mod 10 = 0) then writeln;

Câu 6: Tính xy

Câu 7: Tính . Gợi ý: = x1/n = =

Câu 8: Tính các tổng sau: với N được nhập vào từ bàn phím

S0 = n! = 1*2*...*n {n giai thừa}

Câu 9: Tìm giá trị N nhỏ nhất để:

S = n! > A

gt := 1; n:= 1;

While gt<=A do {cho vòng lặp giới hạn đến s=a}

Begin

Inc(n);

gt := gt*n;

End;

Với A, B được nhập từ bàn phím

Câu 10: Viết chương trình nhập vào số nguyên N. In ra màn hình tất cả các ước số của N.

Ý tưởng: Cho biến i chạy từ 1 tới N. Nếu N MOD i=0 thì viết i ra màn hình.

Var N,i : Integer;

Begin

Clrscr;

Write('Nhap so nguyen N= '); Readln(N);

For i:=1 To N Do

If N MOD i=0 Then Write(i:5);

Readln;

End.

Câu 12: Viết chương trình tìm các số có 3 chữ số sao cho: = a3 + b3 + c3.

Câu 13: Viết chương trình nhập 2 số nguyên ab từ bàn phím (a<b). Xác định số lượng các số nguyên lẻ i thỏa mãn điều kiện a ≤ i ≤b. Đưa ra màn hình số lượng tính được và bản thân các số lẻ này theo thứ tự tăng dần (mỗi số trên 1 dòng).

dem:=0;

for i:=a to b do

if (i mod 2 <> 0) then

begin

inc(dem);

writeln(i);

end;

write('vay co ',dem,' so le');

Bài 13: Viết chương trình nhập vào một xâu ký tự từ bàn phím. Đổi xâu ký tự đó sang chữ in hoa rồi in kết quả ra màn hình.

Ví dụ :Xâu abcdAbcD sẽ cho ra xâu ABCDABCD.

Write(‘Nhap xau St: ‘); Readln(St);

For i:=1 to length(St) do

St[i]:=Upcase(St[i]);

Write(‘Xau ket qua: ‘, St);

Bài 14: Nhập 1 xâu, viết ra màn hình xâu đó nhưng đã được bỏ tất cả các ký tự là dấu cách

Var i,k : Byte ;

a,b : String ;

Begin

Write('Nhap xau : '); Readln(a) ;

k := length(a);

b :=' ' ;

For i := 1 to k do if a[i] <> ' ' then b := b+a[i];

Write(‘xau moi la: ’,b);

Readln;

End .

Bài 15: Viết chương trình nhập một xâu ký tự. In ra màn hình xâu ký tự là chữ hoa, xâu ký tự là chữ thường.

Var s1,s2 : String ; {Chữ thường là: S1[i] in ['a'..'z']}

i : Byte ;

Begin

Write('Nhap xau s1 : '); Readln(s1) ;

s2 := ' ' ;

For i := 1 to length(s1) do If (S1[i] in ['A'..'Z']) then s2 := s2 + s1[i] ;

Write(‘cac ky tu la chu HOA trong xau la: ’,s2);

Readln ;

End .

BÀI 13: KIỂU BẢN GHI (tiết 35)

(Ngày soạn: 28/11/2010; Ngày dạy: ....../......./20....)

A. MỤC ĐÍCH VÀ YÊU CẦU

1. Mục đích:

- Học sinh biết được các khái niệm bản ghi.

- Biết cách khai báo bản ghi.

2. Yêu cầu:

- Học sinh hăng say học tập.

B. PHƯƠNG PHÁP GIẢNG DẠY

- Thuyết trình, vấn đáp.

C. KIẾN THỨC TRỌNG TÂM

Trong bài này cần cung cấp cho học sinh các kiến thức sau:

- Khai báo kiểu bản ghi.

- Các thuật toán xử lý trên kiểu bản ghi.

D. PHƯƠNG TIỆN DẠY HỌC

- Bảng đen, phấn trắng, máy chiếu đa năng.

E. NỘI DUNG GIẢNG DẠY

I. NỘI DUNG BÀI HỌC

Thời gian

Nội dung ghi bảng

Hoạt động của thầy

Hoạt động của trò

20 ph

25 ph

40 ph

BÀI 13: KIỂU BẢN GHI (tiết 35)

* Một số khái niệm:

VD: Bảng điểm kết quả thi.

- Kiểu bản ghi được dùng để mô tả các đối tượng có cùng thuộc tính, có thể có các kiểu dữ liệu khác nhau.

- Bản ghi được gọi là Record, mỗi Record sẽ lưu trữ dữ liệu về một đối tượng cần quản lý.

- Mỗi thuộc tính của từng đối tượng sẽ tương ứng với từng bản ghi.

- Các ngôn ngữ lập trình thường cho phép xác định:

  • Tên kiểu bản ghi.
  • Tên các trường.
  • Kiểu dữ liệu của trường.
  • Cách khai báo biến.
  • Cách tham chiếu đến các trường.

1. Khai báo.

* Cách định nghĩa kiểu và khai báo biến:

Type <tên kiểu bản ghi> = Record

<tên trường 1>:<kiểu trường1>

<tên trường 2>:<kiểu trường2>

...............

<tên trường n>:<kiểu trườngn>

End;

Var <tên biến>:<tên kiểu bản ghi>;

VD:

Type HOCSINH = Record

Hoten : String [30];

Ngaysinh : String [10];

Gioitinh : boolean;

Toan, ly, hoa : real;

End;

Var A, B : HOCSINH;

Lop:array[1..Max]of HOCSINH

Trong đó:

- A, B là hai bản ghi đơn chứa tất cả các thông tin Hoten, Ngaysinh, Gioitinh.

- Lop là một mảng chứa nhiều bản ghi (giống như dạng bảng chứa nhiều dòng) chứa tất cả các thông tin Hoten, Ngaysinh, Gioitinh.

*Cách truy cập từng trường trong kiểu bản ghi:

<tên biến mảng>. <tên trường>

VD:

A.hoten

B.ngaysinh

Lop[i].Hoten. (i là vị trí bất kỳ).

2. Gán giá trị:

Có 2 cách:

C1: Dùng lệnh gán trực tiếp.

- Nếu A, B là 2 bản ghi cùng kiểu ta có thể gán giá trị của A cho B:

VD: A:=B; hoặc B:=A;

C2: Gán giá trị cho từng trường.

VD:

A.hoten := ‘nguyen van an’;

Readln(A.ngaysinh);

- Xét VD sau:

Viết chương trình quản lý các thí sinh của một kỳ thi tuyển sinh. Chương trình cần quản lý được:

+ SBD thí sinh.

+ Họ tên.

+ Giới tính ...

=> Có thể quản lý các thông tin trên bằng mảng 1 chiều được không?

=> Từ đó đưa ra kiểu bản ghi.

- GV lấy 1 VD và cho học sinh nhận biết các thành phần trong kiểu bản ghi.

- Ngôn ngữ Pascal không cho phép khai báo biến bản ghi trực tiếp mà phải khai báo biến bản ghi thông qua các kiểu bản ghi.

- Làm thế nào có thể khai báo nhiều biến bản ghi cùng một kiểu ?

=> Sử dụng kiểu mảng trong đó phần tử mảng sẽ có kiểu bản ghi.

Var <tên mảng>:Array[1..n] of <tên kiểu bản ghi>;

- Đưa ra một số VD.

- Từ VD trên em hãy cho biết ý nghĩa của cách khai báo hai biến bản ghi A, B và Lop.

- Khi nhập thông tin vào từ bàn phím ta phải nhập thông tin vào từ trường.

- Chương trình được viết trong NNLT Pascal dùng kiểu bản ghi để xử lý bằng kết quả thi bao gồm 2 môn toán và văn của học sinh. Sau khi nhập xong sẽ đưa ra kết quả học tập và hạnh kiểm.

(SGK)

Học sinh theo dỏi, ghi chép bài học.

Học sinh theo dỏi, ghi chép và trả lời.

Học sinh theo dỏi, ghi chép và trả lời.

Học sinh theo dỏi, ghi chép và trả lời.

Học sinh theo dỏi, ghi chép và trả lời.

II. CỦNG CỐ BÀI HỌC VÀ BÀI TẬP VỀ NHÀ (5 ph)

1. Củng cố: Qua bài học HS nắm vững những kiến thức trọng tâm sau:

- Nhắc lại một số khái niệm kiểu bản ghi.

- Cấu trúc kiểu bản ghi.

2. Bài tập:

Bài 11 (trang 80-SGK):

a) Nếu cần in ra kiểu xếp loại là GIOI, KHA, TRUNG BINH, YEU thì chương trình XEP_LOAI cần khai báo như thế nào?

b) Hãy bổ sung thêm vào chương trình XEP_LOAI những lệnh cần thiết để chương trình đưa ra danh sách học sinh xếp loại A.

Program XeploaiA ;

uses crt ;

Type Hocsinh = Record

Ten : String[30] ;

Ngaysinh : String[10] ;

Diachi : String[50] ;

toan, van : real ;

Xeploai : Char ;

End ;

Var Lop : array[1..100] of Hocsinh ;

i, n : Byte ;

Tg : Real ;

Begin

Clrscr ;

Write(' Cho biet so hoc sinh : ') ; Readln(n) ;

For i := 1 to n do

Begin

Writeln(' Vao thong tin cho hoc sinh thu ',i,' : ') ;

Write (' Ho ten : ') ; readln(Lop[i].ten) ;

Write(' Ngay sinh : ') ; readln(Lop[i].Ngaysinh) ;

Write(' Dia chi : ') ; readln(Lop[i].Diachi) ;

Write(' Diem Toan : ') ; readln(Lop[i].toan) ;

Write(' Diem Van ') ; readln(Lop[i].van) ;

Tg := Lop[i].toan + Lop[i].van ;

if Tg >= 18 then Lop[i].Xeploai := 'A'

Else if Tg >= 14 then Lop[i].Xeploai := 'B'

Else if Tg >= 10 then Lop[i].Xeploai := 'C'

Else Lop[i].Xeploai := 'D'

End ;

Readln ;

For i := 1 to n do

Writeln(i : 4, Lop[i].ten : 30 , ' --- Loai : ', Lop[i].Xeploai);

writeln('danh sach hoc sinh xep loai A la:');

for i:=1 to n do

if Lop[i].xeploai='A' then writeln('Hoc sinh o vi tri thu ',i,': ', lop[i].ten);

Readln ;

End.

CÂU HỎI VÀ BÀI TẬP (tiết 36)

(Ngày soạn: 29/11/2010; Ngày dạy: ....../......./20....)

A. MỤC ĐÍCH VÀ YÊU CẦU

1. Mục đích:

- Giúp HS viết một số chương trình đơn giản kiểu bản ghi.

- Hiểu được cấu trúc kiểu bản ghi, bản ghi tổ chức theo mảng, theo kiểu xâu.

- Học sinh giải quyết tốt các bài tập tương tự.

2. Yêu cầu:

- Học sinh chú ý làm bài tập.

- Chuẩn bị tốt bài tập ở nhà.

B. PHƯƠNG PHÁP GIẢNG DẠY

- Hướng dẫn HS nêu ý tưởng thuật toán, sau đó viết chương trình và test.

C. KIẾN THỨC TRỌNG TÂM

Trong bài này cần cung cấp cho học sinh các kiến thức sau:

- Ôn tập Kiểu bản ghi.

D. PHƯƠNG TIỆN DẠY HỌC

- Bảng đen, phấn trắng.

E. NỘI DUNG GIẢNG DẠY

Câu 1: Nhập tọa độ điểm M(x,y) và xuất ra màn hình tọa độ vừa nhập của M.

TYPE Toa_do=RECORD

x,y:Integer;

END;

VAR M:Toa_do;

Begin

Writeln('TOA DO DIEM M(x,y)');

Writeln('-Nhap toa do diem M= ');

Write('+X= '); Readln(M.x); Write('+Y= '); Readln(M.y);

Writeln('-Xuat toa do diem M= (',M.x,',',M.y,’)’);

Readln

End.

Câu 2: Hãy in ra màn hình kết quả là hai người cùng thông tin: họ tên, tuổi. Trong đó thông tin của một người đã có sẵn trong Pascal.

TYPE NhanVien = RECORD

Holot : String[17];

Ten : String[7];

Tuoi : 18..60;

END;

VAR Nv1, Nv2 : Nhanvien;

Begin

Writeln('PHEP GAN BAN GHI');

Writeln('Dung toan tu gan');

Nv1.Holot:='Nguyen Van';

Nv1.Ten:='Xuan';

Nv1.Tuoi:=30;

Nv2:=Nv1;

Writeln(Nv1.Holot,' ',Nv1.Ten,' ',Nv1.Tuoi,' tuoi');

Writeln(Nv2.Holot,' ',Nv2.Ten,' ',Nv2.Tuoi,' tuoi');

Readln

End.

Câu 3: Viết chương trình cho bài toán sau: Nhà trường muốn quản lý danh sách học sinh theo các thông tin sau: Họ tên, quê quán, gioitinh. Hãy nhập thông tin trên và in ra màn hình số lượng học sinh cùng quê (quê được nhập từ bàn phím).

Type Hocsinh = Record

Ten : String[30] ;

Diachi : String[50] ;

gioitinh : string[3] ;

End ;

Var Lop : array[1..100] of Hocsinh ;

i,n,dem : Byte ;

que:string[50];

Begin

Write(' Cho biet so hoc sinh : '); Readln(n) ;

For i := 1 to n do

Begin

Writeln(' Vao thong tin cho hoc sinh thu ',i,' : ') ;

Write (' Ho ten : ') ; readln(Lop[i].ten) ;

Write(' Dia chi : ') ; readln(Lop[i].Diachi) ;

Write(' gioi tinh: ') ; readln(Lop[i].gioitinh) ;

End ;

write('nhap que quan de dem so HS: '); readln(que);

dem:=0;

For i := 1 to n do if lop[i].diachi=que then inc(dem);

write('co ',dem,' hoc sinh cung que ',que);

Readln ;

End.

BÀI 14-15: KIỂU DỮ LIỆU TỆP VÀ THAO TÁC VỚI TỆP (tiết 37)

(Ngày soạn: 04/12/2010; Ngày dạy: ....../......./20....)

A. MỤC ĐÍCH VÀ YÊU CẦU

1. Kiến thức :

- Học sinh biết được vai trò của kiểu dữ liệu tệp .

- Học sinh biết được có hai cách phân loại tệp .

- Học sinh biết khai báo biến tệp và các thao tác cơ bản đối với tệp văn bản .

2. Kỹ năng :

- Dần dần hình thành kỹ năng về các thao tác với tệp văn bản .

3. Thái độ :

- Rèn luyện cho học sinh có ý thức lưu trữ dữ liệu một cách khoa học, phòng chống mất mát thông tin hoặc nhiễm virút .

B. PHƯƠNG PHÁP GIẢNG DẠY

- Sử dụng PP thuyết trình, giảng giải, gợi ý nêu vấn đề.

C. KIẾN THỨC TRỌNG TÂM

Trong bài này cần cung cấp cho học sinh các kiến thức sau:

- Khái niệm kiểu dữ liệu tệp.

- Các thao tác tạo và xử lý tệp.

D. PHƯƠNG TIỆN DẠY HỌC

- Bảng đen, phấn trắng, máy chiếu đa năng.

E. NỘI DUNG GIẢNG DẠY

Đặt vấn đề cho bài học:

Trong các giờ thực hành đã học, sau khi chạy một chương trình ta thấy kết quả in lên màn hình, tuy nhiên muốn sử dụng kết quả đó về sau thì không được. Để khắc phục nhược điểm này ta nghiên cứu dữ liệu kiểu tệp.

II. NỘI DUNG BÀI HỌC

Thời gian

Nội dung ghi bảng

Hoạt động của thầy

Hoạt động của trò

10 ph

5 ph

25 ph

BÀI 14: KIỂU DỮ LIỆU TỆP VÀ THAO TÁC VỚI TỆP (tiết 37)

* Phân loại tệp :

  • Theo cách tổ chức dữ liệu :
  • Tệp văn bản .
  • Tệp có cấu trúc .
  • Theo cách thức truy cập :
  • Tệp truy cập tuần tự .
  • Tệp truy cập trực tiếp .

* Các thao tác trên tệp (Hình SGK trang 86) :

1. Khai báo

Cú pháp:

Var <tên biến tệp>: Text ;

VD: Var t1, t2: text;

2. Thao tác với tệp.

a) Gắn tên tệp

Cú pháp:

Assign(<tên biến tệp>, <tên tệp>);

VD1: Để gán tên tệp baihoc.txt cho biến tệp f ta có 2 cách:

Assign(f, ‘baihoc.txt’);

Assign(f, ‘D:\baihoc.txt’);

Chú ý: Không tác tác trên tên tệp mà thao tác thông qua biến tệp.

b) Mở tệp

* Mở tệp để ghi:

Cú pháp:

Rewrite(<tên biến tệp>);

VD2:

Assign(f, ‘baihoc.txt’);

Rewrite(f);

* Mở tệp để đọc:

Cú pháp:

Reset(<tên biến tệp>);

VD3:

Assign(f, ‘baihoc.txt’);

Reset(f);

c) Đọc/ghi tệp văn bản

* Đọc tệp:

Cú pháp:

Read(<biến tệp>,<DS biến>);

Hoặc

Readln(<biến tệp>,<DS biến>);

VD: Ghi vào tệp các số nguyên m, n vào tệp baihoc thông qua biến tệp f:

Read(f, m, n);

* Ghi tệp:

Cú pháp:

Write(<biến tệp>,<DS kết quả>);

Hoặc

Writeln(<biến tệp>,<DS kết quả>);

VD: In ra màn hình các số nguyên m, n vừa ghi vào tệp bài học:

Write(f, ’m= ‘,m,’ va n=’,n);

Trong đó:

- DS biến: Là một hoặc nhiều biến đơn.

- DS kết quả: Là một hoặc nhiều phần tử.

- Để tác động lên tệp như đếm các pt của tệp thì phải đọc tệp trước khi thao tác.

Chú ý:

- Hàm EOF(<biến tệp>) trả về giá trị TRUE nếu con trỏ tệp ở vị trí cuối tệp.

- Hàm EOLN(<biến tệp>) trả về giá trị TRUE nếu con trỏ tệp ở vị trí cuối dòng.

d) Đóng tệp

Cú pháp:

Close(<biến tệp>);

GV: Trong máy tính có những loại bộ nhớ nào? Loại bộ nhớ nào không bị mất dữ liệu khi tắt máy hoặc mất điện?

- GV hỏi: Em hãy cho biết dữ liệu trong các kiểu dữ liệu từ trước đến nay ta sử dụng được lưu trữ ở loại bộ nhớ nào khi thực hiện chương trình? Vì sao?

- GV diễn giải: Để lưu trữ được dữ liệu ta phải lưu nó ở bộ nhớ ngoài thông thông qua kiểu dữ liệu tệp. Mọi ngôn ngữ lập trình đều có các thao tác: khai báo biến tệp, mở tệp, đọc/ ghi dữ liệu, đóng tệp.

- Yêu cầu học sinh nghiên cứu SGK và cho biết đặc điểm của kiểu tệp? Có mấy loại kiểu tệp?

- Yêu cầu HS trình bày khái niệm tệp có cấu trúc và tệp văn bản.

- GV giới thiệu cấu trúc chung của khai báo biến tệp.

- Yêu cầu HS tìm ví dụ cụ thể.

GV giới thiệu các thao tác xử lý tệp như: gán tên tệp, tạo tệp mới để ghi, mở tệp để đọc, đóng tệp.

- Yêu cầu HS lấy ví dụ minh hoạ mở tệp để ghi thông tin và mở tệp để đọc thông tin.

- GV chiếu sơ đồ làm việc với tệp lên bảng, hình 16 trang 86 SGK. Yêu cầu học sinh giải thích ý nghĩa của sơ đồ.

- GV giới thiệu cấu trúc chung của thủ tục đọc ghi dữ liệu tệp văn bản. Yêu cầu HS lấy ví dụ minh hoạ.

- HS sinh quan sát cấu trúc chung và tìm ví dụ minh họa:

- Readln(f, x1, x2); Đọc dữ liệu từ biến tệp f, đặt giá trị vào hai biến x1, x2.

- Writeln(g, ‘Tong la’, x1+x2); Ghi vào biến tệp g hai tham số dòng chữ ‘Tong la’ và giá trị tổng x1+x2.

- Các hàm này thường dùng với hàm While-Do để kiểm tra vị trí con trỏ trong tệp VB.

- Sau khi thao tác với tệp VB cần phải đóng VB bằng thủ tục Close.

Đó là bộ nhớ RAM. Vì nó mất dữ liệu khi mất điện

+ Không mất thông tin khi tắt máy.

+ Dung lượng dữ liệu được lưu trữ lớn.

+ Có hai loại kiểu tệp: tệp có cấu trúc và tệp văn bản.

Học sinh theo dỏi, ghi chép và trả lời.

Học sinh theo dỏi, ghi chép và trả lời.

Học sinh theo dỏi, ghi chép và trả lời.

Học sinh theo dỏi, ghi chép và trả lời.

III. CỦNG CỐ BÀI HỌC VÀ BÀI TẬP VỀ NHÀ (5 ph)

1. Củng cố: Qua bài học HS nắm vững những kiến thức trọng tâm sau:

  • Gọi một học sinh khái quát lại vai trò của kiểu tệp và phân loại tệp.
  • Học sinh khái quát lại các thao tác phải thực hiện khi đọc dữ liệu từ tệp và ghi dữ liệu vào tệp dựa vào hình 16 SGK).

2. Bài tập: (HS chuẩn bị trước các bài tập dưới đây để tiết sau làm BT và thi KT 15ph)

  1. Đọc trước bài 16: Ví dụ làm việc với tệp (trang 87).
  2. Nhập và tính tổng 2 số nguyên, giá trị được lưu vào tệp songuyen.txt.

var f:text;

tong,m,n:integer;

begin

assign(f,'D:\songuyen.txt'); rewrite(f);

write('nhap n= '); readln(n);

write('nhap m= '); readln(m);

writeln(f,n); writeln(f,m);

tong:=n+m;

writeln(f,tong);

close(f);

readln;

end.

  1. Hiển thị trên màn hình giá trị 2 số nguyên và tổng của chúng ở bài 2.
  2. Nhập thông tin của một học sinh gồm họ tên, quê quán, lớp và lưu vào tệp hocsinh.txt.

var hoten, quequan, lop:string;

f:text;

begin

assign(f,'d:\hocsinh.txt'); rewrite(f);

write('nhap ho va ten:'); readln(hoten); writeln(f,'ho va ten: ',hoten);

write('nhap que quan:'); readln(quequan); writeln(f,'que quan: ',quequan);

write('nhap lop hoc:'); readln(lop); writeln(f,'hoc sinh lop: ',lop);

close(f);

end.

  1. Hiển thị thông tin đã nhập ở bài 4.

var f:text;

st:string;

begin

assign(f,'d:\hocsinh.txt'); reset(f);

while not eof(f) do

begin

readln(f,st);

writeln(st);

end;

close(f);

readln

end.

BÀI 16: VÍ DỤ VỀ THAO TÁC VỚI TỆP (tiết 38)

(Ngày soạn: 10/12/2010; Ngày dạy: ....../......./20 )

A. MỤC ĐÍCH VÀ YÊU CẦU

1. Mục đích:

    • Biết các lệnh khai báo tệp văn bản
    • Biết các bước làm việc với tệp : gán tên cho biến tệp, mở tệp, đọc/ghi tệp,đóng tệp.

2. Yêu cầu:

    • Khai báo đúng kiểu tệp.
    • Nắm được các bước thao tác với tệp.

B. PHƯƠNG PHÁP GIẢNG DẠY

- Gợi mở nêu vấn đề, chia nhóm thảo luận.

C. PHƯƠNG TIỆN DẠY HỌC

- Bảng đen, phấn trắng, máy chiếu đa năng.

E. NỘI DUNG GIẢNG DẠY

I. NỘI DUNG BÀI HỌC

Thời gian

Nội dung ghi bảng

Hoạt động của thầy

Hoạt động của trò

5 ph

10 ph

10 ph

5 ph

5 ph

BÀI 16: VÍ DỤ VỀ THAO TÁC VỚI TỆP (tiết 38)

Câu hỏi thảo luận 1:
Ưu điểm của tệp trong quá trình lưu trữ dữ liệu là gì?

Trả lời: Tệp có thể lưu trữ một lượng lớn dữ liệu trên bộ nhớ ngoài, vì vậy, dữ liệu sẽ không bị mất khi cúp điện hoặc tắt máy.

Câu hỏi thảo luận 2:

Nêu một số trường hợp cần phải dùng tệp?

Trả lời: Khi lượng thông tin lớn và cần lưu trữ lâu dài thì chúng ta sẽ dùng tệp.

Câu hỏi thảo luận 3:

Trong sơ đồ thao tác với tệp, khi cần nhập dữ liệu từ tệp phải dùng những thao tác nào?

Trả lời:Gắn tên tệp, mở tệp để ghi, ghi dữ liệu vào tệp, đóng tệp để hoàn tất việc ghi dữ liệu.

assign (f, fi);

rewrite(f);

write(f,’ ‘,y,’ ‘,z);

close(f);

Câu hỏi thảo luận 4:

Tại sao cần có câu lệnh mở tệp trước khi đọc/ ghi tệp?

Trả lời: Trước khi sử dụng tệp phải có câu lệnh mở tệp để trình dịch biết thực hiện mục đích mở tệp để đọc hay ghi, đồng thời đặt con trỏ tệp vào vị trí thích hợp.

Câu hỏi thảo luận 5:

Tại sai phải dùng câu lệnh đóng tệp sau khi đã kết thúc ghi dữ liệu vào tệp?

Trả lời: Phải dùng câu lệnh đóng tệp sau khi đã kết thúc ghi dữ liệu vào tệp để hệ thống hoàn tất việc ghi dữ liệu ra tệp.

Giới thiệu sơ lược những nội dung cần quan tâm:

      • Tệp dữ liệu là gì?

- Tệp lưu trữ dữ liệu như thế nào?

Gợi ý để HS trả lời tốt câu hỏi:
- Tệp lưu trữ dữ liệu ở bộ nhớ nào?
- Lưu trữ dữ liệu như vậy có ưu điểm gì?

Gợi ý để HS trả lời sau khi trình chiếu

- Khi dữ liệu cần sử dụng chỉ trong 1 ngày thì có cần dùng tệp không?
- Lượng dữ liệu có kích thước như thế nào thì nên lưu trữ ở dạng tệp?....

Gợi ý để HS trả lời câu hỏi:
-Khi làm việc với tệp dữ liệu cần có những gì?, những thao tác nào là không thể thiếu?
- Gợi ý phạm vi để HS có cơ sở làm bài: bài 14

Gợi ý để HS trả lời:
- Tệp dữ liệu do chương trình nào quản lý?.
- khi đọc và ghi dữ liệu có gì khác nhau?, và chương trình dịch có thể hiểu được chúng ta muốn làm gì không nếu không mở tệp?

Hướng dẫn để HS làm bài:

- Khi đi ra khỏi nhà chúng ta có cần phải đóng cửa nhà lại hay không?, mục đích của việc đóng cửa nhà lại là gì?.
- Việc đóng tệp cũng gần giống như việc đóng cửa nhà.

Thảo luận theo nhóm (không xem tài liệu)

- Đại diện của từng nhóm phát biểu ý kiến nhóm mình.
- Các nhóm nhận xét đánh giá cho nhóm bạn

Các nhóm nêu ý kiến và nhận xét ý kiến của nhóm bạn

Nghe gợi ý, hướng dẫn và thảo luận nhóm để có câu trả lời chính xác nhất.

Các nhóm nêu ý kiến của nhóm mình và trao đổi ý kiến với nhóm bạn

Thảo luận để trả lời câu hỏi

Đại diện của từng nhóm phát biểu ý kiến của nhóm mình.

- Trao đổi ý kiến trong nhóm

II. CỦNG CỐ BÀI HỌC VÀ BÀI TẬP VỀ NHÀ (10 ph)

1. Củng cố: Qua bài học HS nắm vững những kiến thức trọng tâm sau:

- Lệnh var tep, tep1: text; có ý nghĩa gì?
TL: Khai báo biến tep và tep1
- Lệnh assign(tep1,’BAITAP.DAT’); có nghĩa là gì?
TL: gắn biến tep1 với tệp dữ liệu có tên là BAITAP.DAT
- Lệnh close(tep1); có ý nghĩa gì?
TL: Đóng tệp có chứa biến tệp là tep1.

2. Bài tập:

Thực hành các chương trình bài 16 (tiết 38) và các bài tập đã làm trong bài học trước (tiết 37).

BÀI 17: CHƯƠNG TRÌNH CON VÀ PHÂN LOẠI (tiết 39-40)

(Ngày soạn: 20/12/2010; Ngày dạy: ....../......./....... )

A. MỤC TIÊU

  1. Kiến thức
  • Biết được khái niệm chương trình con
  • Biết được ý nghĩa của chương trình con, sự cần thiết phải viết một chương trình thành các chương trình con.
  • Biết được cấu trúc của chương trình con.
  • Phân biệt được 2 loại chương trình con là hàm và thủ tục.
  1. Kĩ năng
  • Nhận biết các thành phần trong phần đầu của thủ tục.
  • Nhận biết được hai loại tham số hình thức trong phần đầu của thủ tục
  • Nhận biết được cách khai báo hai loại chương trình con cùng với tham số hình thức của chúng.
  1. Thái độ
  • Rèn luyện phẩm chất của người lập trình như tinh thần hợp tác làm việc theo nhóm, tuân thủ yêu cầu vì một công việc chung.

B. PHƯƠNG PHÁP GIẢNG DẠY

- Giảng giải, thuyết trình và mô phỏng.

C. KIẾN THỨC TRỌNG TÂM

- Khái niệm chương trình con.

- Cấu trúc chương trình con.

D. PHƯƠNG TIỆN DẠY HỌC

- Bảng đen, phấn trắng, máy chiếu đa năng.

E. NỘI DUNG GIẢNG DẠY

Đặt vấn đề cho bài học mới:

Khi viết chương trình giải các bài toán phức tạp, chương trình thường rất dài, người đọc rất khó nhận biết được chương trình thực hiện công việc gì vấn đề đặt ra là phải cấu trúc chương trình như thế nào để dễ đọc dễ hiểu. Mặt khác việc giải quyết các bài toán lớn thường đòi hỏi phải phân thành nhiều bài toán con, vì vậy khi lập trình cần phải chia chương trình thành nhiều chương trình con.

CẤU TRÚC CHUNG CỦA MỘT CHƯƠNG TRÌNH CÓ SỬ DỤNG CTC

PROGRAM Tên_chương_trình;

USES CRT;

CONST ............;

TYPE ............;

VAR ............;

PROCEDURE THUTUC[(Các tham số)];

[Khai báo Const, Type, Var]

BEGIN

<Các câu lệnh>;

END;

FUNCTION HAM[(Các tham số)]:<Kiểu dữ liệu>;

[Khai báo Const, Type, Var]

BEGIN

<Các câu lệnh>;

HAM:=<Giá trị>;

END;

BEGIN {Chương trình chính}

<Các câu lệnh>;

THUTUC[(...)];

<Các câu lệnh>;

A:= HAM[(...)];

<Các câu lệnh>;

END.

II. NỘI DUNG BÀI HỌC

Nội dung ghi bảng

Hoạt động của thầy

Hoạt động của trò

BÀI 17: CHƯƠNG TRÌNH CON VÀ PHÂN LOẠI (tiết 39-40)

1. Khái niệm chương trình con.

Khái niệm:

Chương trình con là một dãy lệnh mô tả một số thao tác nhất định và có thể được thực hiện (được gọi) từ nhiều vị trí trong chương trình.

VD: SGK

* Lợi ích của việc sử dụng chương trình con:

­- Tránh việc phải viết lặp đi lặp lại cùng một dãy lệnh.

- Hỗ trợ việc thực hiện các chương trình lớn.

- Phục vụ quá trình trừu tượng hóa.

- Mở rộng khả năng ngôn ngữ.

- Thuận tiện cho việc nâng cấp, phát triển chương trình.

2. Phân loại chương trình con.

a) Phân loại:

* Hàm (Function): Thực hiện một số thao tác nào đó và trả về một giá trị thông qua tên hàm.

VD: SGK

* Thủ tục (Procedure): Thực hiện các thao tác nhất định, nhưng không trả về giá trị thông qua tên của nó.

VD: SGK

b) Cấu trúc chương trình

Cấu trúc chung của ctc

<Phần đầu>

<[phần khai báo]>

<phần thân>

* Trong đó:

- Phần đầu của chương trình con là bắt buộc phải có.

- Phần khai báo có thể là biến, hằng,…

- Phân thân là một dãy lệnh thực hiện nhiệm vụ nhất định của ctc.

*Chú ý về tham số:

+ Tham số hình thức: Là tham số được đưa vào khi định nghĩa chương trình con.

- CT con có thể có hoặc không có tham số hình thức

+ Tham số thực sự: Là tham số được viết trong lời gọi chương trình con. Gồm các hằng và biến nằm trong dấu ngoặc (và) có tên CTCon.

+ Biến toàn cục: Là các biến được khai báo trong CT chính.

+ Biến cục bộ: Là các biến được khai báo trong CTCon.

+ Mọi CT con sử dụng được biến toàn cục.

+ CT chính và CT con khác không sử dụng được biến cục bộ của CT con.

b) Thực hiện chương trình con.

- Lệnh gọi CT con sẽ thực hiện từ trên xuống dưới trong CT chính.

- Khi thực hiện gọi CT con, các tham số hình thức dùng để nhập dữ liệu vào của tham số thực sự tương ứng. Khi xuất dữ liệu thì tham số hình thức lưu trữ dữ liệu ra sẽ trả giá trị cho tham số thực sự tương ứng.

- Chiếu hai chương trình con được viết sẵn: (Có sẵn trong SGK), một chương trình không sử dụng ctc, một ct có sử dụng ctc.

- Gọi 1 HS nhận xét về tính ngắn gọi và dễ hiểu của 2 ct?

- Khi nào nên sử dụng ct con?

- Yêu cầu học sinh cho biết k/n của chương trìng con?

- Có mấy loại ctc? gọi tên của chúng?

- Các em đã sử dụng hàm và thủ tục chưa? lấy một số hàm và thủ tục đã được học?

- Ý nghĩa của hàm và thủ tục?

- Yêu cầu hs so sánh với cấu trúc của ct chính.

- Yêu cầu hs giải thích phần khai báo, phần thân ctc?

- GV diễn giảng: Phần đầu ctc có tên ctc các tham số ctc các tham số này được gọi là tham số hình thức, khi dùng chương trìng con ta phải truyền tham số cho chúng, tham số được truyền vào đgl tham số thực sự.

- Để sử dụng hàm và thủ tục các em thường viết ở đâu và viết như thế nào?

VD: Tìm hiểu CTCon sau:

- A,B là biến toàn cục, x1,y1,x2,y2 là biến cục bộ dùng trong các CT con congtru.

- x1,y1,x2,y2 là các tham số hình thức trong thủ tục và hàm dưới đây:

- Khi nhập giá trị A và B, thực hiện CTCon CONG(A,B) thì A,B là tham số thực sự truyền cho x1,y1 tương ứng.

- Nếu viết lời gọi CTCon CONG(2, 5) thì tham số hình thức x1,y1 sẽ nhận giá trị của tham số thực sự là x1=1, y1=5.

- Tiếp tục thực hiện lời gọi CT con TRU(A,B) tương tự.

- Nếu viết TRU(B,A) thì x2 nhận giá trị của B, y2 nhận giá trị của A để thực hiện phép toán trong CTC.

- Học sinh quan sát 2 ctc được giáo viên đưa ra, nhằm so sánh trong đầu về sự khác biệt của 2 ct này.

- Nhận xét ct có sử dụng ctc, ngắn gọi dễ hiểu hơn so với ct không sử dụng ctc.

- Đối với bài toán lớn, nhiều người viết, ct dài cần chia ra nhiều đoạn, có nhiều lệnh lặp đi lặp lại khi đó nên sử dụng ctc.

- HS đọc SGK và trả lời.

- Có hai loại chương trình con: hàm và thủ tục.

- Hàm và thủ tục chuẩn

- VD: Hàm sqrt(), hàm abs(), length(), …

- Hàm sử dụng một số thao tác nào đó và trả về một giá trị kiểu đơn giản thông qua tên hàm.

- Thủ tục thực hiện các thao tác nhất định, nhưng không trả về giá trị thông qua tên của nó.

- Giống như kiểu khai báo của chương trình chính.

- Khác nhau: Phần đầu của chương trình con là bắt buộc phải có.

- Phần khai báo có thể là biến, hằng,…

- Phân thân là một dãy lệnh thực hiện nhiệm vụ nhất định của ctc.

- Viết trong ct chính, viết thủ tục kèm theo các tham số và kết thúc là dấu chẩm phẩy (;). Viết hàm trong lệnh nào đó hoặc trong thủ tục, hàm không được viết như lệnh.

II. CỦNG CỐ BÀI HỌC VÀ BÀI TẬP VỀ NHÀ (10 ph)

1. Củng cố: Qua bài học HS nắm vững những kiến thức trọng tâm sau:

  • Ctc đóng vai trò quan trọng trong lập trình, đặc biệt là trong lập trình có cấu trúc.
  • Các lơị ích cơ bản của ctc.
  • Có hai loại ctc
  • Cấu trúc của ctc
  • Ctc được gọi thông qua tên của nó.

2. Bài tập:

  • Đọc trước nội dung bài: Ví dụ về cách viết và sử dụng ctc, sách giáo khao trang 96.
  • Ôn lại các khái niệm về tham số, biến cục bộ, biến toàn cục và cách thực hiện chương trình con.

BÀI 18: VÍ DỤ VỀ CÁCH VIẾT VÀ SỬ DỤNG CHƯƠNG TRÌNH CON (tiết 41)

(Ngày soạn: 22/01/2011; Ngày dạy: ....../......./20 )

A. MỤC ĐÍCH – YÊU CẦU

1. Kiến thức:

  • Biết được cấu trúc chung và vị trí của thủ tục trong chương trình chính.
  • Phân biệt được tham số giá trị và tham số biến trong thủ tục.
  • Nắm được khai báo biến toàn cục và biến cục bộ.

2. Kỹ năng:

  • Nhận biết được các thành phần trong đầu của một thủ tục.
  • Nhận biết được hai loại tham số hình thức trong đầu của một thủ tục.
  • Nhận biết được lời gọi thủ tục ở chương trình chính cùng với tham số thực sự.

3. Thái độ:

  • Rèn luyện cho học sinh phẩm chất của người lập trình như tinh thần hợp tác, làm việc theo nhóm, tuân thủ các yêu cầu của một công việc chung.
  • Rèn luyện cho học sinh đức tính chịu khó học hỏi, cẩn thận trong lúc làm việc.

B. PHƯƠNG PHÁP GIẢNG DẠY

- Giảng giải, thuyết trình và mô phỏng.

C. KIẾN THỨC TRỌNG TÂM

- Cách viết và sử dụng thủ tục.

- Cách viết và sử dụng hàm.

D. PHƯƠNG TIỆN DẠY HỌC

- Bảng đen, phấn trắng, máy chiếu đa năng.

E. KIỂM TRA BÀI CŨ:

Câu 1: Em hãy nêu khái niệm thủ tục? Nêu cấu trúc chung của một chương trình con?

Câu 2: Em hãy lên viết chương trình vẽ một hình chữ nhật.

F. NỘI DUNG GIẢNG DẠY

I. NỘI DUNG BÀI HỌC

Nội dung ghi bảng

Hoạt động của thầy

Hoạt động của trò

BÀI 18: VÍ DỤ VỀ CÁCH VIẾT VÀ SỬ DỤNG CHƯƠNG TRÌNH CON (tiết 41-42)

1. Cách viết và sử dụng thủ tục

VD:Vẽ hình chữ nhật SGK

a) Cấu trúc của thủ tục:

Lưu ý:

- Procedure: Từ khoá

- Tên thủ tục: Bắt buộc phải có.

- Kết thúc thủ tục bằng từ khoá End;

- Kết thúc chương trình chính là dấu (.) sau End.

b. Ví dụ về thủ tục.

VD: Vẽ hình chữ nhật bằng cách xây dựng thủ tục (SGK).

Các khái niệm:

- Tham số hình thức gồm 2 loại: Tham biến và tham số giá trị (tham trị).

- Tham biến: Khai báo phải có từ khoá Var. Khi gọi chương trình con, các tham số hình thức là biến chỉ được phép thay thế bằng các tham số thực sự là biến và các giá trị này có thể thay đổi trong quá trình thực hiện chương trinh.

- Tham số giá trị: Khi khai báo không có từ khoá Var ở trước, khi gọi chương trình con, các tham số giá trị sẽ được thay thế bằng các tham số thực sự là giá trị hoặc biến.

VD1: Viết CT con tính tổng, hiệu của 2 số nguyên a và b.

- x1, y1, x2, y2 đều là tham biến. Nếu CTC tổng không có tham số thì ta viết: Procedure cong; và lời gọi là cong; Khi đó trong thân CTC phải sử dụng biến CT chính:

tong := A + B;

VD2: Tìm hiểu về tham biến. (SGK).

- Giới thiệu ví dụ mở đầu.

GV: Từ bài cũ dẫn dắt vấn đề sang bài mới. Khi muốn vẽ một HCN thì chúng ta phải viết các lệnh như trên bảng -> mất thời gian. Để khắc phục điều đó chúng ta phải làm gì?

GV: Cụ thể là chúng ta sẽ viết thủ tục. Cách viết đó như thế nào hôm nay chúng ta sẽ cùng tìm hiểu

GV: Chiếu vidu_thutuc1, giới thiệu cho học sinh cấu trúc thủ tục, lời gọi thủ tục.

* Tìm hiểu cấu trúc thủ tục

GV: Vị trí của thủ tục nằm ở phần nào trong chương trình chính?

GV: Cấu trúc chung của thủ tục bao gồm có mấy phần?

GV: Phân biệt sự giống nhau khác nhau giữa thủ tục và chương trình chính.

GV: Em hãy nêu cấu trúc chung của thủ tục?

* Tìm hiểu tham số hình thức và tham số thực sự.

GV: Chiếu VD_thutuc2 <sgk T98)

GV: Phân biệt VD_thutuc2 với thutuc1.

GV: Thutuc2 cho phép vẽ nhiều hình chữ nhật với kích thước khác nhau bởi vì có hai tham số chdai,chrong.

GV: Trong chương trình chúng ta vẽ được bao nhiêu nhiêu hình chữ nhật.

GV: Vì sao?

GV: Đưa ra phương án đúng và giải thích cho học sinh.

Trong lời gọi ve_hcn(a,b) vì có vòng lặp (for i:=1 to 4 do ) nên ta vẽ được 4 hình chữ nhật. Giáo viên chạy chương trình cho học sinh quan sát.

GV: Theo em chdai, chrong, 25, 10, a, b được gọi là gì?

GV: Em hãy chỉ ra tham số hình thức và tham số thực ở ví dụ trên.

a,b: Là tham số thực sự

4/ Tìm hiểu tham số giá trị và tham số biến.

GV: Chiếu ví dụ thambien1 lên bảng.

HS: Quan sát ví dụ và trả lời câu hỏi.

GV: Trong phần đầu của thủ tục có tên thambien1 có gì khác với thủ tục ve_hcn.

HS: Phần khai báo có chữ Var.

GV: Tham số trong chương trình con có hai chức năng: Đưa dữ liệu vào, đưa kết quả ra.

GV: Quan sát ví dụ thambien1 cho biết x, y thuộc loại tham biến nào?

GV: Chiếu ví dụ tham bien2, x, y thuộc loại tham số nào?

GV: Chiếu và cho chạy chương trình các ví dụ để cho học sinh nắm rõ hơn về tham số biến và tham số giá trị.

HS: Viết chương trình con.

HS: Quan sát theo dõi ví dụ

HS: Nằm ở phần khai báo,sau khái báo biến.

HS: Ba phần: Tên thủ tục, khai báo của thủ tục, phần thân.

HS: Thủ tục nằm ở trong chương trình chính, thủ tục mở đầu bằng từ Procedure

HS: Quan sát, nghiên cứu trả lời câu hỏi.

HS: Thutuc2 có thêm chdai, chrong ở trong phần đầu của thủ tục.

HS: 3 hình chữ nhật

HS: Thông qua lời gọi: Ve_hcn(25,10);

Ve_hcn(5,10);

Ve_hcn(a,b);

HS: Tham số

HS: chdai, chrong: tham số hình thức.

HS: x, y thuộc loại tham số biến.

HS: x: Tham số giá trị, y: Tham số biến

II. CỦNG CỐ BÀI HỌC VÀ BÀI TẬP VỀ NHÀ (5 ph)

1. Củng cố: Qua bài học HS nắm vững những kiến thức trọng tâm sau:

2. Bài tập:

  1. Đọc trước nội dung mục 2: Cách viết và sử dụng hàm.
  2. Viết chương trình con dạng thủ tục tính tích, thương của 2 số A và B. Và cho biết các cách viết khác nhau về tham số, CTC không có tham số, cách thực hiện CTC.
  3. Viết chương trình con tính diện tích các hình tròn, hình thang, hình chữ nhật khi biết độ dài của các cạnh.

Const Pi: real =3.14;

Var r, a, cr, cd: real;

chon: integer;

Procedure dien_tich_hinh_tron (r: real);

Var dt: real;

Begin

dt:=Pi*2*r;

Writeln('dien tich hinh tron la :', dt:6:2);

End;

Procedure dien_tich_hinh_vuong (a: real);

Var dt: real;

Begin

dt:=a*a;

Writeln('Dien tich hinh vuong la :', dt:6:2);

End;

Procedure dien_tich_hinh_CN (cr, cd: real);

Var dt:real;

Begin

dt:=(cr+cd)/2;

Writeln(' Dien tich hinh chu nhat la :', dt);

End;

Begin

Writeln('nhap ban kinh :'); Readln(r);

Writeln('Nhap canh hinh vuong:'); Readln(a);

Writeln('nhap chieu rong hinh chu nhat:'); Readln(cr);

writeln('Nhap chieu dai hinh chu nhat'); readln(cd);

Writeln('chon:'); Readln(chon);

dien_tich_hinh_tron(r);

dien_tich_hinh_vuong(a);

dien_tich_hinh_CN(cr,cd);

Readln;

End.

  1. Viết chương trình con dạng thủ tục để tính N!

var n,gt:integer;

Procedure tinhgt(n: integer; var gt:integer);

var i:integer;

begin

if i=0 then gt:=1

else begin

gt:=1;

for i:=1 to n do gt:=gt*i;

end;

end;

BEGIN

write('nhap n= '); readln(n);

write('giai thua cua ',n,' la: ');

tinhgt(n,gt);

write(‘Giai thua cua 2 so la: ’,gt);

readln;

BÀI 18: VÍ DỤ VỀ CÁCH VIẾT VÀ SỬ DỤNG CHƯƠNG TRÌNH CON (tiết 42)

(Ngày soạn: 22/01/2011; Ngày dạy: ....../......./20 )

A. MỤC ĐÍCH – YÊU CẦU

1. Kiến thức:

- Học sinh biết cấu trúc chung của một hàm (Function).

- Học sinh nắm được sự giống nhau và khác nhau giữa thủ tục và hàm.

- Học sinh nhận biết được các thành phần trong đầu hàm.

- Học sinh nhận biết được câu lệnh sử dụng hàm ở chương trình cùng các tham số thực sự.

2. Kỹ năng:

  • Nhận biết được các thành phần trong đầu của một hàm.

3. Thái độ:

  • Rèn luyện cho học sinh phẩm chất của người lập trình như tinh thần hợp tác, làm việc theo nhóm, tuân thủ các yêu cầu của một công việc chung.
  • Rèn luyện cho học sinh đức tính chịu khó học hỏi, cẩn thận trong lúc làm việc.

B. PHƯƠNG PHÁP GIẢNG DẠY

- Giảng giải, thuyết trình và mô phỏng.

C. KIẾN THỨC TRỌNG TÂM

- Cách viết và sử dụng hàm.

D. PHƯƠNG TIỆN DẠY HỌC

- Bảng đen, phấn trắng, máy chiếu đa năng.

E. KIỂM TRA BÀI CŨ:

  1. Em hãy cho biết cấu trúc chung của thủ tục (Procedure) và giải thích rõ từng thành phần?
  2. Làm các bài tập 2, 3, 4 đã nêu trong bài học trước.

F. NỘI DUNG GIẢNG DẠY

I. NỘI DUNG BÀI HỌC

Nội dung ghi bảng

Hoạt động của thầy

Hoạt động của trò

BÀI 18: VÍ DỤ VỀ CÁCH VIẾT VÀ SỬ DỤNG CHƯƠNG TRÌNH CON

(tiết 42)

2. Cách viết và sử dụng hàm

* Cấu Trúc của Hàm:

Function <Tên hàm>[(Danh sách tham số)]:<kiểu dữ liệu>;

[( Phần khai báo)];

Begin

[<dãy các lệnh>];

<Tên hàm> := <Biểuthức>;

end;

* Sự giống nhau và khác nhau giữa thủ tục và hàm:

Giống nhau:

- Đều là chương trình con, có cấu trúc giống một chương trình.

- Đều có thể chứa các tham số, cùng tuân theo các quy định về khai báo và sử dụng các loại tham số này. (Có thể không có tham số)

Khác nhau:

- Hàm luôn trả về một giá trị thuộc kiểu xác định thông qua tên hàm. (các kiểu dữ liệu đơn giản: integer, real, boolean, char, string).

- Đầu hàm bắt đầu bằng từ khóa Function còn thủ tục bắt đầu với từ khóa Procedure.

- Phải chỉ ra kết quả của hàm thuộc kiểu dữ liệu nào.

- Trong thân hàm thường có câu lệnh gán giá trị cho tên hàm.

- Khi viết các bài toán có giá trị luôn thay đổi, mà giá trị này cần in Kết quả thì sử dụng hàm vì kq lấy thông qua tên hàm mà không cần tham biến. Nếu viết dạng thủ tục thì phức tạp vì phải khai báo thêm tham biến để lấy giá trị thay đổi.

* Cách sử dụng hàm:

Việc sử dụng hàm giống như việc sử dụng các hàm chuẩn.

=> Khi viết lệnh gọi tên hàm gồm: Tên hàmtham số thực sự tương ứng với các tham số hình thức.

VD 1: Rút gọn phân số (SGK)

- Nếu ý tưởng giải bài toán.

- Chương trình (SGK).

- Cách thực hiện bài toán theo chương trình:

VD: nhập tuso=21, mauso=27

=> a = 3, kq = .

VD 2: Tìm Min 3 số (SGK).

GV: - Chúng ta đã tim hiểu về thủ tục (Procedure), đây là chương trình con không có giá trị trả về. Hôm nay chúng ta sẽ tìm hiểu về một loại chương trình con có giá trị trả về đó là Hàm (Function). Vậy Hàm và Thủ tục khác nhau như thế nào? Cách viết và sử dụng Hàm như thế nào?

- Ghi tựa đề bài và phần 2.

GV: Xét bài toán tìm số nhỏ nhất trong 2 số:

a và b.

-Đặt câu hỏi: Theo các em bài toán trên cho ta kết quả là gì?

GV: Vậy thì bài toán trên chúng ta không thể sử dụng thủ tục mà phải sử dụng hàm. Các em hãy quan sát cấu trúc chung của Hàm như sau:

  • Dùng máy chiếu chiếu cấu trúc của hàm.
  • Các em hãy chỉ ra những điểm giống nhau và khác nhau giữa Thủ tục và Hàm?
  • Kiểu dữ liệu là các kiểu nào?

GV: Nhận xét, giải thích và chốt lại.

GV: Các em xem ví dụ 1 SGK trang 101 và cho biết việc sử dụng Hàm như thế nào?

GV: Nhận xét, giải thích và chốt lại.

- Học sinh nêu ý tưởng giải bài toán VD 1>

- Học sinh nêu ý tưởng và thực hiện bài toán tìm giá trị nhỏ nhất của 3 số a, b, c.

Lắng nghe.

Lắng nghe và trả lời. (Học sinh trả lời được).

HS: Thảo luận nhóm trong thời gian 5 phút và một em trả lời.

- Các nhóm khác nhận xét và bổ sung.

Tự ghi bài.

Xem ví dụ 1 SGK trang 101 và thảo luận nhóm trong 3 phút

Một em trả lời câu hỏi.

Các nhóm khác nhận xét và bổ sung.

Tự ghi bài.

Tìm UCLN của tử số và mẫu số, sau đó lấy tử số và mẫu số chia cho UCLN.

II. CỦNG CỐ BÀI HỌC VÀ BÀI TẬP VỀ NHÀ (5 ph)

1. Củng cố: Qua bài học HS nắm vững những kiến thức trọng tâm sau:

+ Ví dụ trên thực hiện chương trình gì?

+ Hãy cho biết kết quả trả về của hàm MIN?

+ Giải thích lời gọi hàm: Min(Min(a,b),c)?

+ Hãy chỉ ra tham số hình thức, tham số thực sự, biến toàn cục và biến cục bộ?

2. Bài tập:

Bài 1: Viết CTC dạng hàm để tính n! = 1.2...n.

Ý tưởng: Vì bài toán này trả về 1 giá trị duy nhất nên ta dùng hàm.

Bài 2: Viết hàm tìm Max của 2 số thực x,y.

Bài 3: Viết hàm XMU(x:Real;n:Byte):Real; để tính giá trị xn.

BÀI TẬP VÀ THỰC HÀNH 6 (tiết 43-44)

(Ngày soạn: 20/02/2011; Ngày dạy: ....../......./2011)

A. MỤC ĐÍCH – YÊU CẦU

- Rèn luyện các thao tác xử lí xâu, kĩ năng tạo hiệu ứng chữ chạy trên màn hình.

- Nâng cao kĩ năng viết, sử dụng chương trình con.

- Tổ chức những hoạt động trong phòng máy để học sinh có được các kĩ năng cơ bản trong việc tổ chức và sử dụng chương trình con trong lập trình.

B. PHƯƠNG PHÁP GIẢNG DẠY

- Thuyết trình, vấn đáp.

C. PHƯƠNG TIỆN DẠY HỌC

- Máy chiếu, máy tính, phông chiếu hoặc bảng, phòng thực hành.

E. NỘI DUNG GIẢNG DẠY

I. NỘI DUNG BÀI HỌC

Nội dung ghi bảng

Hoạt động của thầy

Hoạt động của trò

BÀI TẬP VÀ THỰC HÀNH 6 (tiết 43-44)

Bài tập 1:

a) Tìm hiểu cách xây dựng 2 thủ tục sau:

- Thủ tục CatDan(s1,s2);

- Thủ tục CanGiua(s);

b) Viết chương trình nhập một xâu kí tự từ bàn phím và đưa xâu đó ra màn hình có dạng dòng chữ chạy giữa màn hình văn bản 25x80.

Uses crt;

Type str79 = string[79];

Var s1, s2: str79;

stop: boolean;

Procedure catdan(s1:str79; var s2: str79);

begin

s2:=copy(s1,2,length(s1)- 1) + s1(1);

end;

procedure cangiua(var s:str79);

var i, n: integer;

begin

n:= length(s);

n:= (80-n) div 2;

for i:= 1 to n do s:=’ ‘ + s;

end;

begin

clrscr;

write(‘Nhap xau s1:’); readln(s1);

cangiua(s1);

clrscr;

stop:=false;

while not (stop) do

begin

gotoxy(1,12);

write(s1);

delay(500);

catdan(s1,s2);

s1:= s2;

stop:= keypressed;

end;

readln;

end.

c) Bổ sung câu lệnh theo yêu cầu SGK.

Bài tập 2: Thực hành các bài tập dạng thủ tục và dạng hàm là các bài tập về nhà đã giao:

a) Tích và thương 2 số.

b) Diện tích các hình.

c) Tính xy.

d) Tính n!

GV: Cho bài tập ( làm tiếp theo bài tiết trước)

+ Hướng dẫn học sinh đưa ra giải thuật .

+ Giáo viên hướng dẫn cách viết .

Hướng dẫn cách khai báo xâu ký tự:

  • Cách 1 : gián tiếp .

TYPE

Tên chuoi1 = string[ spt tối đa ];

Tên chuoi1 = string;

Var biên1: tên chuoi 1;

Biến 2 : ten chuoi 2;

Cách 2: Trực tiếp .

VAR biến 1: string[spt tối đa];

Biến 2: string;

GV: cho học sinh giải bài trên máy.

GV: hướng dẫn học sinh sửa lỗi.

GV: Cho bài tập :

+ Học sinh đưa ra giải thuật .

+ Giáo viên hướng dẫn học sinh giải thuật và cách viết chương trình.

HS: thực hành trên máy.

HS: thực hành trên máy.

II. CỦNG CỐ BÀI HỌC VÀ BÀI TẬP VỀ NHÀ (15 ph)

Bài 1: Thực hành trên máy chương trình sau để tìm hiểu về tham số và cách thực hiện chương trình con trên máy tính:

* Bạn hãy in và chạy thử 3 chương trình sau đây:

a. Program Tham-so;

Var a, b: Integer;

(*==========================================*)

Procedure VD-thamso(x,y: interger);

Begin

x:=x+1; y:= y+1;

Writeln(x:5,y:5);

End;

(*==========================================*)

Begin

a:=1; b:=4

VD-thamso(a,b)

Writeln(a:5,b:5)

END.

Kết quả chạy sẽ là:

2 5

1 4

b. Program Tham-so;

Var a,b: interger

(*==========================================*)

Procedure VD-thamso(x:integer; Var y: integer)

Begin

x:= x+1; y:=y+1;

Writeln(x:5, y:5);

End;

(*==========================================*)

Begin {Chương trình chính}

a:=1; b:=4;

VD-thamso(a,b);

Writeln(a:5,b:5);

END.

Kết quả chạy sẽ là:

1 4

1 5

c. Program Tham-so;

Var a, b: integer;

(*==========================================*)

Procedure VD-thamso(Var x, y: integer)

Begin

x:= x+1; y:= y+1;

Writeln (x:5, y:5);

End;

(*==========================================*)

Begin {chương trình chính}

a:= 1; b:=4;

VD-thamso(a,b);

Writeln(a:5,b:5);

END.

Kết quả chạy sẽ là:

2 5

2 5

Bạn hãy giải thích xem kết quả tại sao lại như vậy (phân biệt số tham biến và tham trị).

Giải thích:

a. Cả 2 tham số x và y của thủ tục VD_ thamso đều là tham trị cho nên khi gọi thủ tục VD_thamso (a, b) với a=1; b=4 thì x=1; y=4 ,sau đó x,y bị thay đổi giá trị (cộng thêm 1) và trên màn hình in ra:

2 5

Kết thúc thủ tục này biến a và b không bị thay đổi giá trị vì vậy lệnh Writeln (a:5, b:5); in ra:

1 4

b. Thủ tục VD_ thamso sử dụng tham trị x và tham số biến y cho nên khi gọi thủ tục VD_thamso(a, b) thì cũng giống a. màn hình hiện:

2 5

Tuy nhiên khi kết thúc thủ tục biến a vẫn giữ nguyên giá trị, c̣n biến b bị thay đổi nên màn hình hiện:

1 5

c. Thủ tục VD_thamso sử dụng cả 2 tham số hình thức là tham biến cho nên khi gọi thủ tục VD_thamso (a, b) thì màn hình xuất hiện:

2 5

Kết thúc thủ tục này cả 2 biến a, b đều bị thay đổi cho nên lệnh Writeln(a:5, b:5) in ra màn hình

2 5

KIỂM TRA 15 ph

Viết chương trình chính cho các bài toán sau:

Đề 1

Bài 1 (6 đ): Nhập vào 3 số nguyên dương a, b, c. Hãy kiểm tra xem a, b, c có lập thành độ dài 3 cạnh của 1 tam giác không?

Bài 2 (4 đ): Viết chương trình nhập một xâu ký tự. In ra màn hình xâu ký tự trên và số lần xuất hiện của từng ký tự chữ cái trong xâu. (Tương tự bài 5 - Ôn tập kỳ 1)

Đề 2

Bài 1 (6 đ): Nhập số nguyên N, kiểm tra N là số chẵn hay số lẻ?

Bài 2 (4 đ): Viết chương trình nhập một xâu ký tự. In ra màn hình xâu ký tự trên và số lần xuất hiện của từng ký tự chữ cái trong xâu. (Tương tự bài 5 - Ôn tập kỳ 1)

Đề 3

Bài 1 (6 đ): Nhập số nguyên N, kiểm tra N là số dương hay số âm?

Bài 2 (4 đ): Viết chương trình nhập một xâu ký tự. In ra màn hình xâu ký tự trên và đếm xem có bao nhiêu ký tự giống ký tự X, X được nhập từ bàn phím. (Tương tự đề kiểm tra kỳ 1)

Đề 4

Bài 1 (6 đ): Viết chương nhập vào 1 số nguyên dương bất kỳ, thông báo số vừa nhập có chia hết cho 3 và 5 không?

Bài 2 (4 đ): Viết chương trình nhập một xâu ký tự. In ra màn hình xâu ký tự trên và đếm xem có bao nhiêu ký tự giống ký tự X, X được nhập từ bàn phím. (Tương tự đề kiểm tra kỳ 1)

BÀI TẬP VÀ THỰC HÀNH 7 (tiết 45-46)

(Ngày soạn: 22/02/2011; Ngày dạy: ....../......./2011)

A. MỤC ĐÍCH – YÊU CẦU

1. Kiến thức

+ Nâng cao kỹ năng viết, sử dụng chương trình con.

2. Kĩ năng:

+ Rèn luyện cho học sinh kĩ năng lập trình giải quyết một số bài toán đơn giản.

+ Rèn luyện học sinh có được những kĩ năng cơ bản trong việc tổ chức và sử dụng chương trình con trong lập trình.

+ Biết cách viết một chương trình có cấu trúc để giải một bài toán trên máy tính.

3. Thái độ:

+ Tích cực trong học tập, hứng thú tiếp thu kiến thức mới.

B. PHƯƠNG PHÁP GIẢNG DẠY

- Thuyết trình, vấn đáp.

C. PHƯƠNG TIỆN DẠY HỌC

- Máy chiếu, máy tính, phông chiếu hoặc bảng, phòng thực hành.

E. NỘI DUNG GIẢNG DẠY

I. NỘI DUNG BÀI HỌC

Nội dung ghi bảng

Hoạt động của thầy

Hoạt động của trò

BÀI TẬP VÀ THỰC HÀNH 7

(tiết 45-46)

Tiết 1

Câu 1: Tại sao các chương trình con: Kh_cach, chuvi, dientích, đều là hàm mà không là thủ tục?

Tại sao các hàm trên trả về cho ta một số thực?

Câu 2: Tại sao các chương trình con hienthi, tinhchat, dacanh lại là thụ tục mà không là hàm?

Ổ định lớp

Để mô tả hay quản lý điểm hay tam giác ta dùng kiểu dữ liệu nào?

Khi biết toạ độ ba đỉnh của một tam giác thì ta có thể tìm được những yếu tố nào?

-> Mỗi yếu tố là một chương trình con trong lập trình -> Theo yêu cầu của đề bài ta cần xây dựng những chương trình con nào?

Hãy tìm hiểu và thảo luận chương trình ở câu b và trả lời các câu hỏi sau:

Câu 1: Tại sao các chương trình con: Kh_cach, chuvi, dientích, đều là hàm mà không là thủ tục?

Tại sao các hàm trên trả về cho ta một số thực?

Câu 2: Tại sao các chương trình con hienthi, tinhchat, dacanh lại là thụ tục mà không là hàm?

Yêu cầu học sinh copy bài chuẩn bị ở nhà vào máy (hay giáo viên chuẩn bị sẵn) và tiến hành kiểm tra lỗi và chạy thử.

Quan sát giúp đỡ học sinh khi gặp khó khăn.

Độ dài của của các cạnh, chu vi, diện tích, tính chất của tam (đều, cân hay) vuông của tam giác đó.

Trả lời:

+Procedure daicanh (var R:tamgiac, var a,b,c: real);

+ function chuvi (varR:tamgiac) : real ;

+ function dientich (var R:tamgiac):real;

+ function kh_cach (var P,Q: Diem):real;

+ Procedure hienthi (var R:tamgiac);

+ Procedure tinhchat (var R:tamgiac, var deu,can,vuong: boolean);

Tra lời: trả về giá trị qua tên hàm.

Do khoảng các hai điểm có thể là số thực -> chuvi, dientich cũmg có thể là số thực.

Không trả về một giá trị cụ thể

Tiết 2

uses crt;

type

Diem=record

x,y: real;

end;

tamgiac=record

A,B,C: Diem;

end;

const eps = 1.0E-6;

var T:tamgiac;

d,cn,v:boolean;

n,i,deu,can,vuong:word;

f,f1:text;

function kh_cach(P,Q:Diem):real;

begin

kh_cach:=sqrt((P.x-Q.x)*(P.x-Q.x)+(P.y-Q.y)*(P.y-Q.y));

end;

procedure daicanh(var R:tamgiac; var a,b,c: real);

begin

a:=kh_cach(R.B,R.C);

b:=kh_cach(R.A,R.C);

c:=kh_cach(R.A,R.B);

end;

procedure tinhchat(var R:tamgiac; var deu,can,vuong:boolean);

var a,b,c: real;

begin

deu:=false;

can:=false;

vuong:=false;

daicanh(R,a,b,c);

if (abs(a-b) < eps) and (abs(a-c)<eps) then

begin

deu:=true;

can:=true;

end

else

if (abs(a-b)<eps) or (abs(a-c)<eps) or (abs(b-c)<eps) then

can:=true;

if (abs(a*a+b*b-c*c)<eps) or (abs(a*a+c*c-b*b)<eps)

or(abs(c*c+b*b-a*a)<eps) then vuong:=true;

end;

begin

deu:=0;

can:=0;

vuong:=0;

assign(f,'tamgiac.dat');

reset(f);

readln(f,n);

assign(f1,'tamgiac.out');

rewrite(f1);

for i:=1 to n do

begin

readln(f,T.A.x,T.A.y,T.B.x,T.B.y,T.C.x,T.C.y);

tinhchat(T,d,cn,v);

if d then deu:=deu+1

else

begin

if cn then can:=can+1;

if v then vuong:=vuong+1;

end;

writeln(f1,'co: ',deu,'tam giac deu');

writeln(f1,'co: ',can,'tam giac can(khong deu)');

writeln(f1,'co:',vuong,'tam giacvuong');

writeln(f1);

end;

close(f);

close(f1);

end.

Phân tích bài toán:

+ Input là gì?

+ Output là gì?

+ Input và Output nằm ở đâu?

-> Vì vậy để lập trình giải bài toán ta cần có những thao tác nào?

Hướng giải quyết bài toán:

+ Bài toán cần có những chương trình con nào? Có thể khai thác ở đâu?


+ Các thao tác đọc tệp văn bản.

+ Các thao tác đếm các loại tam giác.

+ Các thao tác để ghi kết quả đạt được.

-> Các thao tác thực hiện trên chương trình chính( sử dụng máy chiếu hoặc ghi lên bảng):

  • khởi tạo các biến đếm.
  • Mở tệp tamgiac.dat để đọc.
  • Đọc số N.
  • Từ dòng 1 đến dòng N thực hiện các thao tác :

+ Đọc 6 số vào 6 biến (readln(T.A.x,T.A.y,T.B.x,T.B.y,T.C.x,T.C.y))

+ Gọi thủ tục tính chất.

+ Kiểm tra điều kiện và đếm.

  • Mở tệp tamgiac.out để ghi kết quả.

Yêu cầu học sinh lập trình giải bài toán.

Quan sát và giải đáp thắc mắc của học sinh.

Hướng dẫn học sinh chạy thử và kiểm tra chương trình trên tệp có sẵn bằng cách đổi tên tệp tamgiac.dat thành các tên tệp có sẵn.

Dòng đầu tiên chứa số N

N dòng tiếp theo chứ toạ độ ba đỉnh của tam giác.

Dòng đầu là số tam giác đều

Dòng thứ hai là số tam giác cân (không đều).

Dòng thứ ba là số tam giác vuông.

Trả lời: nằm trong hai tệp có tên là tamgiac.dat và tamgiac.out.

Cần 3 chương trình con: kh_cách, daicanh, tinhchat.(sử dụng các chương trình có sẵn ở câu

b).

Theo dõi

Thực hành trên máy

Chạy thử và kiểm tra lỗi.

Kiểm tra chương trình với các tệp thông số có sẵn và đối chiểu kết quả.

II. CỦNG CỐ BÀI HỌC VÀ BÀI TẬP VỀ NHÀ (10 ph)

1. Củng cố: Qua bài học HS nắm vững những kiến thức trọng tâm sau:

- Thủ tục, hàm , tham số giá trị, tham số biến, tham số thực sự, biến tòan cục, biến cục bộ.

- Tìm hiểu một số chương trình con liên quan đến tam giác.

2. Bài tập:

  1. Viết chương trình nhập vào số tự nhiên N rồi thông báo lên màn hình số đó có phải là số nguyên tố hay không.
  2. Viết chương trình nhập vào số nguyên N. In ra màn hình tất cả các ước số của N.

For i:=1 To N Do

If N MOD i=0 Then Write(i:5);

  1. Viết chương trình nhập dãy N số nguyên. Tính tổng bình phương của các số dương và tổng bình phương của các số âm.
  2. Với giá trị N được nhập từ bàn phím, hãy thực hiện các công việc sau:
  3. Nhập N số nguyên và tính tổng giá trị các số âm, tổng giá trị các số dương.
  4. Tìm và in ra giá trị, vị trí của số lớn nhất, số nhỏ nhất. {trường hợp có nhiều GTNN và GTLN giống nhau thì in ra tất cả các vị trí đó: dùng vòng FOR i và If A[i] = GTLN để in ra tất cả các vị trí của GTLN}
  5. Sắp xếp dãy giảm dần.

BÀI 19: THƯ VIỆN CHƯƠNG TRÌNH CON CHUẨN (tiết 48-49)

(Ngày soạn: 03/03/2011; Ngày dạy: ....../......./2011)

A. MỤC TIÊU:

1. Kiến thức:

- Học sinh biết được một số chương trình con chuẩn.

2. Kỹ năng:

  • Bước đầu sử dụng được các thư viện đó trong lập trình.
  • Khởi động chế độ đồ họa.
  • Sử dụng được các thủ tục vẽ điểm, đường, hình tròn, hình ellipse, hình chữ nhật.

3. Thái độ:

  • Học sinh chú ý học tập.

B. PHƯƠNG PHÁP GIẢNG DẠY

- Giảng giải, thuyết trình và mô phỏng.

C. KIẾN THỨC TRỌNG TÂM

- Tìm hiểu các thư viện: CRT, GRAPH, các thủ tục vẽ điểm, đường thẳng và các hình cơ bản.

D. PHƯƠNG TIỆN DẠY HỌC

- Bảng đen, phấn trắng, máy chiếu đa năng.

E. NỘI DUNG GIẢNG DẠY

I. HOẠT ĐỘNG I: Tìm hiểu thư viện CRT (tiết 1).

1. Mục tiêu:

- Học sinh biết được một số chương trình con chuẩn trong thư viện.

2. Nội dung:

- Thư viện CRT chứa các thủ tục liên quan đến việc quản lý, khai thác màn hình, bàn phím.

VD: + Thủ tục Clrscr: xóa màn hình.

+ Textcolor(c): đặt màu chữ cho màn hình, trong đó c là hằng hoặc biến có giá trị nguyên không âm để xác định màu.

+ Thủ tục Texbackground(c): đặt màu cho nền màn hình. (Giá trị màu trong SGK).

+ Thủ tục Gotoxy(x,y): đưa con trỏ đến vị trí cột x dòng y của màn hình văn bản.

3. Tiến hành dạy học:

Hoạt động của thầy

Hoạt động của trò

1. Tìm hiểu thủ tục Clrscr:

- Yêu cầu học sinh nghiên cứu SGK, kể tên các chương trình con trong thư viện CRT.

- Cho HS tham khảo chương trình sau:

Begin

Clrscr;

Readln;

End.

- Biên dịch chương trình. Hỏi? Tại sao lại xuất hiện lỗi? khắc phục như thế nào?

- Thêm Uses CRT; vào đầu chương trình và thực hiện chương trình để HS thấy được kết quả, chú ý cho HS ghi nhớ màn hình trước lúc thực hiện chương trình.

- Hỏi: Chức năng của thủ tục Clrscr;

2. Tìm hiểu thủ tục Textcolor.

- Chiếu chương trình VD sau:

Uses CRT;

Begin

Write(‘chua dat mau chu’);

Textcolor(4);

Write(‘da dat mau chu do’);

Readln

End.

- Thực hiện chương trình để HS thấy kết quả.

- Hỏi: Chức năng của lệnh Textcolor(4);

3. Tìm hiểu thủ tục Texbackground.

- chiếu chương trình VD sau:

Uses CRT;

Begin

Textbackground(1);

Write(‘da dat mau nen’);

Readln

End.

- Thực hiệc CT để HS thấy được kết quả.

- Hỏi: Chức năng của lệnh Texbackground(1).

4. Tìm hiểu thủ tục Gotoxy.

- Chiếu chương trình VD sau:

Uses CRT;

Begin

Write(‘con tro dang o cot 10 dong 20’);

Gotoxy(10,20);

Readln

End.

- Thực hiện CT để HS thấy kết quả.

- Hỏi: Chức năng của lệnh Gotoxy(10,20);

1. Tham khảo SGK:

- Clrscr, textcolor, textbackground, gotoxy.

- Quan sát chương trình.

- Vì sử dụng thủ tục nhưng chưa sử dụng thư viện CRT.

- Thêm lệnh Uses CRT;

- Quan sát giáo viên thực hiện chương trình.

- Xóa màn hình.

- Quan sát chương trình.

- HS quan sát chương trình.

- Đặt màu chữ thành màu chữ đỏ.

- HS quan sát chương trình.

- Đặt màu nền thành màu xanh da trời.

- Quan sát chương trình.

- Quan sát kết quả.

- Đưa con trỏ về vị trí cột 10, dòng 20.

II. HOẠT ĐỘNG II: Tìm hiểu thư viện Graph (tiết 1).

1. Mục tiêu:

- Học sinh biết được cách khởi động chế độ đồ họa.

2. Nội dung:

- Thư viện Graph chứa các chương trình phục vụ khai thác khả năng đồ họa của MT ở mức độ thông dụng như vẽ điểm, các đường, tô màu,…

- Các thiết bị và chương trình hỗ trợ đồ họa:

+ Có hai chế độ màn hình: đồ họa và văn bản.

+ Bảng mạch điều khiển màn hình là thiết bị đảm bảo tương tác giữa bộ xử lý và màn hình để thực hiện các chế độ phân giải và màu sắc.

+ TP Pascal cung cấp các chương trình điều khiển (có phần mở rộng là BGI) tương ứng với các loại card đồ họa. Khi khởi động chế độ đồ họa cần chỉ ra đường dẫn đến chương trình này.

+ Tọa độ màn hình được đánh số từ 0. Cột được đánh số từ trái qua phải, dòng được đánh số từ trên xuống dưới. Giá trị lớn nhất của tọa độ dòng và tọa độ cột được gọi là độ phân giải của màn hình.

+ Để thực hiện được các chức năng đồ họa và sử dụng các thủ tục và hàm trong thư viện Graph.

- Khởi động chế độ đồ họa: Initgraph(dr,md:integer;pth:string);

dr : Là số hiệu của trình điều khiển BGI .

md : Là số hiệu của độ phân giải.

pth : Là đường dẫn tới các tệp BGI: Closegraph;

- Kết thúc chế độ đồ họa về chế độ văn bản:

3. Tiến hành dạy học:

Hoạt động của thầy

Hoạt động của trò

1. Yêu cầu HS nghiên cứu SGK để trả lời các câu hỏi:

- Hỏi: Các dạng dữ liệu nào có thể được hiển thị trên màn hình?

- Hỏi: Nhiệm vụ chính của Card màn hình?

- Hỏi: Khi nói màn hình có độ phân giải 640x480 là nói đến điều gì?

2. Đưa ra cấu trúc chung của thủ tục khởi động đồ họa.

* Initgraph(dr, md : integer ; pth : string) ;

- Giải thích các thông số trong thủ tục cho HS.

- Cho HS thấy một VD khởi động đồ họa.

3. Giới thiệu thủ tục trở về chế độ đồ văn bản Closegraph;

- Yêu cầu khởi động chế độ đồ họa và chuyển về chế độ văn bản.

1. Tham khảo SGK để trả lời.

- Văn bản và hình ảnh.

- Làm cầu nối giữa CPU và màn hình khi thể hiện thông tin.

- Là nói đến màn hình có 640 dòng và 480 cột.

2. Quan sát theo dõi dẫn dắt của giáo viên.

- Quan sát giáo viên thực hiện.

3. Quan sát và so sánh giữa hai chế độ văn bản và đồ họa.

- Thay phiên nhau thực hiện việc chuyển đổi giữa hai chế độ văn bản và đồ họa.

III. HOẠT ĐỘNG III: Tìm hiểu các thủ tục vẽ điểm, đường và các hình cơ bản (tiết 2).

1. Mục tiêu:

- Học sinh biết được các thủ tục vẽ điểm, đường và các hình cơ bản, biết các thủ tục, các tham số và các chức năng của từng thủ tục.

2. Nội dung:

- Trước khi vẽ, ta đặt màu cho nét vẽ: Setcolor(word);

- Vẽ điểm: Putpixel(x,y:integer; color:word);

- Vẽ đường thẳng: Line(x1,y1,x2,y2:integer); (x1,y1,x2,y2: các tọa độ điểm đầu-cuối)

Lineto(x,y:integer); (vẽ từ vị trí con trỏ đến điểm có tọa độ x,y).

Linerel(dx,dy:integer); (tọa độ hiện tại cộng với gia số dx,dy) - Vẽ hình tròn: Circle(x,y:integer; r:word);

- Vẽ hình chữ nhật: Rectang(x1,y1,x2,y2:integer);

- Vẽ hình Elip: Ellipse(x,y:integer; stangle,endangle,xr,yr:word);

3. Tiến hành dạy học:

Hoạt động của thầy

Hoạt động của trò

1. Tìm hiểu thủ tục Setcolor.

- Cấu trúc chung của thủ tục:

Setcolor(m:word);

- Chương trình VD:

Uses graph

Begin

Drive:=0;

Initgraph(drive,mode,‘c:\Tp\BGI’);

Circle(12,40,100);

Setcolor(4);

Circle(12,40,200);

Readln;

End.

- Thực hiện CT để HS thấy được kết quả.

- Hỏi: Chức năng của thủ tục Setcolor.

2. Tìm hiểu thủ tục Putpixel

- Cấu trúc chung của thủ tục:

Putpixel(x,y:integer;color:word);

- Chiếu chương trình VD:

Uses graph;

var driver,mode:integer;

Begin

Driver:=0;

Initgraph(driver, mode, 'D:\tp\BGI');

Putpixel(100,40,14);

readln

End.

- Thực hiện chương trình để HS thấy kết quả.

- Hỏi: Chức năng của thủ tục Putpixel.

3. Tìm hiểu thủ tục Line.

- Cấu trúc chung của thủ tục Line:

Line(x1,y1,x2,y2:integer);

- Chiếu chương trình VD nhưng thay lệnh Putpixel(12,40,15); bằng lệnh Line(1,1,20,20);

- Thực hiện CT để HS thấy được kết quả.

- Hỏi: Chức năng của thủ tục Line.

4. Tìm hiểu thủ tục Lineto.

- Cấu trúc chung của thủ tục:

Lineto(x,y:integer);

- Chiếu chương trình VD trên nhưng thay lệnh Putpixel(12,40,15); bằng lệnh Lineto(20,20);

- Thực hiện CT để HS thấy được kết quả.

- Hỏi: Chức năng của thủ tục Lineto.

5. Tìm hiểu thủ tục Linerel.

- Cấu trúc chung của thủ tục:

Linerel(dx,dy:integer);

- Hỏi: Chức năng của thủ tục Linerel.

6. Tìm hiểu thủ tục Circle, Ellipse,

Rectangle .

- Cấu trúc chung của thủ tục:

* Circle(x,y:integer;r:word);

* Ellipse(x,y:integer; stangle, endangle,

xr,yr:word);

* Rectangle(x1,y1,x2,y2:integer);

- Chương trình VD:

Uses graph;

var driver,mode:integer;

Begin

Driver:=0;

Initgraph(driver, mode, 'D:\tp\BGI');

setcolor(86);

Circle(40,40,30);

setcolor(14);

Ellipse(500,200,50,120,50,100);

setcolor(2);

Rectangle(100,100,200,200);

readln

End.

1. Quan sát cấu trúc chung và suy nghĩ để trả lời câu hỏi.

- Quan sát chương trình.

- Quan sát kết quả của chương trình.

- Vẽ một điểm có màu Color trên màn hình tại tọa độ (x,y).

2. Quan sát cấu trúc chung và suy nghĩ để trả lời câu hỏi.

- Quan sát chương trình.

- Quan sát kết quả chương trình.

- Vẽ một đường thẳng từ điểm có tọa độ (x1,y1) đến điểm có tọa độ (x2,y2).

3. Quan sát cấu trúc chung và suy nghĩ để trả lời câu hỏi.

- Quan sát chương trình.

- Quan sát kết quả chương trình.

- Vẽ một đoạn thẳng từ điểm hiện tại đến điểm có tọa độ (x,y).

4. Quan sát cấu trúc chung và suy nghĩ để trả lời câu hỏi.

- Vẽ đoạn thẳng nối điểm hiện tại với điểm có tọa độ bằng tọa độ điểm hiện tại cộng với dx, dy.

5. Quan sát cấu trúc chung và suy nghĩ để trả lời câu hỏi.

- Quan sát chương trình.

- Quan sát kết quả chương trình.

+ Circle : Vẽ một đường tròn có tâm tại (x,y) và bán kính r.

+ Ellipse : Vẽ cung của Ellipse có tâm tại điểm x,y với bán kính trục xr, yr, từ góc khởi đầu stangle đến góc kết thúc endangle .

6. Quan sát cấu trúc chung và suy nghĩ để trả lời câu hỏi.

- Quan sát chương trình.

- Quan sát kết quả chương trình.

- Setcolor (m:word) : đặt màu cho nét vẽ với màu có số hiệu m.

IV. HOẠT ĐỘNG IV: Tìm hiểu một số thư viện khác (tiết 2).

1. Mục tiêu:

- Học sinh biết được tên và chức năng của thư viện: System, Dos, Printer.

2. Nội dung:

- Thư viện System chứa các hàm sơ cấp và các thủ tục vào/ra mà các chương trình đều dùng tới.

- Thư viện DOS chứa các thủ tục cho phép thực hiện trực tiếp các lệnh như tạo thư mục, thiết lập ngày giờ hệ thống.

- Thư viện Printer cung cấp các thủ tục làm việc với máy in.

3. Tiến hành dạy học:

Hoạt động của thầy

Hoạt động của trò

1. Yêu cầu HS nghiên cứu SGK, nêu tên các thư viện.

2. Yêu cầu HS nêu chức năng của mỗi thư viện.

1. Các thư viện:System, Dos, Printer

2. Chức năng mỗi thư viện:

- System : Chứa các hàm và thủ tục vào/ra sơ cấp.

- Dos : Chứa các thủ tục như tạo thư mục, đóng mở file,…

- Printer : Chức các thủ tục liên quan đến máy in.

V. HOẠT ĐỘNG V: Rèn luyện kỹ năng lập trình (Thời gian bổ sung).

1. Mục tiêu:

- Bước đầu HS sử dụng được các thủ tục của thư viện Graph để viết chương trình vẽ một số hình cơ bản.

2. Nội dung: Viết chương trình vẽ 20 hình tròn lồng nhau có tọa độ tâm là điểm chính giữa của màn hình, các hình có bán kính cách nhau 5 điểm ảnh.

3. Tiến hành dạy học:

Hỏi: Chức năng của thủ tụcạt động của thầy

Hỏi: Chức năng của thủ tụcạt động của trò

1. Giới thiệu nội dung yêu cầu lên bảng.

Định hướng cách giải quyết vấn đề cho HS.

- Thủ tục để vẽ được một hình tròn có tâm là điểm chính giữa màn hình.

- Cần bao nhiêu câu lệnh như vậy, dùng cấu trúc nào để điều khiển.

2. Chia lớp làm 3 nhóm, một nhóm viết chương trình trên máy, 2 nhóm viết lên bìa trong.

­- Thu phiếu trả lời. Chiếu lên bảng gọi HS nhóm khác lên nhận xét đánh giá. Sửa chương trình hoàn chỉnh cho học sinh viết trên máy.

3. Thực hiện chương trình trên máy để HS thấy kết quả.

1. Quan sát yêu cầu của GV:

Circle(x,y : integer ; r : word);

- Cần 20 câu lệnh, nên dùng vòng For để chương trình ngắn gọn.

2. Thảo luận theo nhóm để viết chương trình lên giấy bìa trong.

- Báo cáo kết quả viết được.

- Nhận xét, đánh giá và bổ sung thiếu sót của các nhóm khác.

3. Quan sát kết quả trên màn hình.

VI. CỦNG CỐ BÀI HỌC VÀ BÀI TẬP VỀ NHÀ (5 ph)

1. Củng cố: Qua bài học HS nắm vững những kiến thức trọng tâm sau:

+ Thư viện chương trình con cung cấp những chương trình con chuẩn nhằm mở rộng khả năng ứng dụng.

+ Khởi động chế độ đồ họa. Chuyển từ chế độ màn hình đồ họa sang chế độ màn hình văn bản.

+ Thủ tục vẽ điểm, đường và các hình cơ bản.

2. Bài tập:

* Đọc thêm bài đọc thêm 4 SGK, Trang 118.

BÀI TẬP, ÔN TẬP HỌC KỲ II (tiết 50)

(Ngày soạn: 20/02/2010; Ngày dạy: ....../......./2010)

A. MỤC ĐÍCH – YÊU CẦU

1. Kiến thức

+ Tiếp tục củng cố cho học sinh những kiến thức đã học.

2. Kĩ năng:

+ Rèn luyện cho học sinh kĩ năng lập trình giải quyết một số bài toán dạng CT con.

3. Thái độ:

+ Tích cực trong học tập, hứng thú tiếp thu kiến thức mới.

B. PHƯƠNG PHÁP GIẢNG DẠY

- Thuyết trình, vấn đáp.

E. NỘI DUNG ÔN TẬP.

Viết chương trình dạng CTC cho các bài tập sau: (Mỗi BT là một chương trình chính)

Chú ý: Khi viết chương trình con dạng hàm, giá trị trả về chỉ cần gán khi phép tính giá trị được thực hiện nhiều lần. VD chương trình con tính giai thừa….

1. Viết một chương trình bằng cách thực hiện lần lượt các công việc sau:

  1. Lập thủ tục nhập ba số thực dương a, b, c từ bàn phím.
  2. Lập thủ tục kiểm tra xem ba số trên có lập thành ba cạnh của tam giác hay không.
  3. Viết thủ tục tính diện tích tam giác theo công thức:
  4. Viết thủ tục tính các trung tuyến của tam giác:

2. Nhập n, m là các số nguyên dương, liệt kê các số nguyên tố nằm trong khoảng từ n đến m. (n < m).

3. Viết chương trình con sử dụng hàm tính: giai thừa của a và an.

var n:longint;

5. Tối giản phân số a/b.

6. Nhập tử và mẫu số của 2 phân số (a, b) và (c, d). Thực hiện phép toán @ (có thể là +, -, *, /) và in kết quả là phân số tối giản:

7. Nhập n phần tử là các số nguyên dương và số k và thực hiện các công việc sau:

a) Đếm xem trong dãy có bao nhiêu số bằng k?

b) Đếm xem trong dãy có bao nhiêu số lớn hơn k?

c) Đếm xem trong dãy có bao nhiêu số nhỏ hơn k?

8. Nhập dãy số thực a. Nhập số x. Sắp xếp lại dãy a thành dãy giảm.

9. Nhập dãy số thực a. Xét xem có thể sắp xếp dãy a thành dãy cấp số cộng không?

const max=100;

type mang=array[1..max] of real;

var i,n,k: integer;

a:mang;

x:real;

function ktsc:boolean;

var i:integer;

d:real;

begin

ktsc:=false;

d:=a[2]-a[1];

for i:=1 to n-1 do

if a[i+1]-a[i]<>d then exit;

ktsc:=true;

end;

begin

write('nhap so phan tu n= '); readln(n);

writeln('nhap gia tri cho mang:');

for i:=1 to n do

begin

write('a[',i,']= ');

readln(a[i]);

end;

for i:=1 to n-1 do

for k:=i+1 to n do

if a[i]>a[k] then

begin

x:=a[i];

a[i]:=a[k];

a[k]:=x;

end;

if ktsc then writeln('co the sap xep thanh cap so cong')

else writeln('khong the sap xep thanh cap so cong');

readln

end.

10. Viết chương trình nhập một xâu ký tự. Thực hiện xóa các ký tự là chữ số.

VAR s:string;

FUNCTION posnum(s:string):byte;

var ok:boolean;

i:integer;

begin

ok:=false;

i:=1;

while (i<=length(s))and(not ok) do

if s[i] in ['0'..'9'] then ok:=true

else i:=i+1;

if ok then posnum := i else posnum:=0;

end;

BEGIN

writeln('nhap xau s: ');readln(s);

while posnum(s)<>0 do delete(s,posnum(s),1);

writeln('xau moi la: ',s);

readln

END.

11. Nhập xâu ký tự và tách xâu đó thành 2 xâu với vị trí và số lượng ký tự cần tách được nhập từ bàn phím: VD: Nhập xâu s1 = “HOANG NGOC QUE” , cần tách 4 kí tự lưu tại xâu s2 tại vị trí thứ 7 => kq: s1= ‘HOANG QUE’ và s2 = “NGOC”.

var s1,s2:string;

pos, num:integer;

procedure tachxau;

begin

write('nhap vi tri can tach: '); readln(pos);

write('nhap so ky tu can tach: '); readln(num);

s2:=copy(s1,pos,num);

delete(s1,pos,num);

writeln('xau s1= ',s1);

writeln('xau s2= ',s2);

end;

begin

write('nhap xau s1: '); readln(s1);

tachxau;

readln

end.

12. Nhập một xâu ký tự và thực hiện:

a) Xóa tất cả các kí tự trắng dư thừa trong một xâu ký tự: (kí tự trắng dư thừa là kí tự trắng xuất hiện ở đầu xâu, cuối xâu và có từ 2 KT trắng trở lên ở giữa các từ).

b) Từ xâu đã chuẩn hóa ở câu a, hãy đếm xem trong xâu có bao nhiêu từ.

13. Giả sử có tệp VB.txt trên ổ đĩa D. Thực hiện các công việc sau:

  1. Nhập 1 xâu kí tự :
  2. Đếm số kí tự là chữ số, chữ cái trong xâu.
  3. In ra xâu chữ hoa.

14. Giả sử có tệp VB.txt trên ổ đĩa D. Thực hiện các công việc sau:

a) Nhập và ghi xâu văn bản vào tệp VB.txt.

b) Đọc và in ra xâu văn bản đó.

c) Nhập một kí tự K (K là kí tự bất kỳ), đếm xem có bao nhiêu kí tự K xuất hiện trong xâu.

VAR f:text;

s:string;

PROCEDURE NHAP;

begin

assign(f,'D:\vb.txt'); rewrite(f);

write('Nhap xau KT: '); readln(s);

writeln(f,s);

close(f);

end;

PROCEDURE DOC_IN;

begin

assign(f,'d:\vb.txt'); reset(f);

while not eof(f) do

begin

readln(f,s);

writeln('xau trong tep la: ',s);

end;

close(f);

end;

PROCEDURE DEMK;

var ik,demk:integer;

k:char;

begin

assign(f,'d:\vb.txt'); reset(f);

write('nhap k= '); readln(k);

demk:=0;

for ik:=1 to length(s) do

if s[ik] = k then inc(demk);

writeln('co ',demk,' phan tu la ',k);

close(f);

end;

PROCEDURE DEMDONG;

var dong: integer;

id: byte;

begin

Assign(f,'d:\vb.txt'); reset(f);

dong:=0;

while not EOF(f) do

begin

readln(f,s);

inc(dong);

end;

writeln('so dong ',dong:2);

close(f);

end;

BEGIN

clrscr;

nhap;

doc_in;

demk;

demdong;

readln

END.

15. Nhà trường cần quản lý một lớp học gồm N học sinh. Hãy viết chương trình kiểu bản ghi thực hiện các công việc sau:

­a) Nhập thông tin học sinh: số thứ tự, họ tên, giới tính, quê quán, điểm toán, điểm văn.

b) Xếp loại và in ra màn hình kết quả của bảng điểm theo loại:

    • Loại “GIOI” nếu điểm TB ≥ 8.0.
    • Loại “KHA” nếu điểm 6.5 ≤ TB < 8.0
    • Loại “TB” nếu điểm 5.0 ≤ TB < 6.5
    • Trường hợp còn lại là loại yếu.

16. Nhà trường cần in danh sách một lớp học gồm N học sinh. Hãy viết chương trình kiểu bản ghi thực hiện các công việc sau:

­a) Nhập thông tin học sinh: số thứ tự, họ tên, điểm toán, điểm lý, điểm tin.

b) In danh sách vừa nhập theo mẫu sau:

17. Viết chương trình kiểu bản ghi để quản lý một thư viện sách theo các yêu cầu sau:

  1. Nhập thông tin cần quản lý gồm: Tên sách (tens), tên nhà xuất bản (nxb), năm xuất bản (nxb), giá tiền (gia), số lượng (sl).
  2. Đưa ra danh sách là tên sách, năm XB các cuốn sách của cùng 1 nhà xuất bản. NXB nhập từ bàn phím.
  3. Tính tổng số tiền sách trong thư viện.