Thuật giải Mục tiêu bài học: - Xác định được tập dữ liệu vào, dữ liệu ra, biết phân chia công việc thành các bước. Sau mỗi bước bao giờ cũng cho 1 kết quả xác định không phụ thuộc vào người hay máy thực hiện mà chỉ phụ thuộc vào dữ liệu vào. - Chỉ ra tính khả thi của các bước thực hiện. Tính dừng sau một số hữu hạn bước. Nắm được 3 cách biểu diễn thuật toán. - Trong toán học, để giải quyết một bài toán ta luôn tìm cách áp dụng những định lý, tính chất, tiên đề,
hệ quả... nhằm biến đổi dữ kiện đề bài để đưa về kết quả cuối cùng. Trong tin học việc giải các bài toán trước hết là đi tìm thuật giải của bài toán đó. 1. Khái niệm thuật giải Thuật giải giải một bài toán nào đó là một dãy các thao tác đơn giản được sắp xếp theo một trình tự xác định rõ ràng và kết thúc sau một số hữu hạn bước nhằm biến đổi dữ liệu vào (input) của một bài toán thành dữ liệu ra (output) mô tả lời giải bài toán đó. Ví dụ . Bài toán kiểm tra tính nguyên
tố. Cho: số nguyên dương N; Cần biết: N có là số nguyên tố hay không? Thuật giải Ơclid giải bài toán trên - Input: a, b nguyên dương - Output: UCLN của a và b Bước 1: nhận vào số a và số b Bước 2: chia a cho b tìm số dư r Bước 3: Nếu r = 0 thì chuyển đến bước 5 Bước 4: gán giá trị b cho a, gán giá trị r cho b. Quay về bước 2 Bước 5: thông báo kết quả UCLN là b; Bước 6: Kết thúc. 2. Các tính chất của thuật giải 2.1. Có dữ liệu vào (input) Mỗi thuật giải có
thể có một hoặc nhiều dữ liệu vào 2.2. Xác định dữ liệu ra (output) Sau khi thuật giải đã được thực hiện xong, tuỳ theo chức năng mà thuật giải đảm nhiệm ta có thể thu được một số dữ liệu ra xác định 2.3. Tính xác định Tính xác định của thuật giải đòi hỏi ở mỗi bước các thao tác phải hết sức rõ ràng, không thể gây nên sự nhập nhằng, lẫn lộn, tuỳ tiện.
2.4. Tính kết thúc (tính dừng) Thuật giải phải dừng sau một số hữu hạn bước thực hiện. 2.5. Tính hiệu quả Một yêu cầu
quan trọng là với input đúng thuật giải phải cho output đúng. 2.6. Tính phổ dụng Một thuật giải được xem là có tính phổ dụng cao nếu nó có thể giải bất kỳ bài toán nào trong một lớp lớn các bài toán. Những cách viết thuật giải 1. Liệt kê từng bước Thuật giải Ơclid ở trên được diễn tả theo hình thức liệt kê từng bước. 2. Lưu đồ(sơ đồ khối) Lưu đồ là công cụ giúp ta diễn tả thuật giải một cách trực quan. Lưu đồ được tạo bởi 4 loại khối nối với nhau bằng các cung -
Khối thao tác được biểu diễn bằng hình chữ nhật. Trong khối này ta viết một hoặc một dãy các thao tác như gán trị, tính toán biểu thức v.v... Khối thao tác có 1 cung đi đến và 1 cung đi ra. - Khối điều kiện được biểu diễn bằng hình thoi. Trong khối này ta viết một biểu thức logic. Tuỳ theo giá trị của biểu thức logic là đúng hay sai mà việc thực hiện tiếp theo sẽ được chỉ dẫn bởi một trong hai cung đi ra mang dấu + (cho trường hợp đúng) hoặc dấu - (cho
trường hợp sai). Như vậy khối điều kiện có 1 cung đi đến và 2 cung đi ra. - Hai khối đặc biệt là khối bắt đầu và khối kết thúc được biểu diễn bằng hình ellip chỉ rõ điểm bắt đầu và điểm kết thúc (điểm dừng) của thuật giải. Khối bắt đầu không có cung đi đến và có 1 cung đi ra. Khối kết thúc có 1 cung đi đến và không có cung đi ra. Chúng ta dùng lưu đồ diễn tả thuật giải Ơclid tìm UCLN của hai số nguyên dương. Thuật giải Ơclid +Dữ liệu vào - Số nguyên a > 0; b >
0 +Dữ liệu ra - USCLN của a và b 3. Giả mã lệnh Khi thể hiện thuật giải bằng giả mã lệnh, ta sẽ vay mượn các cú pháp của một ngôn ngữ lập trình nào đó. Ở đây chúng ta vay mượn các khái niệm của ngôn ngữ lập trình pascal. 3.1. Lệnh gán Tên biến :=biểu thức; 3.2. Lệnh rẽ hai nhánh a. Lệnh rẽ hai nhánh dạng khuyết: Nếu điều kiện thì câu lệnh b. Lệnh rẽ hai nhánh dạng đầy đủ: Nếu điều kiện thì câu lệnh 1 còn câu lệnh 2; 3.3. Rẽ nhiều nhánh Chọn
theo biểu thức thuộc vào nhãn 1 : câu lệnh 1; nhãn 2 : câu lệnh 2; . . . . . . . . . . . . . nhãn n : câu lệnh n còn câu lệnh n+1; 3.4. Lệnh lặp a. Lệnh lặp với điều kiện trước: Khi điều kiện làm câu lệnh. b. Lặp với điều kiện sau Lặp .....câu lệnh ..... đến điều kiện; c. Lặp với số lần định trước: Với biến := biểu thức 1 đến biểu thức 2 làm câu lệnh 4. Ví dụ Người A nghĩ trong đầu một số nguyên X trong đoạn từ 1 đến 100. Người B hỏi, người A trả
lời hoặc đúng hoặc sai. Sau không quá 7 lần hỏi đáp người B biết số X là số nào. Viết thuật giải cho bài toán này. 4.1. Dùng ngôn ngữ liệt kê từng bước Bước 1 Gán T := 1 ; P := 100; Bước 2 Lấy thương nguyên của tổng (T + P) chia cho 2 rồi gán cho G. Bước 3 Kiểm tra điều kiện X > G nếu đúng thì chuyển đến bước 4, còn sai thì chuyển đến bước 5; Bước 4 Lấy G + 1 gán cho T; chuyển đến bước 6; Bước 5 Lấy G gán cho P; Bước 6 Kiểm tra điều kiện T = P nếu sai
thì chuyển về bước 2; Bước 7 Trả lời X = T ; Bước 8 Kết thúc; 4.2 Dùng sơ đồ khối 4.3 Dùng giả mã lệnh Biến nguyên không âm T, P, G, X; Bắt đầu T :=1; P :=100; Lặp G := (P+T) div 2; Nếu X > G thì T :=G+1 Ngược lại P :=G; đến T = P; Thông báo X = P; Kết thúc. Câu hỏi-Bài tập 1. Thuật giải là gì? Thuật giải có những tính chất cơ bản nào? 2. Có mấy cách biểu diễn thuật giải 3. Hãy viết thuật giải vẽ đồ thị của hàm số y = |ax| (với a khác 0)
thông qua đồ thị của hàm số y = ax. 4. Trình bày tính chất xác định của thuật giải và nêu rõ ý nghĩa của tính chất này. 5. Hãy phát biểu thuật giải để giải bài toán sau: "Có một số quả táo. Dùng cân hai đĩa (không có quả cân) để xác định quả táo nặng nhất"(giả sử mỗi đĩa cân có thể đựng được nửa số quả táo). 6. Xác định dữ liệu vào và dữ liệu ra cho các thuật giải sau đây a) Rút gọn một phân số. b) Kiểm tra xem ba số cho trước a, b và c có thể là độ dài ba cạnh của một tam
giác hay không? c) Tính trung bình cộng của hai số. d) Dùng một cốc phụ để tráo nuớc ở hai cốc cho trước. e) Tìm chu vi và diện tích của hình tròn có bán kính cho trước 7. Có hai bình A và B. Bình A có dung tích 8 lít, bình B có dung tích 5 lít. Trình bày các bước thực hiện để lấy được 2 lít nước. 8. Có 3 bình A, B, C. Bình A có dung tích 8 lít và đựng đầy 8 lít rượu, bình B có dung tích 5 lít, bình C có dung tích 3 lít. Trình bày các bước thực hiện để có được 4 lít rượu ở
bình A và 4 lít rượu ở bình B. 9. Một người có 1 con gấu, 1 con dê và 1 cái bắp cải. Nếu không có người ở bên chúng thì con gấu sẽ ăn thịt con dê hoặc con dê sẽ ăn bắp cải. Thuyền chỉ có thể chở được người đó với con gấu hoặc con dê hoặc bắp cải. Người đó làm thế nào để mang chúng sang sông. 10.Có 4 người phải qua một cái cầu, trời tối họ chỉ có một chiếc đèn. Cầu chỉ đi được tối đa 2 người. Như vậy qua cầu phải có đèn và nhiều nhất là chỉ đi được 2 người cùng một lúc. Biết
rằng người thứ nhất đi qua cầu hết 1 phút. Người thứ hai đi qua cầu hết 2 phút. Người thứ ba đi qua cầu hết 5 phút. Người thứ tư đi qua cầu hết 10 phút. Hãy tìm cách cho 4 người này qua cầu sao cho tổng số thời gian ít nhất Giao tiếp với Turbo Pascal Mục tiêu bài học: - Biết vào môi trường làm việc của Turbo Pascal. - Nắm được cấu trúc của 1 chương trình Pascal đơn giản. - Biết viết 1 chương trình Pascal đơn giản thông qua thủ tục vào ra và lệnh gán Sau khi đã có
thuật giải cho bài toán, một câu hỏi đặt ra là làm thế nào để máy thực thi thuật giải đó để đưa ra output của bài toán? Chính là ta cần một công cụ lập trình. Turbo Pascal là một công cụ như thế. Phần này ta sẽ tìm hiểu Sử dụng TURBO PASCAL (kí hiệu là TP) bao gồm những phần việc sau: Trước hết là soạn thảo chương trình. Sau khi chương trình đã soạn thảo xong, ta dùng TP để kiểm tra xem trong chương trình đó có lỗi cú pháp (viết sai quy cách câu lệnh hoặc mô tả) hay
không. Khi không còn các thông báo lỗi nữa, nghĩa là chương trình đã đúng đắn về mặt cú pháp, ta có thể chạy chương trình, nạp dữ liệu và thu nhận kết quả. 1. Chương trình Pascal đơn giản Trước hết ta hãy xem một chương trình hết sức đơn giản, chẳng hạn: Program chao_khach ; BEGIN write(' Chao cac ban,'); write(' chung ta bat dau lam viec'); END. Dòng thứ nhất gọi là phần tiêu đề. Phần tiêu đề có thể có hoặc không, nhưng nếu có thì cần viết đúng dưới dạng
sau: một từ bắt buộc Program tiếp theo ít nhất là một kí tự dấu cách sau đó là một tên do người lập trình tự chọn. Các dòng thứ hai và thứ năm là bắt buộc, thể hiện việc bắt đầu và kết thúc chương trình. Các dòng viết giữa cặp Begin và End là những câu lệnh. 2. Khởi động TURBO PASCAL Để sử dụng TURBO PASCAL ta cần tối thiểu là hai tệp: TURBO.EXE và TURBO.TPL. Khởi động TURBO PASCAL, giả sử ta đang ở thư mục có hai tệp nói trên ta gõ TURBO tiếp theo là phím ENTER (có nhiều
cách khởi động TURBO PASCAL, nếu trên màn hình Windows chúng ta thấy biểu tượng của TURBO PASCAL thì ta chỉ cần kích chuột vào đó) 3. Soạn thảo trong TURBO PASCAL 3.1. Dịch chuyển con chạy - Các phím lên, xuống, phải, trái (có hình những mũi tên ở bên phải bàn phím): dịch con chạy từng kí tự theo chiều mũi tên. - Ctrl và phím mũi tên sang trái (phải) : dịch chuyển con chạy theo từng từ sang trái (phải) của dòng văn bản. - Home: đưa con chạy về đầu dòng. - End: đưa
con chạy về cuối dòng. - PgUp (PgDn): dịch con chạy lên (xuống) theo từng trang màn hình. - Ctrl-PgUp hoặc Ctrl-PgDn: đưa con chạy về đầu tệp hoặc cuối tệp. 3.2. Sửa chữa văn bản - Phím Del để xoá một kí tự tại vị trí hiện thời của con chạy. - Phím lùi (Backspace) để xoá đi một kí tự nằm bên trái con chạy. - Phím INSERT để chọn chế độ chèn hoặc đè. - Ctrl-Y. Xoá cả dòng đang chứa con chạy. - Ctrl-Q Y. Xoá từ vị trí con chạy đến cuối dòng - Ctrl- Q A. Tìm kiếm
một dãy kí tự và thay thế. 3.3. Làm việc với khối dòng Ctrl-K B. Đánh dấu đầu khối. Ctrl-K K. Đánh dấu cuối khối. Ctrl-K Y. Xoá khối dòng đã đánh dấu. Ctrl-K C. Sao chép khối dòng tới vị trí mới của con chạy. Ctrl-K V. Chuyển khối dòng tới vị trí mới của con chạy. Ctrl-K W. Ghi khối dòng vào một tệp. Ctrl-K R. Đọc một tệp từ đĩa vào và xen vào chỗ con chạy. 4. Môi trường của TURBO PASCAL Khởi động TURBO PASCAL là nạp tệp TURBO.EXE vào bộ nhớ trong của máy
để ta làm việc với môi trường của hệ thống này. Môi trường này thể hiện trên màn hình như sau: Môi trường trên giúp ta làm việc với TURBO Pascal: gõ chương trình (Edit), thực hiện chương trình (Run), ghi chương trình vào đĩa, gọi chương trình từ đĩa (File) v.v... Ngoài việc dùng chuột chọn trên bảng, Turbo Pascal dùng một số phím nóng sau: • + Nhấn phím F10 để vào menu, di vệt sáng đến chức năng cần chọn rồi gõ ENTER. • + F3 để mở tệp • Alt-F3 để đóng
tệp • F9 để dịch chương trình • Ctrl-F9 để thực hiện chương trình • F2 để ghi tệp lên đĩa với tên đã có • Alt-F a để ghi tệp lên đĩa với tên mới • Alt-X để kết thúc làm việc với TURBO PASCAL. Sử dụng Turbo Pascal 5. Ghi nhớ 5.1. Bảng chữ Bảng chữ gốc của TP là bảng ASCII (American Standard Codes for Information Interchanges). ASCII có 128 kí hiệu bao gồm bộ chữ cái la tinh, các chữ số, các dấu và một số kí hiệu đặc biệt. a. Bộ chữ cái La tinh Gồm 26 chữ
cái tiếng Anh in hoa A-Z và in thường a-z. TP không phân biệt chữ thường và chữ hoa trong tên các đối tượng, ngoại trừ trường hợp trong các xâu văn bản. b. Bộ chữ số Gồm các chữ số thập phân: 0, 1, ... , 9. Để tránh lẫn 0 (chữ số không) và O (chữ O) TP quy định gạch chéo trong chữ số không. c. Những dấu phép toán số học: + (cộng), - (trừ), * (nhân), / (chia) d. Các dấu so sánh : = (bằng) , > (lớn hơn) , < (nhỏ hơn), >= (lớn hơn hoặc bằng), <= (nhỏ hơn hoặc
bằng), <> (khác) e. Những kí hiệu khác: . ,;: ' ":! @ # $ % \ ^ & () [ ] { } Trong bảng chữ có một kí hiệu gọi là dấu cách hay khoảng trống. Dấu cách được dùng để tạo một khoảng trắng ngăn cách các từ. 5.2. Từ khoá Trong từ vựng Pascal có một số từ dành riêng mà nghĩa đã được quy định sẵn, chẳng hạn program, begin, end, mà ta đã biết được gọi là từ khoá. chúng tôi giới thiệu dưới đây một số từ khoá sẽ dùng trong giáo trình này AND ARRAY BEGIN CASE CONST DIV
DO DOWNTO ELSE END FOR FUNCTION GOTO IF IN LABEL MOD NOT OF OR PROCEDURE PROGRAM REPEAT STRING THEN TO TYPE UNTIL USES VAR WHILE 5.3. Tên chuẩn Những tên được đặt sẵn trong TP, chẳng hạn pi, byte, word, integer, longint, read, readln, write, writeln, char, boolean, ... được gọi là tên chuẩn. 5.4. Cấu trúc một chương trình Pascal đơn giản Program tênchươngtrình ; Var Khai báo biến ; BEGIN Những lệnh (ngăn cách nhau bởi dấu chấm phẩy ;) Readln END.
Dòng trên cùng gọi là phần tiêu đề. Dòng thứ hai sau từ khoá Var là khai báo các biến để dùng trong chương trình (xem ở ví dụ áp dụng dưới đây). Thân chương trình là phần giới hạn bởi BEGIN, END và kết thúc bởi dấu chấm (.). Trong thân chương trình, các lệnh được cách nhau bởi dấu chấm phẩy (;). 5.5. Qui tắc đặt tên. Tên chương trình, tên biến và các tên sau này ta gặp phải bắt đầu bằng chữ cái, tiếp theo có thể có một số kí tự nữa nhưng chỉ lấy trong tập gồm chữ cái,
chữ số, dấu gạch dưới. Tên có thể nhận đến 127 kí tự. 5.6. Hiển thị dữ liệu ra màn hình và nhận dữ liệu vào từ bàn phím a. write('dãy kí tự '); Dãy kí tự trong hai dấu nháy đưn được viết lên màn hình nguyên văn. Con chạy ở cùng dòng đó. b. writeln( 'dãy kí tự ' ) ; Tác dụng như lệnh write('dãy kí tự ') nhưng có thêm tác dụng sau khi hoàn thành nhiệm vụ thì đưa con trỏ màn hình xuống đầu dòng tiếp theo. c. write (biểu thức) Viết ra màn hình giá trị của biểu thức. Con
chạy ở cùng dòng đó. d. Writeln (biểu thức) Viết ra màn hình giá trị của biểu thức. Viết xong giá trị của biểu thức con chạy xuống đầu dòng tiếp theo. Ví dụ lệnh writeln ( 25 + 37) ; khi thực hiện lệnh này trên màn hình xuất hiện số 62 và con trỏ ở đầu dòng phía dưới. e. writeln Thực hiện lệnh này máy bỏ trống một dòng. f. Readln(tên biến) ; Chờ nhận vào giá trị của biến đã được khai báo trong Var. g. readln; Chờ gõ phím ENTER. 6. Áp dụng. 6.1. Bài toán.
Tính chu vi và diện tích hình vuông có độ dài cạnh là một số nguyên được nhận vào từ bàn phím 6.2. Xây dựng thuật giải Bước 1. Nhận vào a; Bước 2. Viết ra giá trị của biểu thức chu vi là 4 * a ; Bước 3. Viết ra giá trị của biểu thức diện tích là a *a ; Bước 4. Kết thúc 6.3 Soạn chương trình Program HinhVuong; Var a : Word ; Begin readln (a); writeln (4*a); write (a*a); Readln; End. Hãy gõ phím F2 để ghi chương trình trên vào đĩa. Như vậy ở
trên đĩa tệp mang tên là VUONG.PAS. Trong chương trình trên, giữa phần tiêu đề và thân chương trình còn có một phần ở đây là var a : Word . Đó là phần khai báo biến. Từ Word là tên chuẩn có nghĩa là số nguyên không âm có tập giá trị từ 0 đến 65536. Nội dung thân chương trình trên có nghĩa là: Readln(a) ; nhập từ bàn phím một số và lưu giữ số đó ở biến a. Giá trị nạp vào phải gõ trên bàn phím và kết thúc bởi phím ENTER. Writeln(4* a) ; viết ra màn hình giá trị của biểu
thức 4* a sau đó con chạy xuống đầu dòng tiếp theo. Write(a* a) ; viết ra màn hình giá trị của biểu thức a 2 , con chạy màn hình ở cùng dòng đó. Readln là chờ người dùng gõ phím Enter. 6.4. Thực hiện chương trình Gõ phím F9 để máy dịch chương trình ta vừa viết ở trên sang mã máy. Nếu có lỗi thì máy thông báo cho ta sửa. Sửa xong lại gõ phím F9 để máy báo lỗi tiếp theo (nếu còn). Bạn đọc có thể xem lỗi gì trong phần phụ lục thông báo lỗi ở cuối sách. Khi nào gõ phím
F9 mà máy không báo có lỗi thì ta cho chạy chương trình bằng cách gõ tổ hợp hai phím Ctrl- F9 (giữ phím Ctrl và gõ phím F9) sau đó gõ giá trị của a từ bàn phím (thực hiện lệnh Readln(a)). Bài tập 1.Viết các biểu thức sau đây dưới dạng thông thường: a) a+b/c-d b) (a+b)/(c-d) c) a/b/c/d/e d) a*b/g*d e) 2*a+b*b/c 2.Những tên sau đây viết đúng hay sai: A, AA, BIC, 1B, St , A* , A-B , CHU VI, In, TO, READ, _10A, F(x), M[, $Q, P^ 3.Viết chương trình để máy in lên màn hình như
sau: ******************************************* & TRƯỜNG THCS TRAN BICH SAN & & & & xin gui loi & & & & CHAO CAC BAN! & ******************************************* 4. Bằng cách gõ đồng thời Alt_219 (giữ phím Alt, gõ các số 2, 1, 9 ở các phím phía bên phải bàn phím) để viết khối hình chữ nhật, hãy lập chương trình vẽ chữ Tin học như sau: TIN HOC 5. Viết chương trình tính diện tích xung quanh, diện tích toàn phần, thể tích
hình lập phương khi cho độ dài cạnh là một số nguyên. 6. Viết chương trình tính giá trị của biểu thức X 3 - 4X 2 + 3X-5 cho biết X là một số nguyên 1. Bài toán Tính chu vi và diện tích hình chữ nhật khi cho biết độ dài hai cạnh của nó là những số thực. 2. Xây dựng thuật giải Bước 1. Nhận vào k1, k2; Bước 2. Viết ra giá trị của biểu thức chu vi là 2 * (k1 + k2) ; Bước 3. Viết ra giá trị của biểu thức diện tích là k1 * k2 ; Bước 4. Kết thúc 3.
Chương trình Hãy khởi động TURBO PASCAL, sau đó gõ phím F3 và đặt tên tệp có phần chính là cn1 (khi máy hỏi tên tệp thì gõ cn1 rồi gõ phím ENTER), sau đó soạn thảo chương trình như sau: Program chunhat1; Var k1, k2 : real; Begin Readln(k1 , k2); Writeln (2*(k1+k2)); write(k1*k2); Readln End. Hãy gõ phím F2 để ghi chương trình trên vào đĩa Trong chương trình trên, phần khai báo biến var k1, k2 : real. Dòng khai báo của chương trình này có nghĩa là khai
báo các biến mang tên là k1, k2 các biến này nhận giá trị là số thực và chấp nhận các phép toán trên số thực. Máy sử dụng hai biến tương ứng với hai tên gọi là k1 và k2 để sẵn sàng lưu giữ hai số thực. 4. Thực hiện chương trình Gõ phím F9 để máy dịch chương trình ta vừa viết ở trên sang mã máy. Nếu có lỗi thì máy thông báo cho ta sửa. Sửa xong lại gõ tiếp phím F9. Khi nào gõ phím F9 mà máy thông báo không có lỗi thì ta nhớ lại gõ phím F2 một lần nữa để ghi chương trình
không có lỗi cú pháp lên đĩa. Sau khi chương trình dịch được thông xuất, ta cho chạy chương trình bằng cách gõ đồng thời hai phím Ctrl-F9 (giữ phím Ctrl và gõ phím F9) sau đó gõ giá trị của k1 và k2 từ bàn phím Khi thực hiện chương trình, trên màn hình xuất hiện tín hiệu mời (con trỏ nhấp nháy) có nghĩa là máy hỏi ta hai giá trị k1, k2. Chương trình trên viết ra màn hình giá trị của chu vi và diện tích hình chữ nhật dưới một dạng ta chưa quen biết, đó là dạng dấu phẩy
động. Muốn cho các số thực xuất hiện dưới dạng số thập phân thông thường, ta sửa chương trình như sau: Program chunhat2; Var k1, k2 : real; Begin readln(k1,k2); Writeln (2*(k1+k2) : 6 : 2); write(k1*k2 : 6 : 2); Readln; End. Dạng mới của lệnh Writeln hoặc Write ở đây là: Writeln (2*(k1+k2) : 6 : 2); Cho hiện trên màn hình giá trị của biểu thức 2*(k1+k2) chỉnh phải vào một vùng có 6 kí tự lấy 2 chữ số đầu tiên ở phần thập phân, nếu chữ số thứ ba ở phần thập
phân lớn hơn hoặc bằng 5 thì làm tròn lên 5. Ghi nhớ 5.1 . Khai báo biến Cách khai báo biến như sau: VAR tên biến 1, tên biến 2, tên biến 3 : kiểu của các biến này ; 5.2. Kiểu của biến a. Kiểu nguyên Ta đã biết kiểu chuẩn Word có giá trị từ 0 đến 65536. Ngoài ra nếu ta dùng kiểu BYTE thì tập giá trị là từ 0 đến 255. Nếu ta dùng kiểu INTEGER thì tập giá trị là từ - 32768 đến 32767. b. Kiểu thực Ta đã biết một tên chuẩn của kiểu thực là REAL. Tập gía trị của
nó gồm những số thực có trị tuyệt đối nằm trong khoảng 10 –37 đến 10 37 . 5.3. Những hàm số học chuẩn Abs(x) :Lấy giá trị tuyệt đối của x. Giá trị của hàm cùng kiểu với kiểu của đối số x. Sqr(x) :Cho x bình phương. Giá trị của hàm cùng kiểu với kiểu của đối số x. Sqrt(x): Lấy căn bậc 2 của x. Giá trị của hàm thuộc kiểu thực. Int(x) : Cho phần nguyên của x. Giá trị của hàm thuộc kiểu thực. Trunc(x): Cho phần nguyên của x. Giá trị của hàm thuộc kiểu
nguyên. Round(x): Làm tròn x đến số nguyên gần x nhất. Giá trị của hàm thuộc kiểu nguyên Sin(x): Cho giá trị của sinx, ở đây x tính bằng đơn vị là radian. Cos(x) :Cho giá trị của cosx, ở đây x tính bằng đơn vị là radian. Arctan (x): Cho góc tính bằng radian có tang bằng x. Exp(x) : Tính e x . Giá trị của hàm thuộc kiểu thực. Ln(x) : Tính lôgarit cơ số e của x. Giá trị của hàm thuộc kiểu thực. Frac (x): Cho phần thập phân của x. Giá trị của hàm thuộc kiểu
thực Random(x) đối số x phải là nguyên. Hàm này cho ngẫu nhiên một số nguyên lớn hơn hoặc bằng 0 và nhỏ hơn x . 5.4. Những lệnh thường dùng a. Readln (danh sách biến); Nạp dữ liệu từ bàn phím để đưa vào các địa chỉ kí hiệu bởi danh sách tên biến (dãy tên biến trong danh sách cách nhau bởi dấu phẩy). Khi thực hiện, trên màn hình xuất hiện tín hiệu mời (con trỏ nhấp nháy). b. Write (danh sách những đối tượng viết ra màn hình) hoặc Writeln (danh sách những đối tượng
viết ra màn hình); Những đối tượng trong danh sách phải cách nhau bởi dấu phảy. Nếu dùng writeln thì sau khi in xong, máy sẽ chuyển con chạy xuống đầu dòng tiếp theo. c. Writeln (biểu thức số thực : m : n) hoặc Write (biểu thức số thực : m : n); Cho hiện trên màn hình chỉnh phải giá trị của biểu thức số thực vào một vùng có m kí tự với n chữ số thập phân sau khi đã làm tròn. Writeln có thêm tác dụng xuống dòng. d. Writeln (biểu thức nguyên : m) ; hoặc Write (biểu thức
nguyên : m); Cho hiện trên màn hình chỉnh phải giá trị của biểu thức nguyên (biến được coi biểu thức đặc biệt) vào một vùng có m kí tự . e. writeln (‘ Tập văn bản ‘ : m) ; hoặc write (‘ Tập văn bản ‘ : m) ; Cho hiện trên màn hình nguyên văn tập văn bản giữa hai dấu nháy cao, chỉnh phải vào một vùng có m kí tự . Writeln có thêm tác dụng xuống dòng. 5.5. Khai báo dùng đơn vị (Unit) USES tên đơn vị; Ví dụ Uses crt ; sau khi đã khai báo uses crt thì có thể dùng những
lệnh dưới đây: CLRSCR : Xoá màn hình, đưa con chạy về góc trái trên của màn hình. CLREOL: Xoá từ vị trí con chạy đến cuối dòng. 5.6. Cách viết chú thích Viết văn bản (dãy kí tự) giữa cặp dấu { } hoặc (* *). Gặp văn bản này, chương trình bỏ qua. 5.7. Dịch chương trình sang tệp có phần mở rộng EXE Muốn dịch chương trình Pascal ở bộ nhớ trong ra ngôn ngữ máy và ghi vào đĩa, ta lần lượt làm như sau: Gõ Alt - C để chọn COMPILE; - Chọn DESTINATION DISK, khi cần thiết thì gõ
D để chuyển từ MEMORY sang DISK; Giữ phím Alt và gõ phím F9. Chương trình có phần mở rộng EXE chạy được ở hệ thống và một số phần mền ứng dụng khác 6. Áp dụng 6.1. Bài toán Viết chương trình cho máy tính khoảng cách từ một điểm I có toạ độ (X0, Y0 đến đường thẳng có phương trình Ax + By + C = 0 (bài toán trong mặt phẳng toạ độ Đề Các) .2. Thuật giải Bước 1. Nhận vào giá trị của các hệ số A, B, C ; Bước 2. . Nhận vào giá trị của X0 và Y0 ; Bước 3.
Viết ra màn hình giá trị của biểu thức Bước 4. Kết thúc 6.3. Chương trình Program TinhKhoangCachTuMotDiêmDenDuongThang ; Uses Crt ; Var A, B , C, X0 , Y0 : Real ; BEGIN Clrscr ; Write (' Cho ba he so A, B, C cua duong thang ' : 75) ; readln (a , b, c); (* Pascal khong phan biet chu hoa và chu thuong trong ten *) ; Write (' Cho toa do cua diem I ' : 75) ; readln (x0 , y0); { In ra man hinh gia tri cua khoang cach } write (' Khoang cach la ', ABS(A*X0
+ B*Y0 + C) /SQRT(A*A + B*B):9:3) ; Readln; End. Bài tập 1. Viết các số sau đây ra dạng thông thường -6E+9; 7.82E-5 ; 15; -5.2 2. Viết các dãy tính sau dưới dạng biểu thức toán thông thường: a) 3.7+7.8+9 b) 3.7/4.8/5.9 c) 3.6*4/3 d) (3.9*3.9/7*3-7.2)/3 3. Lập chương trình đổi kích thước a tính bằng inch ra cm biết 1 inch = 2,54cm. 4. Lập chương trình để tính trung bình cộng của 4 số thực bất kì. 5. Viết chương trình tính diện tích hình thang khi cho hai đáy và đường
cao. 6. Viết chương trình tính quãng đường đi được S của một vật chuyển động nhanh dần đều khi cho máy biết vận tốc ban đầu V0, gia tốc a và thời gian t. 7. Tính khoảng cách đến mặt đất của một người nhảy dù từ độ cao h sau thời gian t giây. 8. Viết chương trình cho máy nhận vào ba kích thước của hình hộp chữ nhật. Tính diện tích toàn phần, thể tích và đường chéo của hình đó. 9. Viết chương trình tính chu vi, diện tích của tam giác đều khi cho biết cạnh. 1. Bài toán.
Tính chu vi, diện tích, đường chéo, chu vi đường tròn ngoại tiếp, diện tích hình tròn ngoại tiếp của hình chữ nhật khi nhập vào độ dài hai kích thước. 2. Thuật giải. Bước 1. Nhận vào k1, k2; Bước 2. Viết ra giá trị của biểu thức chu vi là 2 * (k1 + k2) ; Bước 3. Viết ra giá trị của biểu thức diện tích là k1 * k2 ; Bước 4. Tính giá trị của biểu thức d = Bước 5. Viết ra giá trị của d; Bước 6. Viết ra giá trị của biểu thức chu vi hình tròn là p* d ; Bước 7. Viết
ra giá trị của biểu thức diện tích hình tròn là p* d*d/4 Bước 8. Kết thúc Nhìn vào thuật giải trên, ta thấy để d lưu giữ giá trị của biểu thức đường chéo của hình chữ nhật, bài này ta sẽ học một lệnh mới. Đó là lệnh gán. 3. Chương trình Program chunhat2; Uses crt; Var k1, k2 : real; BEGIN Clrscr ; Write (' Cho do dai hai canh cua hinh chu nhat ' : 65) ; readln (k1 , k2); writeln (' Chu vi la ' : 12 , 2*(k1+k2) : 9 : 2) ; writeln (' Dien tich la ' , k1*k2
: 9 : 3) ; { In ra man hinh gia tri cua duong cheo } write (' Duong cheo la ', SQRT(k1*k1 + k2*k2):16:4) ; Readln; END. Qui tắc viết lệnh này như sau: Tên biến := Biểu thức; Thực hiện lệnh này, máy tính giá trị của biểu thức ở bên phải dấu gán (:=), sau đó gán giá trị này cho biến ở bên trái dấu gán, tức là đưa giá trị đó vào địa chỉ được kí hiệu bởi tên biến ở bên trái dấu gán. Sau lệnh gán, giá trị cũ của biến bị mất và biến nhận giá trị mới. Ví dụ ta khai báo
Var a : Integer ; ở phần thân chương trình ta có hai lệnh gán a := - 6 ; a := a + 8 thì thực hiện lệnh gán thứ nhất a có giá trị là -6. Tiếp đến sau khi thực hiện lệnh gán thứ hai biến a có giá trị là 2. Giá trị cũ là -6 bị mất, biến nhận giá trị mới. 4. Thực hiện chương trình Gõ phím F2 để ghi văn bản đã soạn lên đĩa. Gõ phím F9 để sửa lỗi. Khi nào hết lỗi nhớ gõ phím F2 để ghi chương trình hết lỗi cú pháp lên đĩa. 5. Ghi nhớ Hằng số p PASCAL đã cài đặt sẵn mang tên là
Pi . - Cách viết lệnh gán: Tên biến := Biểu thức ; - Cách thực hiện Thực hiện lệnh này, trước tiên máy tính giá trị của biểu thức ở bên phải dấu gán, sau đó máy gán giá trị của biểu thức cho biến ở bên trái dấu gán. Sau lệnh gán, giá trị cũ của biến bị mất, biến nhận giá trị mới. 6. Áp dụng 6.1. Bài toán. Viết chương trình cho máy nhận vào ba cạnh a, b, c của tam giác ABC. Tính diện tích tam giác đó và tính độ dài từng đường cao của tam giác. 6.2 Thuật giải Ta
tính diện tích của tam giác theo ba độ dài của ba cạnh bằng công thức Hê Rông như sau đây. Bước 1. Nhận vào số đo của ba cạnh a, b, c Bước 2. Tính p = (a + b + c)/2. Bước 3. Tính Bước 4. Viết ra giá trị biến S Bước 5. Viết ra giá trị biểu thức 2*S / a Bước 6. Viết ra giá trị biểu thức 2*S / b Bước 7. Viết ra giá trị biểu thức 2*S / c Bước 8. Kết thúc. 6.3 Chương trình Program TamGiac ; Uses Crt ; Var a, b , c , p, S : real ; BEGIN Clrscr ; Write (' Cho
do dai ba canh cua tam giac ' : 65) ; readln (a , b , c) ; p := (a + b + c) / 2 ; S := SQRT (p * (P – a) * (P – b) * (p - c)) writeln (' Dien tich la ' , S : 9 : 3) ; S := 2 * S ; { Gan hai lan dien tich vao bien S de tinh duong cao } writeln (' Duong cao qua canh ‘ , a : 0 :2 , ‘ la ‘ , S / a : 9 : 3) ; writeln (' Duong cao qua canh ‘ , b : 0 :2 , ‘ la ‘ , S / b : 9 : 3) ; writeln (' Duong cao qua canh ‘ , c : 0 :2 , ‘ la ‘ , S / c : 9 : 3) ; Readln END. Bài
tập 1. Lập chương trình tính chu vi và diện tích hình tròn theo bán kính r 2. Viết chương trình tính diện tích, thể tích hình cầu khi cho bán kính 3. Viết chương trình cho máy nhận vào ba cạnh a, b, c của tam giác ABC 4. a) Tính độ dài các đường trung tuyến của tam giác ABC. b) Tính bán kính đường tṛn ngoại tiếp tam giác ABC. 5. Tính chu kì dao động của một con lắc đơn có chiều dài dây là l 6. Tính diện tích hình viên phân ứng với cung 120 o khi máy nhận vào bán
kính của đường tròn. 7. Tính chu vi và diện tích đa giác đều n cạnh nội tiếp đường tròn bán kính r 8. Biết cạnh huyền a, cạnh góc vuông b của tam giac vuông ABC. Tính bán kính đường tròn nội tiếp tam giác đó. 9. Cho tam giác vuông ABC có góc A = 90 o . Lập chương trình tính góc C, cạnh AC, cạnh AB khi cho biết cạnh huyền BC và góc B (góc B, góc C tính bằng độ và phút). 10. Viết chương trình giải tam giác ABC khi biết góc A, góc B và cạnh c (các góc cho bằng độ và
phút). Những cấu trúc điều khiển cơ bản Mục tiêu bài học: - Nắm được cú pháp và ngữ nghĩa của các câu lệnh rẽ nhánh lặp. - Biết vận dụng các câu lệnh này để giải các bài toán đơn giản. Ta xét một số bài toán sau: Bài toán 1: Giải phương trình bậc hai Bài toán 2: Tính tổng S1 = 1 + 1/2 + 1/3 + 1/4 + 1/5 + ... Yªu cÇu lµ qu¸ tr×nh tÝnh sÏ dõng l¹i khi 2 - s < 0,001. Bài toán 3: Tính tổng S2 = 1 - 1/2 + 1/4 - 1/6 + ... - 1/102 Câu hỏi đặt ra là chỉ với những gì
đã học ở bài trước, ta có thể đưa ra đáp án của các bài toán trên không? Hãy cùng tìm hiểu bài học hôm nay để đưa ra câu trả lời. 1. Bài toán Cho máy nhận vào ba số nguyên bất kì. Ba số đó có thể làm thành cấp số cộng không?(có thể sắp xếp lại thứ tự của chúng). 2. Thuật giải Bước 1. Nhận vào a, b, c; Bước 2. Nếu a > b thì tráo đổi giá trị của a và b cho nhau; Bước 3. Nếu b > c thì tráo đổi giá trị của b và c cho nhau; Bước 4. Nếu a > b thì tráo đổi giá
trị của a và b cho nhau; Bước 5. Nếu b = (a + c) DIV 2 thì viết ra thông báo có là cấp số cộng Còn ngược lại, viết ra thông báo không là cấp số cộng Bước 6. Kết thúc. 3. Chương trình Program CapSoCong ; Uses crt; Var a, b, c, tg : integer ; BEGIN clrscr; write ('Cho ba so a, b, c '); readln(a, b, c) ; If a > b Then begin tg := a; a := b; b := tg end ; If b > c Then begin tg := b ; b := c ; c := tg end ; If a > b Then begin tg := a ; a := b ; b :=
tg end; If b = (a + c) DIV 2 Then write (a , b : 4 , c : 4 , ' la cap so cong ') else write (a , b : 4 , c : 4 , ' khong la cap so cong ') ; Readln End. 4. Giải thích chương trình Trong chương trình trên có lệnh If a > b Then begin tg := a ; a := b ; b := tg end; Đây là lệnh rẽ hai nhánh dạng khuyết. Sơ đồ khối biểu diễn hoạt động của câu lệnh rẽ hai nhánh dạng khuyết. Thực hiện câu lệnh này, đầu tiên máy kiểm tra điều kiện a > b nếu điều kiện đúng thì máy thực
hiện câu lệnh sau Then. Nếu điều kiện sai thì máy chuyển sang câu lệnh tiếp theo. Câu lệnh sau Then là câu lệnh ghép begin tg := a ; a := b ; b := tg end; Việc tráo đổi giá trị hai biến a và b phải thực hiện thông qua ba lệnh gán, mà sau từ khoá Then máy chỉ cho viết một lệnh, nên ta phải đưa ba lệnh gán vào trong một lệnh ghép bắt đầu là từ khoá begin và kết thúc là từ khoá end để máy coi đây là một lệnh. Ta xem xét câu lệnh sau If b = (a + c) DIV 2 Then write (a , b
: 4 , c : 4 , ' la cap so cong ') Else write (a , b : 4 , c : 4 , ' khong la cap so cong ') ; Đây là lệnh rẽ hai nhánh dạng đầy đủ. Thực hiện câu lệnh này, đầu tiên máy kiểm tra điều kiện b = (a + c) DIV 2 nếu điều kiện đúng thì máy thực hiện câu lệnh sau Then. Nếu điều kiện sai thì máy thực hiện câu lệnh sau else. Như vậy thế nào cũng có một trong hai lệnh được thực hiện và chỉ một mà thôi. Chương trình trên liên quan đến biểu thức điều kiện. Biểu thức điều kiện
là biểu thức lôgic (boolean), nó chỉ nhận giá trị hoặc true (đúng) hoặc false (sai), trong đó false < true. Những mệnh đề điều kiện được diễn tả bởi những biểu thức lôgic. - Biểu thức lôgic đơn Biểu thức lôgic đơn là hai biểu thức cùng kiểu được nối với nhau bởi một dấu quan hệ trong số các dấu quan hệ sau đây: > (lớn hơn) , = (bằng) , < (nhỏ hơn), <> (khác) , >= (lớn hơn hoặc bằng) , <= (nhỏ hơn hoặc bằng). - Biểu thức lôgic phức hợp Biểu
thức lôgic phức hợp là một biểu thức lôgic trong đó có những phép toán lôgic AND, OR, NOT, ... trên những biểu thức lôgic đơn. 5. Ghi nhớ 5.1. Lệnh ghép Nếu trong chương trình ta viết nhiều hơn một lệnh thì các lệnh đó phải để trong cặp từ khoá BEGIN và END và ta được một lệnh ghép. 5.2. Lệnh rẽ hai nhánh a. Lệnh rẽ hai nhánh dạng khuyết If điều kiện Then câu lệnh; Nếu điều kiện đúng thì câu lệnh sau then được thực hiện. Nếu điều kiện sai thì máy chuyển
sang câu lệnh tiếp theo. b. Lệnh rẽ nhánh dạng đầy đủ. If điều kiện Then câu lệnh 1 Else câu lệnh 2 ; Nếu điều kiện đúng thì câu lệnh 1 được thực hiện. Nếu điều kiện sai thì câu lệnh 2 được thực hiện. Chú ý sau câu lệnh 1 không có dấu chấm phảy (;) vì câu lệnh này chỉ kết thúc sau câu lệnh 2. Bài tập 1. Hãy lập bảng mô phỏng việc thực hiện chương trình giải phương trình bậc hai với các giá trị của a , b , c nhập vào như sau: • lần thứ nhất a = 1, b = 14, c = 49 •
lần thứ hai a = 1, b = -2, c = -15, • lần thứ ba a = 2, b = 1, c = 3. 2. Viết chương trình cho máy nhận vào hai số nguyên bất kì. Sau đó máy hỏi tổng bình phương của chúng là bao nhiêu? Nếu ta nạp đúng đáp số thì máy thông báo "Bạn đã làm đúng đáp số". Nếu sai máy thông báo "Bạn làm sai rồi, đáp số là:" và máy cho hiện đáp số lên màn hình. 3. Viết thuật giải và chương trình giải phương trình bậc nhất ax + b = 0 với mọi số thực a, b. 4. Viết chương trình kiểm tra xem 1 năm nào
đó có là năm nhuận không? Chú ý. Năm nhuận là bội của 4 trừ những năm bắt đầu thế kỉ như 1900, 2000, ... những năm này chỉ nhuận khi nó chia hết cho 400. Lệnh rẽ nhiều nhánh 1.Tình huống công việc Lịch làm việc trong tuần của đội dự tuyển thi học sinh giỏi Tin học. Biết rằng từ thứ 2 đến thứ 4 họ luyện tập. Thứ 5 họ được nghỉ. Thứ 6 họ thi đấu với các đội bảng A của các tỉnh. Thứ 7 họ được nghỉ. Lập chương trình để một người muốn xem công việc của một ngày nào đó trong tuần,
họ gõ vào một phím trong số các phím kí tự chữ số từ 2 đến 7, máy thông báo lên màn hình công việc của ngày đó. 2. Thuật giải Biến kí tự thu ; Bắt đầu Nhận vào (thu) ; CHỌN theo thu thuộc ‘2’ .. ‘4’ : Viết ra thông báo luyện tập ; ‘6’ : Viết ra thông báo thi chọn đội tuyển ; ‘5’ , ‘7’ : Viết ra thông báo nghỉ CÒN Thông báo thu không thuộc vào tập ‘2’ đến ‘7’ X. CHỌN ; Kết thúc. 3. Chương trình Program xemlichdoituyen ; Uses crt ; var thu :
Char ; BEGIN Clrscr ; Gotoxy (9,4); Writeln('Ban xem thu may trong tuan ? 2/3/4/5/6/7 '); thu := Readkey ; Case thu Of '2' .. '4' : writeln('Thu', thu:3,'luyen tap':11); '6' : begin Window (26,4,52,20); clrscr ; gotoxy(9,4); writeln(' Thu 6 thi dau voi cac doi ', bang A cua cac tinh chon doi tuyen. ') end; '5', '7' : writeln ('Thu', thu:3 , 'nghi':6) else Writeln('Ban go ra ngoai cac phim ‘, ‘tu 2 den 7 moi ban go lai '); End; writeln('
Chao tam biet ban ');readln; End. 4. Ghi nhớ 4.1. Kiểu kí tự a. Những khái niệm Tên chuẩn của kiểu kí tự là CHAR ; b. Một số hàm ORD (X) cho mã ASCII của X. Ví dụ Ord (‘a’) = 97 SUCC (X) cho kí tự đứng liền sau X. Ví dụ Succ (‘D’) = ‘E’ PRED (X) cho kí tự đứng liền trước X. Ví dụ Succ (‘E’) = ‘D’ UPCASE (X) cho kí tự viết hoa của X. Ví dụ Upcase (’a’) = ‘A’ (Không có hàm chuẩn đổi kí tự viết hoa sang kí tự viết thường) CHR (n) cho kí tự có mã ASCII bằng
n. Ví dụ Chr (65) = ‘A’ #n cho kí tự có mã ASCII bằng n. Ví dụ #65 = ‘A’. Viết #n thì không được có dấu cách giữa # và n (n phải là một số cụ thể). Readkey. Hàm này nhận một kí tự từ bàn phím và không đưa ra màn hình, không chờ gõ phím ENTER vì phím này cũng là một đối tượng được nhận vào qua hàm này. 4.2. Lệnh rẽ nhiều nhánh CASE biểu thức OF nhãn 1 : lệnh 1 ; nhãn 2 : lệnh 2 ; { . . . . . . . . . . . . ; } nhãn n : lệnh n ELSE lệnh n+1 END ; Nhãn của
lệnh CASE và biểu thức lựa chọn phải tương thích về kiểu và phải là kiểu vô hướng (trừ kiểu số thực). Kết thúc lệnh CASE là END với dấu chấm phẩy (;) hoặc không có dấu chấm phẩy (;) nếu liền ngay sau đó lại có từ khoá ELSE của đoạn lệnh khác. Trước ELSE không có dấu chấm phẩy (;). Bài tập 1. Lập trình để thông báo những mốc lịch sử của nước ta từ năm 1945 đến nay, khi một người gõ vào một số có hai chữ số là hai chữ số sau cùng chỉ năm từ 1945 đến 1995 thì máy thông báo lên
màn hình sự kiện lịch sử đáng ghi nhớ của dân tộc Việt Nam. Chẳng hạn 45 Cách mạng tháng 8 thắng lợi. Từ 46 đến 54 Kháng chiến chống Pháp. Từ 55 đến 74 đánh Mỹ. 75 thống nhất đất nước. 76 đến 95 cả nước đi lên CNXH. 2. Giả sử hôm nay là thứ ba. Lập chương trình để ta nhập vào từ bàn phím số ngày tiếp theo thì máy sẽ trả lời hôm đó là thứ mấy. 3. Viết chương trình theo yêu cầu dưới đây: Khi chạy chương trình trên màn hình xuất hiện năm dòng chữ như sau: 1 Tim so be
nhat trong ba so 2 giai phuong trình ax + b = 0 3 Tinh a mu x 4 Tinh logarit co so a cua x Bạn chọn công việc nào thì gõ vào phím số bên cạnh.Khi người ta gõ vào phím nào thì yêu cầu họ vào dữ liệu cần thiết để đưa lên màn hình kết quả tương ứng. Ví dụ người gõ vào số 2 thì hỏi giá trị của hệ số a và hệ số b rồi viết lên màn hình thông báo nghiệm của phương trình. Lặp với điều kiện trước và sau 1. Bài toán Lãi suất hàng tháng gửi tiết kiệm không kì hạn là 0,75%. Một
người gửi vào một số tiền ban đầu là a. Sau bao nhiêu tháng người đó đạt số tiền không nhỏ hơn b? 2. Thuật giải Để tính tiền lăi sau một tháng ta lấy số tiền hiện có lŕ A nhân với 0,75%. Ta có giá trị của biểu thức A * 0.0075 lŕ tiền lãi sau một tháng. Như vậy sau một tháng người đó có số tiền là A + A*0.0075 2.1 Thuật giải lặp với số lần định trước 3. Ghi nhớ 3.1. Khai báo hằng CONST tên hằng = giá trị của hằng ; Tên hằng tiếp đến là dấu bằng (=) rồi giá trị của
hằng và kết thúc là dấu chấm phẩy(;). 3.2. Lặp với điều kiện trước và sau a. Lệnh lặp với điều kiện trước - Cách viết WHILE điều kiện DO câu lệnh; - Thực hiện Máy kiểm tra điều kiện nếu điều kiện đúng thì câu lệnh được thực hiện. Thực hiện xong câu lệnh này, máy lại quay về kiểm tra điều kiện và quá trình lặp đi lặp lại cho tới khi điều kiện sai thì ra khỏi vòng lặp. b. Lệnh lặp với điều kiện sau - Cách viết REPEAT các câu lệnh UNTIL điều kiện; - Thực hiện Máy
thực hiện các câu lệnh giữa REPEAT và UNTIL, sau đó mới kiểm tra điều kiện. Nếu điều kiện sai thì máy lặp lại các câu lệnh trên. Quá trình lặp đi, lặp lại cho tới khi điều kiện đúng thì ra khỏi vòng lặp. Ta có thể tóm tắt câu lệnh lặp với điều kiện sau trong mệnh đề sau: chừng nào điều kiện còn sai thì câu lệnh còn được thực hiện. 4. Áp dụng a.Bài toán. Tìm ước chung lớn nhất của hai số nguyên dương m và n. b. Thuật giải Ta dùng ngôn ngữ giả mã lệnh để viết thuật giải
theo tinh thần trên. Biến nguyên không âm m , n ; Bắt đầu Lặp Nhận vào ( m , n ) ; Nếu ( m= 0 ) hoặc ( n = 0 ) Thì thông báo mời vào lại X.nếu ; Đến ( m > 0 ) vŕ ( n >0 ) ; Khi m <> n Lŕm Nếu m > n Thě m := m – n Còn n := n – m ; X. nếu ; X.khi ;Thông báo đáp số là m ; Kết thúc. c. Chương trình Program UCLN; Uses Crt ; Var m , n : Word ; BEGIN writeln ( ' cho 2 so nguyen duong ' ) ; Repeat Readln( m , n ) ; If ( m
= 0 ) or ( n = 0 ) Then Writeln ( ' moi vao lai ' ) ; Until ( m > 0 ) and ( n > 0 ) ; While m <> n DO If m > n Then m := m - n Else n := n – m ; Write ( ' UCLN cua chung la ' , m ) ; Readln END. Bài tập 1. Lập bảng mô phỏng việc thực hiện chương trình tìm UCLN của hai số nguyên dương (áp dụng 1) với m = 10, n = 16. 2. Chương trình sau đây đưa lên màn hình kết quả như thế nào? Program khongten ; Uses Crt ; Var i : integer ; BEGIN
ClrScr ; i := 15 ; While i > 1 do begin if i mod 2 = 0 Then i := i div 2 else i := i*3 +1 ; Write ( i : 5 ) ; end; Readln END 3. Viết chương trình tính tổng của các số khác không được nhập vào từ bàn phím. Điều kiện kết thúc là khi máy nhận được số 0. 4. Viết chương trình tính hai hình chiếu của hai cạnh góc vuông trên cạnh huyền của tam giác vuông khi cho máy nhận vào từ bàn phím cạnh huyền a và chiều cao h thuộc cạnh huyền của tam giác vuông
đó. Yêu cầu có một đoạn chương trình nhận vào a và h có kiểm tra điều kiện h <= a/2. 5. Tính tổng A. S1 = 1 + 1/2 + 1/3 + 1/4 + 1/5 + ... Yêu cầu là quá trình tính sẽ dừng lại khi 2 - s < 0,001. B. S2 = 1 - 1/2 + 1/4 - 1/6 + ... - 1/102 C. S3 = 1! +2! +3! + ... +10! D. S4 = 1 - 1/3 + 1/5 - 1/7 + ... + 1/n với điều kiện 1/ n < 0.0001 6. Nhận vào số tự nhiên n lớn hơn 100 và nhỏ hơn 60000. Tính số chữ số và tổng các chữ số của n. Giải phương trình 1/x - sinx
= 0 trên [ p/2, p ]. Với sai số 0,0001. Lặp một số lần định trước . Bài toán Trong đợt quyên góp sắt vụn để gây quĩ giúp các bạn nghèo có hoàn cảnh khó khăn, tổ 3 có 12 bạn, mỗi bạn nộp một khối lượng sắt vụn nào đó tính bằng kg. Viết chương trình cho máy nhận vào khối lượng sắt vụn của từng bạn và tính tổng khối lượng sắt vụn của cả 12 bạn trong tổ. 2. Thuật giải Ta dùng ngôn ngữ giả mã lệnh để viết thuật giải cho bài toán theo ý tưởng đã nói ở trên như sau: Biến thực
S , X ; Biến nguyên K ; Bắt đầu S := 0 ; Với K := 1 đến 12 Làm nhận vào ( X ) ; S := S + X X.với ; Thông báo S ; Kết thúc. 3. Chương trình Program SatVun ; Uses Crt ; Var S , X : Real ; K : byte ; BEGIN ClrScr ; S := 0 ; Writeln ( ‘ Nap vao khoi luong sat vun cua tung nguoi ‘ : 55 ) ; For K := 1 TO 12 DO Begin Write ( ‘ Nhap KLSV cua ban thu ‘ , k , ‘=’ ) ; Readln ( X ) ; S := S + X End ; Writeln ( ‘ Dap so ‘ , S : 9 : 2 ) ;
Readln END . 4. Ghi nhớ 4.1 Lặp với số lần định trước a. Lặp với số lần định trước theo chiều tăng của biến điều khiển chu trình FOR tên biến := biểu thức 1 TO biểu thức 2 DO câu lệnh ; Máy kiểm tra điều kiện biểu thức 1 không lớn hơn biểu thức 2, nếu điều kiện đó đúng thì máy lưu giữ giá trị của biểu thức 2 vào vùng đệm rồi biến điều khiển nhận giá trị của biểu thức 1 và máy thực hiện câu lệnh sau DO . - Sau đó máy kiểm tra điều kiện biến điều khiển bằng giá trị của
biểu thức 2 đã cất giữ. Nếu điều kiện này sai thì nó nhận giá trị tiếp theo giá trị hiện tại và thực hiện câu lệnh sau DO, quá trình này được lặp đi lặp lại đến khi thực hiện xong lệnh sau DO mà biến điều khiển có giá trị bằng giá trị của biểu thức 2 đã cất giữ thì vòng lặp kết thúc. b. Lặp với số lần định trước theo chiều giảm của biến điều khiển chu trình FOR tên biến := biểu thức 1 DOWNTO biểu thức 2 DO câu lệnh ; Thực hiện giống như lệnh trên, chỉ khác là biến điều khiển
nhận giá trị giảm dần chứ không phải tăng dần. c. Kiểu của biến và biểu thức ở vòng For Thực hiện giống như lệnh trên, chỉ khác là biến điều khiển nhận giá trị giảm dần chứ không phải tăng dần. c. Kiểu của biến và biểu thức ở vòng For Biến điều khiển chu trình, biểu thức 1, biểu thức 2 phải tương thích về kiểu, kiểu này phải lấy trong kiểu dữ liệu vô hướng ( trừ kiểu số thực) Ta có thể cho dừng vòng lặp bằng lệnh BREAK. Trong thân vòng lặp nếu gặp lệnh Break thì vòng lặp
dừng ngay tức khắc. 5. Áp dụng 5.1 Áp dụng 1 a. Bài toán Cho máy nhận vào n số thực. Tính biểu thức P / (1 + Q ) trong đó P là tổng của các số không vượt quá a, Q là tổng các số lớn hơn a. b. Thuật giải Hằng thực có giá trị bằng 20.02 a ; Hằng nguyên có giá trị bằng 15 n ; Biến thực p , q , x ; Biến nguyên k ; Bắt đầu p := 0 ; q := 0 ; Với k := 1 đến n làm Nhận vào ( x) ; Nếu x <= a thì P := p + x còn q := q + x ; X. nếu ; X.
với ; Viết ra giá trị biểu thức ( p / ( 1 + q ) ) ; Kết thúc. 5.2. Áp dụng 2 a. Bài toán Viết chương trình giải bài toán 100 con trâu 100 bó cỏ, một con trâu đứng ăn 5 bó cỏ một con trâu nằm ăn 3 bó cỏ , 3 con trâu già ăn 1 bó cỏ. Hỏi mỗi loại trâu có mấy con? . b. Thuật giải Ta dùng giả mã lệnh để viết như sau: Biến nguyên không âm td , tn ; Bắt đầu Với td := 0 đến 20 Làm Với tn := 0 đến 33 Làm Nếu 5*td+3*tn+(100-td-tn) div 3 =100 và (100-td-tn) mod 3 = 0
Thì viết ra ( td , tn , 100-td-tn ) ; X.nếu ; X.với ; X.với Kết thúc. Bài tập 1. Thực hiện ba yêu cầu sau đây: a. Thuật giải sau đây làm công việc gì? Thuật giải không tên ; Biến nguyên i ,j ; Bắt đầu Với i := 1 đến 9 Làm Với j := 0 đến 9 Làm viết ra ( i :4 , j ) X.với j ; X.với i ; Kết thúc. b. Hãy chuyển thuật giải trên thành chương trình Pascal và cho chạy chương trình. c. Hãy lập bảng mô phỏng việc thực hiện chương trình trên. 2.
Hãy lập bảng mô phỏng việc thực hiện chương trình trên. 3. Viết chương trình giải bài toán: Vừa gà vừa chó bó lại cho tròn 36 con 100 chân chẵn. Hỏi có mấy con chó, mấy con gà? 4. Viết chương trình để MTĐT nhận vào 10 số thực bất kì ( mỗi lần chỉ nhận một số). Sau 10 lần nhận vào máy thông báo số bé nhất, lớn nhất, trung bình cộng của chúng. 5. Viết chương trình để MTĐT tìm tất cả các số tự nhiên có ba chữ số. Biết rằng số đó chia cho 6 dư 2 và tổng các chữ số của nó bằng
20. 6. Viết chương trình cho MTĐT in ra màn hình các số có bốn chữ số mà tổng các chữ số hàng trăm và hàng ngàn bằng tổng các chữ số hàng chục và hàng đơn vị. Yêu cầu in từng trang màn hình. 7. Cho một số tự nhiên n lớn hơn 5. a. Tìm các số tự nhiên x, y, z sao cho n = x 3 + y 3 + z 3 b.Tìm các số tự nhiên x, y, z, t sao cho n = x 2 + y 2 + z 2 +t 2 c. Hãy tìm tất cả các bộ 5 số tự nhiên x1, x2, x3, x4, x5 sao cho số sau không nhỏ
hơn số trước và tổng của chúng bằng n. 8. Tìm các nghiệm nguyên dương của phương trình: a. 2x + 4y = 100. b. 3x + 5y = n với n > 7 c. Tổng quát ax + by = c với a, b, c là những số nguyên dương. Mảng Mục tiêu bài học: - Biết khai báo với mảng 1 chiều, 2 chiều. - Biết phân biệt địa chỉ ô nhớ và nội dung ô nhớ. Biết sử dụng vòng lặp để truy nhập đến địa chỉ từng phần tử để nhập thông tin. - Biết xử lý trên 1 số dòng 1 số cột của mảng 2 chiều sắp xếp được
mảng 1 chiều có thể lấy ví dụ về mảng nhiều chiều. Ta có bài toán sau Trong đợt quyên góp sắt vụn để gây quĩ giúp các bạn nghèo có hoàn cảnh khó khăn, tổ 3 có 12 bạn, mỗi bạn nộp một khối lượng sắt vụn nào đó tính bằng kg . Viết chương trình cho máy nhận vào khối lượng sắt vụn của từng bạn và tính tổng khối lượng sắt vụn của cả 12 bạn trong tổ. Tính xem có bao nhiêu bạn nộp nhiều nhất? |