Chuyên đề học sinh giỏi Tin học 8

Chuyên đề học sinh giỏi Tin học 8

Bài 1 :Nhập 3 số a , b , c bất kì . Hãy kiểm tra xem ba số đó có thể là độ dài ba cạnh của một tam giác hay không ? Thông báo lên màn hình ‘ Thỏa mãn ‘, ‘ Không thỏa mãn trong từng trường hợp tương ứng .

Bài 2 :Nhập N số bất kì .Đếm các số lớn hơn 10 và nhỏ hơn 20 và tính tổng của chúng . Sau đó , đưa ra màn hình :

 So cac so >10 và <20 la="" :="" (="" gia="" tri="" )="">

 Tong cua chung la : ( gia tri )

Bài 3 :Nhập bốn số a , b , c , d . Hãy tìm giá trị lớn nhất của chúng và gán giá trị lớn nhất đó cho biến Max .

Bài 4 :Đọc ngày tháng năm , sau đó viết ra màn hình đó là ngày thứ mấy trong tuần .

Bài 5 :Viết chương trình :

 Nhâp số báo danh

 Nhập điểm văn , toán , ngoại ngữ

 In ra màn hình dưới dạng :

 _ Phiếu điểm :

 _ Số báo danh :

 _ Điểm văn :

 _ Điểm toán :

 _ Điểm ngoại ngữ :

 _ Tổng số điểm :

 

doc 55 trang Người đăng tranhiep1403 Lượt xem 1846Lượt tải 2 Download
Bạn đang xem 20 trang mẫu của tài liệu "Chuyên đề học sinh giỏi Tin học 8", để tải tài liệu gốc về máy bạn click vào nút DOWNLOAD ở trên
CHUYÊN ĐỀ HỌC SINH GIỎI TIN 8
CÂU LỆNH IF  THEN  ELSE
Bài 1 :Nhập 3 số a , b , c bất kì . Hãy kiểm tra xem ba số đó có thể là độ dài ba cạnh của một tam giác hay không ? Thông báo lên màn hình ‘ Thỏa mãn ‘, ‘ Không thỏa mãn trong từng trường hợp tương ứng . 
Bài 2 :Nhập N số bất kì .Đếm các số lớn hơn 10 và nhỏ hơn 20 và tính tổng của chúng . Sau đó , đưa ra màn hình :
	So cac so >10 và <20 la : ( gia tri ) 
	Tong cua chung la : ( gia tri )	
Bài 3 :Nhập bốn số a , b , c , d . Hãy tìm giá trị lớn nhất của chúng và gán giá trị lớn nhất đó cho biến Max . 
Bài 4 :Đọc ngày tháng năm , sau đó viết ra màn hình đó là ngày thứ mấy trong tuần . 
Bài 5 :Viết chương trình :
 Nhâp số báo danh 
 Nhập điểm văn , toán , ngoại ngữ 
 In ra màn hình dưới dạng :
 _ Phiếu điểm :
 _ Số báo danh :
 _ Điểm văn : 
 _ Điểm toán :
 _ Điểm ngoại ngữ :
 _ Tổng số điểm : 
 Bạn đã trúng tuyển ( hoặc Bạn đã không trúng tuyển ) với điều kiện Tổng số điểm >= 15 hay ngược lại . 
 Bài 6 :Viết chương trình nhập hai số thực . Sau đó hỏi phép tính cần thực hiện và in kết quả của phép tính đó .
 Nếu là “+” , in kết quả của tổng lên màn hình .
 Nếu là “-” , in kết quả của hiệu lên màn hình .
 Nếu là “/” , in kết quả của thương lên màn hình .
 Nếu là “*” , in kết quả của tích lên màn hình . Nếu là “+” , in kết quả của tổng lên màn hình .
 Nếu là “+” , in kết quả của tổng lên màn hình . 
Bài 7 :Giải và biện luận phương trình :
	x2 + ( m – 2 ) x + 1 = 0
 ở đây m là tham số thực tuỳ ý . 
Bài 8 :Viết chương trình nhập hai số tự nhiên N, M và thông báo ‘Dung‘ nếu N , M cùng tính chẵn lẽ , trong trường hợp ngược lại thì thông báo ‘Sai‘.	
VÒNG LẶP XÁC ĐỊNH VÀ VÒNG LẶP KHÔNG XÁC ĐỊNH
 Sử dụng lệnh For..do
Bài 1 :Lập trình tính tích các số tự nhiên từ 1 tới 10 . 
Bài 2 :Viết chương trình đếm số lần xuất hiện của các kí tự thuộc bảng chữ cái trong 50 lần gõ kí tự bằng bàn phím (không phân biệt a với A, b với B , dùng hàm Upcase để chuyển đổi chữ thường với chữ hoa) . 
Bài 3 :Cho số tự nhiên n , hãy lập trình để tính các tổng sau :
a. 1 + 1/22 + 1/32 +  + 1/n2 b. 1 + 1/2! + 1/3! +  + 1/n! 
Bài 4 :Tính giá trị của biểu thức sau :
	( 1 + 1/12 ) ( 1 + 1/22 )  ( 1 + 1/n2 ) 
 Sử dụng lệnh Whiledo
Bài 5 :Lập trình tính tổng :
	A = 1 + 1/2 + 1/3 +  + 1/n
ở đây n là số tự nhiên được nhập vào từ bàn phím .
Bài 6 :Tính hàm lũy thừa an , ở đây a thực và n tự nhiên được nhập vào từ bàn phím 
Bài 7 :Viết chương trình nhập một dãy số tối đa 100 số , sau đó in ra màn hình các số khác nhau . 
Bài 8 :Viết chương trình nhập một dãy số tối đa 100 số , sau đó sắp xếp lại theo thứ tự tăng dần . 
 Sử dụng lệnh Repeat
Bài 9 :Cho một dãy số được nhập từ bàn phím . Hãy viết chương trình nhập một số a rồi liệt kê tất cả các phần tử trong dãy lớn hơn a. 
Bài 10 :Viết chương trình nhập một dãy số tối đa 50 số rồi in ra màn hình các số trùng nhau của dãy . 
Bài 11 :Bạn có 1000 đ đem gửi ngân hàng với lãi suất 8%/tháng . Sau mỗi tháng tiền lãi được nhập vào để tính lãi suất tháng sau . Bạn muốn để dành cho đến khi số tiền tăng lên là x . Vậy phải để trong bao lâu 
Bài 12 :Viết chương trình tìm ƯSCLN của N số được nhập từ bàn phím .	
CHƯƠNG TRÌNH CON
Bài 1 :Dùng thủ tục chuyển một số tự nhiên n cho trước sang hệ cơ số 2 .
Bài 2 :Dùng thủ tục giải phương trình bậc hai ax2 + bx + c = 0.
Bài 3 :Hãy viết lại thủ tục Insert đối với một chuỗi kí tự cho trước tùy ý . 
Bài 4 :Viết chương trình thực hiện lần lượt các công việc sau :
_ Lập thủ tục nhập ba số thực dương a , b , c từ bàn phím .
_ Lập thủ tục kiểm tra xem ba số trên có lập thành ba cạnh của tam giác hay không ? 
_ Viết thủ tục tính diện tích của tam giác .
_ Viết thủ tục tính các trung tuyến của tam giác .
_ Viết hoàn thiện chương trình chính . 
Bài 5 :Giải phương trình x + y + z = 12 trong phạm vi số nguyên không âm với điều kiện x < 4 . 
Bài 6 :Cho trước các số N , a , b , c tự nhiên . Giải phương trình sau trong phạm vi số nguyên không âm x + y + z = N với điều kiện x < a , y < b , z < c . 
Bài 7 :Viết thủ tục Compare ( S1 , S2 : String ; Var Kq : String ) thực hiện công việc sau : so sánh hai xâu S1 và S2 , tìm tất cả các kí tự có trong cả hai xâu trên . Xâu Kq sẽ chứa tất cả các kí tự đó , mỗi kí tự chỉ được nhớ một lần . 
Bài 8 :Viết hàm tính D (St1 , St2) , với U, V là hai xâu kí tự bất kì , là tổng số các kí tự không giống nhau trong hai xâu trên , mỗi loại kí tự chỉ được nhớ một lần . Ví dụ D (‘aabba’ , ‘bcdd’) = 2 vì chỉ có hai kí tự a và d là không giống nhau trong các xâu trên . 
Bài 9 :Viết chương trình hoàn chỉnh thực hiện các công việc của thực đơn sau :
1. Nhập dữ liệu ( nhập số tự nhiên n ) .
2. Phân tích ra thừa số nguyên tố ( phân tích n thành tích các số nguyên tố ) 
3. Thoát khỏi chương trình .
CẤU TRÚC DỮ LIỆU KIỂU MẢNG
Bài 1 :Giải hệ phương trình tuyến tính hai ẩn dùng ma trận :
	a11x + a12y = c1
	a21x + a22y = c2 
Bài 2 :Lập phương trình tạo ra một mảng chứa bảng cửu chương . 
Bài 3 :Viết chương trình nhập hai số nguyên dương m , n . Sau đó tính trung bình cộng bình phương các số nguyên từ m đến n .	 
Bài 4 :Viết chương trình nhập từ bàn phím các phần tử của một mảng hai chiều . Kích thước của mảng được nhập trước từ bàn phím . 
Bài 5 :Dãy số sau được gọi là dãy Fibonaci :
	a1 = 1
	a2 = 1
	a3 = 2
	a4 = 3
	. . .
	an = an-1 + an-2 
Viết chương trình tính 20 số Fibonaci đầu tiên và đưa ra kết quả vào một mảng 20 phần tử . 
Bài 6 :Dãy số an được định nghĩa như sau : 
	a1 = 1
	a2 = 2
	. . .
	an = 2an-1 + an-2 ( n > 2 )
Hãy lập chương trình tính và gán giá trị của dãy vào biến mảng . 
Bài 7 :Nhập số tự nhiên N và viết chương trình tạo mảng bao gồm N số nguyên tố đầu tiên . 
Bài 8 :Viết chương trình nhập một bảng số 3 x 3 với điều kiện các số được nhập sẽ hiện trên màn hình đúng tại vị trí của mình trên bảng số . 
Bài 9 :a. Viết chương trình nhập dữ liệu từ dãy đối xứng vào mảng một chiều .
	 b. Viết chương trình nhập dữ liệu là ma trận đối xứng vào mảng hai chiều .
XÂU KÝ TỰ
Bài 1 :Lập trình đếm số lần xuất hiện ở mỗi loại kí tự thuộc bảng chữ cái tiếng Anh trong một xâu kí tự Str . 
Bài 2 :Cho số tự nhiên n và xâu có độ dài n . Hãy biến đổi xâu đã cho bằng cách thay đổi trong đó 
a. Tất cả các dấu ! bằng dấu chấm .
b. Mỗi một nhóm các dấu chấm liền nhau bằng một dấu chấm .
c. Một nhóm các dấu chấm đứng liền nhau bằng dấu ba chấm . 
Bài 3 :Cho số tự nhiên n và một dãy các kí tự S1 , S2 ,  , Sn . Hãy tìm số tự nhiên I đầu tiên sao cho các kí tự Si , Si+1 đều là chữ cái a . Nếu trong dãy không có những cặp như vậy thì thông báo . 
Bài 4 :Cho số tự nhiên n và dãy các kí tự S1 , S2 ,  , Sn . Biết rằng trong dãy có ít nhất một dấu phẩy . Hãy tìm số tự nhiên i sao cho :
a. Si là dấu phẩy đầu tiên . b. Si là dấu phầy cuối cùng . 
Bài 5 :Viết chương trình nhập một xâu kí tự , sau đó chỉ ra xem xâu đó có phải là xâu đối xứng không ( xâu đối xứng là xâu có các kí tự giống nhau và đối xứng nhau qua điểm giữa xâu , ví dụ ‘ABBA’ hoặc ‘ABCBA’ ) .
 Bài 6 :Cho một xâu kí tự S . Hãy viết chương trình tính xem trong S có bao nhiêu loại kí tự khác nhau ( phân biệt chữ in hoa với chữ in thường ) . Ví dụ với S là “Pascal” ta có đáp số là 5 .
 Bài 7 :Viết chương trình nhập một xâu kí tự và biến đổi chúng thành toàn chữ in hoa . 
Bài 8 :Họ tên một học sinh được nhập từ bàn phím . Bạn hãy viết chương trình điều chỉnh lại các kí tự đầu của các từ đơn trong tên của học sinh ấy trở thành chữ in hoa . 
Bài 9 :Viết chương trình nhập xãu kí tự từ bàn phím , sau đó gọt xâu lại bằng cách cách xoá đi các kí tự trống ở hai đầu của xâu . Ví dụ nếu nhập xâu “ Ha noi “ , thì kết quả sẽ là “Ha noi” .	
DỮ LIỆU KIỂU TỆP
Bài 1 :Bạn hãy viết hàm Card(A) đếm số phần tử của tập hợp A cho trước có kiểu Set Of 0 .. 99 . 
Bài 2 :Bạn hãy lập chương trình tạo một tập hợp các số nguyên chẵn kiểu Byte và loại khỏi nó các số chia hết cho 3 . Kết quả thể hiện trên màn hình . 
Bài 3 :Xét chương trình sau :
	Program B4 ;
	Var
	 Thoat : Set Of Char = [‘e’ , ’E’] ;	
	BEGIN
	 Write (‘ Hay go E de ket thuc : ‘) ;
	 Repeat
	 Ch := Readkey ;
	 Until Ch in thoat ;
	END .
Hãy tìm và sửa lỗi trong chương trình đó . 
Bài 4 :Bạn hãy lập chương trình hiển thị một menu dạng sau trên màn hình 
	 1. Xem
2. Sua chua
3. Loai bo
4. Nhap them
5. Thoat
Lua chon cua ban : _
Sau đó đợi gõ phím . Chương trình phải đợi cho tới khi phím gõ vào là một trong các chữ số 1 .. 5 hoặc các chữ cái đầu của các tuỳ chọn thì thông báo phím gõ vào hợp lệ và kết thúc chương trình . Trong chương trình phải dùng một tập hợp để kiểm tra việc nhập giá trị cho biến từ bàn phím . 
Bài 5 :Hãy lập chương trình nhập vào một xâu nhị phân . Các kí tự nhập vào không hợp lệ bị bỏ qua .	
Bài 6 :Hãy lập chương trình nhập vào một xâu kí tự từ bàn phím . Yêu cầu các kí tự nhập vào phải là các chữ cái thuộc bảng chữ cái tiếng Anh , bỏ qua các phím khác . 
Bài 7 :Viết chương trình có chức năng thêm phần tử vào tập hợp trực tiếp từ bàn phím và loại bớt phần tử khỏi tập hợp cũng trực tiếp từ bàn phím .
CẤU TRÚC DỮ LIỆU KIỂU FILE
 Bài 1 :Hãy lập chương trình tạo một tệp số nguyên chứa các số nguyên tố nhỏ hơn 10000 theo thứ tự tăng dần . 
Bài 2 :Cho f là tệp văn bản chứa các xâu 10 kí tự . Hãy lập chương trình nhập và hiển thị nội dung file đó lên màn hình , mỗi xâu một dòng , đầy trang màn hình thì dừng lại đợi gõ Enter mới hiển thị trang tiếp theo cho tới hết. 
Bài 3 :Bạn hãy viết chương trình cho phép đọc dữ liệu từ bàn phím và ghi thêm vào cuối một tệp các bản ghi . 
Bài 4 :Cho một văn bản chứa trong một text file f . Trong văn bản , tính từ trái sang phải , từ trên xuống dưới , kí tự # là kí hiệu xoá đi một từ đứng ngay trước nó nếu có . Ví dụ ‘#Ta#oi di ngu#h###hoc’ có nghĩa là ‘Toi di hoc’ . Bạn hãy viết chương trình sửa lại file f theo quy ước trên .
 Bài 5 :Cho 2 file f và g cùng kiểu ( nhưng không rõ kiểu nào ) . Bạn hãy lập thủ tục gán nội dung của file g cho file f. 
Bài 6 :Cho một file text ghi lại một chương trình Pascal của một học sinh . Hãy viết chương trình kiểm tra lỗi của chương trình Pascal trên theo các cách sau đây :
Cách 1 : Kiểm tra xem số lượng các dấu ‘ ( dấu mở và dấu đóng ) có bằng nhau không ?
Cách 2 : Kiểm tra xem số lượng các từ Begin và End có bằng nhau không ? 
Bài 7 :Cho một file text . Hãy viết chương trình đếm xem file text trên chứa bao nhiêu từ . ( Chú ý : theo quy định , các từ cách nhau bởi một hay nhiều dấu cách ) . 
Bài 8 :Cho một file text . Viết chương trình loại bỏ các khoảng trống thừa bên trong file text này .
?H­íng dẫn :
C¢U LỆNH IF  THEN  ELSE
1) Var
 a , b , c : Real ;
 BEGIN
 Writeln (' Nhap do dai 3 canh cua tam giac : ') ;
 Write (' a = ') ; Readln ( a ) ;
 Write (' b = ') ; Readln ( b ) ;
 Wr ... :\calc.exe';
 Procedure Copyfile(fi1,fi2: string);
 Var nread,nbuf: word;
 buf: array [1..1024] of byte;
 f1,f2: file;
 Begin
 Assign(f1,fi1); Reset(f1,1);
 Assign(f2,fi2); Rewrite(f2,1);
 nbuf:=1024;
 Repeat
 Blockread(f1,buf,nbuf,nread);
 Blockwrite(f2,buf,nread);
 Until nreadnbuf;
 Close(f1); Close(f2);
 End;
 BEGIN
 Copyfile(f1,f2);
 END.
6) (* Dem (') và 'Begin' , 'End' *)
 Uses Crt;
 Const fi='C8_6.txt';
 Function Dem(c: string): integer;
 Var n,l: integer; f: text; S: string;
 Begin
 l:=Length(c); n:=0;
 Assign(f,fi); Reset(f);
 While not Eof(f) do
 Begin
 Readln(f,S);
 While pos(c,s)0 do
 Begin
 Inc(n); Delete(s,pos(c,s),l);
 End;
 End;
 Close(f);
 Dem:=n;
 End;
 BEGIN
 Clrscr;
 Write(' So luong cac dau ( va ) ');
 If Dem('(')Dem(')') then Writeln('khong bang nhau.')
 Else Writeln('bang nhau.');
 Write(' So luong cac tu Begin va End ');
 If Dem('End')Dem('Begin') then Writeln('khong bang nhau.')
 Else Writeln('bang nhau.');
 Readln;
 END .
7) (* Đếm từ *)
 Uses Crt;
 Const fi = 'hoten.txt';
 Var f: text;
 s: string;
 dem: word;
 BEGIN
 Clrscr;
 dem:=0;
 Assign(f,fi); Reset(f);
 While not Eof(f) do
 Begin
 Readln(f,s);
 While s[1]=' ' do Delete(s,1,1);
 While length(s)>0 do
 Begin
 Case s[1] of
 ' ': While (s[1]=' ')and(length(s)>0) do Delete(s,1,1);
 Else
 Begin
 inc(dem);
 While (s[1]' ')and(length(s)>0) do Delete(s,1,1);
 End;
 End;
 End;
 End;
 Close(f);
 Write(' So tu co trong file hoten.txt la: ',dem);
 Readln;
 END.
8)(* Đếm từ *)
 Uses Crt;
 Const fi = 'hoten.txt';
 Var f: text;
 s: string;
 dem: word;
 BEGIN
 Clrscr;
 dem:=0;
 Assign(f,fi); Reset(f);
 While not Eof(f) do
 Begin
 Readln(f,s);
 While s[1]=' ' do Delete(s,1,1);
 While length(s)>0 do
 Begin
 Case s[1] of
 ' ': While (s[1]=' ')and(length(s)>0) do Delete(s,1,1);
 Else
 Begin
 inc(dem);
 While (s[1]' ')and(length(s)>0) do Delete(s,1,1);
 End;
 End;
 End;
 End;
 Close(f);
 Write(' So tu co trong file hoten.txt la: ',dem);
 Readln;
 END.
CU TRĩC D÷ LIƯU KIĨU CON tr
1)(* Gỡ bỏ bản ghi khỏi danh sách *)
 Uses Crt;
 Type ptr=^rec;
 rec=record
 name: string[20];
 next: ptr;
 End;
 Var k : integer;
 p,l : ptr;
 Procedure Nhap;
 Begin
 ClrScr;
 New(p); l:=p;
 Write('Ten: '); Readln(p^.name);
 Repeat
 New(p^.next);
 p:=p^.next;
 Write('Ten: '); Readln(p^.name);
 Until p^.name='';
 p^.next:=nil;
 Write('Vi tri ban ghi can go bo: '); Readln(k);
 End;
 Procedure Gobo;
 Var i: integer; q: Ptr;
 Begin
 p:=l; For i:=1 to k do p:=p^.next; (* Tìm vị trí cuối *)
 q:=p;
 p:=l; For i:=3 to k do p:=p^.next; (* Tìm vị trí đầu *)
 If k=1 then l:=q Else p^.next:=q;
 End;
 Procedure In_kq;
 Begin
 While (l^.nextnil) do
 Begin
 Writeln(l^.name);
 l:=l^.next;
 End;
 Readln;
 End;
 BEGIN
 Nhap;
 Gobo;
 In_kq;
 END.
2)
(* Chèn thêm bản ghi vào danh sách *)
 Uses Crt;
 Const inp='C9_2.inp';
 Type ptr=^rec;
 rec=record
 name: string[20];
 next: ptr;
 End;
 Var f: text;
 k: integer;
 p,s,l: ptr;
 Procedure Nhap;
 Begin
 Assign(f,inp); Reset(f);
 New(p); l:=p;
 While not EoF(f) do
 Begin
 Readln(f,p^.name);
 New(p^.next);
 p:=p^.next;
 End;
 p^.next:=nil;
 Close(f);
 New(s);
 Clrscr;
 Writeln('Nhap ban ghi can chen: ');
 Write('Ten: '); Readln(s^.name);
 Write('Vi tri can chen: '); Readln(k);
 End;
 Procedure Chen_rec;
 Var i: integer;
 Procedure Cat(Var L: ptr);
 Begin s^.next:=l; l:=s; End;
 Begin
 p:=l; For i:=3 to k do p:=p^.next; (* Tim vi tri *)
 If k>1 then Cat(p^.next) Else Cat(l); {Cat - Noi}
 End;
 Procedure In_kq;
 Begin
 While (l^.nextnil) do
 Begin
 Writeln(l^.name);
 l:=l^.next;
 End;
 Readln;
 End;
 BEGIN
 Nhap;
 Chen_rec;
 In_kq;
 END.
3) (* Đổi chỗ 2 bản ghi trong danh sách *)
 Uses Crt;
 Const inp='C9_3.txt';
 Type ptr=^rec;
 rec=record
 name: string[20];
 next: ptr;
 End;
 Var f: text;
 j,k: integer;
 p,l: ptr;
 tenj,tenk: string;
 Procedure Nhap;
 Begin
 Assign(f,inp); Reset(f);
 New(p); l:=p;
 While not EoF(f) do
 Begin
 Readln(f,p^.name);
 New(p^.next);
 p:=p^.next;
 End;
 p^.next:=nil;
 Close(f);
 Clrscr;
 Write('Nhap vi tri 2 ban ghi can doi cho: '); Readln(j,k);
 End;
 Procedure Doicho;
 Var i: integer;
 Begin
 p:=l; For i:=2 to k do p:=p^.next; tenk:=p^.name;
 p:=l; For i:=2 to j do p:=p^.next; tenj:=p^.name;
 p:=l; For i:=2 to k do p:=p^.next; p^.name:=tenj;
 p:=l; For i:=2 to j do p:=p^.next; p^.name:=tenk;
 End;
 Procedure In_kq;
 Begin
 While (l^.nextnil) do
 Begin
 Writeln(l^.name);
 l:=l^.next;
 End;
 Readln;
 End;
 BEGIN
 Nhap;
 Doicho;
 In_kq;
 END.
§ HA
1) (* Hình chữ nhật thay đổi kích thước *)
 Uses Crt,Graph;
 Var Gd,Gm,x,y: Integer;
 tl: real;
 BEGIN
 Gd:=Detect;
 InitGraph(Gd,Gm,'');
 If GraphResult GrOk Then Halt ;
 tl:=GetMaxY/GetMaxX;
 SetFillStyle(1,4);
 For x:=1 to GetMaxX do
 Begin
 y:=round(x*tl);
 Bar((GetMaxX-x) div 2,(GetMaxY-y) div 2,
 (GetMaxX+x) div 2,(GetMaxY+y) div 2);
 Delay(10);
 End;
 CloseGraph;
 END.
2) (* Hình chữ nhật kích thước điều khiển được *)
 Uses Crt, Graph;
 Var Gd,Gm,x,y: Integer;
 tl: real;
 c: char; BEGIN
 Gd:=Detect;
 InitGraph(Gd,Gm,'');
 tl:=GetMaxY/GetMaxX;
 x:=GetMaxX div 2;
 y:=round(x*tl);
 SetFillStyle(1,4);
 Bar((GetMaxX-x) div 2,(GetMaxY-y) div 2,
 (GetMaxX+x) div 2,(GetMaxY+y) div 2);
 Repeat
 OutTextXY(0,0,'Press Esc to Exit...');
 Repeat
 c:=ReadKey;
 Until c in [#27,'+','-'];
 SetFillStyle(1,0);
 Bar((GetMaxX-x) div 2,(GetMaxY-y) div 2,
 (GetMaxX+x) div 2,(GetMaxY+y) div 2);
 If (c='+')and(x<GetMaxX) then Inc(x)
 Else If (c='-')and(y>0) then Dec(x);
 y:=round(x*tl);
 SetFillStyle(1,4);
 Bar((GetMaxX-x) div 2,(GetMaxY-y) div 2,
 (GetMaxX+x) div 2,(GetMaxY+y) div 2);
 Until c=#27;
 CloseGraph;
 END.
3) (* Phạm vi kiểm soát của Con hậu *)
Uses Crt,Graph;
Const N=8; W=40; X=150; Y=400;
Var Gd,Gm,i,Hi: Integer;
 j,Hj,H: char;
 S: String;
 Pattern : FillPatternType;
BEGIN
 Gd:=Detect;
 InitGraph(Gd,Gm,'');
 OutTextXY(270,430,'Ban co vua');
 For i:=1 to N do
 For j:='a' to chr(Ord('a')+N-1) do
 Begin
 If Odd(i+Ord(j)) then SetFillStyle(SolidFill,14)
 Else SetFillStyle(SolidFill,15);
 Bar(X+(i-1)*W,Y-(Ord(j)-Ord('a'))*W,X+i*W,Y-(Ord(j)-Ord('a')+1)*W);
 End;
 OutTextXY(200,20,'Nhap vi tri con hau:');
 Hj:=ReadKey; OutTextXY(370,20,Hj);
 H:=ReadKey; Hi:=Ord(H)-Ord('0'); OutTextXY(380,20,H);
 SetColor(4);
 Circle(X+(Hi-1)*W+W div 2,Y-(Ord(Hj)-Ord('a'))*W-W div 2,W div 2-5);
 GetFillPattern(Pattern);
 SetFillPattern(Pattern,4);
 FloodFill(X+(Hi-1)*W+W div 2,Y-(Ord(Hj)-Ord('a'))*W-W div 2,4);
 SetFillStyle(SolidFill,13);
 For i:=1 to N do
 For j:='a' to chr(Ord('a')+N-1) do
 If ((iHi)or(jHj))
 and((Abs(i-Hi)=Abs(Ord(j)-Ord(Hj)))or(i=Hi)or(j=Hj)) then
 Bar(X+(i-1)*W,Y-(Ord(j)-Ord('a'))*W,X+i*W,Y-(Ord(j)-Ord('a')+1)*W);
 Readln;
 CloseGraph;
 END.
4) (* Đồng hồ điện tử *)
 Uses Crt,Dos,Graph;
 Var h,m,s,hund: Word;
 GD,GM: Integer;
 St: String;
 Function LeadingZero(w: Word): String;
 Var s: String;
 Begin
 Str(w:0,s);
 if Length(s)=1 then s:='0'+s;
 LeadingZero:=s;
 End;
 BEGIN
 GD:=Detect;
 InitGraph(GD,GM,' ');
 SetTextStyle(DefaultFont,HorizDir,5);
 Repeat
 GetTime(h,m,s,hund);
 St:=LeadingZero(h)+':'+LeadingZero(m)+':'+LeadingZero(s);
 SetColor(15);
 OutTextXY(150,200,St);
 Delay(1000);
 SetColor(0);
 OutTextXY(150,200,St);
 Until KeyPressed;
 CloseGraph;
 END.
5) (* Điểm chuyển động tròn đều *)
 Uses Crt, Graph;
 Const 
 r=150; v=5;
 Var
 Gd,Gm,x0,y0,x,y: Integer;
 a: real; (* góc *)
 BEGIN
 Gd:=Detect;
 InitGraph(Gd,Gm,' ');
 x0:=GetMaxX div 2; y0:=GetMaxY div 2;
 PutPixel(x0,y0,4);
 a:=0;
 Repeat
 x:=x0+Round(r*cos(a)); y:=y0+Round(r*sin(a));
 PutPixel(x,y,15);
 Delay(v);
 PutPixel(x,y,0);
 a:=a+0.01;
 Until KeyPressed;
 CloseGraph;
 END.
6) (* dieu khien vi tri cua hinh vuong *)
 Uses Crt, Graph;
 Var Gd,Gm,x,y,v: Integer;
 Pa,Pb: Pointer;
 Size: Word;
 c: char;
 BEGIN
 Gd:=Detect;
 InitGraph(Gd,Gm,' ');
 Size:=ImageSize(0,0,20,20);
 GetMem(Pb,Size);
 GetImage(0,0,20,20,Pb^);
 GetMem(Pa,Size);
 Bar(0,0,20,20);
 GetImage(0,0,20,20,Pa^);
 ClearDevice;
 x:=300; y:=200; v:=10; c:=#77;
 Repeat
 PutImage(x,y,Pa^,NormalPut);
 Repeat Until KeyPressed;
 c:=ReadKey; If c=#0 then c:=ReadKey;
 PutImage(x,y,Pb^,NormalPut);
 Case c of
 #72: Dec(y);
 #75: Dec(x);
 #77: Inc(x);
 #80: Inc(y);
 End;
 If x>600 then x:=0;
 If x<0 then x:=600;
 If y>440 then y:=0;
 If y<0 then y:=440;
 Until (c=#27)or(c=#13);
 CloseGraph;
 END.
7) (* Các dạng phông chữ *)
 Uses Graph;
 Const K=3;
 Var Gd,Gm,Font,Color,Size,i: Integer;
 S: String;
 BEGIN
 Gd:=Detect;
 InitGraph(Gd,Gm,' ');
 Color:=0;
 For Font:=0 to 11 do
 Begin
 ClearDevice;
 For i:=1 to 4 do
 Begin
 Size:=(i-1)*K+1;
 Inc(Color); Color:=Color mod 15+1;
 SetColor(Color);
 SetTextStyle(Font,HorizDir,Size);
 Str(Size,S); S:='Size '+S;
 OutTextXY(100,i*80,S) ;
 End;
 Readln;
 End;
 CloseGraph;
 END.
8) (* Đồ thị của hàm số y = Sqr(x) *)
 Uses Graph;
 Const X0=320;Y0=300;E=50;
 Var Gd,Gm,i,j,k: Integer;
 x,y: real;
 S: String;
 BEGIN
 Gd:=Detect;
 InitGraph(Gd,Gm,' ');
 Line(100,Y0,550,Y0); {Truc Ox}
 OutTextXY(540,Y0+10,'x');
 For k:=-3 to 3 do
 Begin
 i:=k*E+X0; j:=Y0;
 Str(k,S);
 OutTextXY(i-10,j+8,S);
 Bar(i-1,j-1,i+1,j+1);
 End;
 Line(X0,50,X0,370); {Truc Oy}
 OutTextXY(X0-20,50,'y');
 For k:=-1 to 4 do
 Begin
 i:=X0; j:=-k*E+Y0;
 Str(k,S);
 If k0 then OutTextXY(i-20,j,S);
 Bar(i-1,j-1,i+1,j+1);
 End;
 For i:=X0-2*E to X0+2*E do {Do thi}
 Begin
 x:=(i-X0)/E; y:=Sqr(x); j:=Round(-y*E+Y0);
 PutPixel(i,j,10);
 End;
 SetTextStyle(1,0,2);
 OutTextXY(100,400,'Do thi ham so y = Sqr(x):');
 Readln;
 CloseGraph;
 END.
9) (* To mau Ngoi nha *)
 Uses Crt,Graph;
 Var Gd,Gm: Integer;
 Pattern : FillPatternType;
 c: Char;
 BEGIN
 Gd:=Detect;
 InitGraph(Gd,Gm,' ');
 GetFillPattern(Pattern);
 OutTextXY(120,50,'To mau Ngoi nha:');
 Rectangle(220,200,420,330);
 Rectangle(250,230,300,330);
 Rectangle(330,230,390,280);
 MoveTo(220,200);
 Lineto(180,200);
 Lineto(220,140);
 Lineto(420,140);
 Lineto(460,200);
 Lineto(420,200);
 SetFillPattern(Pattern,Blue);
 Floodfill(0,0,White);
 SetFillPattern(Pattern,4);
 Floodfill(320,190,White);
 SetFillPattern(Pattern,8);
 Floodfill(320,220,White);
 Repeat
 Repeat c:=ReadKey; Until c in [#27,'+','-'];
 If (c='+') then SetFillPattern(Pattern,14)
 Else If (c='-') then SetFillPattern(Pattern,0);;
 Floodfill(270,300,White);
 Floodfill(370,270,White);
 Until c=#27;
 CloseGraph;
 END.

Tài liệu đính kèm:

  • docDE CUONG HOC SINH GIOI TIN HOC 8.doc