Phép chia đôi Tên chương trình: BISECTION.PAS Ta gọi phép chia đôi tam giác theo cạnh dài nhất là việc dựng đường trung tuyến xuống cạnh có độ dài lớn nhất của tam giác (nếu có nhiều cạ[r]
Trang 1BỘ GIÁO DỤC VÀ ĐÀO TẠO Kè THI CHỌN HỌC SINH GIỎI QUỐC GIA
LỚP 12 THPT NĂM HỌC 2003-2004
Mụn: Tin học - Bảng B
Thời gian: 180 phỳt (Khụng kể thời gian giao đề)
Ngày thi: 12/03/2004
TỔNG QUAN BÀI THI NGÀY THỨ HAI BẢNG B
Tờn bài Tờn chương trỡnh File dữ liệu vào File kết quả BÀI 3 Phân tích chơngtrình ANALYS.PAS ANALYS.INP ANALYS.OUT
BÀI 4 Phộp chia đụi BISECTION.PAS BISECTION.INP BISECTION.OUT
Hóy lập trỡnh giải cỏc bài toỏn sau:
Bài 3 Phõn tớch chương trỡnh Tờn chương trỡnh: ANALYS PAS
Trong việc phân tích chơng trình, cần phát hiện xem đoạn mã nguồn của chơng trình có chứa các câu lệnh mà không khi nào đợc thực hiện hay không (những câu lệnh nh vậy để ngắn gọn ta gọi là câu lệnh thừa) Sự có mặt của các câu lệnh thừa thờng mách bảo là chơng trình còn lỗi Do đó trong chơng trình dịch của tất cả các ngôn ngữ lập trình luôn có môđun kiểm tra sự có mặt của các câu lệnh thừa Bạn cần viết chơng trình thực hiện công việc của môđun này
Dữ liệu: Vào từ file văn bản ANALYS.INP gồm không quá 30000 dòng chứa dãy
thông báo là kết quả của việc phân tích ngữ nghĩa dãy câu lệnh trong mã nguồn của một chơng trình cho trớc Mỗi dòng chứa thông báo về câu lệnh
t-ơng ứng trong cht-ơng trình cho biết cht-ơng trình sau khi thực hiện câu lệnh sẽ tiếp tục thực hiện câu lệnh nào và có một trong ba dạng sau:
NEXT: thực hiện câu lệnh kế tiếp;
GOTO n 1 với n1 là số nguyên dơng: thực hiện câu lệnh với chỉ số n1 (các câu lệnh trong dãy lệnh đợc đánh số bắt đầu từ 1);
JUMP n 1 OR n 2 với n1 và n2 là các số nguyên dơng: tùy thuộc điều kiện
có thể chuyển đến thực hiện câu lệnh với chỉ số n1 hoặc câu lệnh với chỉ số n2
Các chỉ số trong các thông báo đợc phân tách với các từ khoá (GOTO,JUMP,OR)
bởi ít nhất một dấu cách Chơng trình bắt đầu thực hiện từ câu lệnh với chỉ số 1
Kết quả: Ghi ra file văn bản ANALYS OUT:
Dòng đầu tiên ghi số nguyên k là số lợng câu lệnh thừa trong chơng trình đã cho
Nếu k>0 thì mỗi dòng trong số k dòng tiếp theo chứa chỉ số của một câu lệnh thừa Các chỉ số đợc đa ra theo thứ tự tăng dần
Ví dụ:
NEXT JUMP 4 OR 6 2 5
Đề Thi Chính thức
Trang 2GOTO 3
NEXT
GOTO 8
NEXT
NEXT
7
Trang 3Bài 4 Phép chia đôi Tên chương trình: BISECTION.PAS
Ta gọi phép chia đôi tam giác theo cạnh dài nhất là việc dựng đường trung tuyến xuống cạnh có độ dài lớn nhất của tam giác (nếu có nhiều cạnh có cùng độ dài lớn nhất thì chọn tuỳ ý một trong số chúng) chia tam giác ra thành hai tam giác Cho tam giác T0,0 Thực hiện phép chia đôi tam giác
T0,0 theo cạnh dài nhất ta thu được hai tam giác T1,0 và T1,1 Đối với hai tam giác vừa thu được T1,0
và T1,1 ta lại áp dụng phép chia đôi theo cạnh dài nhất và nhận được 4 tam giác T2,0, T2,1, T2,2 và
T2,3 Hai lần phân chia vừa nêu được minh hoạ trong hình 1
Lặp lại quá trình phân chia tam giác này đến lần thứ n ta nhận được tập n gồm 2 n tam
giác Tn,j , j = 0, 1, , 2 n-1 Các tam giác trong tập n có thể phân thành các lớp đồng dạng như sau: Hai tam giác trong n thuộc cùng một lớp đồng dạng nếu chúng là đồng dạng với nhau
Ví dụ: Nếu áp dụng quá trình phân chia trên đối với tam giác đều đến lần thứ ba, ta thu được ba
lớp đồng dạng Mỗi tam giác trong tập 3 sẽ đồng dạng với một trong ba tam giác được tô đậm trong hình 2
Nhắc lại: trong tam giác ABC, gọi M là trung điểm của BC, ta có
2AM2 = AB2 + AC2 – BC2/2
Yêu cầu: Hãy xác định số lớp đồng dạng của tập các tam giác thu được sau lần phân chia thứ n.
Dữ liệu: Vào từ file văn bản BISECTION.INP chứa bốn số nguyên a, b, c và n (2 n 300)
được ghi cách nhau bởi dấu cách, theo thứ tự là độ dài của ba cạnh của tam giác và số lần thực hiện phép chia tam giác
Kết quả: Ghi ra file văn bản BISECTION.OUT số lượng lớp đồng dạng của tập các tam giác thu
được sau lần phân chia thứ n.
Ví dụ:
Ghi chú:
Thí sinh không được sử dụng tài liệu
Trang 4 Giám thị không giải thích gì thêm.