Đang tải... (xem toàn văn)
Nếu người sử dụng nhập dữ liệu không đúng yêu cầu thì chương trình sẽ đưa ra thông báo và cho phép người sử dụng nhập lại dữ liệu khác.. Chú ý : Tạo thư mục với tên và số báo danh của [r]
(1)ĐỀ THI CHỌN HỌC SINH GIỎI MÔN TIN HỌC Năm học : 2008 – 2009
Thời gian làm : 120 phút (Không kể thời gian giao đề)
-Sử dụng ngôn ngữ lập trình Free Pascal để viết chương trình máy tính giải toán sau :
Bài : (2 điểm) Một số mà đọc từ trái sang phải giống hệt đọc từ phải sang trái gọi số đối xứng. Số 14541 số đối xứng cịn số 6667 khơng số đối xứng Hiển nhiên số 0330 không số đối xứng (do số đứng vị trí bên trái)
Hãy tìm tất số đối xứng từ đến N Biết N số nguyên dương lớn nhập vào từ bàn phím
Bài : (3 điểm)
Tìm tất số nguyên tố mảng hai chiều A gồm N hàng M cột Lưu tất giá trị tìm vào mảng chiều in mảng chiều hình
u cầu :
N, M hai số nguyên dương lớn Mảng A chứa số nguyên dương lớn
Trong chương tình có kiểm tra liệu nhập vào Nếu người sử dụng nhập liệu không yêu cầu chương trình đưa thơng báo cho phép người sử dụng nhập lại liệu khác
Bài : (4 điểm) Tính tổng hai số tự nhiên lớn (chứa tối đa 255 chữ số) nhập vào từ bàn phím
Bài : (1 điểm) Tìm in hình từ có độ dài lớn xâu ký tự nhập vào từ bàn phím
(2)ĐÁP ÁN ĐỀ THI CHỌN HỌC SINH GIỎI MÔN TIN HỌC Năm học : 2008 - 2009
-BÀI :
- Khai báo đủ biến chương trình : 0.25 điểm - Nhập kiểm tra giá trị N : 0.25 điểm - Đoạn mã kiểm tra số đối xứng : 1.00 điểm
- Hồn thiện chương trình : 0.50 điểm
CHƯƠNG TRÌNH MẪU CỦA BÀI :
Program So_doi_xung;
Var N,i,j:integer; s1,s2:String; Begin
Repeat
Write('Nhap N = '); Readln(N);
if N<1 then Writeln('N phai lon hon hoac bang 1'); Until N>0;
For i:=1 to N Begin
str(i,s1); s2:='';
for j:=length(s1) downto s2:=s2+s1[j]; if s1=s2 then Write(i:8);
End; End BÀI :
- Khai báo đủ biến chương trình : 0.5 điểm - Nhập kiểm tra giá trị N, M : 0.5 điểm - Nhập mảng chiều gồm số nguyên dương : 0.5 điểm - Kiểm tra yêu cầu liệu mảng chiều A : 0.25 điểm - Đoạn mã kiểm tra số nguyên tố : 1.00 điểm
(3)CHƯƠNG TRÌNH MẪU CỦA BÀI :
Program So_Nguyen_To; Var N, M, i, j, k : integer;
A:array[1 20,1 20] of integer; Begin
Repeat
Write('Nhap so hang cua A : ');Readln(N);
if N<2 then Writeln('So hang cua A phai lon hon hoac bang 2'); Until N>=2;
Repeat
Write('Nhap so cot cua A : ');Readln(M);
if M<2 then Writeln('So cot cua A phai lon hon hoac bang 2'); Until M>=2;
For i:=1 to N For j:=1 to M Repeat
Write('Nhap phan tu tai hang ',i,' cot ',j,' cua A : '); Readln(A[i,j]);
if A[i,j]<2 then
Writeln('Cac phan tu cua A phai la lon hon hoac bang 2'); Until A[i,j]>=2;
Writeln('Cac so nguyen to la : '); For i:=1 to N
For j:=1 to M Begin
k:=2;
while (k<A[i,j]) and (A[i,j] mod k <>0) k:=k+1; if k>=A[i,j] then write(A[i,j]:8);
End; End
Bài :
- Khai báo đủ biến chương trình : 0.25 điểm - Nhập kiểm tra xâu ký tự có dạng số nguyên : 1.50 điểm - Đoạn mã cộng hai số nguyên lớn : 2.00 điểm
(4)CHƯƠNG TRÌNH MẪU CỦA BÀI
Var st1,st2:string; i:integer;
Function kiemtra(st:string):boolean; Var
kt:boolean; i,k,code:integer; Begin
kt:=true; For i:=1 to length(st) Begin
val(st[i],k,code); If code<>0 then Begin kt:=false; break; end; End;
kiemtra:=kt; End;
Function Cong(st1,st2:string):string;
Var st,st3:string; n,m,k,sd,code:integer; Begin
st:=''; sd:=0; For i:=length(st1) downto Begin
val(st1[i],n,code); val(st2[i],m,code); k:=(n+m+sd) mod 10; str(k,st3); st:=st3+st; sd:=(n+m+sd) div 10;
end;
if sd>0 then begin
str(sd,st3); st:=st3+st; end;
Cong:=st; End;
Begin Repeat
Write('Nhap vao so thu nhat : '); Readln(st1); Until kiemtra(st1);
Repeat
Write('Nhap vao so thu hai : '); Readln(st2); Until kiemtra(st2);
For i:=1 to abs(length(st1)-length(st2))
(5)Writeln('Tong la : ', cong(st1,st2)); End
(Học sinh sử dụng hàm mẫu viết trực tiếp trên chương trình chính.)
Bài :
- Khai báo biến nhập yêu cầu : 0.25 điểm - Đoạn mã xác định in từ xâu ký tự : 0.50 điểm - Hồn thiện chương trình với kết đúng : 0.25 điểm CHƯƠNG TRÌNH MẪU CỦA BÀI
Program Tim;
Var st:String; i, t,len,index,x:integer; kq:array[1 100] of string; Begin
Write('Nhap xau ky tu ');Readln(st); While st[1]=' ' delete (st,1,1);
While st[length(st)]=' ' delete(st,length(st),1); while pos(' ',st)<>0 delete(st,pos(' ',st),1); st:=st+' ';
x:=0;
While pos(' ',st)<>0 Begin
Writeln(copy(st,1,pos(' ',st))); delete(st,1,pos(' ',st));
(6)