- Chương trình cho kết quả sai: Chỉ chấm phần các ý chính của thuật toán, mỗi ý đúng cho điểm không vượt quá 50% số điểm của câu... - Nếu học sinh không đọc được dữ liệu từ file hoặ[r]
(1)PHỊNG GD&ĐT KRƠNG ANA
KỲ THI HỌC SINH GIỎI CẤP HUYỆN NĂM HỌC 2015-2016 ĐÁP ÁN VÀ HƯỚNG DẪN CHẤM
Môn: Tin học Yêu cầu chung:
- Chương trình chạy cho kết (có thể làm theo cách khác đáp án): khai báo đầy đủ, trình bày có cấu trúc rõ ràng cho điểm tối đa Không khai báo biến trừ 0.25 điểm
- Chương trình cho kết sai: Chỉ chấm phần ý thuật tốn, ý cho điểm khơng vượt 50% số điểm câu
BÀI 1(4,0 điểm): SỐ LƯỢNG
Chương trình tham khảo Điểm
PROGRAM BAI_1; USES CRT;
VAR A,B,C:ARRAY[1 100]OF INTEGER; N,I,J,K,L,D:INTEGER;
1.0 BEGIN CLRSCR;
WRITE('NHAP N= ');READLN(N);WRITELN; WRITE('NHAP GIA TRI DAY A: '); WRITELN; FOR I:=1 TO N DO
BEGIN
WRITE('A[',I,']= '); READLN(A[I]); END; WRITELN;
WRITE('DAY VUA NHAP: ');
FOR I:=1 TO N DO WRITE(A[I]:4); WRITELN; WRITE('NHAP K= ');READLN(K); WRITELN;
J:=1;L:=1;D:=0; FOR I:=1 TO N DO
IF A[I] MOD K = THEN BEGIN
D:=D+1;
B[J]:=I; C[L]:=A[I]; J:=J+1; L:=L+1; END;
IF D<>0 THEN BEGIN
WRITE('SO LUONG PHAN TU CHIA HET: ',D:2); WRITELN; WRITE('VI TRI CAC PHAN TU: ');
FOR I:=1 TO D DO WRITE(B[I]:3);WRITELN; WRITE('GIA TRI CAC PHAN TU: ');
FOR I:=1 TO D DO WRITE(C[I]:3);WRITELN; END
ELSE WRITE('KHONG CO PHAN TU NAO CHIA HET CHO ',K);
READLN END
1.0
1.0
(2)BỘ TEST CHƯƠNG TRÌNH: TEST 1:
Dữ liệu nhập từ bàn phím Kết in hình
N = So luong:
A = {2 10 9} Vi tri:
K = Gia tri: 10
TEST 2:
Dữ liệu nhập từ bàn phím Kết in hình
N = So luong:
A = {3 12 15 7} Vi tri:
K = Gia tri: 12 15
TEST 3:
Dữ liệu nhập từ bàn phím Kết in hình N = 7, A = {12 10 6},
K =
Khong co phan tu chia het cho K
BÀI 2(4,0 điểm): CHUẨN HĨA XÂU
Chương trình tham khảo Điểm
PROGRAM BAI_1; USES CRT;
VAR ST:STRING; I,D,d1,d2:INTEGER;
1.0 BEGIN
WRITE('NHAP XAU: '); READLN(ST); WRITELN; 0.5 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);
WRITE('XAU CHUAN HOA: ',ST);WRITELN;
(3)D:=0; D1:=0; D2:=0;
FOR I:=1 TO LENGTH(ST) DO BEGIN
IF ST[I]IN['a' 'z'] then D:=D+1; IF ST[I]IN['A' 'Z'] then D1:=D1+1; IF ST[I]IN['0' '9'] then D2:=D2+1; end;
WRITE('SO LUONG KY TU IN THUONG: ',D) ;WRITELN; WRITE('SO LUONG KY TU IN HOA : ',D1);WRITELN; WRITE('SO LUONG KY TU CHU SO : ',D2);WRITELN;
READLN END
1.0
(4)BỘ TEST CHƯƠNG TRÌNH: TEST 1:
Dữ liệu nhập từ bàn phím Kết in hình HoC sINh89 gIoI 2016
Xau chuan hoa: HoC sINh89 gIoI 2016 So luong chu cai in thong :
So luong chu cai in hoa : So luong chu so xau : TEST 2:
Dữ liệu nhập từ bàn phím Kết in hình TiN hOc Lop
Xau chuan hoa: TiN hOc Lop So luong chu cai in thong : So luong chu cai in hoa : So luong chu so xau : TEST 3:
Dữ liệu nhập từ bàn phím Kết in hình SACH GIAO KHOA
Xau chuan hoa: SACH GIAO KHOA So luong chu cai in thong :
So luong chu cai in hoa : 12 So luong chu so xau :
BÀI 3(6,0 điểm):DÃY CON CHUNG
Chương trình tham khảo Điểm
VAR
A,B,C,D,G:ARRAY[1 100]OF INTEGER; M,N,I,J,L,DEM,T,K:INTEGER;
F:TEXT;
1.0 BEGIN
WRITE('NHAP N:= ');READLN(N); WRITELN; FOR I:=1 TO N DO
BEGIN
WRITE('A[',I,']= '); READLN(A[I]); END; WRITELN;
WRITE('NHAP M:= ');READLN(M); WRITELN; FOR I:=1 TO M DO
BEGIN
WRITE('B[',I,']= '); READLN(B[I]); END; WRITELN;
1.5
ASSIGN(F,'BAI3.OUT');REWRITE(F); DEM:=0;T:=1;K:=1;
FOR I:=1 TO N DO BEGIN
FOR J:=1 TO M DO
(5)IF A[I]=B[J] THEN BEGIN
DEM:=DEM+1; C[T]:=I;
D[K]:=J; T:=T+1; K:=K+1; END;
END;
1.0
WRITE(F,DEM);WRITELN(F); FOR I:=1 TO N DO
BEGIN
FOR J:=1 TO M DO
IF A[I]=B[J] THEN WRITE(F,A[I]:3); END;
WRITELN(F);
FOR I:=1 TO DEM DO WRITE(F,C[I]:3); WRITELN(F);
FOR I:=1 TO DEM DO WRITE(F,D[I]:3); CLOSE(F);
END
1.5
BỘ TEST CHƯƠNG TRÌNH: TEST 1:
BÀN PHÍM BAI3.OUT
5
11 12
3 12
3
3 12 TEST 2:
BÀN PHÍM BAI3.OUT
6
2 10
4
4
4 TEST 3:
BÀN PHÍM BAI3.OUT
7
1 10
1 10 12
4
(6)BÀI 4(6,0 điểm): TÌM SỐ
Chương trình tham khảo Điểm
FUNCTION NG_TO(X:INTEGER):BOOLEAN; VAR J: INTEGER;
KT: BOOLEAN; BEGIN
KT:= TRUE;
IF X = THEN KT:= FALSE ELSE
FOR J:= TO X DIV DO
IF X MOD J = THEN KT:= FALSE; NG_TO:= KT;
END;
1.5
FUNCTION DAO_SO(Y: INTEGER): INTEGER; VAR S:INTEGER;
BEGIN S:=0;
WHILE Y<>0 DO BEGIN
S:=S*10 + (Y MOD 10); Y:= Y DIV 10;
END;
DAO_SO:=S; END;
1.5
VAR X,Y,P,Q,I:INTEGER; F,F1: TEXT;
BEGIN
ASSIGN(F,'BAI4.INP'); RESET(F); ASSIGN(F1,'BAI4.OUT');REWRITE(F1);
WRITE(F1,'CAC SO CAN TIM');WRITELN(F1); READ(F,P,Q);
FOR I:= P TO Q DO
IF NG_TO(DAO_SO(I))=TRUE THEN WRITELN(F1,I:3); CLOSE(F);
CLOSE(F1); END.
1.0
1.5 0.5 BỘ TEST CHƯƠNG TRÌNH:
TEST 1:
BAI4.INP BAI4.OUT
5 20
(7)TEST 2:
BAI4.INP BAI4.OUT
10 25 11
13 14 16 17 20 TEST 3:
BAI4.INP BAI4.OUT
25 50 30
31 32 34 35 37 38 50
Ghi chú:
- Học sinh có thể viết chương trình khác chạy kết test cho điểm tối đa