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

bài tóan tin sơn màu

4 140 0

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

THÔNG TIN TÀI LIỆU

Thông tin cơ bản

Định dạng
Số trang 4
Dung lượng 15 KB

Các công cụ chuyển đổi và chỉnh sửa cho tài liệu này

Nội dung

Vùng các ô có giá trị 1 chung cạnh gọi là một vùng liên thông.. Nếu trong hình chữ nhật này chỉ có một vùng liên thông thì vùng này gọi là một mẫu.. Câu a : Nhập từ file SOMAU.INP hai số

Trang 1

Đề bài :

Cho một hình chữ nhật n*m ô vuông, mỗi ô vuông nhận giá trị 0 hoặc 1 Vùng các

ô có giá trị 1 chung cạnh gọi là một vùng liên thông Nếu trong hình chữ nhật này chỉ có một vùng liên thông thì vùng này gọi là một mẫu

Câu a : Nhập từ file SOMAU.INP hai số nguyên m,n và hai hình chữ nhật Thông báo hai hình chữ nhật đó có phải là hai mẫu không

Câu b : Hai mẫu gọi là tơng đơng nếu diện tích của chúng bằng nhau Nếu câu a đợc hai mẫu thì hai mẫu đó đợc tơng đơng không

Câu c : Đặt hai mẫu trên cùng một hệ trục toạ độ, nếu tịnh tiến dọc các trục mà hai mẫu trùng khít lên nhau thì ta nói hai mẫu đó bằng nhau Nếu câu b đợc hai mẫu tơng

đ-ơng thì hai mẫu đó bằng nhau hay không?

Câu d : Nếu kết hợp thực hiện tịnh tiến dọc các trục toạ độ và phép quay một mẫu, một góc dơng 900 mà hai mẫu trùng khít lên nhau thì ta nói hai mẫu bằng nhau kiểu 2 Kiểm tra hai mẫu đã nhập trong file có bằng nhau kiểu 2 hay không?

Lời giải:

(học sinh tự làm câu d)

Uses Crt;

Const Max = 50;

Fi = 'somau.inp';

Type Pt = Record x,y : Byte ; End;

MangM = Array[0 Max,0 Max] of Byte;

MangQ = Array[1 Max*Max] of Pt;

MangD = Array[1 Max,1 Max] of Pt;

Var N,M : Byte;

A,B : MangM;

Q : MangQ;

D : MangD;

S1,S2 : Integer;

(* -*)

Procedure NhapFile;

Var i,j : Byte;

F : Text;

Begin

FillChar(A,Sizeof(A),3);

FillChar(B,Sizeof(B),3);

Assign(F,Fi);

Reset(F);

Readln(F,M,N);

For i:=1 to M do

For j:=1 to N do Read(F,A[i,j]);

For i:=1 to M do

For j:=1 to N do Read(F,B[i,j]);

Close(F);

End;

(* -*)

Function Tim1(Var MX : MangM; Var x,y : Byte): Boolean;

Var i,j : Byte;

Begin

For i:=1 to M do

For j:=1 to N do

If MX[i,j]=1 then

Begin

x := i;

y := j;

Tim1 := True;

Exit;

Trang 2

End;

Tim1 := False;

End;

(* -*)

Function Mau(Var MX : MangM;Var DT : Integer) : Boolean; Var Ok : Boolean;

F,L : Integer;

x,y,k : Byte;

Procedure Loang(Var MX : MangM; x,y,i,j : Byte);

Begin

If MX[i,j]=1 then

Begin

MX[i,j] := 2;

Inc(L);

Q[L].x := i;

Q[L].y := j;

D[i,j].x := x;

D[i,j].y := y;

End

Else

If (MX[i,j]=2) and ((i<>D[x,y].x) or (j<>D[x,y].y)) then Ok := True;

End;

Begin

Ok := False;

If Tim1(MX,x,y) then

Begin

F := 0;

L := 1;

Q[L].x := x;

Q[L].y := y;

MX[x,y] := 2;

Repeat

Inc(F);

x := Q[F].x;

y := Q[F].y;

Loang(MX,x,y,x-1,y);

Loang(MX,x,y,x+1,y);

Loang(MX,x,y,x,y-1);

Loang(MX,x,y,x,y+1);

Until F=L;

If Tim1(MX,x,y) then Ok := False;

Mau := Ok;

DT := L;

End;

End;

Function Thongbao(Var X : MangM; Var S : Integer) : Boolean; Begin

S := 0;

If Not Mau(X,S) then

Begin

Writeln('Du lieu khong dung ');

Thongbao := False;

Exit;

End;

Thongbao := True;

End;

Procedure Timkhung(Var X : MangM; Var x1,y1,x2,y2 : Byte); Function MinD : Byte;

Var i,j : Byte;

Trang 3

Begin

For i:=1 to M do

For j:=1 to N do

If X[i,j]=2 then

Begin

MinD := i;

Exit;

End;

End;

Function MaxD : Byte;

Var i,j : Byte;

Begin

For i:=M downto 1 do

For j:=1 to N do

If X[i,j]=2 then

Begin

MaxD := i;

Exit;

End;

End;

Function MaxC : Byte;

Var i,j : Byte;

Begin

For j:=N downto 1 do

For i:=1 to M do

If X[i,j]=2 then

Begin

MaxC := j;

Exit;

End;

End;

Function MinC : Byte;

Var i,j : Byte;

Begin

For j:=1 to N do

For i:=1 to M do

If X[i,j]=2 then

Begin

MinC := j;

Exit;

End;

End;

Begin

x1 := MinD;

x2 := MaxD;

y1 := MinC;

y2 := MaxC;

End;

(* -*)

Function Trung : Boolean;

Var xa1,xa2,xb1,xb2,ya1,ya2,yb1,yb2,i,j : Byte;

Ok : Boolean;

L1,L2,x,y : Byte;

Begin

TimKhung(A,xa1,ya1,xa2,ya2);

TimKhung(B,xb1,yb1,xb2,yb2);

L1 := Abs(xa1-xb1);

L2 := Abs(ya1-yb1);

Trung := True;

If (xa2-xa1)*(ya2-ya1)=(xb2-xb1)*(yb2-yb1) then

Trang 4

Begin

For i:= xa1 to xa2 do

For j:= ya1 to ya2 do

If A[i,j]=2 then

Begin

If xa1<xb1 then x := i+L1

Else

If xa1>xb1 then x := i-l1

Else x := i;

If ya1<yb1 then y := j+L2

Else

If ya1>yb1 then y := j-L2

Else y := j;

If A[i,j]<>B[x,y] then

Begin

Trung := False;

Exit;

End;

End;

End

Else

Trung := False;

End;

BEGIN

NhapFile;

Clrscr;

If Thongbao(A,S1) and Thongbao(B,S2) then

If S1=S2 then

Begin

Writeln('Hai mau tuong duong ve mat dien tich ');

If Trung then Writeln('Hai mau co the tinh tien trung nhau ')

Else Writeln('Hai mau khong the tinh tien trung nhau ');

End

Else

Writeln('hai mau khong tuong duong, khong trung nhau ');

Writeln('ENTER thoat ');

Readln;

END

(Gi¸o viªn TrÇn §ç Hïng - Céng t¸c viªn NguyÔn Träng TuÊn)

Ngày đăng: 07/09/2014, 07:12

TỪ KHÓA LIÊN QUAN

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

  • Đang cập nhật ...

TÀI LIỆU LIÊN QUAN

w