1. Trang chủ
  2. » Công Nghệ Thông Tin

Lý thuyết và bài tập lập trình pascal bậc THPT

82 4,4K 0

Đang tải... (xem toàn văn)

Tài liệu hạn chế xem trước, để xem đầy đủ mời bạn chọn Tải xuống

THÔNG TIN TÀI LIỆU

Thông tin cơ bản

Định dạng
Số trang 82
Dung lượng 1,68 MB
File đính kèm 10_TongHop_THPT_Version 1.1.zip (1 MB)

Nội dung

Giáo trình tóm tắt kiến thức lập trình pascal từ cơ bản đến nâng cao. Đặc biệt giáo trình cung cấp đầy đủ và phong phú các dạng bài tập thực hành rất thực tế. Đây là tài liệu giúp giáo viên bồi dưỡng học sinh giỏi lập trình pascal trong các trường THPT. Rất hữu ích cho giáo viên và học sinh.

::Tài liệu giảng dạy lập trình khối THPT – 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:: 35 NKTH :: Tài liệu giảng dạy lập trình khối THPT – 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 .32 IV HƯỚNG DẪN GIẢI 39 Chuyên đề MẢNG HAI CHIỀU .42 I TÓM TẮT LÝ THUYẾT .42 Khái niệm 42 Khai báo 42 Truy xuất phần tử 42 II VÍ DỤ 43 III BÀI TẬP .47 IV HƯỚNG DẪN GIẢI 53 Chuyên đề XÂU KÍ TỰ 56 I TÓM TẮT LÝ THUYẾT 56 Khái niệm 56 Khai báo 56 Phép toán xâu .56 Hàm thủ tục 57 Kiểu kí tự Char 57 II VÍ DỤ 57 III BÀI TẬP .61 IV HƯỚNG DẪN 64 Chuyên đề KIỂU BẢN GHI .67 I TÓM TẮT LÝ THUYẾT 67 Khái niệm 67 Khai báo – Sử dụng biến kiểu ghi .67 II VÍ DỤ 68 III BÀI TẬP .69 Chuyên đề CHƯƠNG TRÌNH CON 71 I TÓM TẮT LÝ THUYẾT 71 Khái niệm 71 Hàm – Thủ tục 72 Tham số chương trình con: .73 Đệ quy 74 II VÍ DỤ 75 III BÀI TẬP .77 Chuyên đề 10 THƯ VIỆN 79 I TÓM TẮT LÝ THUYẾT .79 :: Chương trình giảng dạy Năng Khiếu Tin Học:: 34 NKTH ::Tài liệu giảng dạy lập trình khối THPT – Quyển 1:: Khái niệm 79 Unit Crt 79 Unit Graph 80 II VÍ DỤ 81 III BÀI TẬP .82 :: Chương trình giảng dạy Năng Khiếu Tin Học:: 35 :: Tài liệu giảng dạy lập trình khối THPT – 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:: 34 NKTH ::Tài liệu giảng dạy lập trình khối THPT – 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:: 35 :: Tài liệu giảng dạy lập trình khối THPT – 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:: 34 * ** * * ******* ::Tài liệu giảng dạy lập trình khối THPT – 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:: 35 :: Tài liệu giảng dạy lập trình khối THPT – 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:: 34 ::Tài liệu giảng dạy lập trình khối THPT – 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:: 35 :: Tài liệu giảng dạy lập trình khối THPT – 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:: 34 :: Tài liệu giảng dạy lập trình khối THPT – 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:: 34 ::Tài liệu giảng dạy lập trình khối THPT – 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:: 35 NKTH :: Tài liệu giảng dạy lập trình khối THPT – 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:: 34 ::Tài liệu giảng dạy lập trình khối THPT – 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:: 35 :: Tài liệu giảng dạy lập trình khối THPT – 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:: 34 NKTH ::Tài liệu giảng dạy lập trình khối THPT – 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:: 35 :: Tài liệu giảng dạy lập trình khối THPT – 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:: 34 ::Tài liệu giảng dạy lập trình khối THPT – 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:: 35 :: Tài liệu giảng dạy lập trình khối THPT – 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:: 34 ::Tài liệu giảng dạy lập trình khối THPT – 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:: 35 :: Tài liệu giảng dạy lập trình khối THPT – 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:: 34 ::Tài liệu giảng dạy lập trình khối THPT – 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:: 34 ::Tài liệu giảng dạy lập trình khối THPT – 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... bài toán: chuyển số “lỗ hổng” trong các chữ số của số đã cho và biểu diễn chúng (không có chữ số 0 ở đầu) Chữ số 1, 2, 3, 5 và 7 không có lỗ hổng nào; các chữ số 0, 4, 6, 9 có một “lỗ hổng” và đặc biệt chữ số 8 có đến 2 lỗ hổng Hôm sau Bờm rất :: Chương trình giảng dạy Năng Khiếu Tin Học:: 35 NKTH :: Tài liệu giảng dạy lập trình khối THPT – Quyển 1:: tự tin mở rộng bài toán bằng cách thêm vào một vài... 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 tổng sau: S0 = n! =... giảng dạy lập trình khối THPT – 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... chương trình để tìm lời giải cho bài toán sau: Trăm trâu trăm bó cỏ Bó lại cho tròn Trâu đứng ăn năm Trâu nằm ăn ba Năm trâu nghé ăn một Hỏi có bao nhiêu trâu đứng, 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... thiện HOANTHIEN Tính tổng các ước số của N: từ 1 → N div 2 lưu vào biến S Nếu S=N thì N là số hoàn thiện :: Chương trình giảng dạy Năng Khiếu Tin Học:: 34 ::Tài liệu giảng dạy lập trình khối THPT – Quyển 1:: Chuyên đề 5 MẢNG MỘT CHIỀU NKTH I TÓM TẮT LÝ THUYẾT 1 Khái niệm Mảng: là tập hợp các biến cùng kiểu dữ liệu Mỗi biến là một phần tử và được gắn chỉ số để xác định Mảng 1 chiều: kích thước n là mảng... 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:: 35 :: Tài liệu giảng dạy lập trình khối THPT – Quyển 1:: HƯỚNG DẪN IV Bài 1 Diện tích tam giác DTTG NKTH S= p ( p − a )( p − b )( p − c ) với p = 1 (a+b+c) 2 Bài 2 Cực đại CUCDAI Gọi x là số thứ hai thì số thứ nhất là: (n-x) Theo... Chương trình giảng dạy Năng Khiếu Tin Học:: 34 NKTH ::Tài liệu giảng dạy lập trình khối THPT – Quyển 1:: S2 = 1 + 1/2! + + 1/n! S3 = 1 + x + x2/2! + x3/3! + + xn/n! S4 = 1 - x + x2/2! - x3/3! + + (-1)nxn/n! S5 = 1 + sin(x) + sin2(x) + + sinn(x) Bài 5 Thỏ gà THOGA Viết chương trình để tìm lời giải cho bài toán sau: Trong giỏ vừa thỏ vừa gà, Một trăm cái cẳng bốn ba cái đầu Hỏi có mấy gà mấy thỏ? Bài. .. tệp Chương trình Program KieuTep; Const :: Chương trình giảng dạy Năng Khiếu Tin Học:: 35 :: Tài liệu giảng dạy lập trình khối THPT – Quyển 1:: finame=’hcn.inp’; foname=’hcn.out’; Var fi, fo:text; Cd, cr, S: real; NKTH BEGIN Assign(fi, finame); Reset(fi); Assign(fo, foname); Rewrite(fo); Readln(fi, cd, cr); S:=cd*cr; Writeln(fo,‘Dien tich HCN: ‘,S:0:2); Close(fi); Close(fo); END III BÀI TẬP Bài 1 Tính... 1 | | | | | 2 2 5 5 Bài 11 Số hoàn thiện HOANTHIEN :: Chương trình giảng dạy Năng Khiếu Tin Học:: 35 :: Tài liệu giảng dạy lập trình khối THPT – Quyển 1:: Số hoàn thiện là số tự nhiên có tổng các ước của nó (không kể chính nó) bằng chính nó Viết chương trình kiểm tra xem một số được nhập vào từ bàn phím có phải là số hoàn thiện hay không? Ví dụ: 6, 28 là các số hoàn thiện NKTH Bài 12 In bảng xoắn ốc

Ngày đăng: 20/07/2016, 20:02

TỪ KHÓA LIÊN QUAN

w