Sở GIáO DụC Và ĐàOnăm học 2008-2009 môn: tin học – KHốI không CHUYÊN Đề chính thức SBD Thời gian 180 phút, không kể thời gian giao đề đề ra Sử dụng ngôn ngữ lập trình Pascal để lập tr
Trang 1Sở GIáO DụC Và ĐàO
năm học 2008-2009
môn: tin học – KHốI không CHUYÊN
Đề chính thức
SBD Thời gian 180 phút, không kể thời gian giao
đề
đề ra
Sử dụng ngôn ngữ lập trình Pascal để lập trình giải các bài toán sau:
Câu 1 (3,0 điểm): Tính tổng giá trị các chữ số TONG.PAS
Cho một số nguyên dơng N
Yêu cầu: Hãy tính tổng giá trị các chữ số của N.
Dữ liệu vào: Cho trong file văn bản TONG.INP có cấu trúc nh sau:
- Dòng 1: Ghi số nguyên dơng N (10 < N < 109)
Dữ liệu ra: Ghi ra file văn bản TONG.OUT theo cấu trúc nh sau:
- Dòng 1: Ghi ra tổng giá trị các chữ số của N
Ví dụ:
Cho một xâu St gồm các kí tự từ 'a' 'z' có độ dài tối đa không quá
255 kí tự.
Yêu cầu: Hãy tìm tất cả các kí tự xuất hiện trong xâu St ít nhất hai lần Dữ liệu vào: Cho trong file văn bản KITU.INP có cấu trúc nh sau:
- Dòng 1: Ghi các kí tự của xâu St, các kí tự đợc viết liền nhau
Dữ liệu ra: Ghi ra file văn bản KITU.OUT theo cấu trúc nh sau:
- Dòng 1: Nếu không tìm đợc kí tự thỏa mãn yêu cầu thì ghi số -1 Ngợc lại
thì ghi các kí tự tìm đợc theo thứ tự tăng dần của mã ASCII, các kí tự ghi liền nhau.
Ví dụ:
KITU.INP KITU.OUT KITU.INP KITU.OUT hchcsuca
Câu 3 (3,5 điểm): Sắp xếp dãy số giảm dần SXDS.PAS
Cho dãy số gồm N phần tử có giá trị nguyên dơng a1, a2, , aN
Yêu cầu: Hãy sắp xếp dãy số theo thứ tự giảm dần.
Dữ liệu vào: Cho trong file văn bản SXDS.INP có cấu trúc nh sau:
- Dòng 1: Ghi số nguyên dơng N (1 ≤ N ≤ 32000).
- Dòng 2: Ghi N số nguyên dơng xi là giá trị của các phần tử trong dãy Các số
đợc ghi cách nhau ít nhất một dấu cách (0 < xi ≤ 16000; 1 ≤ i ≤ N).
Dữ liệu ra: Ghi ra file văn bản SXDS.OUT theo cấu trúc nh sau:
- Dòng 1: Ghi N số nguyên dơng là giá trị của N phần tử trong dãy sau khi đã
sắp xếp Các số đợc ghi cách nhau ít nhất một dấu cách.
Giới hạn thời gian thực hiện chơng trình không quá 0,5 giây đối với một bộ dữ liệu vào Trong đó có 85% bộ dữ liệu vào có giá trị của N> 16000.
Ví dụ:
Trang 2SXDS.INP SXDS.OUT 7
6 9 2 10 2
16000 1
16000 10 9 6 2 2 1
==== Hết ====
Sở GIáO DụC Và ĐàO
năm học 2008-2009
môn: tin học – KHốI không CHUYÊN Hớng dẫn chấm
I- Ph ơng pháp:
- Giám khảo tạo bộ dữ liệu vào, tính toán kết quả Thực hiện chơng trình của học sinh và so sánh kết quả.
- Giám khảo có thể sử dụng chơng trình gợi ý dới đây để tính toán kết quả của dữ liệu vào.
- Chơng trình học sinh đúng một bộ test, giám khảo cho 0,5 điểm.
Nh vậy, nếu một bài có 3 điểm thì giám khảo phải tạo 6 bộ test.
- Đối với câu 3: Giới hạn thời gian thực hiện chơng trình không quá 0,5 giây đối với một bộ dữ liệu vào Trong đó có 85% bộ dữ liệu vào
có giá trị của N> 16000.
II- Ch ơng trình gợi ý:
Câu 1 (3,0 điểm): Tính tổng giá trị các chữ số
Program tongcs;
Const fi='Tong.inp';
fo='Tong.out';
Var N:Longint;
Procedure Doc;
Var f:Text;
Begin
Assign(f,fi);
Reset(f);
Readln(f,N);
Close(f);
End;
Function Tong:Longint;
Var T:Longint;
Begin
T:=0;
While N > 0 do
Begin
T:=T+N mod 10;
N:= N Div 10;
End;
Tong:=T;
End;
Procedure Ghi;
Var f:Text;
Begin
Assign(f,fo);
ReWrite(f);
Write(f,tong);
Close(f);
End;
BEGIN
Doc; Ghi;
END
Trang 3C©u 2 (3,5 ®iÓm): T×m kÝ tù
Program Tim_ki_tu;
Const fi='Kitu.inp';
fo='Kitu.out';
Type mmc=Array['a' 'z'] of Byte;
Var A:mmc;
St:String;
f:text;
Procedure Doc;
begin
assign(f,fi);
reset(f);
readln(f,st);
close(f);
end;
procedure xl;
var i:byte;
begin
fillchar(a,sizeof(a),0);
for i:=1 to length(st) do a[st[i]]:=a[st[i]] +1;
end;
procedure xuat;
var ch:char; kt:boolean;
begin
assign(f,fo);
rewrite(f);
kt:=false;
for ch:='a' to 'z' do
if a[ch]>=2 then
begin
kt:=true;
write(f,ch);
end;
if kt=false then write(f,-1);
close(f);
end;
Begin
doc;xl;xuat;End
C©u 3 (3,5 ®iÓm): S¾p xÕp d·y sè gi¶m dÇn
Program Sap_xep_day_so;
Const fi='SXDS.inp';
fo='SXDS.out';
MaxN=16000;
Type mmc = Array[1 MaxN] of word;
Var A:mmc;
N:word;
Procedure Doc;
Var f:Text;
i,so:word;
Begin
Fillchar(A,sizeof(A),0);
Assign(f,fi);
Reset(f);
Readln(f,N);
For i:=1 to N do
Begin
Read(f,so);
A[so]:= A[so] + 1;
End;
Close(f);
End;
Procedure Ghi;
Var i,j:Word;
f:Text;
Begin
Assign(f,fo);
Rewrite(f);
Trang 4For i:=maxn downto 1 do
For j:=1 to A[i] do Write(f,i,' ');
Close(f);
End;
BEGIN
Doc; Ghi;
END