4 / Cấu trúc lặp có điều kiện và không điều kiện Iteration Trong chơng trình các lệnh đợc viết theo thứ tự từ trên xuống dới.. Các kí tự từ 0 đến 31 là các kí tự điều khiển , không in
Trang 1I / Định nghĩa giải thuật : Giải thuật là một hệ thống chặt chẽ và rõ
ràng các qui tắc nhằm xác định một dãy các động tác trên những đối ợng , sao cho sau một số hữu hạn bớc thực hiện các động tác này ta thu
t-đợc kết quả mong muốn
II / Các đặc tr ng của giải thuật :
+ Lệnh kiểm tra điều kiện
+ Lệnh chuyển không điều kiện , lệnh chuyển có điều kiện
+ Lệnh lặp lại
+ Kết thúc
2 / Phơng pháp sơ đồ khối :
+Dùng các hình vẽ mô tả các động tác , các mũi tên chỉ thứ tự thựchiện các động tác
Thí dụ về một số thuật giải thờng gặp :
1 / Trao đổi giá trị của 2 biến A và B thông qua biến trung gian
2,3
Điều
kiện
Lệnh 1 Kết
Trang 2B1 NhËp gi¸ trÞ cho A vµ B
B2 C lÊy gi¸ trÞ cña A
B3 A lÊy gi¸ trÞ cña B
B4 B lÊy gi¸ trÞ cña C
Trang 3B5 NÕu B=0 vµ A <>0 th× B11
B6 G¸n d cña phÐp chia A cho B vµo biÕn D ( D = A mod B )
B7 NÕu D = 0 th× chuyÓn sang B10
B8 G¸n A = B ; B = D ; D = A mod B chuyÓn vÒ B7
B9 Th«ng b¸o UCLN kh«ng tån t¹i , chuyÓn vÒ Bkt
B10 Th«ng b¸o kÕt qu¶ : ¦íc sè chung lín nhÊt lµ sè B , chuyÓn vÒ BktB11 Th«ng b¸o kÕt qu¶ : ¦íc sè chung lín nhÊt lµ sè A
Trang 4A := B
B := D
D := A mod B
B_khái niệm sơ giản về kiểu dữ liệu
Các thông tin trong thực tế cần xử lý rất đa dạng Cần mô hình hoá cácthông tin này để việc quản lý và xử lý nó thuận lợi Mọi ngôn ngữ lậptrình đều xây dựng một số kiểu dữ liệu cơ sở , và với phơng tiện củangôn ngữ này có thể tạo thành những kiểu dữ liệu phức tạp hơn từ cáckiểu cơ sở ( ta nói ngôn ngữ này có tính cấu trúc trong tổ chức dữliệu )
Thí dụ trong ngôn ngữ Pascan có một số kiểu dữ liệu cơ sở : Kiểu số nguyên ( Integer ), kiểu số thực ( Real ), kiểu kí tự ( Char ), kiểulôgíc (Boolean), kiểu vô hớng liệt kê ( Enumerated scalar ) , kiểu đoạncon ( Subrange ) , kiểu xâu kí tự ( String )
Trong Pascan còn có những kiểu dữ liệu có cấu trúc : Kiểu mảng( Array ), kiểu tập hợp ( Set of ) , kiểu bản ghi ( Record ) , kiểu File ,kiểu con trỏ và những kiểu dữ liệu phức hợp nh : Kiểu danh sách , kiểuStack , kiểu Queue , kiểu đồ thị , kiểu cây
Thí dụ để biểu diễn thông tin về điểm số các môn Toán , Lý,Hoá của 1 lớp học có thể tổ chức trên kiểu Mảng có các phần tử là cácRecord nh sau :
Type Hocsinh = Record
Lophoc = Array[1 50] of Hocsinh;
C_ Các cấu trúc điều khiển
Ngôn ngữ lập trình còn cung cấp cho ngời lập trình những công cụ diễn đạt thuật toán đó là các cấu trúc điều khiển ( Control Struture ) Các cấu trúc điều khiển cơ bản là :
1 / Phép gán ( Assignment )
2 / Cấu trúc tuần tự ( Sequential )
3 / Cấu trúc lựa chọn rẽ nhánh ( Selection )
4
Trang 54 / Cấu trúc lặp có điều kiện và không điều kiện ( Iteration )
Trong chơng trình các lệnh đợc viết theo thứ tự từ trên xuống dới Trong
đoạn lệnh không chứa lệnh rẽ nhánh hoặc lệnh lặp sẽ theo nguyên tắc thứ tự : Lệnh nào viết trên đợc thực hiện trớc , viết dới đợc thực hiện sau
a) Loại 1 : Trong khi điều kiện thoả mãn thì thực hiện nhóm lệnh
b) Loại 2 : Thực hiện nhóm lệnh cho đến khi điều kiện không đợc thoảmãn
c) Loại 3 : Thực hiện nhóm lệnh một số lần định trớc
d )Loại 4 : Thực hiện vô hạn lần nhóm lệnh hoặc 1 phần nhóm lệnh nếu không gặp lệnh thoát khỏi vòng lặp
D - Yêu cầu chung khi viết chơng trình
Sau khi cân nhắc dữ liệu và thuật giải , chuyển sang viết chơngtrình Chúng ta cần trả lời lại một lần nữa các câu hỏi :
+ Mục đích của chơng trình là gì ?
+ Dữ liệu và thuật giải đã hợp lý cha ? (Câu hỏi này còn cần trả lờitrong suốt quá trình viết và cải tiến chơng trình )
+ Dàn bài chung ( những nét lớn ) của chơng trình ?
+ Tại sao lại tiến hành nh vậy ? Có thể làm khác đợc không ?
Cuối cùng , bắt tay vào viết chơng trình , cần tiến hành các bớc sau :
1 / Nhập dữ liệu Phơng pháp nhập phải đúng yêu cầu đề ra
2 / Kiểm tra lại dữ liệu đã nhập , điều chỉnh lại bớc 1 nếu thấy còn saisót
4 / Thông báo tình trạng dữ liệu nếu dữ liệu cho có sai sót
5
Trang 65 / Viết chơng trình chính gồm các công việc nào Chú ý tạo Menu đểtrình bày giao diện giữa ngời sử dụng và kết quả chơng trình trên mànhình.
6 / Theo từng phần việc đã xác định trong chơng trình chính , lần lợtviết các chơng trình con ( Procedure và Function ) Viết đợc chơng
trình con nào cần thử nghiệm ngay ch ơng trình con đó
7 / Đa thông tin ra ( kết quả của bài toán ) theo đúng yêu cầu đề ra
8 / Thử nghiệm lại với dữ liệu nhỏ sau đó là các dữ liệu có giá trị đặcbiệt , rồi đến bộ dữ liệu lớn hơn nhng đã biết truớc kết quả , cuối cùngnếu có điều kiện cần so sánh kết quả của các cách , các bài giải khácnhau của bài toán này
9 / Cải tiến lại chơng trình Chú ý lu giữ lại chơng trình cũ trớc khi cảitiến
10 / Lu giữ chơng trình đúng qui cách , bảo đảm sau này chơng trình
có thể chạy lại nh lần đã thử nghiệm thành công nhất Những chi tiếtcuối cùng vừa cải tiến nhng không thành công , phải loại bỏ khỏi chơngtrình
Viết chơng trình với tinh thần nh trên , có thể sẽ tạo hiệu quả tốtcho chơng trình hiện thời và tăng cờng phong cách lập trình sáng sủa rõràng của từng ngời sau này
Bài tập về nhà
1 ) Nêu thuật toán giải phơng trình bậc 2
2 ) Nêu thuật toán giải hệ phơng trình bậc nhất 2 ẩn
3 ) Nêu thuật toán sắp xếp giảm 1 dãy số
4 ) Để tìm Ước số chung lớn nhất của 2 số , có thể dùng thuật toán Ơclit nhsau :
(a,b) = ( a,b-a) = = ( d,0) = d ( Ta luôn giả sử b>a) Hãy trìnhbày thuật toán này
5 ) Vẽ sơ đồ khối cho các thuật toán ( 2,3,4,7, 11 ) đã diễn tả bằng ngônngữ nêu ở trên
6 ) Để khẳng định số N có là số nguyên tố hay không có thể dùng địnhnghĩa số nguyên tố : Cho i nhận các giá trị từ 2 đến N div 2 , nếu N modi=0 thì N là hợp số , ngợc lại nếu không có một giá trị i nào để N mod i =
0 thì N là nguyên tố Trình bày thuật toán bằng sơ đồ khối
7 ) Để tìm số nguyên tố < N có thể dùng thuật toán sàng érastosthène
nh sau : Xoá 1, trong phạm vi từ 2 tới căn bậc hai của N , tìm số nguyên
d-ơng k nhỏ nhất cha bị xoá rồi xoá các bội của k nhỏ hơn N bắt đầu từbình phơng của k Các số còn lại cha bị xoá chính là các số nguyên tốnhỏ hơn N Trình bày thuật toán bằng sơ đồ khối
8 ) Có 6 đội bóng A,B,C,D,E,F thi đấu để tranh giải vô địch ( đấu vòng
1 )
Đội A đã đấu với đội B và C
Đội B đã đấu với đội D và F
Đội E đã đấu với đội F và C
6
Trang 7Mỗi đội chỉ đấu với đội khác 1 trận trong 1 tuần Hãy nêu thuật toán lập lịch thi đấu sao cho các trận còn lại sẽ đợc thực hiện trong thời gian ngắn
nhất
………
………
………
………
………
………
………
………
………
………
………
………
………
………
………
………
………
………
………
………
………
………
………
………
………
………
………
………
………
………
………
………
………
………
………
………
………
………
………
………
………
………
………
7
Trang 8………
………
………
………
………
………
………
………
………
………
………
………
………
………
………
………
………
………
………
………
………
………
………
………
………
………
………
………
………
………
………
………
………
………
………
………
………
……… ………
………
………
………
………
………
………
………
8
Trang 9………
………
………
………
………
………
………
………
………
………
………
………
………
………
………
………
………
………
………
………
………
………
………
………
………
………
………
………
………
………
………
………
………
………
………
………
………
………
………
………
………
………
………
………
………
9
Trang 10………
………
………
………
………
………
………
………
………
………
………
………
………
………
………
………
………
………
………
………
………
………
………
………
………
………
………
………
………
………
………
………
………
………
………
………
………
………
………
………
………
………
………
………
10
Trang 11………
………
………
………
………
………
………
………
………
………
………
………
………
………
………
………
………
………
………
………
………
………
………
………
………
………
………
………
………
………
………
………
………
………
………
………
………
………
………
………
………
………
………
………
………
11
Trang 12………
………
………
………
………
………
………
………
………
………
………
………
………
………
………
………
………
………
………
………
………
………
………
………
………
………
………
………
………
………
………
………
………
………
………
………
…
Ngày : 21 /11/2015
Chủ đề 2 Làm quen với PAScaL
(Tiết 4-5-6)
A - Bắt đầu từ khái niệm
I / Giới thiệu về ngôn ngữ PASCAL :
PASCAL là một trong những ngôn ngữ lập trình cấp cao đợc giáo s Niklaus Wirth ở trờng Đại học Zurich ( Thuỵ sĩ ) thiết kế và công bố vào
12
Trang 13năm 1971 ( Bản tóm tắt chỉ có 29 trang ! ) Sau đợc sửa đổi trong năm
1972 và ngày càng đựơc chuẩn hoá , đến nay trở thành ngôn ngữ phổcập trong dạy lập trình cũng nh đợc ứng dụng rộng rãi trên các máy vitính
Ngôn ngữ Pascal nhanh chóng có ảnh hởng sâu rộng và chiếm đợccảm tình của những ngời lập trình vì nhiều nguyên nhân ; trong đó
có nguyên nhân đáng kể là tính cấu trúc chặt chẽ và khoa học Tínhcấu trúc của ngôn ngữ này thể hiện trên 3 mặt :
1) Tổ chức dữ liệu có tính cấu trúc
2) Xây dựng đợc đầy đủ các cấu trúc điều khiển để thực hiệngiải thuật
3) Tạo cho chơng trình khả năng cấu trúc
Vì vậy khi lập trình , cần cố gắng khai thác hết sức mạnh củangôn ngữ này về phơng diện cấu trúc , nhằm đạt tới các bài giải toán cóhiệu suất cao
II / Những khái niệm cần thiết :
If then Else , Case of ,
For to do , For downto do , While do , Repeat until
13
Trang 14With , goto , Exit, Halt ,Forward ,And , or, xor ,not, in , div , mod ,SHL ,SHR
3 ) Tên Là dãy các kí tự chữ cái hoặc chữ số và dấu gạch nối dùng để
xác định các đại lợng khác nhau trong chơng trình
Boolean , Char , Integer , Real , Byte , Text
False , True , MaxInt ,
Abs , Chr , Cos , Sin , Arctan , Eof , Eoln
Exp , Ln , Odd , Ord ,
Round , Trunc , Sqr , Sqrt , Pred , Succ,
Dispose , New , Close,Get , Put , Read , Readln , Write , Writeln ,Reset , ReWrite
Những qui định về kiểu số nguyên :
+ Không gán trị vợt quá phạm vi của kiểu
+ Các chữ số phải viết liền nhau
+ Số âm : phải đặt dấu trừ ngay sát chữ số đầu tiên của số
+ Không đợc sử dụng dấu chấm thập phân
+ Để viết số dới dạng cơ số 16 ( dạng Hexa ) đặt dấu $ sát chữ số
đầu
Các phép toán ( operater ) :
a) Phép toán số học :
Cộng : + Cho kết quả là số nguyên
Trừ : - Cho kết quả là số nguyên
Nhân : * Cho kết quả là số nguyên
Chia : / Cho kết quả là số thực
Div : Cho thơng nguyên của phép chia
Mod : D nguyên của phép chia
14
Trang 15là Real ; kết quả của mọi phép toán trên Extended là Extended
III / Kiểu Boolean :
Kiểu Boolean chỉ có 2 giá trị : True và False ( trong đó False <True )
Một giá trị kiểu Boolean chiếm 1 Byte bộ nhớ
Các phép toán lôgic trên kiểu Boolean :
X = True > Not ( x ) = False
X = False > Not ( x) = True
15
True FalseTrue True TrueFalse True False
True FalseTrue True False
False False False
True FalseTrue False True
False True False
Trang 16IV / Kiểu Kí tự : ( Kiểu Char )
Một kí tự chiếm 1 byte bộ nhớ Mỗi kí tự tơng ứng với 1 mã số , ghi trongbảng mã ASC I I (American Standar Code Information Interchange ) Có tấtcả 256 kí tự đánh số từ Mã số 0 tới mã số 255 Vậy kiểu kí tự có 256 giátrị Các kí tự từ 0 đến 31 là các kí tự điều khiển , không in ra đợc ,chúng dùng để điều khiển quá trình vào , ra các thiết bị ngoại vi
Thí dụ : Kí tự có mã số 13 báo hiệu hết dòng trên màn hình và máy in
Kí tự có mã số 10 chuyển con trỏ màn hình xuống đầu dòng dới ,
và chuyển đầu kim in xuống đầu dòng in tiếp theo
Kí tự có mã số 7 làm phát chuông kêu
Chú ý :
+ Để biểu diễn kí tự , phải đặt kí tự trong dấu nháy Thí dụ :
‘a’ ‘A’ ‘]’ hoặc dùng hàm Char thí dụ : Char(97) , Char(65) ,Char(93) hoặc dùng kí hiệu #97 , #65 , #93
Sau đây là 1 chơng trình nhỏ hiện các kí tự và mã số của chúng lênmàn hình :
V / Kiểu Xâu kí tự : ( Kiểu String )
Xâu kí tự là dãy các kí tự đặt giữa 2 dấu nháy đơn Số kí tự của xâukhông quá 255
Các phép toán trên xâu kí tự sẽ đề cập ở phần sau Có thể tạo ra kiểuxâu kí tự có độ dài n ( 1<=n<255) bằng khai báo
Type Tên_Xâu = String[n];
Var Tên_biến : Tên_xâu;
Trang 17Type Tên_kiểu = Array[ ′A ′ ′ K′] of
Mỗi phần tử có chỉ số (i,j) của mảng 2 chiều ( mảng A với chỉ số là cặp
số nguyên chẳng hạn đợc kí hiệu A[i,j] trong đó i là chỉ số hàng ,j là chỉ số cột
Nh vậy việc duyệt các giá trị của các phần tử của mảng rất dễ dàng Song cần lu ý biến chỉ số của mảng không đợc vợt ra ngoài phạm vi đã khai báo Thí dụ Mảng A khai báo có 10 phần tử với chỉ số từ -5 đến 4 thì kí hiệu A[5] là phạm lỗi
Nhợc điểm của kiểu mảng là tốn bộ nhớ do khai báo ban đầu phải lờng
tr-ớc mọi giá trị của dãy nào đó đều đợc đa vào mảng , nên kích thtr-ớc mảng
sẽ lớn , nhng thực tế có thể không dùng hết các phần tử của mảng đã khai báo
D - Một số hàm thông dụng
1) ABS(x) : giá trị tuyệt đối của x có kiểu nh x
2) SQR(x) : Bình phơng của x có kiểu nh x
3) SQRT(x) : Căn bậc hai của x có kiểu Real
4) Sin(x) : sin của x có kiểu Real
5) Cos(x) : côsin của x có kiểu Real
6) Arctan(x): a rctg của x có kiểu Real
7) Ln(x) : Loga cơ số e của x có kiểu Real
8) Exp(x) : cho e x
9) Random(n) : Cho một số nguyên ngẫu nhiên từ 0 tới n-1 ( n nguyên )10) Odd (n) : cho giá trị True nếu n lẻ ; cho giá trị False nếu n chẵn 11) Round(x) : là số nguyên làm tròn của số thực x
12) Trunc(x) : là số nguyên ,bằng phần nguyên của số thực x
13) Int(x) : là số thực , bằng phần nguyên của số thực x
14) Frac(x) : là số thực , bằng phần thập phân của số thực x
Với các kiểu dữ liệu vô hớng đếm đợc ( Kiểu số nguyên :Integer,Byte, LongInt, ShortInt, Word, Kiểu Lôgic : Boolean, Kiểu kí tự : Char ) có
17
Trang 18quan hệ thứ tự nên còn đợc xây dựng các hàm sau đây : ORD , PRED , SUCC
Thí dụ :
ORD(10) = 10 , PRED(10) = 9 , SUCC(10) = 11
ORD(‘B’) = 66 , PRED(‘B’) =‘A’ , SUCC(‘B’) =‘C’
Type Tên_kiểu : Kiểu_hằng ;
Var Tên_biến : Kiểu_biến;
Type Tên_kiểu : Kiểu_hằng ;
Var Tên_biến : Kiểu_biến;
Type Tên_kiểu : Kiểu_hằng ;
Var Tên_biến : Kiểu_biến;
Trang 19Label Tên_nhãn;
Const Tên_hằng = Giá_trị_của_hằng;
Type Tên_kiểu : Kiểu_hằng ;
Var Tên_biến : Kiểu_biến;
Begin
(* Phần thân của hàm gồm các lệnh nào đó *)End ;
BEGIN
(* Thân của chơng trình chính gồm các lệnh , trong đó có cảlệnh gọi thủ tục và hàm *)
END.
Chú ý : Khi khai báo hằng hoặc biến , máy sẽ cấp phát vùng nhớ cho
chúng Giá trị trong vùng nhớ này chính là giá trị của hằng và biến tơngứng Thí dụ
thì x đợc cấp phát vùng nhớ 2 Byte , Ch đợc cấp phát vùng nhớ 1 Byte , S
đợc cấp phát vùng nhớ 31 Byte , y đợc cấp phát vùng nhớ 4 Byte , nam đợccấp phát vùng nhớ 1 Byte
F - Bớc đầu sử dụng phần mềm TURBO PASCAN 7.0
TURBO PASCAN là phần mềm nhằm soạn thảo, sửa chữa , biên dịch và chạy chơng trình
Để khởi động TURBO PASCAN 7.0 cần có tối thiểu 2 File
+ Turbo.EXE : 403.655 Kb
+ Turbo.TPL ( Chứa các Unit chuẩn ) : 48.432 Kb
Tại dấu mời của DOS ( thờng là tại th mục chứa 2 File trên ) gõ TURBO và
ấn ENTER thì TURBO đợc nạp vào bộ nhớ Trên màn hình xuất hiện Local Menu nh sau :
File Edit Search Run Compile Debug Tools Options Window Help
Thí dụ :
19
Trang 20ấn và giữ phím Alt đồng thời gõ F để hiện ra menu dọc của mục chọnFile nh hình sau:
File Edit Search Run Compile Debug Tools Options Window Help
F1 Help Create a new file in a new Edit window
Các dòng New, Open,Save,Save as , Save all , Change dir , Print, PrintSeup ,DOS shell , Exit đợc gọi là các mục chọn dọc trong Mục chọn File củaLocal Menu Đó là từngchức năng riêng của nhóm này
Để tìm hiểu kỹ càng về từng nhiệm vụ của các mục chọn dọc nằmtrong các Menu dọc , tơng ứng với các mục chọn của Local Menu , hãy tìmqua sách khác giới thiệu về Môi trờng TURBO ở đây chúng ta bớc đầuchỉ tìm hiểu một số chức năng chính :
ALT_F +NEW Mở một trang văn bản mới để soạn một
ch-ơng trình mới
F3 (ALT_F + OPEN) Mở 1 File ( File này đã đợc ghi vào đĩa bây giờ
muốn mở ra để xem lại hoặc sửa đổi , nếu File này cha có trên đĩathì phải gõ tên File vào dòng sáng hiện trên màn hình sau đó soạn ch-
ơng trình mới )
F2 (ALT_F +SAVE) Lu chơng trình vào File đang mở Nếu chơng
trình này là chơng trình mới và cha đợc đặt tên thì màn hình hiện lênmột khung yêu cầu đặt tên File cho chơng trình mới này
ALT_F +SAVE AS Lu chơng trình vào File với tên khác ( phải nhậptên mới vào )
ALT_X (ALT_F +EXIT) Để thoát khỏi soạn thảo chơng trình , kếtthúc TURBO trở về môi trờng cũ
Trang 21Trong khi soạn và thử nghiệm và chạy chơng trình , có thể dùng nhiềuloại cửa số khác nhau trên màn hình Cửa sổ nào có con trỏ đợc gọi làcửa sổ hiện hành
F6 Để chuyển từ cửa sổ này sang cửa sổ kia
F5 Để phóng to hoặc thu nhỏ cửa sổ hiện hành
CTRL_F5 Sau đó dùng phím mũi tên ( ↑ ↓ ← → ) di chuyểncửa sổ hiện hành đến vị trí thích hợp , hoặc dùng SHIFT + phím mũitên ( ↑ ↓ ← → ) để thay đổi kích thớc cửa sổ , cuối cùng ENTER
Alt_F3 Để đóng cửa sổ soạn thảo hiện hành ( có con
+ Phím mũi tên ( ↑ ↓ ← → ) Di chuyển con trỏ
văn bản
+ CTRL_ PAGE DOWN Đi xuống 1 trang mànhình văn bản
+ Phím BACK SPACE Xoá kí tự ngay bên trái vị trí con trỏ
+ Phím SPACE BAR Tạo 1 kí tự trống
+ SHIFT_Phím mũi tên( ↑ ↓ ← → ) Đánh dấu khối
+CTRL_INSERT Chép khối đánh dấu vào CLIPBOARD
+SHIFT_INSERT Chép CLIPBOARD vào văn bản hiện thời (tại vị trí
+CTRL_DEL Xoá đoạn văn bản đã đánh dấu khối
+CTRL_K + H Xoá hộp sáng trên đoạn văn bản đã đánh dấu
+CTRL_F1 Hiện màn hình giúp đỡ tơng ứng với từ tại vị trícon trỏ
+SHIFT_F1 Hiện bảng giúp đỡ sử dụng các lệnh,thủ tục,hàm, toán tử ,
G- Thủ tục vào ra dữ liệu , thủ tục liên quan màn hình
1 ) WRITE ( danh sách tên biến , danh sách tên hằng ); sẽ lần lợt ghi ra
trên dòng màn hình các giá trị tơng ứng với các biến và các hằng , bắt
đầu ghi từ vị trí hiện thời của con trỏ màn hình
21
Trang 222 ) WRITELN (danh sách tên biến , danh sách tên hằng ); sẽ lần lợt ghi ra
trên dòng màn hình các giá trị tơng ứng với các biến và các hằng , bắt
đầu ghi từ vị trí hiện thời của con trỏ màn hình Ghi xong , con trỏmàn hình tự động dời xuống đầu dòng tiếp theo của màn hình
3) WRITELN; Lệnh chuyển con trỏ xuống đầu dòng dới
4) READLN(danh sách tên biến); Nhập từ bàn phím lần lợt các giá trị
cho các biến đợc nêu trong danh sách Sau khi gõ giá trị của biến cuốicùng thì gõ ENTER Con trỏ trên màn hình tự động chuyển xuống dòngdới
5) READLN; Lệnh dừng chờ cho đến khi gõ ENTER mới thi hành lệnh
tiếp theo và con trỏ chuyển xuống đầu dòng dới
6) Gotoxy(x1,y1) ; Lệnh di chuyển con trỏ màn hình tới vị trí cột x1,
dòng y1 ( Trên màn hình ở chế độ ‘ 25 line ‘ trang màn hình có 25dòng , 80 cột )
7) Textcolor(n); với n là số nguyên từ 0 tới 15 : Đặt chế độ màu cho
chữ viết trên màn hình
8) TextBackGround(n); Đặt chế độ màu cho màn hình
9) Clrscr ; Xoá sạch trên trang màn hình
Lu ý 1 :Khi nhập giá trị cho các biến bằng lệnh Readln(ds biến ), máy cha
thực hiện lệnh tiếp theo của chơng trình, chỉ khi gõ ENTER máy nạp giátrị vào các vùng nhớ tơng ứng với các biến , sau đó mới thực hiện lệnhtiếp theo
Lu ý 2 : Để kiểm tra dữ liệu nhập vào có đúng kiểu đã khai báo không ,
dùng hàm IoResult ( Kiểu Boolean ) theo dõi với chế độ
hớng dẫn biên dịch là {$I-} Sau khi nhập giá trị cho biến (x chẳnghạn ) nếu giá trị của hàm IoResult = 0 thì giá trị nhập cho x là đúng ;ngợc lại nếu IoResult <>0 thì nhập sai Thí dụ : Đoạn chơng trình nhậpgiá trị cho biến x nguyên dơng là :
Uses Crt;
Var x : Integer;
Begin
Repeat
Write(‘Nhap gia tri x = ‘);
{$I-} Readln(x); {I$+}
Until (IoResult =0) and ( x>0);
Trang 23Const 1: S 1 ; Const 2: S 2 ;
Const n: S n ; END;
CASE B OF
Const 1: S 1 ; Const 2: S 2 ;
Const n: S n ; ELSE S n+1 ;
Giá trị của biểu thức và giá trị của tập hằng i (i=1¸n) phải có cùng kiểu
Khi gặp lệnh CASE, chương trình sẽ kiểm tra:
- Nếu giá trị của biểu thức B nằm trong tập hằng const i thì máy sẽ thực hiện lệnh Si tươngứng
Trang 24+ Đối với dạng 2: thực hiện lệnh Sn+1.
FOR <biến đếm>:=<giá trị Max> DOWNTO <giá trị Min> DO S;
Sơ đồ thực hiện vòng lặp FOR:
Chú ý: Khi sử dụng câu lệnh lặp FOR cần chú ý các điểm sau:
Không nên tuỳ tiện thay đổi giá trị của biến đếm bên trong vòng lặp FOR vì làm như vậy có thể sẽ không kiểm soát được biến đếm.
Giá trị Max và Min trong câu lệnh FOR sẽ được xác định ngay khi vào đầu vòng lặp.
Do đó cho dù trong vòng lặp ta có thay đổi giá trị của nó thì số lần lặp cũng không thay đổi.
5.3.2 Vòng lặp không xác định
Dạng REPEAT Dạng WHILE Repeat
S;
Until B;
While B Do S;
Ý nghĩa:
• Dạng REPEAT: Lặp lại công việc S cho đến khi biểu thức B=TRUE thì dừng.
• Dạng WHILE: Trong khi biểu thức B=TRUE thì tiếp tục thực hiện công việc S.
Trang 25Bài tập 1: Viết chương trình nhập vào một số nguyên và kiểm tra xem số vừa nhập là sốchẵn hay số lẻ.
Trang 261 17: Writeln(Nguoi nay la thieu nien');
18 39: Writeln(Nguoi nay la thanh nien');
40 60: Writeln(Nguoi nay la trung nien');
Else Writeln(Nguoi nay la lao nien');
End;
Readln;
Bài tập về nhà
Bài tập 1: Viết chương trình tính tổng S = 1+2+ +N
Bài tập 2: Viết chương trình nhập vào N số nguyên từ bàn phím Hãy tính và in ra màn hìnhtổng của các số vừa được nhập vào
Vì tính số Pi với độ chính xác Epsilon nên không biết trước được cụ thể số lần lặp,
do đó ta phải dùng vòng lặp WHILE hoặc REPEAT Có nghĩa là phải lặp cho tới khi t=4/(2*i+1) ≤ Epsilon thì dừng
Dùng phương pháp cộng dồn Cho vòng lặp FOR chạy từ 1 tới N, ứng với lần lặp thứ
i, ta nhập vào số nguyên X và đồng thời cộng dồn X vào biến S
LËp ch¬ng tr×nh gi¶i c¸c bµi to¸n sau :
26
Trang 27Bài tập 4: Nhập từ bàn phím giá trị 3 cạnh tam giác Tính diện tích , chiều cao, trung tuyến, bán kính đờng tròn nội tiếp, ngoại tiếp tam giác.Bài tập 5: Nhập từ bàn phím 1 số nguyên dơng có 4 chữ số Hiện trên màn hình các chữ số hàng nghìn, hàng trăm, hàng chục , hàng đơn vị của số nguyên này
Bài tập 6: Nhập từ bàn phím số thực x Sử dụng không quá 4 phép nhân cùng với 4 phép cộng và trừ , tính giá trị của biểu thức sau :
2x4 - 3x3 + 4x2 - 5x + 6 Bài tập 7: Nhập từ bàn phím giá trị 2 biến x và y Không dùng thêm biến thứ 3 , hãy tráo giá trị 2 biến x và y cho nhau
Bài tập 8: Nhập từ bàn phím 4 số thực Tìm số lớn nhất và số bé nhất Bài tập 9: Từ bàn phím nhập các hệ số a, b, c của phơng trình tổng quát của đờng thẳng a x+by+c=0 và toạ độ 2 điểm A(x1,y1) , B(x2,y2) Thông báo kết quả điểm A , điểm B có thuộc đờng thẳng không ? Trong trờng hợp A và B cùng không thuộc đờng thẳng , hãy thông báo chúng cùng phía so với đờng thẳng hay khác phía nhau ?
Bài tập 10: Lập trình so sánh giá trị 2 biểu thức :
y1=(a*b*c) (a+b+c)/ 3 và y2 = aa * bb * cc Bài tập 11: Cho tam giác có 3 cạnh là a,b,c Lập trình tính các góc A,B,Ccủa tam giác ( theo Radian ) và so sánh
y = (a* A + b * B + c * C)/(a+b+c) với z = Pi / 3Bài tập 13: Sử dụng các thủ tục vào ra dữ liệu nhập từ bàn phím , và thủtục định vị trí con trỏ màn hình hãy vẽ trên màn hình một tam giácgồm các kí tự ‘*’(dấu sao) giữa 2 dấu sao liên tiếp là 1 kí tự dấu
Trang 38………
………
………
Tiết 25-26-27: DỮ LIỆU KIỂU MẢNG (ARRAY)
1.Kiến thức: Học sinh nắm được cách viết dữ liệu dạng mảng một chiều và mảng hai chiều,
làm được các bài toán trên mảng một chiều và mảng hai chiều
2.Kỹ năng:Có kỹ năng phân tích bài toán, viết câu lệnh chính xác
3.Thái độ: Học sinh tích cực, tự giác, hứng thú trong giải toán bằng mảng
B PHƯƠNG PHÁP: Thuyết trình, gợi mở, vấn đáp
C CHUẨN BỊ CỦA THẦY VÀ TRÒ
GV: Giáo án, phấn màu vẽ sơ đồ
HS: Ôn tập các câu lệnh cơ bản
TYPE <Kiểu mảng> = ARRAY [chỉ số] OF <Kiểu dữ liệu>;
VAR <Biến mảng>:<Kiểu mảng>;
hoặc khai báo trực tiếp:
VAR <Biến mảng> : ARRAY [chỉ số] OF <Kiểu dữ liệu>;
Ví dụ:
TYPE Mangnguyen = Array[1 100] of Integer;
Matrix = Array[1 10,1 10] of Integer;
MangKytu = Array[Byte] of Char;
hoặc khai báo trực tiếp:
VAR <Biến mảng> : ARRAY [chỉ số hàng, chỉ số cột] OF <Kiểu dữ liệu>;
Ví dụ:
38
Trang 39Type Mang1 = Array[1 30, 1 50] of Integer;
Mang2 = Array[1 3, 0 2] of Real;
Var A : Mang1;
B : Mang2;
* Chú ý: Mảng hai chiều còn gọi là ma trận Trong ví dụ trên, B là ma trận cấp 3 × 3 Trong
mảng hai chiều, chỉ số sau truy cập nhanh hơn chỉ số trước Để truy cập đến phần tử hàng thứ i, cột thứ j của mảng hai chiều B ta dùng cách viết: B[ i ][ j ] hoặc B[ i , j ]
III XUẤT NHẬP TRÊN DỮ LIỆU KIỂU MẢNG
- Để truy cập đến phần tử thứ k trong mảng một chiều A, ta sử dụng cú pháp: A[k]
- Để truy cập đến phần tử (i,j) trong mảng hai chiều M, ta sử dụng cú pháp: M[i,j]
- Có thể sử dụng các thủ tục READ(LN)/WRITE(LN) đối với các phần tử của biếnkiểu mảng
- Cho số lớn nhất là số đầu tiên: Max:=a[1]
- Duyệt qua các phần tử a[i], với i chạy từ 2 tới N: Nếu a[i]>Max thì thay Max:=a[i];
Trang 40Bài tập 2:Viết chương trình tính tổng bình phương của các số âm trong một mảng gồm Nphần tử.