Ngày nay, Tin học đã trở thành một môn học quan trọng, có hoạt động trí tuệ sáng tạo và hấp dẫn đối với nhiều học sinh, các thầy cô giáo và các bậc phụ huynh. “Tài liệu giảng dạy lập trình khối trung học cơ sở” nhằm phục vụ cho công tác phát hiện, tuyển chọn và bồi dưỡng các học sinh có năng khiếu Tin học ở cấp Trung học cơ sở tham gia kì thi Tin học trẻ được tổ chức hàng năm. Tài liệu trình bày dưới dạng các chuyên đề. Mỗi chuyên đề bao gồm phần tóm tắt ngắn gọn các khái niệm lý thuyết, các ví dụ minh họa và bài tập thực hành được phân loại theo nhiều dạng khác nhau giúp học sinh thấy được nhiều khía cạnh của vấn đề. Nội dung chuyên đề được tham khảo từ nhiều nguồn khác nhau: internet, sách tham khảo, giáo trình, đề thi …
::Tài liệu giảng dạy lập trình khối THCS – Quyển 1:: Mục lục NKTH Chuyên đề NGÔN NGỮ LẬP TRÌNH .4 I TÓM TẮT LÝ THUYẾT Khái niệm .4 Mô tả thuật thoán Sử dụng Free Pascal 4 Các bước lập chương trình Pascal 5 Các thành phần ngôn ngữ Pascal .5 II VÍ DỤ .5 III BÀI TẬP .5 Chuyên đề CẤU TRÚC CHƯƠNG TRÌNH I TÓM TẮT LÝ THUYẾT Cấu trúc chương trình Khai báo .7 Khai báo biến Các kiểu liệu Biểu thức Câu lệnh Nhập xuất từ tệp II VÍ DỤ 10 III BÀI TẬP .12 IV HƯỚNG DẪN 14 Chuyên đề CẤU TRÚC RẼ NHÁNH 15 I TÓM TẮT LÝ THUYẾT 15 Lệnh IF 15 Lệnh CASE .15 II VÍ DỤ 16 III BÀI TẬP .16 IV HƯỚNG DẪN 18 Chuyên đề CẤU TRÚC LẶP 19 I TÓM TẮT LÝ THUYẾT 19 Vòng lặp xác định .19 Vòng lặp không xác định 19 II VÍ DỤ 20 III BÀI TẬP .24 IV HƯỚNG DẪN 26 Chuyên đề MẢNG MỘT CHIỀU .27 I TÓM TẮT LÝ THUYẾT .27 Khái niệm 27 :: Chương trình giảng dạy Năng Khiếu Tin Học:: NKTH :: Tài liệu giảng dạy lập trình khối THCS – Quyển 1:: Khai báo 27 Truy xuất phần tử 27 Số ngẫu nhiên 27 II VÍ DỤ 28 III BÀI TẬP .31 IV HƯỚNG DẪN GIẢI 35 Chuyên đề MẢNG HAI CHIỀU .37 I TÓM TẮT LÝ THUYẾT .37 Khái niệm 37 Khai báo 37 Truy xuất phần tử 37 II VÍ DỤ 38 III BÀI TẬP .42 IV HƯỚNG DẪN GIẢI 46 Chuyên đề XÂU KÍ TỰ 48 I TÓM TẮT LÝ THUYẾT 48 Khái niệm 48 Khai báo 48 Phép toán xâu .48 Hàm thủ tục 49 Kiểu kí tự Char 49 II VÍ DỤ 49 III BÀI TẬP .52 IV HƯỚNG DẪN 55 Chuyên đề KIỂU BẢN GHI .57 I TÓM TẮT LÝ THUYẾT 57 Khái niệm 57 Khai báo – Sử dụng biến kiểu ghi .57 II VÍ DỤ 58 III BÀI TẬP .59 Chuyên đề CHƯƠNG TRÌNH CON 61 I TÓM TẮT LÝ THUYẾT 61 Khái niệm 61 Hàm – Thủ tục 62 Tham số chương trình con: .63 Đệ quy 64 II VÍ DỤ 65 III BÀI TẬP .67 Chuyên đề 10 THƯ VIỆN 69 I TÓM TẮT LÝ THUYẾT .69 :: Chương trình giảng dạy Năng Khiếu Tin Học:: NKTH ::Tài liệu giảng dạy lập trình khối THCS – Quyển 1:: Khái niệm 69 Unit Crt 69 Unit Graph 70 II VÍ DỤ 71 III BÀI TẬP .72 :: Chương trình giảng dạy Năng Khiếu Tin Học:: :: Tài liệu giảng dạy lập trình khối THCS – Quyển 1:: Chuyên đề NGÔN NGỮ LẬP TRÌNH NKTH I TÓM TẮT LÝ THUYẾT Khái niệm 1.1 Bài toán (problem) Trong toán học: Là vấn đề ta muốn giải Trong tin học: Là vấn đề ta muốn máy tính giải 1.2 Đầu vào – đầu Đầu vào toán (Input): liệu cần cung cấp cho máy tính Đầu toán (Output): kết máy tính thực 1.3 Thuật toán Thuật toán: dãy bước hữu hạn cho máy tính thực bước từ input ta tìm output toán Mô tả thuật thoán Có cách để mô tả thuật toán: • Liệt kê : sử dụng ngôn ngữ tự nhiên để mô tả • Sơ đồ khối: sử dụng hình vẽ • Ngôn ngữ lập trình: sử dụng ngôn ngữ lập trình Pascal, C, Java, Python, Liệt kê B1: Nhập cd, cr B2: s cd * cr B3: Xuất s Sơ đồ khối Ngôn ngữ lập trình Readln(cd, cr); S:=cd*cr; Write(S); Sử dụng Free Pascal Turbo Pascal, Free Pascal: môi trường để lập trình NNLT Pascal, hỗ trợ soạn thảo, biên dịch, thông dịch chương trình :: Chương trình giảng dạy Năng Khiếu Tin Học:: NKTH ::Tài liệu giảng dạy lập trình khối THCS – Quyển 1:: Download cài Windows: http://freepascal.org/down/i386/win32.var B1: Chạy chương trình Free Pascal: \FPC\2.0.4\bin\i386-win32\fp.exe (2,199KB) B2: Mở cửa sổ soạn thảo mới: File New B3: Soạn thảo chương trình B4: lưu lại chương trình FILE SAVE AS B5: chạy thử chương trình RUN RUN (CTRL + F9) Các bước lập chương trình Pascal Bước 1: Soạn thảo chương trình Bước 2: Dịch chương trình (nhấn phím F9), có lỗi phải sửa lỗi Bước 3: Chạy chương trình (nhấn phím Ctrl-F9) Các thành phần ngôn ngữ Pascal • Từ khóa • Tên (định danh) • Dấu chấm phẩy (;) • Lời giải thích II.VÍ DỤ Ví dụ Xuất hình câu “Hello World!” BEGIN Write(‘Hello World!’); END Ví dụ Tính diện tích hình tròn Program Vidu2; Const PI=3.14; Var R,S:Real; Begin R:=10; {Bán kính đường tròn} S:=R*R*PI; {Diện tích hình tròn} Writeln(‘Dien tich hinh tron = ‘, S:0:2); { In hình } Readln; End III BÀI TẬP Bài Cơ Khởi động Turbo Pascal Nhập vào đoạn chương trình sau: Uses Crt; Begin Writeln(‘***********************************************************’); Writeln(‘* CHUONG TRINH PASCAL DAU TIEN CUA TOI *’); Writeln(‘* Oi! Tuyet voi! *); Writeln(‘***********************************************************’); :: Chương trình giảng dạy Năng Khiếu Tin Học:: :: Tài liệu giảng dạy lập trình khối THCS – Quyển 1:: Readln; End NKTH Dịch chạy chương trình Lưu chương trình vào đĩa với tên BAI1.PAS Thoát khỏi Pascal Khởi động lại Turbo Pascal Mở file BAI1.PAS Chèn thêm vào dòng: CLRSCR; vào sau dòng BEGIN Dịch chạy thử chương trình 10 Lưu chương trình vào đĩa 11 Thoát khỏi Pascal Bài Xuất hình In hình hình sau * *** ***** ******* ********** ********** ********** Bài Xuất chữ Viết chương trình in hình hình sau: * ******** *** ** ** ** ** ** ** ** ** ******** ********* ** ** ** ** ** ** ** ** ******** ********** * * ********** ******* ** ** ** ** ** ** ** ******** :: Chương trình giảng dạy Năng Khiếu Tin Học:: * ** * * ******* ::Tài liệu giảng dạy lập trình khối THCS – Quyển 1:: Chuyên đề CẤU TRÚC CHƯƠNG TRÌNH NKTH I TÓM TẮT LÝ THUYẾT Cấu trúc chương trình { Phần tiêu đề } PROGRAM Tên_chương_trình; { Phần khai báo } USES ; CONST .; TYPE .; VAR ; PROCEDURE ; FUNCTION ; { Phần thân chương trình } BEGIN END Khai báo Hằng đại lượng có giá trị không thay đổi suốt trình thực chương trình chứa Cú pháp: CONST = ; hoặc: CONST := ; Khai báo biến Biến đại lượng mà giá trị thay đổi trình thực chương trình Cú pháp: VAR [,, ] : ; Các kiểu liệu 4.1 Kiểu logic - Từ khóa: BOOLEAN - Miền giá trị: (TRUE, FALSE) - Các phép toán: phép so sánh (=, ) phép toán logic: AND, OR, XOR, NOT 4.2 Kiểu số nguyên a Các kiểu số nguyên Tên kiểu Phạm vi Dung lượng Shortint -128 → 127 byte Byte → 255 byte :: Chương trình giảng dạy Năng Khiếu Tin Học:: :: Tài liệu giảng dạy lập trình khối THCS – Quyển 1:: Integer -32768 → 32767 byte Word → 65535 byte LongInt -2147483648 → 2147483647 byte NKTH b Các phép toán kiểu số nguyên Các phép toán số học: +, -, *, / (phép chia cho kết số thực) Phép chia lấy phần nguyên: DIV (Ví dụ : 34 DIV = 6) Phép chia lấy số dư: MOD (Ví dụ: 34 MOD = 4) 4.3 Kiểu số thực Các kiểu số thực: Tên kiểu Phạm vi Dung lượng Single 1.5×10-45 → 3.4×10+38 byte Real 2.9×10-39 → 1.7×10+38 byte Double 5.0×10-324 → 1.7×10+308 byte Extended 3.4×10-4932 → 1.1×10+4932 10 byte Các phép toán kiểu số thực: +, -, *, / Chú ý: Trên kiểu số thực không tồn phép toán DIV MOD Một số hàm số học thông dụng SQR(x): Trả x2 SQRT(x): Trả bậc hai x (x≥0) ABS(x): Trả |x| SIN(x): Trả sin(x) theo radian COS(x): Trả cos(x) theo radian LN(x): Trả ln(x) EXP(x): Trả ex TRUNC(x): Trả số nguyên gần với x bé x ROUND(x): Làm tròn số nguyên x INC(n): Tăng n thêm đơn vị (n:=n+1) DEC(n): Giảm n đơn vị (n:=n-1) Biểu thức Biểu thức (expression) công thức tính toán mà bao gồm phép toán, hằng, biến, hàm dấu ngoặc đơn Ví dụ: (x +sin(y))/(5-2*x) biểu thức số học (x+4)*2 = (8+y) biểu thức logic Trong biểu thức, thứ tự ưu tiên phép toán liệt kê theo thứ tự sau: Lời gọi hàm Dấu ngoặc () Phép toán (NOT, -) :: Chương trình giảng dạy Năng Khiếu Tin Học:: ::Tài liệu giảng dạy lập trình khối THCS – Quyển 1:: Phép toán *, /, DIV, MOD, AND Phép toán +, -, OR, XOR Phép toán so sánh =, , =, , IN NKTH Câu lệnh 6.1 Câu lệnh gán :=; 6.2 Câu lệnh xuất liệu Để xuất liệu hình, ta sử dụng ba dạng sau: (1) (2) (3) WRITE( [, , ]); WRITELN( [, , ]); WRITELN; Khi sử dụng lệnh WRITE/WRITELN, ta có hai cách viết: không qui cách có qui cách: - Viết không qui cách: liệu xuất canh lề phía bên trái Nếu liệu số thực in dạng biểu diễn khoa học Ví dụ: WRITELN(x); WRITE(sin(3*x)); - Viết có qui cách: liệu xuất canh lề phía bên phải Ví dụ: WRITELN(x:5); WRITE(sin(13*x):5:2); Câu lệnh Kết hình Writeln('Hello'); Writeln('Hello':10); Writeln(500); Writeln(500:5); Writeln(123.457) Writeln(123.45:8:2) Hello Hello 500 500 1.2345700000E+02 123.46 6.3 Nhập liệu READLN( [,, ,]); Nhập xuất từ tệp 7.1 Khai báo biến tệp var TênBiếnTệp:text; 7.2 Gán tên tệp Sau khai báo, ta phải gán tên tệp cho biến Sau gán, biến đại diện cho tệp ta làm việc biến tệp Assign(BiếnTệp, TênTệp); 7.3 Đọc liệu từ tệp Ta gọi thủ tục “Mở tệp để đọc”: Reset(BiếnTệp); Sau “đọc giá trị” thủ tục :: Chương trình giảng dạy Năng Khiếu Tin Học:: :: Tài liệu giảng dạy lập trình khối THCS – Quyển 1:: Read(BiếnTệp, DanhSáchBiến); Ngoài cách “đọc giá trị”, ta “đọc dòng tệp” thủ tục Cú pháp: Readln(BiếnTệp, Danh sách Biến); NKTH Thủ tục đọc tất giá trị dòng tại, sau trỏ nhảy xuống dòng 7.4 Ghi liệu từ tệp Mở tệp để ghi: Rewrite(BienTep); Ghi liệu tệp : Write (BienTep, GiaTri1, GT2, …) Writeln(BienTep, GiaTri1, GT2, …) 7.5 Đóng tệp Trước kết thúc chương trình cần phải đóng tệp Cú pháp: Close(); II.VÍ DỤ Ví dụ Diện tích tô đen Tính đưa hình diện tích phần tô đen hình sau Input: số thực a Output: diện tích phần tô đen S Ý tưởng Diện tích phần tô đen = ½ diện tích hình tròn bán kính a Chương trình Program To_den; Const pi=3.14; Var a:word; S, S1:real; Begin Write(‘Nhap a = ’); Readln(a); S1:=pi*a*a; S:=S1/2; :: Chương trình giảng dạy Năng Khiếu Tin Học:: :: Tài liệu giảng dạy lập trình khối THCS – Quyển 1:: Ví dụ: với biến Sach1 mà ta khai báo phần trước Ta có cách sau để gán giá trị cho thuộc tính biến Sach1 Cách 1: NKTH Sach1.Title = ‘Nang khieu tin hoc THCS’; Sach1.Author = ‘So GD&DT Dongnai’; Sach1.Year= 2012; Cách 2: With Sach1 Do Begin Title = ‘Nang khieu tin hoc THCS’; Author = ‘So GD&DT Dongnai’; Year= 2012; End; II.VÍ DỤ Ví dụ Phân số PHANSO Khai báo ghi kiểu phân số có hai trường (Tử số - Mẫu số) thực phép toán +, -, *, / kiểu liệu Dữ liệu: Vào từ file Phanso.inp - Gồm dòng dòng số cách dấu khoảng trắng Xuất file Phanso.out, gồm dòng: - Dòng 1: Kết phép cộng hai phân số - Dòng 2: Kết phép trừ hai phân số - Dòng 3: Kết phép nhân hai phân số - Dòng 4: Kết phép chia hai phân số Hướng dẫn giải Khai báo cấu trúc ghi Phanso có hai trường Tuso, Mauso kiểu số nguyên Mô tả phép toán +, - , *, \ phân số ngôn ngữ toán học Chuyển mô tả sang ngôn ngữ lập trình phù hợp với ghi Phanso khai báo Chương trình Program PhepToanPhanso; Uses Crt; Const finput= ‘Phanso.inp’; foutput= ‘Phanso.out’; Type Phanso = Record Tuso: integer; Mauso: integer; End; Var Ps1, Ps2, KQ : Phanso; fin, fout: text; Begin Assign(fin,finput); Reset(fin); Assign(fout,foutput); Reset(fout); //doc du lieu cho phan so PS1 theo cach goi truc tiep Read(fin, ps1.tuso); Read(fin, ps1.mauso); :: Chương trình giảng dạy Năng Khiếu Tin Học:: ::Tài liệu giảng dạy lập trình khối THCS – Quyển 1:: End III NKTH //doc du lieu cho phan so PS2 theo cach With With PS2 Begin Read(fin, Tuso); Read(fin, Mauso); End; //thuc hien phep toan cong hai phan so PS1 va PS2 KQ.Tuso:= PS1.Tuso*PS2.Mauso + PS2.Tuso*PS1.Mauso; KQ.Mauso:= PS1.Mauso*PS2.Mauso; Writeln(fout,KQ.Tuso,’/’,KQ.Mauso); //thuc hien phep toan tru hai phan so PS1 va PS2 KQ.Tuso:= PS1.Tuso*PS2.Mauso - PS2.Tuso*PS1.Mauso; KQ.Mauso:= PS1.Mauso*PS2.Mauso; Writeln(fout,KQ.Tuso,’/’,KQ.Mauso); //thuc hien phep toan nhan hai phan so PS1 va PS2 KQ.Tuso:= PS1.Tuso*PS2.Tuso; KQ.Mauso:= PS1.Mauso*PS2.Mauso; Writeln(fout,KQ.Tuso,’/’,KQ.Mauso); //thuc hien phep toan chia hai phan so PS1 va PS2 KQ.Tuso:= PS1.Tuso*PS2.Mauso; KQ.Mauso:= PS1.Mauso*PS2.Tuso; Writeln(fout,KQ.Tuso,’/’,KQ.Mauso); Close(fin); Close(fout); BÀI TẬP Bài Phân số tối giản PHANSO Khai báo ghi kiểu phân số có hai trường (Tử số - Mẫu số) thực phép toán +, -, *, / kiểu liệu này, xuất kết cuối phân số kết phép tính rút gọn đến tối giản Dữ liệu: Vào từ file Phanso.inp - Gồm dòng dòng số cách dấu khoảng trắng Xuất file Phanso.out, Gồm dòng: - Dòng 1: Kết phép cộng hai phân số - Dòng 2: Kết phép trừ hai phân số - Dòng 3: Kết phép nhân hai phân số - Dòng 4: Kết phép chia hai phân số Bài Lưu trữ sách BOOKS Raul nhân viên có nhiệm vụ tìm sách cho khách hàng đến mua sách Sách cửa hàng lên giá theo thứ tự ưu tiên sau: Xếp theo tên tác giả (author) theo thứ tự alphabet Xếp theo tên sách (title) theo thứ tự alphabet :: Chương trình giảng dạy Năng Khiếu Tin Học:: NKTH :: Tài liệu giảng dạy lập trình khối THCS – Quyển 1:: Có sẵn kiến thức lập trình, Raul thiết kế chương trình có nhiệm vụ xếp sách vào kệ hàng theo thứ tự nêu Dữ liệu: Vào từ file Books.inp - Dòng N số lượng sách cửa hàng - N dòng tiếp theo, dòng giá trị: author title cách dấu khoảng trắng Xuất file Books.out - N dòng, dòng thông tin sách xếp theo qui tắc bao gồm giá trị author title cách dấu khoảng trắng Ví dụ: Books.inp LeMinhHoang BaiToan&ThuatToan John WhileNile James ParisInNight Books.out LeMinhHoang BaiToan&ThuatToan James ParisInNight John WhileNile :: Chương trình giảng dạy Năng Khiếu Tin Học:: ::Tài liệu giảng dạy lập trình khối THCS – Quyển 1:: Chuyên đề CHƯƠNG TRÌNH CON NKTH I TÓM TẮT LÝ THUYẾT Khái niệm 1.1 Chương trình Là đoạn chương trình nhỏ tạo để giải vấn đề lớp vấn đề lưu trữ lại để sử dụng nhiều nơi khác lập trình Chương trình người dùng nhà thiết kế ngôn ngữ lập trình tự định nghĩa để sử dụng lại nhiều chương trình modules khác Có dạng chương trình con: Hàm (Procedure) thủ tục (Function) Tham số thông tin sử dụng chương trình con, cách sử dụng tham số định tính đơn giản hiệu thủ tục hàm 1.2 Một số hàm thủ tục chuẩn Pascal: Hàm: Hàm Công dụng Upcase(x:char):char Trả kết kí tự hoa Cos(x:real):real Trả giá trị cosin góc x Sin(x:real):real Trả giá trị sin góc x Sqrt(x:real):real Trả giá trị bậc x Sqr(x:real):real Trả giá trị bình phương số Round(x:real):real; Trả giá trị làm tròn số thực x Length(s:string):byte Trả giá trị chiều dài xâu kí tự Ord(x:char):byte Trả kết số thứ tự kí tự x bảng mã ACSII Thủ tục: Tên thủ tục Chức Read(); Readln(); Đọc liệu từ bàn phím từ file gán cho biến v1, v2… Write(v1, v2,…); Writeln(v1, v2,…); Xuất giá trị biến v1, v2, v3 hình gotoXY(x,y:byte); Định vị vị trí trỏ hình đến tọa độ x, y hình làm việc Delay(time:word); Tạm dừng xử lý khoảng thời gian time Clrscr; Xóa hình làm việc đưa trỏ vị trí có tọa độ 1,1 :: Chương trình giảng dạy Năng Khiếu Tin Học:: :: Tài liệu giảng dạy lập trình khối THCS – Quyển 1:: Exit; Rời khỏi chương trình Hàm – Thủ tục NKTH 2.1 Hàm – Function a Chức Là chương trình dùng để thực tác động xác định vào cấu trúc liệu chương trình trả kết định sử dụng chương trình b Cấu trúc Function ():; [Khai báo số sử dụng hàm – có] [Khai báo kiểu liệu người dùng sử dụng hàm – có] [Khai báo chương trình sử dụng hàm – có] [Khai báo biến sử dụng hàm – có] //phần thân hàm Begin // câu lệnh; // lưu ý: phần thân hàm phải có câu lệnh trả giá trị cho hàm; End; 2.2 Hàm (Procedure) a Chức Là chương trình dùng để thực tác động xác định vào cấu trúc liệu chương trình không cung cấp giá trị trả b Cấu trúc Procedure (); [Khai báo số sử dụng thủ tục – có] [Khai báo kiểu liệu người dùng sử dụng thủ tục – có] [Khai báo chương trình sử dụng hàm – có] [Khai báo biến sử dụng thủ tục] //phần thân thủ tục Begin // câu lệnh; End; Ví dụ: Thủ tục in chuỗi đảo ngược chuỗi cho trước Procedure InNguoc(s: string); Var i: byte; Begin For i:= length(s) downto Write(s[i]); End; Ví dụ: Hàm tính tổng hai số a, b Function Tong(a,b:integer): longint; Var c: longint; Begin c:= a+b; Tong:=c; //co the dung cau lenh exit(c); End; :: Chương trình giảng dạy Năng Khiếu Tin Học:: NKTH ::Tài liệu giảng dạy lập trình khối THCS – Quyển 1:: 2.3 So sánh hàm thủ tục Giống nhau: - Đều chương trình - Có tên gọi xác định chương trình - Có thể chứa không chứa tham số Khác nhau: - Hàm trả giá trị cụ thể, hàm sử dụng biểu thức gán cho biến Do cần lưu ý kiểu liệu trả hàm mà sử dụng cho thích hợp - Thủ tục không trả giá trị nên dùng để thực độc lập nhóm lệnh tiến hành thao tác đặc trưng chương trình Tham số chương trình con: 1.1 Phân loại tham số: a Tham số hình thức: - Là biến khai báo phần khai báo tên chương trình - Cách khai báo tham số cho chương trình tương tự khai báo biến cho chương trình Ví dụ: Procedure vidu1(i,j,k: integer; Var x,y: real); Function vidu2(h:char; var z:Boolean):real; Có hai loại tham số hình thức: - Tham số biến: tham số đứng sau từ khóa var, thay đổi giá trị biến chương trình cập nhật cho tham số truyền vào - Tham số trị: tham số không kèm với từ khóa var, thay đổi giá trị biến chương trình không làm thay đổi giá trị tham số truyền vào b Tham số thực: - Là tham số dùng chung không cần phải khai báo chương trình Khi dùng loại tham số ta phải ý đến tác động chương trình đến giá trị tham số 1.2 Truyền tham số: a Định nghĩa - Việc truyền giá trị từ bên vào chương trình thông qua tham số (tham số hình thức) gọi truyền tham số Giá trị tham số sử dụng chương trình b Các hình thức truyền tham số Truyền tham trị: - Không dùng từ khóa var khai báo tham số cho chương trình - Những thay đổi tham số chương trình không ảnh hưởng đến giá trị tham số chương trình gọi Truyền tham biến :: Chương trình giảng dạy Năng Khiếu Tin Học:: :: Tài liệu giảng dạy lập trình khối THCS – Quyển 1:: Các tham số truyền theo hình thức bắt buộc phải đứng sau từ khóa var phần khai báo tham số cho chương trình Những thay đổi tham số chương trình lưu lại chương trình gọi - NKTH 1.3 Biến toàn cục biến địa phương: Biến toàn cục: biến khai báo chương trình Các biến có tác dụng nơi toàn chương trình Biến địa phương: biến khai báo chương trình Các biến có tác dụng phạm vi chương trình mà Chú ý: Trong chương trình con, biến toàn cục trùng tên với biến địa phương biến địa phương ưu tiên Program Test; Var a,b: Integer; {biến toàn cục} Procedure ThuBien; Var a: Integer; {biến địa phương} Begin a:=10; Writeln(‘A=’,a,’B=’,b); End; Begin a:=50; b:=200; ThuBien; {A=10 B=200} Writeln(‘A=’,a,’B=’,b); {A=50 B=200} End Đệ quy 4.1 Khái niệm Trong lập trình, có khái niệm: chương trình (hàm, thủ tục) gọi đệ quy trình thực có phần phải gọi đến 4.2 Cấu trúc Một chương trình đệ qui gồm hai phần - Phần sở: chứa tác động hàm thủ tục với số giá trị cụ thể ban đầu tham số - Phần đệ quy: định nghĩa tác động cần thực cho giá trị thời tham số tác động định nghĩa trước với kích thước tham số nhỏ Ví dụ: hàm Gt(n) để tính n! tính sau: Gt(n):=n*Gt(n-1); // Gt(n-1) hàm Gt(n) gọi lại với tham số nhỏ 4.3 Ưu điểm đệ quy: Gọi đệ quy kỹ thuật lập trình quan trọng thường ngắn gọn phù hợp với suy nghĩ tự nhiên nhiều cách giải toán Thậm chí nhiều toán dùng đệ quy :: Chương trình giảng dạy Năng Khiếu Tin Học:: ::Tài liệu giảng dạy lập trình khối THCS – Quyển 1:: II.VÍ DỤ NKTH Ví dụ Chẵn lẻ CHANLE Viết chương trình nhập vào số nguyên kiểm tra xem số vừa nhập số chẵn hay số lẻ Hướng dẫn: Khai báo hàm kiểm tra chẵn lẻ với tham số truyền vào số cần kiểm tra kiểu liệu trả kiểu boolean: - True tham số truyền vào số chẵn - False tham số truyền vào số lẻ Dựa vào kết trả mà xuất câu kết luận phù hợp Chương trình: Program ktra_chan_le; Var x:integer; Function kiemtra(a: integer): boolean; Begin If x MOD 2=0 then Kiemtra:= true Else Kiemtra:=false; End; Begin Write('Nhap vao mot so nguyen : '); Readln(x); If (kiemtra(x)=true) Then Writeln('So vua nhap vao la so chan') Else Writeln('So vua nhap vao la so le'); Readln; End Ví dụ Giải phương trình GIAIPT Viết chương trình nhập vào số a, b, c giải phương trình ax2 + bx + c = Hướng dẫn: Chia làm hai trường hợp: - Nếu a=0 phương trình suy biến phương trình bậc bx + c = - Ngược lại giải phương trình bậc hai ax2 + bx + c = Thiết kế thủ tục giải phương trình bậc phương trình bậc tương ứng: - Procedure PTBI(a,b: integer); - Procedure PTBII(a,b,c: integer); Chương trình: Program Giaiphuongtrinh; Uses crt; Var a,b,c: integer; Procedure PTBI(a,b: integer); var x: real; Begin If a = Then // N?u a b?ng If b = Then // Tru?ng h?p a = b = Writeln('Phuong trinh co vo so nghiem') Else // Tru?ng h?p a=0 b khác Writeln('Phuong trinh vo nghiem') :: Chương trình giảng dạy Năng Khiếu Tin Học:: :: Tài liệu giảng dạy lập trình khối THCS – Quyển 1:: Else NKTH // Tru?ng h?p a khác Begin x:= -b/a; Writeln('Phuong trinh co nghiem la :',x:0:2); End; Readln; End; Procedure PTBII(a,b,c: integer); var d, x1, x2: real; Begin d:=sqr(b)-4*a*c; IF d Tính * GT(4-1) => gọi GT(3) GT(3) m = => Tính * GT(3-1) => gọi GT(2) GT(2) m = => Tính * GT(2-1) => gọi GT(1) GT(1) m = => Gán GT(1):=1 Cuối trình “tính ngược” cho phép trả giá trị GT(4): GT(4) * * (3 * (2 * GT(1))) Chương trình Function GT(m: Integer): Longint; Begin If ( m = ) or ( m = ) then :: Chương trình giảng dạy Năng Khiếu Tin Học:: ::Tài liệu giảng dạy lập trình khối THCS – Quyển 1:: Else End; GT := GT := m * GT( m-1 ); NKTH Lưu ý: - Một chương trình đệ qui có hai phần: - Phần gọi đệ quy Trong ví dụ GT:=m*GT(m-1) - Phần “neo” Trong ví dụ IF (m=0) or (m=1) THEN GT:=1 Phần quan trọng đảm bảo trình đệ quy phải dừng sau số hữu hạn bước Không có phần xảy lỗi làm tràn nhớ stack (stack overflow) xảy trình đệ quy Ví dụ Fibo FIBO Số Fibonacci định nghĩa sau: Viết chương trình tìm số Fibonacci thứ n Thuật toán - Thuật toán tìm số Fibo thứ N viết theo cách đệ quy dựa hoàn toàn vào công thức toán học biết: Fibo(n)= Fibo(n-1) + Fibo(n-2); - Điều kiện dừng n= n = Chương trình FUNCTION FIBO(n: word): word; BEGIN IF (n=1) or (n=2) THEN FIBO:=1 ELSE FIBO := FIBO(n-1)+FIBO(n-2); END; III BÀI TẬP Giải toán sau theo hướng thiết kế dùng hàm thủ tụcBài Bội chung nhỏ BCNN Viết chương trình tìm BCNN hai số nguyên Thiết kế chương trình theo hướng hàm – thủ tục Bài Số nguyên tố SNT Tìm tính tổng tất số nguyên tố dãy số cho trước Bài Tính tổng TONG Tính tổng sau: S= 1+ ½ + 1/3 + ¼ + … + 1/n Bài Giai thừa GIAITHUA Viết chương trình tính n! Bài Tổng giai thừa TONGGT :: Chương trình giảng dạy Năng Khiếu Tin Học:: :: Tài liệu giảng dạy lập trình khối THCS – Quyển 1:: Viết chương trình tính S = + 2! + 3! + … + n! Bài Fibo FIBO Cài đặt hoàn chỉnh toán tính số Fibonacci thứ n nêu phần ví dụ NKTH Bài Giai thừa GIAITHUA Cài đặt hoàn chỉnh toán tính giai thừa số n nêu phần ví dụ Bài Đếm số DEMSO Đếm số chữ số số cách đệ quy Bài Chữ số lớn MAXIMUM Tìm chữ số có giá trị lớn số nguyên dương n Bài 10 Tính tổng SUM Tính tổng S(n)=1+1.2+1.2.3+…+1.2.3…n với n>0 :: Chương trình giảng dạy Năng Khiếu Tin Học:: ::Tài liệu giảng dạy lập trình khối THCS – Quyển 1:: Chuyên đề 10 THƯ VIỆN NKTH I TÓM TẮT LÝ THUYẾT Khái niệm Unit: Thuật ngữ Unit Pascal gọi :”Đơn vị chương trình” Mỗi Unit xem Module nhỏ chứa đựng số công cụ cần thiết giúp cho người lập trình dễ dàng thiết kế chương trình Lệnh tham chiếu đến Unit đặt đầu chương trình với cú pháp: USES TênUnit; Ví dụ: Uses CRT,Graph; Unit Crt CRT Unit liên quan đến thủ tục trình bày hình Trong CRT có thủ tục sau: Thủ tục/hàm Chức Gotoxy(m,n) Chuyển trỏ tới tọa độ cột m dòng n (1[...]... nien'); III BÀI TẬP Bài 1 Giải phương trình bậc hai PTBII Viết chương trình giải phương trình bậc hai: ax2 + bx + c = 0, a≠0 :: Chương trình giảng dạy Năng Khiếu Tin Học:: 2 ::Tài liệu giảng dạy lập trình khối THCS – Quyển 1:: Bài 2 Tính số giây GIAY Viết chương trình nhập vào từ bàn phím: giờ, phút, giây Cộng thêm một số giây cũng được nhập từ bàn phím Hãy in ra kết quả sau khi cộng xong Vd: nhập vào 08:30:20... la 2 Bài 8 Tính tổng chữ số TONGCS Nhập số nguyên N có 4 chữ số Tính tổng các chữ số của N Ví dụ: nhap so n = 2314 Tong chu so la 10 Bài 9 Căn bậc n CAN Viết chương trình tính n x , x>0 Bài 10 Nhập xuất từ tệp TEP Viết lại chương trình cho các bài tập trên, yêu cầu nhập xuất từ tệp :: Chương trình giảng dạy Năng Khiếu Tin Học:: 1 :: Tài liệu giảng dạy lập trình khối THCS – Quyển 1:: HƯỚNG DẪN IV Bài. .. trâu nằm, trâu nghé? Bài 7 Chẵn lẻ CHANLE Viết chương trình nhập vào các số nguyên từ bàn phím cho đến khi nào gặp số nguyên tố thì kết thúc nhập Tính tổng các số chẵn và trung bình cộng các số lẻ Bài 8 Chữ số CHUSO Viết chương trình nhập vào một số nguyên dương Hãy thông báo lên màn hình số đó có bao nhiêu chữ số và tổng các chữ số của số đó Ví dụ: nhập vào n = 1234 xuất ra 4 10 Bài 9 In số nguyên tố... giảng dạy lập trình khối THCS – Quyển 1:: i:=i+1; End; Writeln('Ket qua la :',S); Readln; End NKTH Ví dụ 2 Tổng các số TONGSO Viết chương trình nhập vào N số nguyên từ bàn phím Hãy tính và in ra màn hình tổng của các số vừa được nhập vào Ý tưởng Dùng phương pháp cộng dồn Cho vòng lặp FOR chạy từ 1 tới N, ứng với lần lặp thứ i, ta nhập vào số nguyên X và đồng thời cộng dồn X vào biến S Chương trình Program... giảng dạy lập trình khối THCS – Quyển 1:: Writeln(‘Dien tich to den la:’,S:0:2); Readln; End NKTH Ví dụ 2 Diện tích tam giác DTTG Viết chương trình 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 Ý tưởng: Công thức tính diện tích tam giác: S = 1 a.b sin(θ ) với a,b là độ dài 2 cạnh và θ là góc 2 kẹp giữa 2 cạnh a và b Chương trình Program... read(fi2,x); writeln(fo,x); end; close(fi2); close(fo); end III BÀI TẬP Bài 1 Bảng mã Ascii ASCII Viết chương trình in ra màn hình các giá trị của bảng mã ASCII từ 0→255 Bài 2 In số INSO Viết chương trình in ra màn hình các số nguyên từ 1 đến 100 mỗi 10 số trên một dòng Bài 3 In bảng cửu chương CUUCHUONG Viết chương trình in ra màn hình bảng cữu chương Bài 4 Tính các tổng CACTONG Viết chương trình tính các... quả sau khi cộng xong Vd: nhập vào 08:30:20 và 80 xuất ra 08:31:40 NKTH Bài 3 Tìm max – min MAXMIN Viết chương trình tìm Max, Min của 4 số: a, b, c, d Ví dụ: nhập 3 5 8 2 xuất ra Max=8 Min=2 Bài 4 Tìm ngày tháng NGAYTHANG Viết chương trình nhập vào ngày, tháng, năm, máy sẽ hiện lên ngày, tháng, năm của ngày hôm sau Ví dụ: nhập vào 24/08/2012 xuất ra 25/08/2012 Bài 5 Màu ô Bàn cờ vua kích thước 8*8 gồm... 105 -512 -875 426 59 -726 -875 -726 -512 -271 59 105 426 468 708 731 III BÀI TẬP Bài 1 Nhập mảng từ bàn phím NHAPMANG1 Nhập số n và mảng a gồm n phần tử nguyên a 1, a2, …, an từ bàn phím Xuất các giá trị chẵn ra màn hình Ví dụ: n = 7 Mảng A: 2 1 3 4 2 3 1 Cac gia tri chan: 2 4 2 Bài 2 Nhập xuất mảng bằng tệp NHAPMANG2 Cho 2 số n, k và mảng a gồm n phần tử nguyên a 1, a2, …, an Tìm các phần tử có giá trị... trình khối THCS – Quyển 1:: - Dòng thứ hai gồm n số nguyên ai của dãy (|ai|