- 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 đó để
Trang 1Thuậ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
Trang 2tiế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
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;
Trang 31 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ả
Trang 41 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');
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:
Trang 5• + 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.
• 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
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),
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
Trang 6Tá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
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 ;
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 a2, 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 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))
Ctrl-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:
Trang 7Tí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 ;
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
Program chunhat2;
Var k1, k2 : real;
Begin
Trang 85.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 ex 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) ;
Trang 9Cho 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:
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
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 đó
Trang 109 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.
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
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
Trang 11Bướ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
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 120o 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 = 90o 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)
Trang 12Nhữ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ướ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
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
Trang 13Ta 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:
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
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:
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ừ
Trang 142 đế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’
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 ');
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
Trang 152 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
Trang 163 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;
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 ;
Trang 171. 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
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
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 ;
Trang 18Writeln ( ‘ Nap vao khoi luong sat vun cua tung nguoi ‘ : 55 ) ;
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
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
Trang 19Nếu 5*td+3*tn+(100-td-tn) div 3 =100 và (100-td-tn) mod 3 = 0
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 ;
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 = x3 + y3 + z3
b.Tìm các số tự nhiên x, y, z, t sao cho n = x2 + y2 + z2 +t2
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?
Trang 20Với yêu cầu tính tổng khối lượng sắt vụn của cả 12 bạn trong tổ, chúng ta dùng một biến X để nhận vào khối lượng sắt vụn của từng bạn, nhận xong cho một bạn nào đó ta cộng dồn X vào S, sau đó ta lại dùng X để nhận vào khối lượng sắt vụn của bạn khác Nhưng làm thế nào để tính xem có bao nhiêu bạn nộp tiền nhất, bạn có thể khai báo 12 biến để lưu khối lượng sắt vụn của 12 bạn, nhưng nếu số bạn lên tới hơn 100 thì làm thế nào? Để trả lời câu hỏi đó chúng ta cần biết một kiểu dữ liệu mới, đó là kiểu mảng, gồm những phần sau:
1.2 Cách khai báo mảng một chiều
VAR tên mảng : ARRAY [kiểu chỉ số] OF kiểu phần tử ;
Trong đó: VAR, ARRAY và OF là từ khoá,
Tên biến mảng là một tên gọi tự đặt theo qui tắc đặt tên
Kiểu phần tử là kiểu mà các phần tử của mảng lưu trữ trong từng ô nhớ
Kiểu chỉ số:Chỉ số thường dùng kiểu dữ liệu miền con: cận đầu cận cuối, cận đầu, cận cuối xác định giá trị chỉ số đầu và chỉ số cuối của mảng
Ví dụ
VAR SV : ARRAY [1 12 ] OF REAL ;
M : ARRAY [ 'a' 'k' ] of Integer ;
A, B : ARRAY [5 19 ] of Word ;
H : ARRAY[ Char ] of Boolean ;
2 Truy nhập đến một phần tử của mảng một chiều.
Tên mảng [biểu thức chỉ số cần truy nhập đến] ;
Ví dụ mảng SV đã khai báo ở trên, sau khi nhập các phần tử vào các địa chỉ, ta có hình ảnh như sau:
8.5 10.5 6.5 8.5 11.5 9.5 15.5 11.5 15.5 15 15.5 13.5
Ta có SV [2] = 10.5 ; SV[ 11 MOD 4 ] = 6.5 ; SV [ SUCC (9) ] = 15
3 Ghi nhớ
3.1 Khai báo và truy nhập mảng một chiều
a Khai báo mảng một chiều
VAR TênMảng : ARRAY [kiểu chỉ số ] OF kiểu phần tử ;
b Truy nhập đến một phần tử của mảng
TênMảng [ biểu thức chỉ số của phần tử cần truy nhập]
Biểu thức chỉ số phải cho giá trị thuộc vào tập các giá trị chỉ số của mảng
3.2 Khai báo biến có giá trị ban đầu
Để gán giá trị ban đầu cho biến ngay khi khai báo nó, ta viết như sau:
CONST TênBiến : Kiểu của biến = (Các giá trị của biến) ;
4 Áp dụng
Các số hạng F của dãy Fibonacci được thiết lập theo quy tắc như sau:
F(1) = F(2) = 1;
F(i) = F(i - 1) + F(i - 2) với i > 2
Hãy lập chương trình để viết ra 48 số hạng đầu của dãy Fibonacci, sau đó tính tổng của các số hạng này
Cách viết n số hạng đầu của dãy Fibonacci là rõ ràng bởi vì quy tắc thiết lập số hạng thứ n đã được cho theo công thức quy nạp ở trên
Ta lưu trữ các số hạng này vào mảng một chiều để có thể truy nhập từng phần tử theo tên mảng và chỉ số của phần tử đó
Ta có chương trình như sau:
Trang 21Writeln (' so hang thu ' , i:3 , ' cua day la ' , F[i] :12 : 0) ;
Write (' Tong ' , n , ' so hang dau tien la ' , s : 13 : 0) ;
2 Viết chương trình cho máy làm những việc sau:
a Nhận vào mảng A [1 n] (n > 9), các phần tử là số thực lớn hơn -2 và nhỏ hơn 2
b Tính trung bình cộng của các phần tử dương của mảng
c So sánh số phần tử dương với số phần tử âm của mảng
d Tìm phần tử nhỏ nhất và lớn nhất của mảng Chỉ ra vị trí và giá trị của chúng
e Tính a[1] + a[2]2 + a[3]3 + + a[n]n
3. Cho n số thực (n > 7) a1, a2, , an Hãy tính
4. Có n người xếp hàng một để mua hàng Thời gian người bán hàng phục vụ khách hàng thứ i là ti Viết chương trình nhận vào các ti và tính thời gian ci mà khách hàng thứ i phải chờ để bắt đầu đến lượt mình
5. Cho A [1 n] (n >7), các phần tử là số tự nhiên với A [i] = i2 + 2
a Tính tổng các căn bậc 2 của các phần tử chia cho 7 dư 3
b Tìm các phần tử là số nguyên tố của mảng Chỉ ra vị trí và giá trị của chúng
c Xây dựng mảng B có các phần tử là các số nguyên tố của mảng A
6 Có các loại tiền 1.000, 2.000, 5.000, 10.000, 20.000 và 50.000 đồng Viết chương trình in lên màn
hình cách trả tiền cho n nghìn đồng sao cho tổng số tờ giấy bạc là nhỏ nhất
7. Có n thiết bị dùng điện với điện trở tương ứng là R1, R2, , Rn
Tính điện trở tương đương của n thiết bị trên khi:
a Các thiết bị mắc song song với nhau
b Các thiết bị mắc nối tiếp với nhau
1 Khai báo mảng hai chiều
VAR
TênMảng : ARRAY [kiểu chỉ số dòng , kiểu chỉ số cột] OF kiểu phần tử của mảng;
Tên mảng được viết theo quy tắc đặt tên
2 Truy nhập đến một phần tử của mảng
Trang 22TênMảng[ biểu thức chỉ số dòng , biểu thức chỉ số cột ]
Đương nhiên những biểu thức này phải cho giá trị thuộc vào kiểu của chỉ số của nó của mảng một chiều
3 Duyệt các phần tử của mảng hai chiều
Biến có kiểu là kiểu chỉ số dòng của mảng hoặc nhận kiểu chỉ số dòng của mảng là một miền con
Biến có kiểu là kiểu chỉ số cột của mảng hoặc nhận kiểu chỉ số cột của mảng là một miền con
Dùng hai vòng FOR lồng nhau để duyệt lần lượt các phần tử của mảng thông qua chỉ số của chúng
4 Áp dụng
4.1 Bài toán Một lớp có 4 tổ học tập Bài kiểm tra chất lượng môn Tin có điểm từ 3 đến 10 (điểm là một số
nguyên, không ai bị điểm 0, 1, 2) Tính điểm trung bình cho từng tổ, tính điểm trung bình cho cả lớp Cả lớp
có bao nhiêu bạn bị điểm dưới 5, bao nhiêu bạn được điểm 10
4.2 Ý tưởng thuật giải
Ta dùng biến nguyên không âm I , J , N , S , Ni , Si
Trong đó I và J dùng để duyệt theo dòng và cột của mảng D
Biến Ni để lưu giữ số người của tổ i, biến Si để lưu giữ số điểm của tổ i Để tính điểm trung bình cho tổ i ta lấy Si chia cho Ni
Biến N để lưu giữ số người của cả lớp, nó được cộng dồn các Ni và lưu giữ ở N
Biến S để lưu giữ số điểm của cả lớp, nó được cộng dồn các Si và lưu giữ ở S Để tính điểm trung bình cho lớp ta lấy S chia cho N
Sau khi tính điểm trung bình cho từng tổ và cho cả lớp, ta dùng biến Ni để lưu giữ tổng số điểm dưới trung bình của cả lớp, biến Si để lưu giữ tổng số điểm 10 của cả lớp
4 Chương trình
Program TinhDiem ;
Uses Crt ;
Var D : Array [1 4 , 3 10 ] Of Byte ;
i , j , n , Si, Ni : Byte ; S : Word ;
Trang 23Writeln (' So diem 10 cua lop la ' , Si : 3) ;
3 Mảng A có n dòng n cột các phần tử là những số thực (n >4)
Tính tổng các phần tử nằm trên đường chéo chính
Tính tổng các phần tử nằm trên đường chéo phụ
Tính tổng các phần tử nằm song song sát trên đường chéo chính
Tính tổng các phần tử nằm song song sát dưới đường chéo chính
Tính tổng các phần tử nằm song song sát trên đường chéo phụ
Tính tổng các phần tử nằm song song sát dưới đường chéo phụ
Tính tổng các phần tử nằm trên đường chéo chính và ở phía trên đường chéo chính
h Tính tổng các phần tử nằm ở phía dưới đường chéo phụ
4. Lập chương trình cho máy tính viết lên màn hình tam giác PASCAL gồm K+1 dòng là hệ số của khai triển nhị thức Niu Tơn (x+y)n với n nhận các giá trị từ 0 đến K K là một số tự nhiên không quá 12 nhận vào từ bàn phím Ví dụ k=4 thì màn hình sẽ in ra 5 dòng như sau
Ý tưởng của thuật giải sắp xếp dưới đây là
Bước 1 Ta sẽ chọn phần tử nhỏ nhất trong các phần tử từ phần tử thứ nhất đến phần tử thứ N, rồi tráo đổi nó
với phần tử thứ nhất
Bước 2 Ta sẽ chọn phần tử nhỏ nhất trong các phần tử từ phần tử thứ hai đến phần tử thứ N, rồi tráo đổi nó
với phần tử thứ hai
Tương tự như vậy cho các bước tiếp theo từ bước 3 đến bước N
Ta xét cho một bước tổng quát thứ i nào đó (i nhận giá trị từ 1 đến N)
Bước i Ta sẽ tìm chỉ số K của phần tử nhỏ nhất trong các phần tử từ phần tử thứ i đến phần tử thứ N, rồi tráo
đổi nó với phần tử thứ i
3 Chương trình
Để tráo đổi hai phần tử cho nhau, ta cần thęm phần tử TG (trung gian) thứ ba
Program SapXep ;
Trang 24Writeln(' Cac phan tu da duoc sap xep la ') ;
For i := 1 To n Do Write (m [ i ] : 9 : 2) ; Readln
END
4 Ghi nhớ
Sắp xếp bằng cách chọn trực tiếp
Có nhiều thuật giải sắp xếp một mảng Trong chương trình trên ta dùng thuật giải chọn trực tiếp Giả sử mảng
có N phần tử, ta thực hiện như sau:
Với mỗi vòng lặp theo i từ 1 đến N - 1 ta cho K := i ; rồi dùng vòng lặp theo j (lồng vào bên trong vòng lặp theo i) j duyệt từ i + 1 đến N để tìm chỉ số K của phần tử nhỏ nhất trong các phần tử từ phần tử thứ i đến phần
tử thứ N, bằng cách nếu gặp phần tử thứ j nhỏ hơn phần tử có chỉ số đang lưu giữ ở K thì gán K := j ;
Hết vòng lặp theo j thì tráo đổi phần tử thứ K với phần tử thứ i (nếu K > i)
1 Viết chương trình nhận vào chiều cao của các bạn Mai, Lan, Cúc, Thu, Bích Thuỷ, Hồng Nhung, Anh Sắp xếp và in ra màn hình chiều cao của các bạn theo thứ tự tăng dần Yêu cầu khai báo kiểu liệt kê tương ứng với tên các bạn để làm chỉ số cho mảng lưu trữ chiều cao của họ
2 Viết chương trình cho máy nhận vào mảng A có n phần tử là những số thực (n > 9) Xây dựng mảng B các phần tử là những số nguyên được tạo thành từ các phần tử của mảng A theo cách B[i] là trị tuyệt đối của phần nguyên của A[i] Sắp xếp và in ra mảng A, mảng B theo thứ tự tăng dần
3 Ba khối lớp 10, 11, 12 nộp sắt vụn, các lớp đặt tên theo khối bắt đầu từ A Viết chương trình cho máy nhận vào lượng sắt vụn của từng lớp theo từng khối Sau đó sắp xếp số lượng sắt vụn của các lớp trong từng khối theo thứ tự giảm dần
4 Cho mảng m dòng n cột (m > 5, n > 6), các phần tử là những số nguyên ngẫu nhiên từ 0 đến 30000 Cho máy chọn ra các phần tử là số nguyên tố và sắp xếp chúng theo thứ tự tăng dần
Chương trình con
Mục tiêu bài học:
- Biết chia bài toán thành những bài toán nhỏ hơn, trong số các bài toán nhỏ hơn có thể được chia thành những bài toán nhỏ hơn nữa, sao cho mỗi bài toán con chỉ làm cụ thể 1 công việc nào đó.