I/ Lệnh cấu trúc rẽ nhánh(lệnh IF):
1/ Dạng không đầy đủ:
Cú pháp: IF < điều="" kiện=""> THEN < công="" việc="">
Ý nghĩa: Nếu điều kiện đúng thì thực hiện công việc
Lưu đồ cú pháp:
CHƯƠNG 4: CÁC LỆNH CÓ CẤU TRÚC I/ Lệnh cấu trúc rẽ nhánh(lệnh IF): 1/ Dạng không đầy đủ: Cú pháp: IF THEN Ý nghĩa: Nếu điều kiện đúng thì thực hiện công việc ĐK CV S Đ KTL Lưu đồ cú pháp: Ví dụ: Trong việc thực hiện phép chia số a cho số b, phải có điều kiện b 0. Điều đó được thể hiện trong chương trình sau: Var a,b: integer; Begin Write(‘Nhap so a: ’);readln(a); Write(Nhap so b: ’);readln(b); IF b 0 THEN Writeln(‘Thuong cua hai so la: ’, a/b:5:2); readln; End. 2/ Dạng đầy đủ: Cú pháp: IF THEN ELSE Ý nghĩa: Nếu điều kiện đúng thì thực hiện Công việc 1 ngược lại thực hiện Công việc 2 ĐK CV1 S Đ KTL CV2 Lưu đồ cú pháp: Ví dụ 1: Chẳng hạn trong ví dụ trên ta có thể bổ sung thành dạng đầy đủ như sau: Var a,b: integer; Begin Write(‘Nhap so a: ’);readln(a); Write(‘Nhap so b: ’);readln(b); IF b 0 THEN Writeln(‘Thuong cua hai so la: ’,a/b:5:2) ELSE Writeln(‘So chia bang 0, phep chia khong co nghia’); Readln; End. Chú ý: - Trước từ khoá ELSE không có dấu chấm phẩy - Công việc có thể chỉ là một lệnh hoặc nhiều lệnh. Trong trường hợp nhiều lệnh thì phải để chúng trong cặp Begin và End (tạo nên một lệnh hợp thành). Ví dụ 2: Nhập vào hai số a và b. Tìm giá trị lớn nhất trong hai số đó: Var a,b: real; Begin Write(‘Nhap so a: ’);readln(a); Write(‘Nhap so b: ’);readln(b); IF a>b THEN begin Writeln(a:5:2, ‘la so lon nhat’); Writeln(b:5:2, ‘la so nho nhat’); end ELSE begin Writeln(b:5:2, ‘la so lon nhat’); Writeln(a:5:2, ‘la so nho nhat’); end Readln; End. II/ Lệnh cấu trúc lựa chọn(Lệnh CASE): 1/ Dạng không đầy đủ: Cú pháp: CASE OF Hằng 1a, hằng 1b,.....,hằng 1x: ; Hằng 2a, hằng 2b,.....,hằng 2x: ; ............................ Hằng Na, hằng Nb,....,hằng Nx: ; END; Ý nghĩa: Trước hết kiểm tra xem giá trị của có phải là một trong các hằng 1a, 1b,.....1x hay không. Nếu đúng thì thực hiện rồi kết thúc lệnh (thực hiện lệnh tiếp theo sau END;), cứ tiếp tục như vậy, nếu giá trị của không thuộc tập hợp các hằng từ 1a đến Nx thì lệnh kết thúc mà không thực hiện bất kỳ một công việc nào cả. Ví dụ 1: Viết chương trình nhập điểm của một học sinh theo thang điểm 10 và tiến hành xếp loại văn hoá theo điểm sau đây: 9, 10 : loại giỏi 7,8 : loại khá 5,6 : loại trung bình 3,4 : loại yếu 0,1,2 : loại kém Program Xeploai1; Var diem: integer; Begin Write(‘Bai dat bao nhieu diem ?’);readln(diem); Case diem Of 9,10: writeln(‘Đat loai gioi’); 7,8: writeln(‘Đat loai kha’); 5,6: writeln(‘Đat loai trung binh’); 3,4: writeln(‘Đat loai yeu’); 0,1,2: writeln(‘Đat loai kem’); End; Readln; End. 2/ Dạng đầy đủ: Cú pháp: CASE OF Hằng 1a, hằng 1b,.....,hằng 1x: ; Hằng 2a, hằng 2b,.....,hằng 2x: ; ............................ Hằng Na, hằng Nb,....,hằng Nx: ; ELSE ; END; Ý nghĩa: Khác dạng không đầy đủ ở chỗ: Khi giá trị của không thuộc tập hợp các hằng từ 1a đến Nx thì sẽ thực hiện (các lệnh sau từ khoá Else) rồi kết thúc lệnh. Ví dụ 2: Cũng như ví dụ 1 trên nhưng yêu cầu thêm là nếu số điểm nhập vào không nằm trong các số từ 0 đến 10 thì in ra câu: “ Nhap diem sai” Program Xeploai2; Var diem: integer; Begin Write(‘Bai dat bao nhieu diem ?’);readln(diem); Case diem Of 9,10: writeln(‘Đat loai gioi’); 7,8: writeln(‘Đat loai kha’); 5,6: writeln(‘Đat loai trung binh’); 3,4: writeln(‘Đat loai yeu’); 0,1,2: writeln(‘Đat loai kem’); Else writeln(‘Nhap diem sai’); End; Readln; End. III/ Lệnh lặp với số lần lặp xác định(Lệnh FOR): 1/ Dạng 1: Cú pháp: FOR := TO DO Ý nghĩa: Các bước thực hiện lệnh như sau: Bước 1: Kiểm tra xem giá trị đầu <= giá trị cuối. Nếu đúng thì gán giá trị đầu cho biến và thực hiện công việc. Bước 2: Kiểm tra xem giá trị của biến giá trị cuối. Nếu đúng thì tăng thêm cho biến một “đơn vị” rồi thực hiện công việc. Lặp lại bước 2 cho đến khi giá trị của biến = giá trị cuối thì kết thúc lệnh. Chú ý: + Biến sau từ khoá FOR gọi là biến đếm, biến đếm phải có kiểu đếm được và giá trị đầu <= giá trị cuối. + Trong các lệnh của công việc không được có các lệnh làm thay đổi giá trị của biến đếm. + Như vậy sau khi vòng lặp kết thúc thì giá trị của biến là giá trị cuối. Ví dụ 1: Viết chương trình in ra màn hình 15 câu như sau: Đây là vòng lặp thứ 1 Đây là vòng lặp thứ 2 Đây là vòng lặp thứ 15 Var i:integer; Begin For i:=1 To 15 Do writeln('Day la vong lap thu ',i); readln; End. Ví dụ 2: Viết chương trình tính tổng của n số, số n và các số hạng của tổng nhập từ bàn phím khi chạy chương trình. Begin writeln('Nhap so thu',i,':');readln(so); s:=s+so; End; writeln('Tong cua day so la S= ',s); readln; End. Var n,i,s,so:integer; Begin writeln('day co bao so ?');readln(n); s:=0; For i:=1 To n Do Ví dụ 3: Viết chương trình tính giai thừa của số n nhập từ bàn phím. Program Giaithua; Var i,n:Integer; gt:longint; Begin writeln('Cho biet so n ');readln(n); gt:=1; For i:=1 To n Do gt:=gt*i; writeln(n,'!= ',gt); readln; End. 2/ Dạng 2: Cú pháp: FOR := DOWNTO DO Ý nghĩa: Tương tự như dạng 1 nhưng sau mỗi lần lặp thì biến bị giảm một “đơn vị”. Trong trường hợp này thì điều kiện để vòng lặp thực hiện là giá trị đầu >= giá trị cuối. Ví dụ 4: Tìm các số nguyên dương là ước của n Program Uocso; Uses crt; Var i,n:Integer; Begin Clrscr; Writeln('Nhap so n : ');readln(n); For i:=n DownTo 1 Do If n mod i = 0 then Write(i:8); Readln; End. IV/ Lệnh lặp với số lần lặp không xác định(Lệnh WHILE): 1/ Dạng 1: Cú pháp: WHILE DO Ý nghĩa: Vào lệnh sẽ kiểm tra . Nếu đúng thì thực hiện sau đó quay lại kiểm tra . Cứ tiếp tục như thế cho tới khi nào sai thì kết thúc lệnh. ĐK Công việc S Đ Lưu đồ cú pháp: Ví dụ1: Tính tổng S = 1 + 2 + . + n sao cho S>1000. Hỏi khi đó S bằng bao nhiêu ? Program Tong; Uses crt; Var i,s:Integer; Begin clrscr; s:=0; i:=1; While s<=1000 Do begin s:=s+i; i:=i+1; end; Writeln('Khi do tong s= ',s); Readln; End. Ví dụ 2: Tìm USCLN của hai số a và b được nhập vào từ bàn phím. Program USCLN; Uses crt; Var a,b,ucln:Integer; Begin clrscr; Write('Nhap so a: ');readln(a); Write('Nhap so b: ');readln(b); If a<b then ucln:=a Else ucln:=b; While (a mod ucln 0) or (b mod ucln 0) Do ucln:=ucln-1; Writeln('USCLN cua hai so ',a,'va ',b,'la: ',ucln); Readln; End. Chú ý: Trong vòng lặp phải có một lệnh có khả năng làm thay đổi điều kiện sau từ khoá WHILE để đến một lúc nào đó thì điều kiện này không còn đúng nữa thì vòng lặp kết thúc. Trong ví dụ 6.6 đó là lệnh S:=S+I còn trong ví dụ 6.7 đó là lệnh ucln:=ucln-1. 2/ Dạng 2: Cú pháp: REPEAT UNTIL Ý nghĩa: Vào lệnh sẽ thực hiện sau đó kiểm tra . Nếu sai thì tiếp tục thực hiện , sau đó lại kiểm tra . Quá trình trên cứ tiếp tục cho đến khi nào đúng thì kết thúc. Lưu đồ cú pháp: ĐK Công việc S Đ Ví dụ 1: Viết chương trình nhập vào một số nguyên dương n và xác định xem nó có phải là số nguyên tố hay không ? Program Nguyento; Uses crt; Var i,n:Integer; Begin clrscr; Write('Hay nhap vao so n:');readln(n); i:=1; Repeat i:=i+1; Until (n mod i = 0) or (i*i>n); If i*i>n then Writeln(n,'la so nguyen to') Else Writeln(n,' la hop so'); Readln; End. 3/ Sự khác nhau giữa WHILEDO và REPEATUNTIL: Giữa hai loại lệnh này có sự khác nhau như sau: + Trong lệnh WhileDo thì điều kiện kiểm tra trước, nếu đúng thì thực hiện . Còn trong lệnh RepeatUntil thì ngược lại sẽ được làm trước rồi mới kiểm tra , nếu đúng thì vòng lặp kết thúc. + Nếu dùng hai loại lệnh lặp này để giải cùng một bài toán với cùng một giải thuật như nhau thì sau WHILE và sau UNTIL là phủ định của nhau. BÀI TẬP Bài 1: Viết chương trình nhập 3 số từ bàn phím, tìm số lớn nhất trong 3 số đó, in kết quả ra màn hình. Program Soln;{Tim so lon nhat trong 3 so} Uses crt; Var a,b,c,max:real; Begin Clrscr; Writeln('Nhap 3 so a,b va c: '); Write('a= ');readln(a); Write('b= ');readln(b); Write('c= ');readln(c); max:= a; If b>max then max:=b; If c>max then max:=c; Write(max,' la so lon nhat'); Readln; End. Bài 2: Viết lại chương trình tính chu vi, diện tích của tam giác nhưng với yêu cầu sau khi nhập 3 số a,b,c phải kiểm tra lại xem a,b,c có tạo thành một tam giác không ? Nếu có thì tính chu vi, diện tích. Nếu không thì in ra câu “ Không tạo thành tam giác”. Program CVDTTG_1; Uses crt; Var a,b,c,CV:Integer; p,s:real; Begin Clrscr; Writeln('Nhap 3 canh cua tam giac: ');Readln(a,b,c); If(a+b>c) and (b+c>a) and (c+a>b) then begin Cv:=a+b+c; p:=CV/2; s:=Sqrt(p*(p-a)*(p-b)*(p-c)); Writeln('Chu vi cua tam giac la: ',CV); Writeln('Dien tich cua tam giac la: ',s:8:2); end Else Writeln('Khong tao thanh tam giac '); Readln; End. Bài 3: Viết chương trình giải phương trình bậc nhất ax + b = 0, với a,b nhập từ bàn phím. Program Gptb1;{Giai phuong trinh bac nhat} Uses crt; Var a,b:real; Begin Clrscr; Writeln('Nhap cac he so a va b cua phuong trinh: '); Write('a= ');readln(a); Write('b= ');readln(b); If a=0 then If b=0 then Write('Phuong trinh vo dinh') Else Write('Phuong trinh vo nghiem') Else Writeln('Phuong trinh co duy nhat mot nghiem x = ',-b/a:8:2); Readln; End. Bài 4: Viết chương trình giải phương trình bậc hai ax2 + bx + c = 0 , với a,b,c nhập từ bàn phím. Program Giaiptb2; Uses crt; Var a,b,c,delta,x1,x2:real; Begin clrscr; Writeln('Cho biet he so a = ');readln(a); Writeln('Cho biet he so b = ');readln(b); Writeln('Cho biet he so c = ');readln(c); If a=0 then {phuong trinh bac nhat} If b=0 then If c=0 then Writeln('Phuong trinh vo dinh') Else Writeln('Phuong trinh vo nghiem') Else Writeln('Phuong trinh co nghiem duy nhat x =',-c/b:8:2) Else Begin delta:=b*b-4*a*c; If delta<0 then Writeln('Phuong trinh vo nghiem') Else If delta=0 then Writeln('Phuong trinh co nghiem kep x0 =',-b/(2*a):8:2) Else begin x1:=(-b-sqrt(delta))/(2*a); x2:=(-b+sqrt(delta))/(2*a); Writeln('Phuong trinh co hai nghiem phan biet:'); Writeln('x1 = ',x1:8:2,' va x2 = ',x2:8:2); end; End; readln; End. Bài 5: Viết chương trình nhập từ bàn phím hai số a,b và một ký tự Ch. Nếu: Ch là ‘+’ thì in kết a+b Ch là ‘-’ thì in kết a-b Ch là ‘*’ thì in kết a*b Ch là ‘/’ thì in kết a/b Program Ptoan;{thuc hien tinh toan +,-,*,:} Uses crt; Var a,b:Integer; pheptoan:char; Begin Clrscr; Writeln('Cho biet hai so a va b: ');readln(a,b); Write('Cho biet phep toan: ');readln(pheptoan); Case pheptoan of '+':Writeln('Tong cua hai so la: ',(a+b)); '-':Writeln('Hieu cua hai so la: ',(a-b)); '*':Writeln('Tich cua hai so la: ',(a*b)); '/':Writeln('Thuong cua hai so la: ',(a/b)); end; Readln; End. Bài 6: Viết chương trình nhập vào hai số là tháng và năm của một năm. Xét xem tháng đó có bao nhiêu ngày ? biết rằng: Nếu tháng là 4,6,9,11 thì số ngày là 30. Nếu tháng là 1,3,5,7,8,10,12 thì số ngày là 31. Nếu tháng là 2 và năm chia hết cho 4 (năm nhuận) thì số ngày là 29, ngược lại là 28. Program TSNTT;{Cho biet so ngay trong thang} Uses crt; Var thang,nam:Integer; Begin Clrscr; Write('Xin cho biet thang: ');readln(thang); Case thang of 4,6,9,11:Writeln('Thang ',thang,' co 30 ngay '); 1,3,5,7,8,10,12:Writeln('Thang ',thang,' co 31 ngay'); 2:begin Write('Xin cho biet nam :');readln(nam); If nam mod 4 = 0 then Writeln('Nam nhuan thang 2 co 29 ngay') Else Writeln('Nam thuong thang 2 co 28 ngay'); end;{begin} end;{case} Readln; End. Bài 7: Có hai phương thức gửi tiền tiết kiệm: Gửi không kỳ hạn lãi suất 2.4%/tháng, mỗi tháng tính lãi một lần, gửi có kỳ hạn 3 tháng lãi suất 4%/tháng, 3 tháng tính lãi một lần. Viết chương trình tính tổng cộng số tiền cả vốn lẫn lời sau một thời gian gửi theo mỗi phương thức. Vốn, phương thức và thời gian gửi nhập từ bàn phím. Program Tinhtien; Uses crt; Const lt = 0.024; {lai thang 2,4%} lk = 0.12; {lai ky 12%} Var t: Integer; von,tong:real; loai:char; Begin Write('Ban muon goi co ky han hay khong co ky han?(C/K)'); readln(loai); Case loai of 'K':begin Write('So von cua ban bao nhieu?');readln(von); Write('Thoi gian ban goi bao nhieu?');readln(t); tong:=von*Exp(t*ln(1+lt)); Writeln; Write('Ban da goi so tien la: ',round(von)); Writeln('trong thoi gian ',t,' thang'); Write('Ban se co so tien ca von va lai la: '); Writeln(tong:12:2,' dong'); end else begin Write('So von cua ban bao nhieu?');readln(von); Write('Goi bao nhieu ky? (moi ky 3 thang) ');readln(t); tong:=von*Exp(t*ln(1+lk)); Writeln; Write('Ban da goi so tien la: ',round(von)); Writeln('trong thoi gian ',3*t,' thang'); Write('Ban se co so tien ca von va lai la: '); Writeln(tong:12:2,' dong'); end; end; readln; End. Bài 8: Viết chương trình tính các tổng sau: S = 1+ 2 + .+ n S = 1/2+ 2/3 + ..+ n/(n+1) Program tinhtong; Uses crt; Var i,n,s: Integer; s1:real; Begin Writeln('CHUONG TRINH TINH TONG THU NHAT '); Write('Tong co bao nhieu so hang:');readln(n); s:=0; for i:=1 to n do s:=s+i; Writeln('Tong cua day s1= ',s); Writeln; Writeln('CHUONG TRINH TINH TONG THU HAI'); Write('Tong co bao nhieu so hang:');readln(n); s1:=0; for i:=1 to n do s1:=s1+i/(i+1); Writeln('Tong cua day s2= ',s1:8:2); Writeln; Readln; End. Bài 9: Viết chương trình nhập một dãy n số, tìm số lớn nhất của dãy và xác định vị trí của số lớn nhất trong dãy. Program somax; Uses crt; Var i,n,vitri:Integer; so,max:real; Begin Clrscr; Write('Day co bao nhieu so ?');readln(n); Write('Nhap so thu 1: ');readln(so); max:=so; vitri:=1; For i:=2 to n do begin Write('Nhap so thu ',i,':');readln(so); If max<so then begin max:=so; vitri:=i; end; end; Writeln('So lon nhat cua day la: ',max:10:2); Writeln('Duoc dat tai vi tri thu ',vitri,' cua day'); readln; End. Bài 10: Cho 2 số a và b nhập vào từ bàn phím. Làm thế nào để đổi chỗ 2 giá trị chứa trong a và b Bài 11: Nhập vào N số bất kì. Đếm các số lớn hơn 10 và nhỏ hơn 20 và tính tổng của chúng, sau đó đưa ra màn hình: So cac so > 10 và < 20 la : (gia tri) Tong cua chung la : (gia tri) Program dem; Uses crt; Var i,n,d,so:Integer; tong:Real; Begin Clrscr; tong:=0; d:=0; Writeln('Day so co bao nhieu so: ');readln(n); For i:=1 to n do Begin Writeln('Nhap vao so thu ',i,'la: ');readln(so); If (so>10) and (so<20) then begin d:=d+1; tong:=tong+so; end; End; Writeln('So cac so >10 va <20 la: ',d); Writeln('Tong cua chung la: ',tong); Readln; End. Bài 12: VCT Nhập 3 số a, b, c nguyên dương. Hãy kiểm tra xem ba số đĩ cĩ thể là độ dài các cạnh của một tam giác khơng? Sau đĩ kiểm tra và thơng báo về kiểu tam giác: nĩ là kiểu tam giác gì trong số các kiểu sau: tam giác đều, tam giác cân, tam giác vuơng. Hướng dẫn: - Nếu tổng hai số bất kì sẽ lớn hơn số cịn lại thì a, b,c là 3 cạnh của một tam giác. - Nếu a=b=c đĩ là tam giác đều. - Nếu một trong hai cạnh bằng nhau và đương nhiên cạnh thứ ba cĩ độ dài khác hai cạnh kia thì tam giác đĩ là tam giác cân. - Nếu tổng bình phương hai cạnh bằng bình phương cạnh thứ ba thì tam giác đĩ là tam giác vuơng. Bài 13: VCT nhập vào ngày tháng năm sau đĩ viết ra màn hình đĩ là ngày thứ mấy trong tuần. Hướng dẫn: - Nếu tháng < 3 thì tháng:=tháng +12 và năm:=năm-1 - Thứ = ABS(ngày + 2*tháng + 3*(tháng + 1) div 5 + năm + năm div 4) mod 7 - Trong đĩ thứ =0 tương ứng với ngày chủ nhật, 1 tương ứng với ngày thứ hai,. - Ngày áp dụng từ ngày 1/3/1900. Bài 14: VCT tính thời gian của một cơng việc nào đĩ là X giây. Hãy chuyển đổi và viết ra trên màn hình số thời gian trên dưới dạng bao nhiêu giờ, bao nhiêu phút, bao nhiêu giây. Hướng dẫn: - Giờ sẽ bằng X chia cho 3600 giây lấy phần nguyên (Div) - Phút sẽ bằng X chia cho 60 giây lấy phần nguyên(Div), (X lúc này sẽ là phần dư sau khi đã tính xong giờ) - Giây sẽ bằng X chia cho cho 60 lấy phần dư (Mod), (X lúc này sẽ là phần dư sau khi đã tính phút). Bài 15: VCT đọc từ bàn phím độ dài 3 cạnh của tam giác ABC rồi tính diện tích và các đường cao của tam giác. Hướng dẫn: Dùng cơng thức Hêrơng: S = Sqrt(p(p-a)(p-b)(p-c)) với p = (a+b+c)/2 Ha = 2*S/a Hb = 2*S/b Hc = 2*S/c Bài 16: VCT đọc từ bàn phím độ dài 3 cạnh của tam giác ABC rồi tính bán kính đường trịn ngoại tiếp tam giác ABC theo cơng thức R=abc/4s , với s là diện tích. Bài 17: VCT nhập vào toạ độ ba điểm A,B và O. Tính tích vơ hướng của hai vectơ OA,OB và tính độ dài các đoạn thẳng OA, OB, AB Hướng dẫn: + Toạ độ vectơ AB trong mặt phẳng là: X = Xb – Xa ; Y = Yb - Ya + Cơng thức tính tích vơ hướng theo toạ độ: a.b = X1X2 + Y1Y2 + Độ dài đoạn thẳng AB chính là độ dài vectơ AB: AB = Sqrt(x*x+y*y) Bài 18: VCT giải bất phương trình bậc nhất ax + b > 0. Bài 19: VCT nhập từ bàn phím một số nguyên n (1<= n <=10) rồi đưa ra tiếng Anh của số đĩ. Chẳng hạn, nếu gõ vào n=2 thì đưa ra: 2à two Bài 20: VCT để máy tính nĩi chuyện với người: + Máy “nĩi” bằng các câu trên màn hình. + Người “nĩi” bằng cách gõ từ bàn phím. Nội dung cuộc trị chuyện như sau: Máy hỏi “Bạn cĩ gia đình chưa?”. Nếu chưa thì khuyên “Bạn hãy bình tĩnh và thận trọng!”, nếu rồi thì hỏi xem cĩ mấy con. Nếu cĩ dưới 3 con thì bảo “Tốt”, nếu cĩ 3 con thì bảo “Hơi bị nhiều!”, nếu trên 3 con thì bảo “Nhiều quá!”. Bài 21: Đọc vào số n (Kw/h) của một hộ tiêu thụ điện. Tính số tiền mà hộ đĩ phải trả, biết giá một Kw/h xác định như sau nhằm khuyến khích dùng điện để bào vệ mơi trường. Giá 1 Kw/h = 450 đồng nếu n < 100 Giá 1 Kw/h = 400 đồng nếu 100<= n < 500 Giá 1 Kw/h = 350 đồng nếu n > 500 (Lưu hành nội bộ)
Tài liệu đính kèm: