Em hãy dùng ngôn ngữ lập trình Pascal để lập trình giải các bài toán sau: Bài 1: Cạnh tam giác (3 điểm). Nhập vào ba số dương, kiểm tra xem chúng có thỏa mãn là ba cạnh của tam giác hay[r]
(1)PHÒNG GD&ĐT HẢI LĂNG
ĐỀ THI CHỌN HSG CẤP HUYỆN NĂM HỌC 2008 – 2009 Khóa ngày 22 tháng năm 2009
Môn thi: TIN HỌC
Thời gian: 120 phút (không kể thời gian giao đề)
TỔNG QUAN BÀI THI
Tên bài Tên chương trình Dữ liệu vào Kết quả
BÀI Cạnh tam giác TAMGIAC Bàn phím Màn hình
BÀI Chuẩn hóa xâu CH_XAU Bàn phím Màn hình
BÀI Dãy lớn DAYMAX Bàn phím Màn hình
Em dùng ngơn ngữ lập trình Pascal để lập trình giải tốn sau: Bài 1: Cạnh tam giác (3 điểm)
Nhập vào ba số dương, kiểm tra xem chúng có thỏa mãn ba cạnh tam giác hay khơng? Nếu thỏa mãn kiểm tra xem tam giác gì? (tam giác thường, cân hay đều) Tính diện tích tam giác theo công thức: dt = (p(p-a)(p-b)(p-c)); với p chu vi.
Bài 2: Chuẩn hóa xâu (4 điểm)
Nhập vào câu (xâu ký tự); chuẩn hóa câu (nghĩa đầu cuối câu khơng có ký tự trống, từ cách ký tự trống) Đếm xem câu có từ?
Ví dụ: INPUT (nhập vào): “ cong cha nhu nui Thai Son ” OUTPUT (in ra): “cong cha nhu nui Thai Son”
Cau co: tu (câu có từ) Bài 3: Dãy lớn (3 điểm)
Nhập dãy số nguyên lưu mảng Không dùng mảng trung gian hãy in hình dãy tăng nghiêm ngặt (phần tử sau phải lớn phần tử trước) có tổng giá trị phần tử lớn nhất.
Ví dụ: INPUT (nhập vào): 10 12 29 OUTPUT (in ra): 29
……… HẾT ………
(Cán coi thi khơng giải thích thêm!)
(2)PHỊNG GD&ĐT HẢI LĂNG
ĐỀ THI CHỌN HSG CẤP HUYỆN NĂM HỌC 2008 – 2009 Khóa ngày 22 tháng năm 2009
Môn thi: TIN HỌC
Thời gian: 120 phút (không kể thời gian giao đề) ĐÁP ÁN – HƯỚNG DẪN CHẤM:
Bài 1: Cạnh tam giác (3 điểm) Có thể đưa chương trình sau:
CHƯƠNG TRÌNH THANG ĐIỂM
Program TAMGIAC; Var a, b, c: Real; p, dt: Real; Begin
Write('Nhap vao so:'); Readln(a, b, c); If (a+b>c) and(b+c>a) and(a+c>b)then Begin
If (a=b) and(b=c) then
Writeln('TAM GIAC DEU') Else If (a=b)or(b=c)or(a=c) then Writeln('TAM GIAC CAN') Else Writeln('TAM GIAC THUONG'); p:=(a+b+c)/2;
dt:= sqrt(p*(p-a)*(p-b)*(p-c));
Write(' Dien tich cua tam giac la:', dt:10:2); End Else
Writeln('Khong thoa man canh tam giac!!'); Readln;
End
+ Khai báo đúng, đủ biến lệnh nhập liệu: 0.5 điểm + Đưa điều kiện thỏa mản cạnh tam giác: 0.5 điểm
+ Đưa điều kiện thỏa mản cạnh tam giác: 0.5 điểm
+ Đưa điều kiện thỏa mản tam giác đều: 0.5 điểm + Đưa điều kiện thỏa mản tam giác cân: 0.5 điểm + Tính diện tích: 0.5 điểm
Bài 2: Chuẩn hóa xâu (4 điểm) Có thể đưa chương trình sau:
CHƯƠNG TRÌNH THANG ĐIỂM
Program CH_XAU;
Var st: string; i, dem: integer; Begin
Write('Nhap xau:'); Readln(st);
Writeln('Xau truoc chuan hoa la:', st); While st[1]=' ' Delete(st,1,1);
While st[length(st)]=' ' Delete(st,length(st),1); For i:=1 to length(st)
If st[i]=' ' then
While st[i+1]=' ' Delete(st,i+1,1); Write('Xau chuan hoa la:', st);
+ Khai báo đúng, đủ biến lệnh nhập liệu: 0.5 điểm + Xóa tất ký tự trống đầu: 0.5 điểm
+ Xóa tất ký tự trống cuối: 0.5 điểm
+ Xóa tất ký tự trống để lại một: 1.5 điểm
(3)For i:=1 to length(st)
If st[i]=' ' then dem:=dem+1;
Writeln('= cau co ',dem+1, ' tu!!!'); Readln;
End
Bài 3: Dãy lớn (3 điểm)
Có thể đưa chương trình sau:
CHƯƠNG TRÌNH THANG ĐIỂM
Program DAYMAX;
Var a:array[1 100] of integer; spt,i, vt, max, n, tong: integer; Begin
Write('Nhap so pt cua mang:'); Readln(spt); For i:=1 to spt
Begin
Write('A[',i,']='); Readln(a[i]); End;
Write('Mang so da cho ban dau:'); For i:=1 to spt Write(a[i]:3); Writeln;
vt:=1; max:=a[1]; n:=1; tong:=a[1]; For i:=2 to spt
Begin
If(a[i]>a[i-1]) then tong:=tong+a[i]; If(a[i]<=a[i-1]) or(i=spt) then
Begin
If tong>max then Begin
max:=tong; vt:=n; End;
n:=i; tong:=a[i]; End;
End;
Writeln(' Day co tong lon nhat la:'); i:=vt;
Repeat
Write(a[i]:3); max:=max-a[i]; i:=i+1; Until max=0;
Readln; End
+ Khai báo đúng, đủ biến lệnh nhập liệu: 0.5 điểm + Có in mảng trước dãy cần tìm: 0.5 điểm