Bồi dưỡng học sinh giỏi Tin học khối 10

Bồi dưỡng học sinh giỏi Tin học khối 10

CHUYÊN ĐỀ 1: CẤU TRÚC RẼ NHÁNH

I. TÓM TẮT LÝ THUYẾT

I. CÂU LỆNH RẼ NHÁNH

1.1. Câu lệnh nếu .thì IF

 * Cú pháp:

 (1) IF THEN ;

 (2) IF THEN ELSE ;

 * Sơ đồ thực hiện:

* Ý nghĩa:

- Đối với dạng (1): Nếu có giá trị đúng thì máy sẽ thực hiện , ngược lại thì kết thúc (tức không làm gì cả)

- Đối với dạng (2): Nếu có giá trị đúng thì máy sẽ thực hiện , ngược lại thì đi thực hiện

Chú ý: Khi sử dụng câu lệnh IF thì đứng trước từ khoá ELSE không được có dấu chấm phẩy (;).

 

doc 11 trang Người đăng phamhung97 Lượt xem 1394Lượt tải 0 Download
Bạn đang xem tài liệu "Bồi dưỡng học sinh giỏi Tin học khối 10", để tải tài liệu gốc về máy bạn click vào nút DOWNLOAD ở trên
CHUYÊN ĐỀ 1: CẤU TRÚC RẼ NHÁNH
I. TÓM TẮT LÝ THUYẾT
I. CÂU LỆNH RẼ NHÁNH
1.1. Câu lệnh nếu.thì IF
	* Cú pháp:
	(1)	IF THEN ;
	(2)	IF THEN ELSE ;	
	* Sơ đồ thực hiện:
* Ý nghĩa:
- Đối với dạng (1): Nếu có giá trị đúng thì máy sẽ thực hiện , ngược lại thì kết thúc (tức không làm gì cả)
- Đối với dạng (2): Nếu có giá trị đúng thì máy sẽ thực hiện , ngược lại thì đi thực hiện 
Chú ý: Khi sử dụng câu lệnh IF thì đứng trước từ khoá ELSE không được có dấu chấm phẩy (;).
1.2. Câu lệnh lựa chọn CASE OF
- Câu lệnh IF chỉ thực hiện rẽ hai nhánh tương ứng với hai giá trị của biểu thức logic. Do đó để thực hiện rẽ nhiều nhánh chúng ta sử dụng câu lệnh caseof như sau:
	* Cú pháp:
Dạng 1
Dạng 2
CASE OF
giá trị 1: ;
giá trị 2: ;
...
giá trị n: ;
END;
CASE OF
giá trị 1: ;
giá trị 2: ;
...
giá trị n: ;
ELSE ;
END;
	Trong đó:
B: Biểu thức kiểu vô hướng đếm được như kiểu nguyên, kiểu logic, kiểu ký tự, kiểu liệt kê. (KHÔNG ĐƯỢC KIỂU SỐ THỰC)
Giá trị 1,2n : có thể là một giá trị hằng (số học, kí tự), hoặc các đoạn hằng (dùng hai dấu chấm để phân cách giữa giá trị đầu và giá trị cuối).
Giá trị của và có cùng kiểu.
* Ý nghĩa: Khi gặp lệnh CASE, chương trình sẽ kiểm tra: 
- Nếu giá trị của nằm trong thì máy sẽ thực hiện lệnh thứ i tương ứng. (i=1..n)
- Ngược lại:
	+ Đối với dạng 1: Không làm gì cả.
	+ Đối với dạng 2: thực hiện lệnh thứ n+1 (Trường hợp ngoại lệ)
II. VÍ DỤ
Ví dụ 1: Viết chương trình in ra số lớn hơn trong hai số nguyên. (được nhập từ bàn phím).
a. Thuật giải
Nhập hai số vào hai biến a, b.
Nếu a > b thì in a. 
Nếu a b thì in a, ngược lại thì in b.)
b. Mã chương trình:
Program SO_SANH1;
uses crt;
var a,b: integer;
begin
 clrscr;
 write('nhap so thu nhat: '); readln(a);
 write('nhap so thu hai: '); readln(b);
 if a> b then writeln(' So lon la:',a);
 if a<= b then writeln(' So lon la:',b);
 readln
end.
Hoặc:
Program SO_SANH2;
uses crt;
var a,b: integer;
begin
 clrscr;
 write('nhap so thu nhat: '); readln(a);
 write('nhap so thu hai: '); readln(b);
 if a> b then writeln(' So lon la:',a)
 else writeln(' So lon la:',b);
 readln
end.
Ví dụ 2: Viết chương trình nhập vào tuổi của một người và cho biết người đó là thiếu niên, thanh niên, trung niên hay lão niên. Biết rằng: nếu tuổi nhỏ hơn 18 là thiếu niên, từ 18 đến 39 là thanh niên, từ 40 đến 60 là trung niên và lớn hơn 60 là lão niên.
a. Thuật giải
Nhập vào số tuổi.
Sử dụng cấu trúc lựa chọn:
+ Nếu tuổi từ 1..18 thì thông báo là thiếu niên.
+ Nếu tuổi từ 19..39 thì thông báo là thanh niên.
+ Nếu tuổi từ 40..60 thì thông báo là trung niên.
+ Còn lại thì thông báo là lão niên. (trường hợp ngoại lệ)
b. Mã chương trình:
program DoTuoi;
uses crt;
var tuoi:integer;
begin
clrscr;
write('Moi ban nhap tuoi cua minh: ');
readln(tuoi);
case tuoi of
1..18: writeln('Ban la thieu nien');
19..39: writeln('Ban la thanh nien');
40..60: writeln('Ban la trung nien');
else write('Ban da la lao nien roi!');
end;
readln
end.
III. BÀI TẬP
Bài tập 1: Số chẵn lẻ
Viết chương trình nhập vào số nguyên N và kiểm tra xem số đó là số chẵn hay số lẻ?
a. Thuật giải
- Nhập vào số nguyên N
- Nếu N chia hết cho 2 là số chẵn và ngược lại là số lẻ.
b. Mã chương trình:
program Chanle;
uses crt;
var N:integer;
begin
 clrscr;
 write('Nhap vao so nguyen N: '); readln(N);
 if N mod 2 =0 then writeln(N,' la so chan')
 else writeln(N,' la so le');
 readln
end.
c. Nhận xét:
Bài tập 2: Số chính phương
Số chính phương là một số mà tự nó là căn bậc hai của một số tự nhiên khác. Viết chương trình nhập vào một số và kiểm tra xem nó có phải là số chính phương hay không?
a. Thuật giải
- Nhập vào số nguyên N.
- Tính căn bậc hai của số N (x=sprt(N)).
- Bình phương phần nguyên của X, nếu kết quả bằng với N thì N là số chính phương.
b. Mã chương trình:
program ChinhPhuong;
uses crt;
var N:integer;
 x:real;
begin
 clrscr;
 write('Nhap vao so nguyen N: '); readln(N);
 x:=sqrt(N);
 if N=sqr(trunc(x)) then writeln(N,' la so chinh phuong') else
 writeln(N,' khong phai la so chinh phuong.');
 readln
end.
c. Nhận xét:
- Hàm TRUNC(x) cho ta một số nguyên là phần nguyên của x, tức là cắt bỏ đi phần lẻ thập phân của x.
Vd: Trunc(3.14)=3
Bài tập 3: Viết chương trình tìm số lớn nhất trong 4 số được nhập từ bàn phím.
a. Thuật giải
- Nhập vào bốn số a, b, c, d.
- Nếu số a lớn hơn cả ba số a,b, c thì a là số lớn nhất. (tương tự với các số còn lại)
- Hiển thị kết quả.
b. Mã chương trình:
Program So_Lon_Nhat;
Uses crt;
Var a,b,c,d: real;
Begin
 Clrscr;
 Write('Nhap so thu nhat:');readln(a);
 Write('Nhap so thu hai:');readln(b);
 Write('Nhap so thu ba:');readln(c);
 Write('Nhap so thu tu:');readln(d);
 if (a>=b) and (a>=c) and (a>= d) then writeln('So lon nhat la:',a:10:2);
 if (b>=a) and (b>=c) and (b>= d) then writeln('So lon nhat la:',b:10:2);
 if (c>=a) and (c>=b) and (c>= d) then writeln('So lon nhat la:',c:10:2);
 if (d>=a) and (d>=b) and (d>= c) then writeln('So lon nhat la:',d:10:2);
 readln
end.
c. Nhận xét: 
- Nếu bài toán trên sử dụng cấu trúc ifthenelse thì rất phức tạp.
- Mở rộng bài toán trên với cách chỉ sử dụng 2 biến. (Sử dụng kỹ thuật lính canh)
+ Nhập vào số đầu tiên và chọn số đầu tiên là số lớn nhất.
+ Nhập số thứ 2 và so sánh với max (nếu lớn hơn max thì cho max là số vừa nhập) (tương tự cho số thứ 3,4)
- Đưa kết quả ra màn hình.
Bài tập 4: Viết chương trình giải phương trình bậc nhất ax+b=0
a. Thuật giải
- Nhập vào 2 hệ số a,b
- Nếu a 0 thì phương trình có nghiệm x=-b/a
- Nếu a = 0 và b =0 thì phương trình có vô số nghiệm.
- Nếu a = 0 và b0 thì phương trình vô nghiệm.
b. Mã chương trình:
Program Phuong_trinh;
uses crt;
var a,b:real;
begin
 clrscr;
 Writeln(' CHUONG TRINH GIAI PT ax + b = 0');
 Write('Nhap he so a = ');readln(a);
 Write('Nhap he so b = ');readln(b);
 if (a0) then writeln('phuong trinh',a:10:2,'x + ',b:10:2,'= 0',' co nghiem x =;',-b/a:10:2)
 else if (b=0) then writeln('Phuong trinh co vo so nghiem')
 else writeln('Phuong trinh vo nghiem');
 readln
end.
c. Nhận xét: Hãy giải bài toán trên với cách sử dụng ifthenelse (Chú ý trước else không được dùng dấu chấm phẩy)
Bài tập 5: Viết chương trình giải phương trình bậc hai ax2+bx+c=0 (a#0)
a. Thuật giải
- Nhập vào 2 hệ số a,b,c
- Tính delta.
- Nếu delta<0 thì thông báo phương trình vô nghiệm.
- Nếu delta=0 thì tính nghiệm kép và thông báo nghiệm kép
- Nếu delta>0 thì tính hai nghiệm phân biệt và thông báo hai nghiệm.
b. Mã chương trình:
c. Nhận xét: Hãy giải bài toán trên với cách sử dụng ifthenelse (Chú ý trước else không được dùng dấu chấm phẩy)
Bài tập 6: Viết chương trình nhập vào một ngày trong tuần và sau đó chuyển ngày đó sang tiếng anh.
2
3
4
5
6
7
8
Monday
Tuesday
Wednesday
Thursday
Friday
Saturday
Sunday
a. Thuật giải
- Nhập một ngày trong tuần.
- Xét ngày nhập vào:
Trường hợp a = 2: Monday
Trường hợp a = 3: Thursday
...
Trường hợp a = 8: Sunday
Ngoài ra thì thông báo không có ngày này trong tuần.
b. Mã chương trình:
Program dich;
uses crt;
Var thu:byte;
begin
 clrscr;
 write('nhap thu can dich: '); readln(thu);
 case thu of
 2: Write('--> Monday');
 3: Write('--> Tuesday');
 4: Write('--> Wednesday');
 5: Write('--> Thursday');
 6: Write('--> Friday');
 7: Write('--> Saturday');
 8: Write('--> Sunday');
 else
 Write(' Khong co thu nay');
 end;
 readln
end.
Bài tập 7: Viết chương trình cho phép tính diện tích các hình: Hình vuông; Hình chữ nhật; Hình tròn; Tam giác; Hình thang. Người dùng chọn hình cần tính diện tích từ bảng chọn, sau đó khai báo các thông số liên quan và nhận được diện tích của hình:
MOI BAN CHON HINH CAN TINH DIEN TICH
1. Hinh vuong
2. Hinh chu nhat
3. Hinh tron
4. Tam giac (Biet 3 canh)
5. Hinh thang
a. Thuật toán
- Dùng cấu trúc lựa chọn Case of để gọi chương trình cần tính (Xét biến Chon)
+ Nếu là 1 thì gọi chương trình tính diện tích hình vuông.
+ Nếu là 2 thì gọi chương trình tính diện tích hình vuông.
+ Nếu là 3 thì gọi chương trình tính diện tích hình vuông.
+ Nếu là 4 thì gọi chương trình tính diện tích hình vuông.
+ Nếu là 5 thì gọi chương trình tính diện tích hình vuông.
- Xuất kết quả ra màn hình
b. Mã chương trình:
Program Dien_Tich_cac_hinh;
uses crt;
var chon: byte;
 a,b,c,S: real;
Begin
 clrscr;
 writeln('CHUONG TRINH TINH DIEN TICH CAC HINH');
 Writeln(' ------------');
 writeln('1. DIEN TICH HINH TAM GIAC');
 writeln('2. DIEN TICH HINH VUONG');
 writeln('3. DIEN TICH HINH CHU NHAT');
 writeln('4. DIEN TICH HINH THANG');
 writeln('5. DIEN TICH HINH TRON');
 write('Moi ban chon hinh can tinh dien tich: ');readln(chon);
 case chon of
 1 : Begin
 Write('Cho biet canh day: '); readln(a);
 Write('Cho biet chieu cao: '); readln(b);
 S:=(a*b)/2;
 end;
 2:Begin
 Write('Cho biet chieu dai canh: '); readln(a);
 S:=a*a;
 end;
 3:Begin
 Write('Cho biet chieu dai: '); readln(a);
 Write('Cho biet chieu rong: '); readln(b);
 S:=a*b;
 end;
 4:Begin
 Write('Cho biet day lon: '); readln(a);
 Write('Cho biet day nho: '); readln(b);
 Write('Cho biet chieu cao: '); readln(c);
 S:=(a+b)*c/2;
 End;
 5:Begin
 Write('Cho biet ban kinh: '); readln(a);
 S:=a*a*pi;
 End;
 else
 Writeln('Chon sai roi!!!');
 end;
 Writeln('Dien tich cua hinh la: ',S:8:2);
 readln
end.
c. Nhận xét: Với mỗi trường hợp thỏa Case biến chọn of thực hiện một lệnh. Vì thế, muốn thực hiện nhiều lệnh ta cần ghép nhiều lệnh thành một lệnh ghép.
Bài tập 8: Viết chương trình nhập vào 3 cạnh của tam giác. Hãy cho biết tam giác đó là tam giác gì?Tam giác cân, tam giác vuông, tam giác đều, tam giác thường hay không phải là tam giác.
a. Thuật giải.
- Nhập vào 3 cạnh của tam giác.
- Nếu 3 cạnh của tam giác thỏa mãn: tổng hai cạnh bất kỳ lớn hơn cạnh còn lại thì thực hiện
 + Nếu 3 cạnh bằng nhau là tam giác đều
 Ngược lại:
 + Nếu có hai cạnh bằng nhau là tam giác cân
 Ngược lại:
 + Nếu có bình phương một cạnh bằng tổng hai cạnh còn lại là tam giác vuông
 Ngược lại: tam giác thường
Ngược lại thông báo không là tam giác.
b. Mã chương trình:
c. Nhận xét: 
Bài tập 9: Tính tiền điện của một hộ gia đình khi cho biết chỉ số điện kế tháng này và chỉ số điện kế tháng trước. Từ đó tính ra KW tiêu thụ. Tiền điện được tính như sau:
Từ KW số 300:4000đ/kW
Ví dụ:
Nhap chi so dien ke thang nay: 750
Nhap chi so dien ke thang truong: 300
So tien la: 60*1000+60*1200+180*2000+150*4000=1092000
a. Thuật toán:
- Nhập chỉ số điện mới và cũ
- Tính số kí điện tiêu thụ (TT)
- Nếu TT <=60 thì số tiền là: TT*1000
- Nếu 61<=TT và TT<=120 thì số tiền là: 60*1000+(TT-60)*1200.
- Nếu 121<=TT và TT<=300 thì số tiền là: 60*1000+60*1200+(TT-120)*2000
- Nếu TT>300 thì số tiền là: 60*1000+60*1200+180*2000+(TT-300)*4000
b. Chương trình:
c. Nhận xét.
- Chỉnh sửa bài này sử dụng if...then...else hoặc case...of
Bài tập 10: Hãy nhập vào giờ, phút, giây. Sau đó nhập thêm một số giây, hãy in kết quả ra giờ, phút, giây.
a. Thuật giải
- Nhập vào giờ phút giây.
- Nhập thêm giây và cộng số giây vừa nhập vào giây ban đầu. (giay=gic+gim)
- Nếu số giây >=60 thì:
+ Phut:=Phut + giay div 60
+ giay:=giay mod 60
- Nếu số phút >=60 thì:
+ Gio:=Gio + phut div 60
+ phut:=phut mod 60
b. Mã chương trình:
c. Nhận xét:
Bài tập 11: Nhập vào tháng, năm rồi tính số ngày của tháng. Biết năm nhuận là năm chia hết cho 400 hoặc chia hết cho 4 nhưng không chia hết cho 100.
a. Thuật toán:
- Nhập vào tháng, năm.
- Dùng case...of để tính số ngày trong tháng.
+ Tháng 1,3,5,7,8,10,12 có số ngày là 31.
+ Tháng 4,6,9,11 có số ngày là 30
+ Tháng 2, nếu là năm nhuận thì số ngày là 29, ngược lại là 28
- In kết quả số ngày ra màn hình.
b. Chương trình:
Bài tập 12: Viết chương trình nhập vào ngày, tháng, năm. Máy sẽ hiện lên ngày, tháng, năm hôm sau.
a. Thuật giải:
- Nhập vào ngày, tháng, năm.
- Tăng ngày lên 1 đơn vị.
- Xét tháng nhập vào:
Nếu là tháng 2 thì kiểm tra xem là năm nhuận thì nếu là ngày 29 thì ngày hôm sau là ngày đầu tháng và tháng tăng lên 1, ngược lại nếu là ngày 28 thì ngày hôm sau là ngày đầu tháng và tháng tăng lên 1
Nếu là ngày cuối tháng 1,3,5,7,8,10,12 (ngày 31)thì ngày hôm sau là ngày đầu tháng và tháng tăng lên 1.
Nếu là ngày cuối tháng 2,4,6,9,11 (ngày 30) thì ngày hôm sau là ngày đầu tháng và tháng tăng lên 1.
- Nếu tháng =13 thì tăng năm lên 1 và tháng =1.
- Xuất kết quả ngày hôm sau.
b. Chương trình:
Program NgayHomSau;
Uses crt;
Var ngay, thang, nam: integer;
Begin
 Clrscr;
 Write('Nhap vao ngay:');readln(ngay);
 Write('Nhap vao thang:');readln(thang);
 Write('Nhap vao nam:');readln(nam);
 ngay:=ngay+1;
 case thang of
 2: if (nam mod 400=0) or ((nam mod 4=0) and (nam mod 1000)) then
 begin
 if ngay>29 then
 begin
 thang:=thang+1;
 ngay:=1;
 end;
 end
 else if ngay>28 then
 begin
 thang:=thang+1;
 ngay:=1;
 end;
 1,3,5,7,8,10,12:
 if ngay>31 then
 begin
 thang:=thang+1;
 ngay:=1;
 end;
 4,6,9,11:
 if ngay>30 then
 begin
 thang:=thang+1;
 ngay:=1;
 end
 end;
 if thang=13 then
 begin
 nam:=nam+1;
 thang:=1;
 end;
 writeln('Ngay hom sau la: ',ngay,'/',thang,'/',nam);
 readln
end.
c. Nhận xét:
Bài tập 13: (HSG lớp 8 -TP Huế 2006-2007)
Ba bạn An, Bình và Cường cùng tham gia trò chơi oẵn tù tì. Chỉ sử dụng bàn tay úp hoặc mở.Theo hiệu lệnh, cả ba bạn cùng oẵn tù tì. Nếu cả ba cùng sấp hoặc cùng ngửa thì chưa phát hiện người thua cuộc (hòa nhau). Nếu một bạn có trạng thái khác với hai bạn kia (nghĩa là bàn tay của bạn ấy sấp còn hai người kia ngửa và ngược lại bàn tay của bạn ấy ngửa thì hai người kia sấp) thì bạn đó thắng cuộc. Hãy viết chương trình mô phỏng trò chơi trên.
a. Thuật toán:	
- Nhập vào trạng thái của 3 người chơi.
- Xét tám trường hợp xảy ra.
+ Cả 3 đều sấp è Hòa
+ Cả 3 đều ngửa è Hòa
+ A là ngửa và hai bạn còn lại sấp è A thắng
+ A là sấp và hai bạn còn lại ngửa è A thắng
+ B là ngửa và hai bạn còn lại sấp è B thắng
+ B là ngửa và hai bạn còn lại sấp è B thắng
+ C là ngửa và hai bạn còn lại sấp è C thắng
+ C là ngửa và hai bạn còn lại sấp è C thắng
Ví du: 
Nhap vao trang thai cua ban An: N
Nhap vao trang thai cua ban Binh: N
Nhap vao trang thai cua ban Cuong: S
Vay ban Cuong la nguoi thang cuoc.
b. Chương trình:
Program Sap_ngua;
uses crt;
Var A, B, C: Char;
Begin
 clrscr;
writeln(‘Nhap trang thai cua ban An:’); readln(A);
writeln(‘Nhap trang thai cua ban Binh:’); readln(B);
writeln(‘Nhap trang thai cua ban Cuong:’); readln(C);
 if (A=’N’) and (B=’N’) and (C=’N’) then Write(' Hoa');
 if (A=’S’) and (B=’S’) and (C=’S’) then Write(' Hoa');
 if (A=’N’) and (B=’S’) and (C=’S’) then Write(' Vay ban An la nguoi thang cuoc');
 if (A=’S’) and (B=’N’) and (C=’N’) then Write(' Vay ban An la nguoi thang cuoc');
 if (A=’N’) and (B=’S’) and (C=’N’) then Write(' Vay ban Binh la nguoi thang cuoc');
 if (A=’S’) and (B=’N’) and (C=’S’) then Write(' Vay ban Binh la nguoi thang cuoc');
 if (A=’S’) and (B=’S’) and (C=’N’) then Write(' Vay ban Cuong la nguoi thang cuoc');
 if (A=’N’) and (B=’N’) and (C=’S’) then Write(' Vay ban Cuong la nguoi thang cuoc');
readln
end.	

Tài liệu đính kèm:

  • docBoi_duong_hsg_k10.doc