Bài 4: 3đ Nhập vào một dãy số nguyên Cho biết dãy đã sắp xếp chưa tăng dần hay giảm dần Nếu dãy dã sắp xếp hãy cho nhập số n bất kì và chèn vào dãy sao cho dãy vẫn bảo đảm được sắp xếp k[r]
(1)UBND HUYỆN NINH HOÀ PHÒNG GIÁO DỤC VÀ ĐÀO TẠO ĐỀ CHÍNH THỨC ĐỀ THI CHỌN HỌC SINH GIỎI CẤP HUYỆN NĂM HỌC 20092010 MÔN: TIN HỌC (Thời gian: 150 phút – không kể phát đề) Bài 1: (2đ) Tính tổng các số nguyên dương có chuỗi Nhiệm vụ chương trình: - Tên tập tin: Bai_1.pas - Chương trình cho phép nhập vào chuỗi gồm nhiều ký tự và có ít số nguyên dương - Xuất màn hình chuỗi đã nhập - Xuất tổng các số nguyên dương có chuỗi Ví dụ: Input Output abcAcb90acgH3abcb12bdcnhag Chuoi da nhap: abcAcb90acgH3abcb12bdcnhag Tong cac so co chuoi: 105 bacDgfhrthg Nhap sai! Yeu cau nhap lai: Bài 2: (2đ) Viết chương trình nhập vào hai mốc thời gian năm cho biết từ mốc thời gian thứ đến mốc thời gian thứ hai có bao nhiêu ngày Nhiệm vụ chương trình: - Tên tập tin: Bai_2.pas - Cho phép nhập vào hai mốc thời gian năm - Kiểm tra liệu nhập sai cho nhập lại (có chú ý ngày hợp lệ tháng, mốc thời gian trước sau hợp lý) - Cho kết là số ngày Chú ý : Năm nhuận là năm chia hết cho thì tháng có 29 ngày Tháng 1,3,5,7,8,10,12 có 31 ngày Tháng 4,6,9,11 có 30 ngày Ví dụ: liệu vào mốc : = 29 tháng = mốc : = tháng = năm 2009 là sai cho nhập lại liệu vào mốc : = 29 tháng = mốc : = 3tháng = năm 2000 liệu ngày Bài 3: (3đ) Sắp xếp các số nguyên dương theo thứ tự giảm dần theo số ước chúng Lop7.net (2) Nhiệm vụ chương trình: - Tên tập tin: Bai_3.pas - Chương trình tạo 20 số nguyên dương ngẫu nhiên khoảng [20 100] - Xuất màn hình các số đã tạo - Xuất màn hình các số đã tạo sau đã xếp các số đó theo thứ tự giảm dần theo số ước chúng Ví dụ: Input 47; 78; 32; 38; 30; 56; 35; 31; 51; 66; Output Cac so da tao: 47; 78; 32; 38; 30; 56; 35; 31; 51; 66; Cac so sau da sap xep giam dan theo so uoc: 78; 30; 56; 66; 32; 35; 51; 38; 47; 31; Bài 4: (3đ) Nhập vào dãy số nguyên Cho biết dãy đã xếp chưa tăng dần hay giảm dần Nếu dãy dã xếp hãy cho nhập số n bất kì và chèn vào dãy cho dãy bảo đảm xếp (không xếp lại sau chèn thêm) Nếu dãy chưa xếp thì xếp lại dãy tăng dần Nhiệm vụ chương trình: - Tên tập tin: Bai_4.pas - Dữ liệu vào là dãy số nguyên - Dữ liệu dãy vừa nhập - Nếu dãy đã xếp thì xuất dãy sau chèn thêm n - Nếu dãy chưa xếp thì xuất dãy đã xếp lại Ví dụ liệu vào N =6 liệu vào liệu dãy đã xếp tăng dần dãy sau chèn thêm n là 6 liệu dãy chưa xếp xếp lại dãy là Lop7.net (3) Chữ ký GT1: …………………………… …………………………… Chữ ký GT2: UBND HUYỆN NINH HOÀ ĐÁP ÁN ĐỀ THI CHỌN HỌC SINH GIỎI CẤP HUYỆN PHÒNG GIÁO DỤC VÀ ĐÀO TẠO NĂM HỌC 20092010 MÔN: TIN HỌC (Thời gian: 150 phút – không kể phát đề) Bài 1: program bai1; Uses crt; Var st,s1,tam:string; i,n,e,tong:integer; kt:boolean; BEGIN clrscr; kt:=false; repeat write('Nhap chuoi gom ky tu va so: '); readln(st); for i:=1 to length(st) if st[i] in ['0' '9'] then kt:=true; if kt = false then begin write('Nhap sai! Yeu cau nhap lai: '); readln(st) end; until kt=true; s1:=st; for i:=1 to length(s1) if not(s1[i] in ['0' '9']) then s1[i]:=#32; repeat delete(s1,pos(#32#32,s1),1); until pos(#32#32,s1) = 0; if s1[1]=#32 then delete(s1,1,1); if s1[length(s1)]=#32 then delete(s1,length(s1),1); tam:=''; s1:=s1+#32; tong:=0; for i:=1 to length(s1) if s1[i]<>#32 then tam:=tam+s1[i] else begin val(tam,n,e); tong:=tong+n; Lop7.net (4) tam:=''; end; writeln('Chuoi da nhap: ',st); write('Tong cac so co chuoi: ', tong); readln end Tổng điểm: điểm Thực đúng phần nhập theo nhiệm vụ chương trình (0,75 điểm) Tính tổng và xuất kết đúng màn hình (1,25 điểm) Nếu thí sinh thực đúng phần nhập, có ý tưởng xử lí chuỗi đã nhập để thực tính tổng tính tổng cho kết sai (1 điểm) Bài 2: program bai2; uses crt; var ng1,th1,ng2,th2,n,son:integer; a:array[1 12]of integer; i,j:integer; kt: boolean; begin repeat kt:=true; clrscr; writeln('***tinh so ngay:*** '); write('tu ngay: '); readln(ng1); write('thang: '); readln(th1); write('den ngay: '); readln(ng2); write('thang: '); readln(th2); write('nam: '); readln(n); if (ng1<=0)or(ng2<=0)or(th1<=0)or(th2<=0)or (n<=0) then kt:=false ; if(th1>12)or(th2>12) or(ng1>31)or(ng2>31) then kt:=false; if (th1 in [ 4,6,9,1]) and (th1=31) then kt:=false ; if (th2 in [ 4,6,9,1]) and (th2=31) then kt:=false; if (th1 =2) and (n mod 4<>0) and (ng1 >28) then kt:=false ; if (th2 =2) and (n mod 4<>0) and (ng2 >28) then kt:=false ; if (th1 =2) and (n mod 4=0) and (ng1 >29) then kt:=false ; if (th2 =2) and (n mod 4=0) and (ng2 >29) then kt:=false ; if (th1>=th2) and (ng1>ng2) then kt:=false; if kt= false then begin write(' nhap sai nhan enter nhap lai'); readln ; end; until kt = true; if n mod 4<>0 then a[2]:=28 else a[2]:=29; for i:=1 to 12 case i of 1,3,5,7,8,10,12: a[i]:=31; 4,6,9,11: a[i]:=30; end; son:=0; if th2<>th1 then begin Lop7.net (5) for i:=(th1+1) to (th2-1) son:= son+a[i]; son:=son+(a[th1]-ng1)+ng2+1; end else son:=ng2-ng1+1; write('***tu ',ng1,'/',th1,' den ',ng2,'/',th2,' nam ',n,' co ',son,' ngay***'); readln; end Tổng điểm: điểm - Nhập liệu vào có bẩy lổ nhập - Lí luận tính dúng số ngày - Viết kết đúng (0,5 điểm) (1 điểm) (0,5 điểm) Bài 3: program bai3; Uses crt; Type Data = record n,u:integer; end; Var a:array[1 10] of Data; tam: Data; i, j, d: integer; Begin clrscr; Randomize; writeln('Cac so ngau nhien da tao: '); For i:=1 to 10 Begin a[i].n:=random(81)+20; write(a[i].n,'; '); end; d:=0; for i:=1 to 10 begin d:=0; for j:=1 to a[i].n if a[i].n mod j = then inc(d); a[i].u:=d; end; for i:=1 to for j:=i+1 to 10 if a[i].u < a[j].u then begin tam:=a[i]; a[i]:=a[j]; a[j]:=tam; end; writeln; writeln('Cac so sau da sap xep giam dan theo so uoc: '); for i:=1 to 10 write(a[i].n,'; '); readln end Tổng điểm: điểm - Thực đúng phần nhập theo nhiệm vụ chương trình Lop7.net (0,75 điểm) (6) - Xác định số ước các số đã tạo (0,75 điểm) - Sắp xếp các số theo nhiệm vụ chương trình và xuất kết màn hình (1,5 điểm) Bài 4: program bai4; uses crt; var n,i,v,j,b,p,m:integer; a:array[1 50]of integer; kt:boolean; begin clrscr; write('ban dinh nhap day so co bao nhieu phan tu: readln(n); for i:=1 to n begin write('a[',i,']='); readln(a[i]); end; write('day da nhap la:'); for i:=1 to n write(a[i]:3); writeln; kt:=true; for i:=1 to n-1 if a[i]<a[i+1] then kt:=true else begin kt:=false; break; end; if kt=true then begin writeln('day da duoc sap xep theo chieu tang m:=1; end; kt:=true; for i:=1 to n-1 if a[i]>a[i+1] then kt:=true else begin kt:=false; break; end; if kt=true then begin writeln('day da duoc sap xep theo chieu giam m:=2; end; if (m=1)or(m=2) then begin write('ban dinh chen vao day phan tu: '); readln(p); if m=1 then begin for i:=1 to n if (p>=a[i])and(p<=a[i+1]) then break j:=i+1; for i:=n+1 downto j+1 a[i]:=a[i-1]; a[j]:=p; Lop7.net '); dan'); dan'); ; (7) write('day sau chen la: '); for i:=1 to n+1 write(a[i]:5); end; if m=2 then begin for i:=1 to n if (p<=a[i])and(p>=a[i+1]) then break ; j:=i+1; for i:=n+1 downto j+1 a[i]:=a[i-1]; a[j]:=p; write('day sau chen la: '); for i:=1 to n+1 write(a[i]:5); end; end; if (m<>1)and(m<>2) then begin writeln('day chua duoc sap xep'); for i:=1 to n for j:=i+1 to n if a[i]>a[j] then begin b:=a[i]; a[i]:=a[j]; a[j]:=b; end; write('day sap xep theo chieu tang dan la:'); for i:=1 to n write(a[i]:3); end; readln; end Tổng điểm: điểm - Nhập liệu - Kiểm tra dãy tăng hay giảm - Chèn liệu - Sắp xếp và viết liệu (0,5 điểm) (0,5 điểm) (1điểm) (1điểm) Lop7.net (8)