1. Trang chủ
  2. » Giáo án - Bài giảng

Giao an BD HSG tin hoc

162 477 1

Đang tải... (xem toàn văn)

Tài liệu hạn chế xem trước, để xem đầy đủ mời bạn chọn Tải xuống

THÔNG TIN TÀI LIỆU

Thông tin cơ bản

Định dạng
Số trang 162
Dung lượng 1 MB

Nội dung

Tài liệu bồi dưỡng học sinh giỏi Tin học cấp THPT ôn thi cấp Tỉnh dùng cho giáo viên và học sinh ôn luyện tự học tự bồi dưỡng.gồm các chủ đề từ cơ bản đến nâng cao.các bài toán đều có lời giải và gợi ý hướng dẫn đầy đủ, chi tiết.từ phần cấu trúc dữ liệu, mang, tep, xau, chuong trinh con, do thi,...

Tài liệu Bồi dỡng HSG Tin học THPT Dữ liệu kiểu số nguyên I / Loại : Thờng dùng loại : T/T Tên Byte ShortInt Interger Word LongInt Miền giá trị 255 -128 127 -32768 32767 65535 -2147483648 2147483647 Kích thớc Byte Byte Byte Byte Byte II / Các cách biểu diễn số nguyên : - Dạng thập phân : Dùng kí tự - Dạng nhị phân : Dùng kí tự - Dạng Hecxa : Dùng kí tự 0, 9, chữ A,B, ,F - Dạng số n : Dùng n kí tự 0, ,9,A, F, ,Z, Thí dụ : = 1*2 + 0*2 + 1+ hệ nhị phân 15 = 1*2 +1*2 + 1*2 + 1+ 15 hệ nhị phân 150 = 1*2 +1*2 + 1*2 + 1+ 150 hệ nhị phân 150= 9*16 + 6*16 255=15*16 + 15*16 : 101 : 11111 : 10010110 150 hệ Hecxa 96 255 hệ Hecxa FF Lu ý : Nếu có x = 0111000011011001 ( Dạng nhị phân )thì kể từ phải qua trái ta nói : Bít x Bít x Bít x Bít x Bít 15 x ( Bít bêntrái ) Thực hành : Muốn chuyển số x ( Thí dụ nguyên dơng kiểu Integer, dạng thập phân ) sang dạng n-phân ta tiến hành nh sau : Biểu diễn x dới dạng : x= a 15 * N 15 + a 14 * N 14 + + a * N + a * N + a * N + a * N Khi dạng N-phân x : a15 a14 a13 a3 a2 a1 a0 Tài liệu Bồi dỡng HSG Tin học THPT Một nhiều phơng pháp tiến hành sơ đồ sau : x N a0 T1 a1 N T2 N a2 T3 N a i-3 T i-2 N a i-2 T i-1 N a i-1 Ti N Trong hệ N- phân x đợc biểu diễn a i-1 ai-2 .a2 a1a0 150 75 37 18 2 Tài liệu Bồi dỡng HSG Tin học THPT 2 1 Số x hệ nhị phân đợc biểu diễn 10010110 ( Gồm số d lấy theo thứ tự ngợc từ dới lên ) III / Các phép toán với số nguyên : ) Các phép toán cộng,trừ,nhân,div( lấy thơng nguyên ) ,mod ( lấy d ) Cho kết số nguyên ) Phép chia ( / ) cho kết số thực Thí dụ : 10/ giá trị kiểu thực ) Phép so sánh số : lớn ( > ) , nhỏ ( < ) , không lớn ( = ) , ( = ) không ( ) ) Phép nhân số nguyên dơng x với luỹ thừa bậc N : x SHL N ) Phép chia số nguyên dơng x choluỹ thừa bậc N : x SHR N ) Các phép toán xử lý Bits số nguyên dơng : AND : and = and = and = 0 and = OR : or = or = 1 or =1 or =0 XOR : xor = 0 xor = 1 xor = xor = NOT : Not = Not = Thí dụ : x := ; { 0101 } y := 12; { 1100 } _ x and y { 0100 } x or y 13 { 1101 } x xor y { 1001 } ) Phép Not số nguyên : Not x = - ( X+1) Thí dụ Not = - Tài liệu Bồi dỡng HSG Tin học THPT Từ suy định nghĩa số đối số nguyên dơng : - x = ( Not x ) + Vì hệ nhị phân ngời ta qui định số x ( kiểu Integer ) có bit 15 x số âm , ngợc lại bít 15 x số dơng Cho x=5 { x = 0000000000000101 } Ta có Not x = 1111111111111010 = 0000000000000001 - x = (Not x) +1 = 1111111111111011 Ta thử kiểm tra x + (-x) có hay không ? x = 0000000000000101 -x = 1111111111111011 x + (-x) = 0000000000000000 Vậy định nghĩa số đối x nh không dẫn đến điều vô lý ! Vài nhận xét đặc biệt 1) X OR X =X 2) X XOR X =0 ) Nếu X AND (1 SHL k ) = SHL k Bít k X 1, ngợc lại bít IV / Một số hàm với đối số nguyên 1) Random(N) Cho kết số nguyên ngẫu nhiên đoạn [0,N-1] Trớc gọi hàm , cần gọi thủ tục khởi động tạo số ngẫu nhiên : Randomize; 2) Odd(N) Cho kết kiểu Boolean Nếu Odd(N) True N số lẻ , ngợc lại N số chẵn 3) Abs(N) Cho trị tuyệt đối số nguyên N V / Một vài toán mẫu : Bài : Cho số nguyên dơng x dạng thập phân , đổi sang dạng nhị phân Bài : Cho số nguyên dơng x dạng thập phân , đổi sang dạng Hecxa Giải : Cách : Uses Crt; Var Tài liệu Bồi dỡng HSG Tin học THPT x : integer; B : Array[1 16] of Integer; Procedure Taonhiphan( x : Integer); Var k : Integer; Begin FillChar(B,Sizeof(B),0); k := 0; While x>0 Begin Inc(k); B[k] := x mod 2; x := x div 2; End; For k := 16 downto Write(B[k]); Writeln; End; BEGIN Clrscr; For x := to MaxInt Taonhiphan(x); Readln END Cách : Lập bảng phơng án luỹ thừa số N Uses Crt; Const A : Array[1 16] of LongInt=(1,2,4,8,16,32,64,128,256,512,1024, 2048,4096,8192,16384,MaxInt+1); Var x : Integer; k : Byte; Procedure Taonhiphan(x : Integer); Begin k := 15; While (x>0) Begin While A[k]>x Begin Write('0'); Dec(k); End; Write('1'); x := x-A[k]; Dec(k); End; Tài liệu Bồi dỡng HSG Tin học THPT While k>0 Begin Write('0'); Dec(k); End; Writeln; End; BEGIN Clrscr; For x:= to MaxInt Taonhiphan(x); Readln END Cách Lấy giá trị x từ ô nhớ , lên hình Uses Crt; Var x : Integer; Procedure Taonhiphan(x : Integer); Var k : Byte; Begin For k:=15 downto If (x and ( Shl k))= (1 Shl k) then Write('1') Else Write('0'); Writeln; End; BEGIN Clrscr; For x:=1 to MaxInt Taonhiphan(x); Readln END Giải : Cách : Lập bảng giá trị luỹ thừa số 16 Uses Crt; Const A : Array[0 3] of LongInt=(1,16,256,4096); B : Array[1 15] of Char=('1','2','3','4','5','6','7','8','9','A','B','C','D','E','F'); Var x : LongInt; k : Integer; Procedure TaoHecxa(x : LongInt); Var p : Byte; Begin k := 3; While (x>0) Begin Tài liệu Bồi dỡng HSG Tin học THPT While A[k]>x Begin Write('0'); Dec(k);End; If k>=0 then Begin p := x div A[k]; Write(B[p]); x := x-p*A[k]; Dec(k); End; End; While (k>=0) Begin Write('0'); Dec(k);End; Writeln; End; BEGIN Clrscr; x := 90000; TaoHecxa(x); Readln END Cách : Dựa vào hàm xử lý Byte Uses Crt; Const A : Array[0 15] of char ='0123456789ABCDEF'; Var x : Integer; Procedure He16(x:Integer); Begin Write(x,': ','$'); Write(A[Hi(x) shr 4]); Write(A[(Hi(x) and $F)]); Write(A[Lo(x) shr 4]); Write(A[(Lo(x) and $F)]); Writeln; End; BEGIN Clrscr; For x:=0 to MaxInt He16(x); Readln; END Bài nhà ) Chuyển đổi số nguyên dơng từ hệ số thứ sang hệ số thứ hai ( số nhỏ 32 ) ) Biểu diễn số nguyên âm sang hệ nhị phân Tài liệu Bồi dỡng HSG Tin học THPT ) Biểu diễn số nguyên không âm có không 104 chữ số dới dạng hệ số Phần chữa Bài : Uses crt; Const Max = 34; H : String = '0123456789ABCDEFGHIKLMNOPQRSTUVXYZ'; Var c1,c2,so : Longint; n : String; Function Cosomin(S:String):Byte; Var i : Byte; ch : Char; Begin ch := '0'; For i:=1 to length(s) If s[i]>ch then ch := s[i]; Cosomin:= Pos(ch,H); End; Procedure Nhap; Var i : Byte; Begin Repeat Write('Cho biet co so thu nhat '); {$i-} Readln(c1); {$i+} Until (Ioresult=0) and (c1>=1) and (c1=cosomin(n)) and (c11) and (c20) Begin p := H[n mod c2+1]+p; n := n div c2; End; Doi10_C2:=p; End; BEGIN Repeat Clrscr; Nhap; So := DoiC1_10(n); Writeln(N,'[cs ',c1,']=',Doi10_C2(so),'[cs ',c2,']'); Write(#10#13,'ESC : Thoat Phim khac : tiep tuc '); Until Readkey=#27; END Bài : Uses Crt; Var x : Integer; Function Cong(a,b : String) : String; {Cộng xâu chữ số hệ nhị phân } Var i,p,nho : Byte; Kq : String; Begin nho := 0; kq := ''; For i := 16 downto Begin p := ord(a[i])+ord(b[i])-96 + nho; nho := p div 2; kq := char(p mod +48)+ kq; End; Cong := kq; End; Procedure Taonhiphan_soam(x : Integer); Var k : Byte; h,p : String; Begin h :='0000000000000001'; Tài liệu Bồi dỡng HSG Tin học THPT p :='0000000000000000'; For k:=15 downto If (x and ( Shl k))= (1 Shl k) then p[16-k] := '0' Else p[16-k] := '1'; Writeln(Cong(p,h)); End; BEGIN Repeat Clrscr; Write('Nhap so x : '); Readln(x); x := Abs(x); Taonhiphan_soam(x); Writeln('ESC : Thoat An phim khac : tiep tuc '); Until ReadKey=#27; END Bài : Uses Crt; Type A = Array[1 10000] of Byte; Var S,KQ : A; i,n,tro : Integer; Procedure Nhap; Var i : Integer; Begin Randomize; Write('So S co bao nhieu chu so ? ( N chu so , N < 10000 ) : '); Readln(N); For i:=1 to N Begin S[i] := Random(10); Write(S[i]); End; Writeln; End; Function Du(S : A) : Byte; Var p : Byte; i : Integer; Begin p := 0; For i:=1 to N p := (p + S[i]) mod 3; Du := p; End; 10 Để tìm phần tử dãy con, ta xuất phát từ ô l[m,n] tới ô l[0,0] Giả sử ta ô l[i,j] Nếu ai=bj ta thêm vào dãy nhảy tới ô l[i-1,j-1] Nếu aibj l[i,j]=l[i-1,j] l[i,j]=l[i,j-1] Nếu l[i,j]=l[i-1,j] nhảy tới ô l[i-1,j], ngợc lại nhảy tới ô l[i,j-1] Sau lời giải toán Chơng trình đợc viết ngôn ngữ Pascal: uses crt; const fi='b2.inp'; var a:array[1 10] of integer; b:array[1 10] of integer; kq:array[0 10,0 10] of integer; i,j,maxa,maxb:integer; f:text; procedure init; begin assign(f,fi); reset(f); i:=0; while not(eoln(f)) begin inc(i); read(f,a[i]); end; maxa:=i; readln(f); i:=0; while not(eoln(f)) begin inc(i); read(f,b[i]); end; maxb:=i; close(f); end; function max(a,b:integer):integer; begin if a>b then max:=a else max:=b; end; begin init; kq[0,0]:=0; for i:=1 to maxa for j:=1 to maxb if a[i]b[j] then kq[i,j]:=max(kq[i-1,j],kq[i,j-1]) else kq[i,j]:=kq[i-1,j-1]+1; writeln('Do dai day chung lon nhat:',kq[maxa,maxb]); i:=maxa; j:=maxb; while (i>0)or(j>0) if a[i]=b[j] then begin write(a[i]); dec(i); dec(j); end else if kq[i-1,j]=kq[i,j] then dec(i) else dec(j); end Với nội dung file b2.inp chứa dãy (a1,a2, am) ,(b1,b2, bn) sau: 1232346 6987 Xét toán kinh điển tối u tổ hợp: Ví dụ 2: Cho túi chứa đợc trọng lợng tối đa w Có n đồ vật, đồ vật thứ i có khối lợng a[i] giá trị c[i], 1[...]... gt := gt + T[j]; Tinh := gt; End; Procedure Xuly; Var i : Integer; Begin Writeln('Thoi gian cho mua hang cua nguoi thu 1 : 0 '); For i:=2 to N do Begin Write('Thoi gian cho mua hang cua nguoi thu ',i,' : '); Writeln(Tinh(i-1)); End; End; BEGIN Nhap; Xuly; 25 Readln END Tài liệu Bồi dỡng HSG Tin học THPT Bài 3: Uses Crt; Const Max = 1000; Type Mang = Array[1 Max] of Integer; Var A : Mang; N,i,L: Integer;... Lam; Var i,j,k : Integer; Ok : Boolean; Begin i := 1; j := 1; k := 0; While (i ... nguyên dơng : AND : and = and = and = 0 and = OR : or = or = 1 or =1 or =0 XOR : xor = 0 xor = 1 xor = xor = NOT : Not = Not = Thí dụ : x := ; { 0101 } y := 12; { 1100 } _ x and y { 0100... Nhap so phan tu cua mang ',Ch,' : '); {$I-} Readln(spt);{$I+} Until (IoResult=0) and (spt>0) and (spt

Ngày đăng: 14/12/2016, 10:11

TỪ KHÓA LIÊN QUAN

TÀI LIỆU CÙNG NGƯỜI DÙNG

TÀI LIỆU LIÊN QUAN

w