Tải bản đầy đủ (.doc) (6 trang)

DE THI PASCAL

Bạn đang xem bản rút gọn của tài liệu. Xem và tải ngay bản đầy đủ của tài liệu tại đây (128.95 KB, 6 trang )

<span class='text_page_counter'>(1)</span><div class='page_container' data-page=1>

<b>ĐỀ THI CHỌN HỌC SINH GIỎI MÔN TIN HỌC</b>


<b>Năm học : 2008 – 2009</b>



Thời gian làm bài : 120 phút (Không kể thời gian giao đề)




<i><b>---Sử dụng ngơn ngữ lập trình Free Pascal để viết các chương trình máy</b></i>


<i><b>tính giải quyết các bài tốn sau : </b></i>



<i><b>Bài 1 :</b></i> (2 điểm) <i><b>Một số mà đọc từ trái sang phải giống hệt như đọc từ phải sang trái</b></i>
<i><b>gọi là số đối xứng.</b></i> Số 14541 là số đối xứng cịn số 6667 khơng là số đối xứng. Hiển
nhiên số 0330 không là số đối xứng (do số 0 đứng ở vị trí đầu tiên bên trái).


Hãy tìm tất cả các số đối xứng từ 1 đến N. Biết rằng N là một số nguyên dương lớn
hơn 1 được nhập vào từ bàn phím.


<i><b>Bài 2 :</b></i> (3 điểm)


Tìm tất cả các số nguyên tố trong một mảng hai chiều A gồm N hàng và M cột. Lưu
tất cả các giá trị tìm được vào mảng một chiều và in mảng một chiều đó ra màn hình.


Yêu cầu :


 N, M là hai số nguyên dương lớn hơn hoặc bằng 2.
 Mảng A chứa các số nguyên dương lớn hơn hoặc bằng 2.


 Trong chương tình có kiểm tra dữ liệu nhập vào. Nếu người sử dụng nhập
dữ liệu khơng đúng 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.


<i><b>Bài 3 :</b></i> (4 điểm) Tính tổng của hai số tự nhiên lớn (chứa tối đa 255 chữ số) được nhập


vào từ bàn phím.


<i><b>Bài 4 :</b></i> (1 điểm) Tìm và in ra màn hình một từ có độ dài lớn nhất trong một xâu ký tự
được nhập vào từ bàn phím.


</div>
<span class='text_page_counter'>(2)</span><div class='page_container' data-page=2>

<b>ĐÁP ÁN ĐỀ THI CHỌN HỌC SINH GIỎI MÔN TIN HỌC</b>


<b>Năm học : 2008 - 2009</b>




<i><b>---BÀI 1 :</b></i>



- Khai báo đúng và đủ các biến trong chương trình : 0.25 điểm


- Nhập và 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



<b>CHƯƠNG TRÌNH MẪU CỦA BÀI 1 : </b>


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 do
Begin


str(i,s1); s2:='';


for j:=length(s1) downto 1 do s2:=s2+s1[j];
if s1=s2 then Write(i:8);


End;
End.

<i><b>BÀI 2 :</b></i>



- Khai báo đúng và đủ các biến trong chương trình : 0.5 điểm


- Nhập và kiểm tra giá trị N, M

: 0.5 điểm


- Nhập mảng 2 chiều gồm các số nguyên dương

: 0.5 điểm


- Kiểm tra yêu cầu về dữ liệu của mảng 2 chiều A

: 0.25 điểm


- Đoạn mã kiểm tra số nguyên tố

: 1.00 điểm



</div>
<span class='text_page_counter'>(3)</span><div class='page_container' data-page=3>

<b>CHƯƠNG TRÌNH MẪU CỦA BÀI 2 : </b>


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 do
For j:=1 to M do
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 do


For j:=1 to M do
Begin


k:=2;



while (k<A[i,j]) and (A[i,j] mod k <>0) do k:=k+1;
if k>=A[i,j] then write(A[i,j]:8);


End;
End.


<i><b>Bài 3 :</b></i>



- Khai báo đúng và đủ các biến trong chương trình : 0.25 điểm


- Nhập và kiểm tra 2 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



</div>
<span class='text_page_counter'>(4)</span><div class='page_container' data-page=4>

<b>CHƯƠNG TRÌNH MẪU CỦA BÀI 3 </b>


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) do
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 1 do
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)) do


</div>
<span class='text_page_counter'>(5)</span><div class='page_container' data-page=5>

Writeln('Tong la : ', cong(st1,st2));
End.


<i><b>(Học sinh có thể sử dụng hàm như bài mẫu hoặc viết trực tiếp trên</b></i>


<i><b>chương trình chính.)</b></i>



<i><b>Bài 4 :</b></i>



- Khai báo biến và nhập đúng yêu cầu

: 0.25 điểm


- Đoạn mã xác định và in ra từng từ của xâu ký tự : 0.50 điểm


- Hồn thiện chương trình với kết quả đúng

: 0.25 điểm


<b>CHƯƠNG TRÌNH MẪU CỦA BÀI 4 </b>


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]=' ' do delete (st,1,1);



While st[length(st)]=' ' do delete(st,length(st),1);
while pos(' ',st)<>0 do delete(st,pos(' ',st),1);
st:=st+' ';


x:=0;


While pos(' ',st)<>0 do
Begin


Writeln(copy(st,1,pos(' ',st)));
delete(st,1,pos(' ',st));


</div>
<span class='text_page_counter'>(6)</span><div class='page_container' data-page=6></div>

<!--links-->

Tài liệu bạn tìm kiếm đã sẵn sàng tải về

Tải bản đầy đủ ngay
×