SỞ GD&ĐT QUẢNG BÌNH
KÌ THI CHỌN HSG TỈNH NĂM HỌC 2015-2016
Khóa thi ngày 23 - 3 - 2016
ĐỀ CHÍNH THỨC
Môn: Tin học
LỚP 9 THPT
Họ và tên: ………………………….. Thời gian: 150 phút (không kể thời gian giao đề)
Số báo danh: ………..……………...
Đề gồm có 2 trang
ĐỀ RA
Sử dụng ngôn ngữ lập trình Turbo Pascal để lập trình giải các bài toán sau:
Câu 1:(3.0 Điểm) Đếm số
DEMSO.PAS
Cho dãy số nguyên A gồm N phần tử a1, a2, ... , aN
(1 ≤ N ≤ 32000; 1 ≤ ai ≤ 32000).
Yêu cầu: Hãy đếm số lượng các số chẵn trong dãy A.
Dữ liệu vào: Cho trong file văn bản DEMSO.INP có cấu trúc như sau:
- Dòng 1: Ghi số nguyên dương N.
- Dòng 2: Ghi N số nguyên mỗi số cách nhau một dấu cách.
Dữ liệu ra: Ghi ra file văn bản DEMSO.OUT theo cấu trúc như sau:
- Dòng 1: Ghi K là số lượng các số chẵn.
Ví dụ:
DEMSO.INP DEMSO.OUT
5
2
12345
Câu 2: (3,5 điểm) Xếp chữ
XEPCHU.PAS
Cuối giờ học cô giáo mầm non sắp xếp N tấm bìa có ghi các chữ cái lấy trong
tập [’A’..’Z’], sắp xếp theo từng loại chữ cái và đếm số lượng của chúng. ( với 1 ≤ N
≤ 400000). Các em hãy giúp cô giáo thực hiện công việc trên.
Yêu cầu: Hãy đếm số lượng tấm bìa theo các chữ cái.
Dữ liệu vào: Cho trong file văn bản XEPCHU.INP có cấu trúc như sau:
- Dòng 1: Ghi số nguyên dương N là số lượng tấm bìa.
- Dòng 2: Ghi N chữ cái là ký hiệu của N tấm bìa.
Dữ liệu ra: Ghi ra file văn bản XEPCHU.OUT theo cấu trúc như sau:
- Dữ liệu được ghi trên nhiều dòng, dòng thứ i ghi ký hiệu của tấm bìa Si và số lượng
của nó là Ti. Si và Ti được viết liền nhau.
Ví dụ:
TANCHU.INP
TANCHU.OUT
6
A2
AABBCC
B2
C2
Trang 1
Câu 3: (3,5 điểm) Tính tổng
TONG.PAS
Cho số X gồm N chữ số, Số Y gồm M chữ số (1<=M<=32000; 1<=N<=32000)).
Yêu cầu: Tính tổng 2 số X và Y.
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 2 số nguyên dương N M mỗi số cách nhau một dấu cách.
Dòng 2: Ghi số X
Dòng 3: Ghi số Y
Dữ liệu ra: Ghi ra file TONG.OUT, theo cấu trúc như sau:
Dũng 1: Ghi số lượng các chữ số của tổng tính được.
Dũng 2: Ghi giá trị tổng.
Ví dụ:
TONG.INP
TONG.OUT
34
4
333
5769
5436
Trang 2
HƯỚNG DẪN VÀ ĐÁP ÁN CHẤM
ĐỀ THI CHỌN HSG LỚP 9 THCS –NĂM HỌC 2015-2016
Môn: Tin học
Khóa thi ngày 23 - 3 - 2015
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.
- Đối với câu 1: Giám khảo phải tạo được 06 bộ test, chương trình học sinh đúng
01 bộ test giám khảo cho 0.5 điểm.
- Đối với câu 2:
+ Giám khảo phải tạo được 07 bộ test, chương trình học sinh đúng 01 bộ test
thì giám khảo cho 0.5 điểm.
- Đối với câu 3:
+ Giám khảo phải tạo được 07 bộ test, chương trình học sinh đúng 01 bộ test
thì giám khảo cho 0.5 điểm.
+ Giám khảo phải tạo 3 bộ test với N và M >256
II- Chương trình gợi ý:
{$r+}
const fi='demso.inp';
fo='demso.out';
max=32000;
var a: array[1..max] of INTEGER;
g,f:text;
d,i,n:integer;
PROCEDURE SINH;
BEGIN
ASSIGN(F,FI); REWRITE(F);
WRITELN(F,MAX);
FOR I:=1 TO MAX DO
WRITE(F,I,' ');
CLOSE(F);
END;
procedure doc;
begin
assign(f,fi);
reset(f);
read(f,n);
for i:=1 to n do
read(f,a[i]);
close(f);
end;
procedure xl;
begin
assign(g,fo);
rewrite(g);
for i:=1 to n do
Trang 3
if a[i] mod 2 =0 then
d:=d+1;
write(g,d);
close(g);
end;
begin
SINH;
doc;
xl;
end.
{$R+}
CONST
fi='XEPCHU.inp';
fo='XEPCHU.out';
var st:array['A'..'Z'] of longint;
i,j,N:longint;
f:text;
procedure sinh;
begin
assign(F,fi); rewrite(f);
writeln(f,1000000);
for i:=1 to 200000 do
write(f,'A','B','C','D','E');
close(f);
end;
procedure doc;
var x:CHAR;
begin
assign(f,fi); reset(f);
readln(f,n);
for i:=1 to n do
begin
read(f,x);
ST[x]:=ST[x]+1;
end;
close(f);
end;
procedure xuly;
var x:char;
begin
assign(f,fo); rewrite(f);
for x:='A' to 'Z' do
if st[x]<>0 then
writeln(f,x, st[X]);
close(f);
end;
BEGIN
Trang 4
sinh;
DOC;
XULY;
END.
{$R+}
uses crt;
const fi='tong.inp';
fo='tong.out';
MAX=32001;
type mmc=array[1..MAX] of byte;
var
f:text;a,B:mmc;D,N,M:INTEGER;
PROCEDURE SINH;
VAR I:INTEGER;
BEGIN
ASSIGN(F,FI); REWRITE(F);
WRITELN(F,32000,' ',32000);
FOR I:=1 TO 32000 DO
WRITE(F,8);
WRITELN(F);
{ WRITELN(F,32000);}
FOR I:=1 TO 32000 DO
WRITE(F,8);
CLOSE(F);
END;
procedure doc;
var
x:char; I,J,so,code:integer;
begin
assign(f,fi);reset(f);
readln(f,n,m);
for i:=1 to MAX do begin a[i]:=0;b[i]:=0;end;
j:=n;
for i:=1 to n do
begin
read(f,x);
val(x,so,code);
a[j]:=a[j]+so;
j:=j-1;
end;
readln(f);
j:=m;
for i:=1 to m do
begin
read(f,x);
val(x,so,code);
b[j]:=b[j]+so;
j:=j-1;
end;
Trang 5
if m>n then d:=m else d:=n;
close(f);
end;
procedure xl;
var i:INTEGER;
S,V:BYTE;
begin
s:=0;
v:=0;
for i:=1 to D+1 do
begin
s:=a[i]+b[i]+v;
b[i]:=0;
b[i]:=s mod 10;
v:=s div 10;
end;
end;
procedure xuat;
var i,dem:integer;
begin
assign(f,fo);rewrite(f);
DEM:=0;
for i:=D+1 downto 1 do if b[i]<>0 then begin dem:=i;break;end;
writeln(f,DEM);
for i:=dem downto 1 do write(f,b[i]);
close(f);
end;
BEGIN
SINH;
doc;
xl;
xuat;
END.
Trang 6