ĐỀ THI THỰC HÀNH TIN HỌC TRẺ
Năm học: 2012-2013
Thời gian: 120 phút (Không kể thời gian giao đề)
Đề số 1
Yêu cầu:
- Các File bài làm được lưu theo tên bài. Ví dụ: BAI1.PAS.
- Tất cả các tệp đều được lưu trong thư mục theo đường dẫn: D:\SBD*. (* là
số báo danh của thí sinh). Ví dụ: D:\SBD020.
- Em hãy dùng ngôn ngữ lập trình Pascal để lập trình giải các bài toán sau:
Bài 1 (3 điểm): Cho mảng một chiều Z cấp n>0, nếu n < 0 người dùng nhập lại.
Viết chương trình:
a) Sắp xếp mảng Z theo chiều tăng dần
b) Xuất ra màn hình các phần tử là số chẵn không chia hết cho 3 của mảng Z.
c) Xuất ra màn hình tổng của các phần tử là số nguyên tố của mảng Z.
Bài 2 (2 điểm): Tính tổng S =
1 3 5
2n − 1
+ + + ... +
với n nhập vào từ bàn phím.
1! 2! 3!
n!
Bài 3(2 điểm): Cho danh sách lớp 8A gồm: Họ và tên, giới tính, điểm thi môn tin.
Lập trình làm các việc sau:
a) Nhập dữ liệu từ bàn phím, kết thúc việc nhập khi gặp tên học sinh = ‘*’.
b) Đưa ra danh sách những học sinh là nữ và có điểm thi môn tin <5.0
DANH SACH HOC SINH NU CO DIEM TIN <5.0
…………………………………………………………….
: TT :
HO VA TEN
:
DIEM TIN
:
…………………………………………………………….
:
:
:
:
:
:
:
:
Bài 4 (3 điểm): Trong cuộc vận động ủng hộ sách cũ, mỗi học sinh sẽ nộp sách
cho trường. Lớp 8A có N tổ, mỗi tổ có M học sinh. Tạo dữ liệu vào cho file
SACH.INP với:
− Dòng đầu tiên là N tổ và M học sinh trong tổ. N và M cách nhau bởi một
dấu cách
− N dòng tiếp theo là số sách của các học sinh phải nộp của N tổ.
Viết chương trình tìm xem số sách nhiều nhất mà 1 học sinh mang nộp trong 1 tổ
là bao nhiêu và tính tổng số sách của những học sinh nộp là số chính phương của
cả lớp rồi xuất kết quả ra file SACH.OUT với:
- Dòng đầu tiên bỏ trống.
- N dòng tiếp theo là số sách cao nhất mà 1 học sinh mang nộp trong tổ tương
ứng.
- Dòng thứ N+2 là tổng số sách của những học sinh nộp là số chính phương
của cả lớp.
Ví dụ
SACH.INP
SACH.OUT
4 5
3 2 8 9 6
9
2 6 8 9 1
9
4 5 6 8 3
8
2 4 9 10 4
10
40
Híng dÉn ChÊm Thi Hsg M«n TIN HỌC
N¨m häc 2012 - 2013
Yêu cầu chung:
Yêu cầu chương trình chạy thông suốt, đúng kết quả:
( 2-3 điểm)
+ Hoàn thành đúng phần khai báo các biến:
(0,25 điểm)
+ Viết đúng chương trình nhập:
(0,25 điểm)
+ Viết đúng thuật toán (cách giải):
(1-2 điểm)
+ Cho ra kết quả :
(0,25 điểm)
- Chương trình chạy cho kết quả đúng: 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 mỗi biến trừ 0.05 điểm.
- 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á 40% số điểm của câu.
Bài 1 (3 điểm):
{..................................................................................................................}
Uses Crt;
Var
d,n,i,j : Integer;
z:Array[1..100] of integer;
{..................................................................................................................}
BEGIN
ClrScr;
repeat
Write(‘Nhap so nguyen n='); Readln(n);
If n<0 then writeln(‘N phai lon hon 0. MOI BAN NHAP LAI!’)
Until n>0 ;
{..................................................................................................................}
For i:=1 to n do
Begin
Write(‘z[’,i,’]= ’); Readln(z[i]);
End;
{..................................................................................................................}
Writeln(‘DAY Z SAU KHI SĂP XEP TANG DAN LA: ’);
For i:=1 to n-1 do
For j:=i+1 to n do
If a[i] > a[j] then
Begin
Tg:=a[i];
a[i]:=a[j];
a[j]:=tg;
End;
For i:=1 to n do
Write(a[i],' ');
{..................................................................................................................}
Writeln(‘CAC PHAN TU LA SO CHAN KHONG CHIA HET CHO 3
0.25 điểm
0.25 điểm
0.25 điểm
0.75 điểm
CUA DAY Z’);
For i:=1 to n do
If (z[i] mod 2 =0) and (z[i] mod 3 <> 0) then Write(z[i], ‘ ‘);
{..................................................................................................................}
For i:=1 to n do
Begin
d:=0;
for j:=1 to trunc(sqrt(z[i])) do
If z[i] mod j = 0 then
d:=d+1;
if d=1 then tong:=tong+z[i];
end;
Writeln(‘TONG CUA CAC PHAN TU LA SO NGUYEN TO CUA
DAY Z LA: ’, tong);
Readln;
END.
Bài 2 (2điểm):
Uses crt;
Var i,n,gt: integer;
s:real;
{..................................................................................................................}
Begin
Clrscr;
Writeln('CHUONG TRINH TINH TONG:');
Writeln('----------------------------------------');
Write('Nhap n='); Readln(n);
{..................................................................................................................}
gt:=1; s:=0;
For i:=1 to n do
Begin
gt:=gt*i;
s:=s+(2*i-1)/gt;
End;
Writeln('Tong S = ',s:8:2);
Readln;
End.
Bài 3 (2điểm):
Uses crt;
Type ds=record
ten:string[25];
gt:string[3];
0.25 điểm
1 điểm
0.25 điểm
0.25 điểm
1.5 điểm
0.25 điểm
dtin:real;
end;
var hs:array [1..100] of ds;
n,i,tt: integer;
{..................................................................................................................}
BEGIN
CLRSCR;
write('So luong hoc sinh: '); readln(n);
writeln('NHAP DU LIEU');
For i:=1 to n do
with hs[i] do
begin
write('Ho ten HS thu ',i,': ');
readln(ten);
write('Gioi tinh: ');
readln(gt);
write('Diem thi Tin: ');
readln(dtin);
end;
{..................................................................................................................}
clrscr;
gotoxy(10,2);
writeln('DANH SACH HOC SINH NU CO DIEM TIN <5.0');
gotoxy(5,4);
for i:=1 to 70 do
write('-');
gotoxy(5,5);
write(': STT ');
gotoxy(10,5);
write(': HO VA TEN ');
gotoxy(40,5);
write(': DIEM TIN ');
gotoxy(74,5); write(':');
gotoxy(5,6);
for i:=1 to 70 do
write('-');
{..................................................................................................................}
tt:=0;
for i:=1 to n do
with hs[i] do
if (gt='nu') and (dtin<5) then
begin
tt:=tt+1;
gotoxy(5,7+i); write(': ',tt);
gotoxy(10,7+i); write(': ',ten);
0.25 điểm
0.5 điểm
1 điểm
gotoxy(40,7+i); write(': ',dtin:4:2);
gotoxy(74,7+i); write(':');
end;
readln;
END.
Bài 4 (3 điểm):
{..................................................................................................................}
Uses Crt;
Const
fi='VOCHAI.INP';
fo='VOCHAI.OUT';
Var
Tong,max,n,m,i,j,d: Integer;
a:Array[1..100,1..100] of integer;
F1,F2: text;
{..................................................................................................................}
BEGIN
ClrScr;
Assign(F1,fi); Rewrite(F1);
Write('Nhap vao so to: '); Readln(n);
Write('Nhap vao so HS trong to: '); Readln(m);
Write(F1,n,' ',m); {Lưu n, m vào dòng 1 trong tệp 'SACH.INP'
writeln(f1);
{..................................................................................................................}
For i:=1 to n do
for j:=1 to m do
Begin
Write('a[',i,j,']= ');
Readln(a[i,j]);
End;
{..................................................................................................................}
{Lưu ma trận vào dòng 2 trong tệp 'SACH.INP' }
for i:=1 to n do
begin
for j:=1 to m do
write(f1,a[i,j],' ');
writeln(f1);
end;
Close(F1);
{..................................................................................................................}
Assign(F2,fo); Rewrite(F2);
writeln(F2);
Assign(F1,fi); Reset(F1);
readln(F1,n,m);
for i:=1 to n do
0.25 điểm
0.5 điểm
0.25 điểm
0.5 điểm
0.5 điểm
for j:=1 to m do
readln(F1,a[i,j]);
Close(F1);
{..................................................................................................................}
{Tìm giá số sách lớn nhất của 1 HS phải nộp của mỗi tổ và lưu giá trị
lớn nhất ứng với mỗi dòng ghi vào tệp 'SACH.OUT'}
For i:=1 to n do
begin
max:=a[i,1];
For j:=2 to m do
If a[i,j] > max then
max:=a[i,j];
writeln(F2,max);
end;
{..................................................................................................................}
{Tìm tổng số sách của những HS nộp là số chính phương của cả lớp
ghi vào tệp 'SACH.OUT'}
For i:=1 to n do
For j:=1 to m do
If sqrt(a[i,j]) =trunc(sqrt(a[i,j])) then
Tong:=tong+a[i,j];
write(F2,tong);
end;
Close(F2);
Readln;
END.
Lưu ý:
0.5 điểm
0.5 điểm
− Phương án chấm trên đây có thể điều chỉnh cho phù hợp theo tình hình
bài thi của thí sinh. HS có thể viết theo chương trình con. Giám khảo
thống nhất biểu điểm chi tiết chấm cho hợp lý.
− Trên cơ sở yêu cầu chung giám khảo vận dụng chấm cụ thể cho từng
bài.
− Loại bài 3 điểm: Viết đúng thuật toán (cách giải), tính là 2 điểm.
− Loại bài 2 điểm: Viết đúng thuật toán (cách giải), tính là 1 điểm.