1. Trang chủ
  2. » Mẫu Slide

Chuyen de BD HSG mon Tin 9 Giai thuat Tam Duong

15 16 0

Đ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 15
Dung lượng 18,94 KB

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

Nội dung

A - Gi¶i thuËt I / §Þnh nghÜa gi¶i thuËt : Gi¶i thuËt lµ mét hÖ thèng chÆt chÏ vµ râ rµng c¸c qui t¾c nhằm xác định một dãy các động tác trên những đối tợng , sao cho sau một số hữu hạn [r]

Trang 1

CHUYấN ĐỀ I Một số khái niệm mở đầu

A - Giải thuật

I / Định nghĩa giải thuật : Giải thuật là một hệ thống chặt chẽ và rõ ràng các qui tắc

nhằm xác định một dãy các động tác trên những đối tợng , sao cho sau một số hữu hạn

b-ớc thực hiện các động tác này ta thu đợc kết quả mong muốn

II / Các đặc tr ng của giải thuật :

- Tính kết thúc

- Tính rõ ràng , chặt chẽ

- Tính phổ dụng

- Tính hiệu quả

III / Biểu diễn giải thuật :

1 / Phơng pháp dùng ngôn ngữ liệt kê các động tác :

Trong đó có các động tác cơ bản :

+ Bắt đầu , thông báo yêu cầu

+ Lệnh gán trị

+ Lệnh thực hiện các phép tính số học , phép tính lô gíc

+ Lệnh kiểm tra điều kiện

+ Lệnh chuyển không điều kiện , lệnh chuyển có điều kiện

+ Lệnh lặp lại

+ Kết thúc

2 / Phơng pháp sơ đồ khối :

+Dùng các hình vẽ mô tả các động tác , các mũi tên chỉ thứ tự thực hiện các động tác

Thí dụ về một số thuật giải thờng gặp :

1 / Trao đổi giá trị của 2 biến A và B thông qua biến trung gian C :

B0 Bắt đầu

B1 Nhập giá trị cho A và B

B2 C lấy giá trị của A

B3 A lấy giá trị của B

B4 B lấy giá trị của C

B5 Thông báo kết quả

B6 Kết thúc

2 / Tìm phần tử nhỏ nhất trong dãy số A 1 ,A 2 , ,A n :

.F

Bắt đầu Nhóm lệnh

2,3

Điều

kiện

Lệnh 1 Kết thúc

.T

Trang 2

B0 Bắt đầu

B1 Nhập các giá trị N , A 1 ,A 2 , ,A n

B2 Gán i = 2

B3 Nếu A i < A 1 thì A 1 = A i

B4 Tăng i lên 1 đơn vị

B5 Nếu i<=N thì quay về B3 ( Lệnh lặp )

B6 Nếu i > N thì A 1 nhỏ nhất

B7 Thông báo kết quả

B8 Kết thúc

3 / Duyệt dãy A 1 , A 2 , , A n xem có phần tử X hay không :

B0 Bắt đầu

B1 Nhập các giá trị N, A 1 ,A 2 , ,A n

B2 Gán trị i=1

B3 Nếu i >N thì chuyển sang B6

B4 Nếu A i <> X thì tăng i lên 1 đơn vị , Chuyển về B3

B5 Thông báo kết quả : có X trong dãy A 1 ,A 2 , ,A n , rồi chuyển sang B7 B6 Thông báo kết quả : Không có X trong dãy A 1 ,A 2 , ,A n ,

B7 Kết thúc chơng trình

4 / Sắp xếp dãy A 1 ,A 2 , ,A n , theo thứ tự tăng dần :

B0 Bắt đầu

B1 Nhập N, A 1 ,A 2 , ,A n

B2 Gán i=1

B3 Gán k=i+1

B4 Nếu A i <= A k thì B6

B5 Thực hiện thuật toán đổi giá trị A i và A j

B6 Tăng j lên 1 đơn vị

B7 Nếu j <= N thì chuyển về B4

B8 Tăng i lên 1 đơn vị

B9 Nếu i < N thì chuyển về B3

B10 Thông báo dãy đã sắp tăng là A 1 ,A 2 , ,A n

B11 Kết thúc

5 / Thuật toán “ Lùa bò vào chuồng “ : Tìm số nguyên dơng bé nhất không có trong

dãy A 1 ,A 2 , ,A n nguyên dơng không lớn hơn 32.000

B0 Bắt đầu

B1 Nhập N , A 1 ,A 2 , ,A n

B2 Trên trục số đánh dấu các điểm A 1 ,A 2 , ,A n

B3 x = 1

B4 Duyệt trên trục số , nếu thấy x là điểm nguyên cha đợc đánh dấu thì chuyển sang

b-ớc B6

B5 Tăng x lên 1 đơn vị

B6 Thông báo số nguyên dơng bé nhất cha có trong dãy là X

B7 Kết thúc

6 / Thuật toán tìm Ước chung lớn nhất của 2 số nguyên A và B :

B0 Bắt đầu

B1 Nhập 2 số nguyên A và B

B2 Gán A = A , B =  B 

B3 Nếu A =0 và B=0 thì B9

B4 Nếu A=0 và B <>0 thì B10

B5 Nếu B=0 và A <>0 thì B11

B6 Gán d của phép chia A cho B vào biến D ( D = A mod B )

B7 Nếu D = 0 thì chuyển sang B10

Trang 3

B8 Gán A = B ; B = D ; D = A mod B chuyển về B7

B9 Thông báo UCLN không tồn tại , chuyển về Bkt

B10 Thông báo kết quả : Ước số chung lớn nhất là số B , chuyển về Bkt

B11 Thông báo kết quả : Ước số chung lớn nhất là số A

Bkt Kết thúc

7 / Thuật toán tìm số nguyên tố :

B0 Bắt đầu

B1 Nhập số N

B2 Nếu N=2 hoặc N=3 thì chuyển sang B8

B3 Gán i=-1

B4 Nếu (N mod 2 =0) hoặc (N Mod 3 =0) thì chuyển sang B 9

B5 Tăng i lên 6 đơn vị

B6 Nếu (N mod i <> 0) và (N mod (i+2) <>0) và ( i*i <= N ) chuyển sang B 5 B7 Nếu i*i <= N thì chuyển sang B 9

B8 Thông báo : N là số nguyên tố , chuyển tới B10

B9 Thông báo : N là hợp số

B10 Kết thúc chơng trình

Biểu diễn thuật toán : Tìm ớc chung lớn nhất của 2 số nguyên bằng sơ đồ khối

A :=  A  Bắt Đầu

B :=  B 

A=0 và B=0 T Không có

UCLN

T

T UCLN là B

B<>0 và A=0

Trang 4

.T.

D = 0 Kết thúc

A := B

8 / Thuật toán tìm căn bậc 2 của số không âm A :

B0 Bắt đầu

B1 Nhập số không âm A và sai số cho phép 

B2 X 0 = 1 ( X là giá trị gần đúng đầu tiên của căn bậc 2 của A )

B3 X = X 0

B4 X o = ( X + A/X ) / 2

B5 Kiểm tra :  X 0 - X  <  thì chuyển sang B6 còn không thì chuyển về bớc B3

B6 Thông báo căn bậc hai của A là X 0

B7 Kết thúc

9 / Tìm nghiệm gần đúng của một đa thức F(x) bằng thuật toán chia đôi :

B0 Bắt đầu

B1 Nhập các hệ số của đa thức và độ sai số cho phép 

B2 Nhập 2 giá trị A và B sao cho F(A) <0 và F(B) >0

B3 Nếu  B - A  <  thì chuyển tới B10

B4 X = ( A+B )/2

B5 Tính F(X)

B6 Nếu F(X) >0 thì B = X , chuyển về B3

B7 Nếu F(X) <0 thì A=X , chuyển về B3

B8 Nếu F(X) = 0 thì Chuyển tới B10

B10 Thông báo nghiệm là X

B11 Kết thúc

10 / Thuật toán Greedy Algorithm với bài toán tô màu

Bài toán : Cho tập n điểm gọi là tập G , các điểm này đợc đánh số từ 1 đến N và đợc nối

với nhau bởi một số đoạn thẳng Hãy tô màu cho các điểm theo nguyên tắc : 2 điểm có

đoạn thẳng nối chúng phải tô bằng 2 màu khác nhau Nêu cách tô màu cho các điểm sao cho càng dùng ít màu càng tốt

Gợi ý xây dựng thuật toán : Cần tổ chức 2 tập : Tập điểm đã tô màu D và tập điểm cha tô

màu C Mỗi lần có 1 đỉnh đợc tô màu thì kết nạp thêm đỉnh đó vào D , tập C loại trừ đỉnh

đó Dùng màu 1 tô cho đỉnh 1 Số lợng lớn nhất các màu đã dùng là MD=1 Chọn đỉnh i cha tô màu , cho tập màu T là rỗng , tìm tất cả các đỉnh k nối với i , nếu đỉnh k đã đợc tô màu thì ghi lại màu của đỉnh k vào tập màu T , so T với tập màu đã dùng TMD gồm các màu từ 1 tới MD , nếu có màu của TMD không thuộc T thì chọn nó làm màu của đỉnh i , ngợc lại phải chọn màu MD+1 làm màu cho đỉnh i ; tăng MD lên 1 đơn vị ; thoát khỏi việc chọn màu cho đỉnh i Quá trình tiếp tục cho đến khi tất cả các đỉnh đều đợc tô màu

Rõ ràng thuật toán trên đã tìm mọi khả năng tốt nhất để gán màu cho 1 đỉnh Song lời giải theo thuật toán này cha tối u ( Cha là lời giải tốt nhất ) vì việc chọn màu tốt nhất cho 1 đỉnh i cha chắc bảo đảm có lợi cho việc chọn màu của các đỉnh tiếp sau i

Sau này chúng ta sẽ đề cập tới một thuật toán khác có tính tối u để giải bài toán tô màu này

11 / Tìm kiếm nhị phân trên mảng đã đợc sắp thứ tự

Trang 5

B0 Bắt đầu

B1 Nhập số X và dãy A gồm N phần tử

B2 Gán đầu := 1 ; cuối := N

B3 Kiểm tra đầu <= cuối nếu sai thì chuyển về B 8

B4 giữa := ( đầu + cuối ) div 2

B5 Nếu X > A[giữa] thì đầu := giữa +1

B6 Nếu X < A[giữa] thì cuối := giữa -1

B7 Nếu X= A[giữa] thì cuối := -1

B8 Nếu cuối = -1 thì thông báo có X trong mảng ,còn ngợc lại thì thông báo không có

X trong mảng

B9 Kết thúc

Bài tập về nhà

1 ) Nêu thuật toán giải phơng trình bậc 2

2 ) Nêu thuật toán giải hệ phơng trình bậc nhất 2 ẩn

3 ) Nêu thuật toán sắp xếp giảm 1 dãy số

4 ) Để tìm Ước số chung lớn nhất của 2 số , có thể dùng thuật toán Ơclit nh sau :

(a,b) = ( a,b-a) = = ( d,0) = d ( Ta luôn giả sử b>a) Hãy trình bày thuật toán này

5 ) Vẽ sơ đồ khối cho các thuật toán ( 2,3,4,7, 11 ) đã diễn tả bằng ngôn ngữ nêu ở trên

6 ) Để khẳng định số N có là số nguyên tố hay không có thể dùng định nghĩa số nguyên

tố : Cho i nhận các giá trị từ 2 đến N div 2 , nếu N mod i=0 thì N là hợp số , ngợc lại nếu không có một giá trị i nào để N mod i = 0 thì N là nguyên tố Trình bày thuật toán bằng sơ đồ khối

7 ) Để tìm số nguyên tố < N có thể dùng thuật toán sàng érastosthène nh sau : Xoá 1, trong phạm vi từ 2 tới căn bậc hai của N , tìm số nguyên dơng k nhỏ nhất cha bị xoá rồi xoá các bội của k nhỏ hơn N bắt đầu từ bình ph ơng của k Các số còn lại cha bị xoá chính là các số nguyên tố nhỏ hơn N Trình bày thuật toán bằng sơ đồ khối

8 ) Có 6 đội bóng A,B,C,D,E,F thi đấu để tranh giải vô địch ( đấu vòng 1 )

Đội A đã đấu với đội B và C

Đội B đã đấu với đội D và F

Đội E đã đấu với đội F và C

Mỗi đội chỉ đấu với đội khác 1 trận trong 1 tuần Hãy nêu thuật toán lập lịch thi đấu sao cho các trận còn lại sẽ đợc thực hiện trong thời gian ngắn nhất

Trang 6

Mét sè ch¬ng tr×nh minh ho¹ thuËt to¸n

{ Bµi 1 ThuËt to¸n tr¸o cèc }

Uses Crt;

Var A,B,C : Integer;

Begin

Clrscr;

Write('Nhap so A : ');

Readln(A);

Write('Nhap so B : ');

Readln(B);

C := A;

A := B;

B := C;

Writeln('A = ',A:5,#13#10'B = ',B:5);

Readln;

End

{ Bµi 2 T×m phÇn tö nhá nhÊt trong d·y }

Uses Crt;

Const Max = 10;

Var j : Integer;

A : Array[1 Max] of Integer;

Begin

Clrscr;

For j:=1 to Max do

Begin

Write('A[',j:2,'] = ');

Readln(A[j]);

End;

j := 2;

Repeat

If A[j] < A[1] then A[1] := A[j];

Inc(j);

Until j>Max;

Writeln('So nho nhat la ',A[1]);

Readln;

End

{ Bµi 3 DuyÖt d·y theo thø tù , t×m phÇn tö X }

Uses Crt;

Const Max = 10;

Var i,X : Integer;

A : Array[1 Max] of Integer;

Procedure Baoco;

Begin

Writeln(X,' co trong day ');

Readln;

Halt;

End;

Procedure Khongco;

Begin

Writeln(X,' khong co trong day ');

Readln;

End;

Trang 7

Clrscr;

Write('Nhap X = '); Readln(X);

Writeln('Nhap day A ');

For i:=1 to Max do

Begin

Write('A[',i:2,'] = ');

Readln(A[i]);

End;

i := 1;

While i<= Max do

Begin

If A[i] = X then Baoco { Trong Baoco co lenh Halt }

Else Inc(i);

End;

If i>max then Khongco;

End

{ Bµi 4 S¾p xÕp d·y b»ng ph¬ng ph¸p Næi bät - Ph¬ng ph¸p s¾p xÕp kÐm nhÊt }

Uses Crt;

Const Max = 10;

Var N : Integer;

A : Array[1 Max] of Integer;

Procedure Nhap;

Var i : Integer;

Begin

Write('Nhap N = ');

Readln(N);

For i:=1 to N do

Begin

Write('A[',i:2,'] = ');

Readln(A[i]);

End;

End;

Procedure Hien;

Var i : Integer;

Begin

For i:=1 to N do

Write(A[i]:5);

Writeln;

End;

Procedure Traococ( Var x,y : Integer);

Var c : Integer;

Begin

c := x;

x := y;

y := c;

End;

Procedure KieuFor;

Var i,j : Integer;

Begin

For i:=1 to N-1 do

For j:=i+1 to N do

If A[i] > A[j] then Traococ(A[i],A[j]);

Hien;

End;

BEGIN

KieuFor;

Trang 8

Readln;

END

{ Bµi 5 Ph¬ng ph¸p Lïa bß vµo chuång ! }

Uses Crt;

Const Max = 32000;

M = 10;

Var x,N : Integer;

A : Array[1 M] of Integer;

B : Array[1 Max] of Boolean;

Procedure Nhap;

Var i : Integer;

Ok : Boolean;

Begin

Write('Nhap N = ');

Repeat

{$I-} Readln(N); {$I+}

Until (IoResult=0) and (N<=10) and (N>0);

Writeln('Nhap mang ',N,' so nguyen duong : ');

For i:=1 to N do

Begin

Write('A[',i:2,'] = ');

Repeat

Readln(A[i]);

Ok := (IoResult=0) and (A[i]<=32000) and (A[i]>0); Until Ok;

End;

End;

Procedure Thuchien;

Var i,j : Integer;

Begin

FillChar(B,Sizeof(B),False);

For i:=1 to Max do

For j:= 1 to N do

If i=A[j] then B[i]:= true;

For x:=1 to Max do

If B[x]=False then

Begin

Write('So nguyen duong nho nhat khong thuoc mang: '); Writeln(x);

Readln;

Halt;

End;

End;

BEGIN

Clrscr;

Nhap;

Thuchien;

Readln;

END

{ Bµi 6 ThuËt to¸n t×m USCLN cña 2 sè }

Uses Crt;

Var A,B,La,Lb : Integer;

Procedure Nhap(i : Char;Var x : Integer);

Var Ok : Boolean;

Begin

Write('Nhap so nguyen ',i,' = ');

Repeat

Trang 9

{$I-} Readln(x); {$I+}

Ok := (IoResult=0);

Until Ok;

End;

Procedure Hien(x : Integer);

Begin

Write('UCLN(',LA:5,',',LB:5,') = ',x);

Readln;

Halt;

End;

Procedure Hien2;

Begin

Writeln(' Moi so nguyen deu = UCLN(0, 0) ');

Readln;

Halt;

End;

Procedure Tim;

Var D : Integer;

Begin

A := Abs(A);

B := Abs(B);

If (A=0) and (B<>0) then Hien(B);

If (B=0) and (A<>0) then Hien(A);

If (A=0) and (B=0) then Hien2;

D := A mod B;

While D<>0 do { Chu y neu dung Repeat can tranh chia cho 0 }

Begin

A := B;

B := D;

D := A mod B;

End;

Hien(B);

End;

BEGIN

Clrscr;

Nhap('A',A);

Nhap('B',B);

La := A;

Lb := B;

Tim;

Readln;

END

{ Bµi 7 T×m sè nguyªn tè - ThuËt to¸n tèt }

Uses Crt,dos;

Const Max = 400000; { 192/100 giay > 50000 & 2269/100 giay > 400000 } Var N , i : LongInt;

h,m,s,p : Word;

T : LongInt;

Begin

Clrscr;

Gettime(h,m,s,p);

t := 6000*m + 100*s +p;

Write(2:8);

Write(3:8);

For N := 5 to Max do

If (N mod 2 <> 0) and (N mod 3 <> 0) then

Begin

i := -1;

Trang 10

Repeat

Inc(i,6);

Until (N mod i =0) or (N mod (i+2)=0) or (sqr(i)>N);

If sqr(i)>N then Write(N:8);

End;

Gettime(h,m,s,p);

t := 6000*m + 100*s +p - t;

Writeln;

Writeln('Mat thoi gian la : ', T);

Readln;

End

{ Bµi 8 T×m c¨n bËc hai cña 1 sè }

Uses Crt;

Var A,E,X0 : Real;

Procedure Baoloi;

Begin

Writeln('Loi du lieu nhap : ');

Readln;

Halt;

End;

Procedure Nhap;

Var Ok : Boolean;

Begin

Write('Nhap so trong can bac 2 : ');

Repeat

{$I-} Readln(A); {$I+}

Ok := (IoResult=0) and (A>=0);

If not Ok then BaoLoi;

Until Ok;

Write('Nhap do chinh xac : ');

Repeat

{$I-} Readln(E); {$I+}

Ok := (IoResult=0) and (E>=0.000001) ;

If not Ok then BaoLoi;

Until Ok;

End;

Procedure Lam;

Var X : Real;

Begin

X0 := 1;

Repeat

X := X0;

X0 := (X + A/X)/2;

Until Abs(X0-X) < E;

End;

Procedure Hien;

Begin

Writeln('can bac 2 cua ',A:8:2,' la ',X0:8:2,' voi do chinh xac ',E:8:6); End;

BEGIN

Clrscr;

Nhap;

Lam;

Hien;

Readln;

END

Trang 11

{ Bài 9 Tìm nghiệm đa thức bằng thuật toán chia đôi cung }

Uses Crt;

Const Max = 10;

e = 0.0001;

Type Mang = Array[1 Max] of Real;

Var A : Mang;

x1,x2 : Real;

N : Byte;

Procedure Nhap1;

Var i : Byte;

Begin

Clrscr;

Write('N = ');

Repeat

{$I-} Readln(N); {$I+}

Until (IoResult=0) and (N>0) and (N<Max);

For i:=N downto 0 do

Repeat

Write('A[',i:2,']=');

{$I-} Readln(A[i]); {$I+}

Until (IoResult=0);

End;

Function F(x:Real):Real;

Var i : Byte;

p : Real;

Begin

p := A[n]*x+A[n-1];

For i:=2 to n do

p := p*x+A[n-i];

F := p;

End;

Procedure Nhap2;

Var dem : Byte;

Ok : Boolean;

Begin

Writeln;

dem := 0;

Repeat

Write('Nhap x1 : F(x1)<0 x1 = ');

{$I-} Readln(x1); {$I+}

Ok := (IoResult=0) and (F(x1)<0);

If not Ok then

Begin

Inc(dem);

Writeln('Nhap sai yeu cau lan thu ',dem); End;

Until Ok or (dem =3);

Writeln;

dem := 0;

Repeat

Write('Nhap x2 : F(x2)>0 x2 = ');

{$I-} Readln(x2); {$I+}

Ok := (IoResult=0) and (F(x2)>0);

If not Ok then

Begin

Inc(dem);

Writeln('Nhap sai yeu cau lan thu ',dem); End;

Until Ok or (dem =3);

End;

Ngày đăng: 22/07/2021, 03:21

TỪ KHÓA LIÊN QUAN

🧩 Sản phẩm bạn có thể quan tâm

w