ĐỀ THI HỌC SINH GIỎI TIN HỌC 9 – VỊNG LOẠI NGÀY THI: 25/12/2010 - THỜI GIAN: 150 PHÚT HỌ VÀ TÊN HỌC SINH: §INH THÞ MINH H»NG………………………………… I. PHẦN TRẮC NGHIỆM: (10điểm) Câu 1: Với ngôn ngữ lập trình Passcal câu lệnh lặp for i:=1 to 10 do x:=x+1; thì biến đếm i phải được khai báo là kiểu dữ liệu gì? A. Interger; B. real; C. string; D. Tất cả các kiểu trên đều được Câu 2: Hµm copy(‘Thoi_khoa_bieu’, 6,3) tr¶ vỊ gi¸ trÞ: A. ‘khoa’ B. ‘tho’ C. ‘hoi’ D. ‘kho’ Câu 3: Nếu A là biến xâu; B là biến kiểu mảng. Lệnh nào sau đây đúng: A. Readln(A, B); B. Readln(B); C. Readln(A); D. Tất cả đều sai; Câu 4: Khai báo nào sau đây đúng: A. Type s=string(10); B. type st=tring{10}; C. Type st=string10; D. Type st = string[10]; Câu 5: St:=’Dai_hoc_tap_trung'. Thđ tơc Delete(st,1,4), st cho kÕt qu¶ là: A. ‘hoc_tap_trung’ B. ‘tap_trung’ C. ‘Dai_hoc’ D. ‘Dai_tap_trung’ Câu 6: Hµm length(‘Cai_cach_hanh_hinh_nha_nuoc’) mod 3 tr¶ vỊ gi¸ trÞ: A. 1 B. 0 C. 3 D. 2 Câu 7: X©u ký tù st:=’Nguyen_Trai_highschool’ th× st[2]+st[14] cho kÕt qu¶: A. ‘gi’ B. ‘Ng’ C. ‘gl’ D. ‘go’ Câu 8: Để tham chiếu đến phần tử có chỉ số i trong biến mảng một chiều B. Ta viết: A. B{i} B. B(i) C. B[i] D. B.i Câu 9: Một biến kiểu xâu có thể nhận số kí tự tối đa: A. 255 B. 225 C. 127 D. 256 Câu 10: Khai b¸o nµo sau ®©y lµ ®óng A. Var B: array[1…20] of integer; B. Var M: array[1:10] of real; C. Var A: array[1 20] of real; D. Var C: array[1.20] of real; II. TỰ LUẬN: (20Đ) 1. Viết chương trình tìm các vị trí xuất hiện chuỗi S1 trong chuỗi S? (6 đ) Dữ liệu vào: Chuỗi s và chuỗi s1. Kết quả ra: Các vị trí tìm thấy s1 trong s. Ví dụ: Input Output Test 1 ‘aaahocjhochoc’ ‘hoc’ 4 8 11 Test 2 ‘adddddee’ ‘dd’ 2 3 4 5 Tên tập tin:D:\TIMCHUOI.PAS 2. Nhập vào một chuỗi sau đó xuất ra (các) từ dài nhất trong chuỗi? (6Đ) Dữ liệu vào: Một chuỗi. Kết quả ra: Các từ dài nhất trong chuỗi. Ví dụ: Input Output Test 1 Tran Nguyen dao Nguyen Test 2 Tran quang dao bgggg quang bgggg Tên tập tin:D:\TUMAX.PAS 3. Bờm và cuội là 2 học sinh rất giỏi tin học và thường liên lạc với nhau bằng thư điện tử (Email). Nhưng những bức thư mà hai bạn gởi cho nhau chỉ toàn là dãy những chữ số liền nhau. Cả hai bạn đều có chương trình mã hoá các con số thành những ký tự và ngược lại giải mã các con số thành ký tự, theo qui đònh hai bạn sẽ chuyển những ký tự mình đònh gởi thành các con số là thứ tự của ký tự đó trong bảng mã ASCII (ví dụ: A: 65; B: 66) từ chữ thường máy chuyển thành chữ hoa rồi mã hoá thành các con số.(ví dụ: aA65, bB66). Sau khi mã hoá sẽ chuyển thư đi. Người nhận có chương trình để giải mã các con số thành những ký tự in hoa (vdụ: 6566326768AB CD). Em hãy viết: a. Chương trình 1 (D:\MAHOA.pas) để mã hoá 1 xâu ký tự thành các chữ số. (4Đ) Ví dụ: Input Output Di an che? 68733265783267726963 b. Chương trình 2 (D:\GIAIMA.PAS) để giải mã 1 chuỗi số thành các ký tự. (4Đ) Ví dụ: Input Output 79326865853286658963 O dau vay? ĐỀ THI CÓ 2 TRANG - HẾT (L ưu ý: Học sinh làm bài vào ngay đề thi này) BÀI LÀM I. Trắc nghiệm: Câu 1 2 3 4 5 6 7 8 9 10 Đáp án A D C D A B A C B C II. Tự luận: Bài 1: PROGRAM TIM_CHUOI; VAR S1,S:STRING; N:INTEGER; BEGIN WRITE('NHAP XAU S1:');READLN(S1); WRITE('NHAP XAU CON S CAN KIEM TRA:');READLN(S); REPEAT N:=POS(S,S1); BEGIN IF N<>0 THEN BEGIN WRITE(N,' '); S1[N]:='#'; END ELSE WRITE('XAU CON KO XUAT HIEN'); END; UNTIL N=0; READLN; END. Bài 3a: PROGRAM MA_HOA; VAR S,s1:STRING; I,J,n:byte; BEGIN WRITE('NHAP XAU CAN MA HOA:');READLN(S); FOR I:=1 TO LENGTH(S) DO IF (S[I]>='a') AND (S[I]<='z') THEN S[I]:=UPCASE(S[I]);I:=0; FOR I:=1 TO LENGTH(S) DO WRITE(ORD(S[I])); I:=0; {IF (S[I]>='1') AND (S[I]<='9') THEN n:=pos(32,s);s[n]:=#32; repeat if (s[i]:=1)and(s[i+1]<=4) and(s[i+2]<=9) then s1:=s[i]+s[i+1]+s[i+2] FOR I:=1 TO LENGTH(S) DO FOR J:=97 TO 149 DO if j<123 then j:=j+32; IF S[I]=J THEN WRITE(ORD(J)); } READLN; END. ĐIỂM: I. Trắc nghiệm: 9/10đ II. Tự luận: Bài 1: Timchuoi 5/6đ Bài 2: Tumax 0/6đ Bài 3: a/ Mahoa 3/4đ b/ Giaima 0/4đ Tổng điểm: 17/30đ * Nhận xét: - Bài trình bày có tính cấu trúc, song cần rõ ràng hơn nữa. - Đã làm được 9/10 câu trắc nghiệm, có ý tưởng trong bài 1 (timchuoi). - Bài 1 cần xem lại trường hợp “xâu con không xuất hiện” - Bài 3a đã làm được nhưng trình bày chưa tốt (cần xoá những phần không cần thiết). - Tham khảo đáp án ở trang sau. ÑAÙP AÙN VOØNG LOAÏI -NGÀY THI: 25/12/2010 I. Trắc nghiệm: Câu 1 2 3 4 5 6 7 8 9 10 Đáp án A D C D A B A C A C II. Tự luận: 1. Timchuoi.pas var s,s1:string; begin readln(s); readln(s1); while pos(s1,s)>0 then begin write(pos(s1,s):4); s[pos(s1,s)]:=chr(1); end; readln; end. 2. Tu-max.pas var s,s1:string; a:array[1 128]of string; i,j,max:integer; begin readln(s); while s[1]=#32 do delete(s,1,1); while s[length(s)]=#32 do delete(s,length(s),1); while pos(#32#32,s)>0 do delete(s,pos(#32#32,s),1); j:=1; for i:=1 to length(s) do begin if s[i]<>#32 then a[j]:=a[j]+s[i] else inc(j); end; max:=length(a[1]); for i:=1 to j do if length(a[i])>max then max:=length(a[i]); writeln('(cac) tu dai nhat: (co ',max,' ky tu:)'); for i:=1 to j do if length(a[i])=max then writeln(a[i]); readln; end. 3. 2 chuong trinh a. Mahoa.pas uses crt; var s:string; i:integer; begin clrscr; writeln('Nhap chuoi can ma hoa:'); readln(s); writeln('Ma hoa thanh cac con so la:'); for i:=1 to length(s) do begin s[i]:=upcase(s[i]); write(ord(s[i])); end; readln; end. b. Giaima.pas uses crt; var s,s2:string; ch:char; i,x,d:integer; begin clrscr; writeln('Nhap chuoi so mat ma:'); readln(s); writeln('Giai ma chuoi so tren la:'); while length(s)>0 do begin s2:=copy(s,1,2); {lay moi lan 2 ky tu dau tien} delete(s,1,2); {xoa 2 ky tu da lay di} val(s2,x,i); {chuyen thanh so x} write(chr(x)); {chuyen thanh ma asscii} end; readln; end. . ĐỀ THI HỌC SINH GIỎI TIN HỌC 9 – VỊNG LOẠI NGÀY THI: 25/12/2010 - THỜI GIAN: 150 PHÚT HỌ VÀ TÊN HỌC SINH: §INH THÞ MINH H»NG…………………………………. Input Output 79326865853286658963 O dau vay? ĐỀ THI CÓ 2 TRANG - HẾT (L ưu ý: Học sinh làm bài vào ngay đề thi này) BÀI LÀM I. Trắc nghiệm: Câu 1 2 3 4 5