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

Tài liệu CAU TRUC & GIAI THUAT

14 273 0
Tài liệu đã được kiểm tra trùng lặp

Đ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

Tiêu đề Tài liệu Cấu trúc & Giải thuật
Thể loại Tài liệu
Định dạng
Số trang 14
Dung lượng 99,5 KB

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

Nội dung

Đếm số chữ số trong số nguyên n... Bổ sung một nút vào danh sách a, Bổ sung dầu dang sách Procedure bosung var L : Tro; X : integer; Var P: tro; Begin New p; P^.. Cho trước một số nguyên

Trang 1

I.Viết các thủ tục và hàm đệ quy, ko đệ quy.

1 Tính Sn = 1 + 2 + 3 +… + n.

Function tong 1 (n : integer) : integer;

Var s, i : Integer;

Begin

S:= 0;

For i:=1 to n do S:= S+i;

Tong 1:= S;

END;

• Đệ quy

Function tong 1 (n : integer) : integer;

Begin

If n = 1 then tong 1:= 1;

Else tong1:= n + tong1 (n – 1);

End;

2 Tính Sn = 1 2 + 2 2 + 3 2 +……+n 2

Function tong 2 (n : integer) : word;

Var i: interger; s: word;

Begin

S:= 0;

If n > 0 then

For i:= 1 to n do S:= S +i*i

Tong 2 := S;

End;

• Đệ quy:

Function tong 2 (n : integer) : word;

Begin

If n = 1 then tong 2:= 1;

Else tong2:= n*n + tong2 (n – 1);

End;

3 Tính n!

Function Giaithua (n : integer) : word;

Var i: interger; s: word;

Begin

S:=1;

For i:= 1 to n do S:= S* i;

Giaithua:= S;

End;

• De quy

Function Giaithua (n : integer) : word;

Begin

If (n:= 0) or (n:=1) then Giaithua :=1; Else Giaithua := n*Giaithua (n – 1); End;

Trang 2

4 Chuyen thap phan sang nhi phan: Function Nhiphan (n : integer) : string;

Var St : string;

Begin

St:= ‘ ‘;

Repeat

If n mod 2 := 0 then St:= ‘0’ + st Else St:= ‘1’ + st;

n:= n div 2;

Until n;= 0;

Nhiphan:= S;

End;

* Procedure Nhiphan (n:integer);

Var

Begin

S := rong;

Repeat

X := n mod 2;

SPUSH (S, n, t, X);

n:= n div 2;

Until n:= 0 ;

While s <> rong do

Wrrite ( SPOP (S, nt));

End;

• De quy

Function Nhiphan (n : integer) : string; Begin

If n >= 2 then

Nhiphan (n div 2);

Write ( n mod 2);

End;

5 Hien thi so dao nguoc

Procedure daonguoc ( n : integer); Var m:integer;

Begin

Repeat m:=n mod 10;

Write (m);

n:= n div 10;

Until n:= 0;

End;

• De quy

Procedure daonguoc ( n : integer); Begin

If n <=0 then write (n);

Else Begin

Write (n mod 10);

Daonguoc (n div 10);

End;

End;

Trang 3

6 Tinh UCLN(a,b).

Function UCLN (a, b: integer): integer;

Var m : integer;

Begin

While a <> b do

If a > b then a := a – b

Else b := b – a;

UCLN :=b;

End;

De quy

Function UCLN (a, b: integer): integer;

If a := b then UCLN := a

Else if a> b then UCLN := UCLN (a – b, b) else UCLN := UCLN ( a, b – a); End;

7 Kiem tra so nguyen to:

Function nguyento (n: integer) : Boolean;

Var a : integer;

Begin

a := 2

While ( a < n div 2) and ( n mod 2 <> 0)

Do a:= a + 1;

If a > n div 2 then nguyento := true; Else nguyento := False;

End;

8 Đếm số chữ số trong số nguyên n.

Trang 4

* Function Dem(n:integer):integer;

Begin

If n<>0 then Dem:=Dem(n div 10) +1 Else Dem:=0;

End;

* Không Đệ Quy:

Function Dem(n:integer): integer;

Var a: word;

Begin

a:=0;

Repeat

a:=a+1;

n div 10;

Until n=0;

Dem:=a;

End;

9 Đếm số lẻ trong số nguyên n.

* Function Dem(n:integer):integer;

Begin

While n<>0 the do

Begin

If n mod 2 <>0 then Dem:=1 Else Dem:=Dem(n div 10); End;

Writeln(‘So le la:’); Return;

End;

* Không Đệ Quy:

Function Dem(n:integer):integer;

Var m:word;

Begin

m:=0;

Repeat

If n mod 2 <>0 them m:=1

Else n:=n div 10;

m:=m+1;

Until n=0;

Writeln(‘So le la:’, m);

End;

II QUEEN:

Trang 5

1 Nộp phần tử vào Queen và lấy phần tử ra khỏi Queen:

* Procedure QPUSH(Var Top, Botton:Tronut; X:integer);

Var P:Tronut;

Begin

New(P);

P^.info:=X;

P^.Link:=nil;

If Botton=nil then Botton:=P

Else Top^.Link:=P;

Top:=P;

End;

* Function QPOP(Var Top,Botton): Integer;

Var P:Tronut; X:integer;

Begin

X:=Botton.info;

P:=Botton;

Botton:=Botton.Link;

If (Botton=nil) then Top=nil;

Dispose(P);

QPOP:=X;

End;

III DANH SÁCH MÓC NỐI ĐƠN

1 Bổ sung một nút vào danh sách

a, Bổ sung dầu dang sách

Procedure bosung (var L : Tro; X : integer);

Var P: tro;

Begin

New (p);

P^ gtri := X;

P^ Next := L;

L:= P;

End;

b, Bổ sung cuối dang sách

Procedure bosung (var L : Tro; X : integer);

Var P: tro;

Begin

New (p);

P^ gtri := X;

P^ Next := nil;

If L := nil then L:= P;

Else Begin

T:= L;

While t^.next <> nil do T:=T^.next

T^.next := P;

End;

End;

2 Cho trước một số nguyên N, nếu trong danh sách chưa có N thì bổ sung thêm nút mới N vào cuối danh sách.

Procedure bosung (var L : Tro; N : integer);

Var P, T: tro;

Begin

New (p);

Trang 6

P^ gtri := X;

P^ Next := nil;

If L := nil then L:= P;

Else

Begin

T:= L;

While (t^.next <> N) and (T^.next <> Nil) Do T:=T^.next ;

if T^.Next := Nil then T^ Next := P Else write (‘Giá trị đã có”);

End;

End;

3 Tìm nút lớn nhất

a, thủ tục: nút lớn trỏ bởi p

Procedure Lonnhat ( L : tro; var P : Tro);

var P : Tro

Begin

If L <> Nil then

Begin

P:=L; R:= P^ Next;

While N <> nil do;

Begin

If n^ gtri > P^.Gtri then

P:= R;

R := R^.Next;

End;

End;

End;

b, Hàm

Function Lonnhat ( L : tro; var P : Tro);

var P, R: Tro;

Begin

If L <> Nil then

Begin

P:=L; R:= P^ Next;

While N <> nil do;

Begin

If n^ gtri > P^.Gtri then

P:= R;

R := R^.Next;

End;

End;

Lonnhat:= P^.Next;

End;

Bài 4: đếm các nút lá trong danh sách

Function demnut ( L : tro) :integer;

var m := integer;

Begin

M:=0; P:= L While p<>Nil do Begin

Trang 7

M:= m + 1;

P:= P^ Next;

End;

Demnut:=m;

End;

Bài 5: Tính giá trị trung bình của các nút:

Function demnut ( L : tro) :real;

var m := integer; s:= real;

Begin

M:=0; P:= L, S:=0;

While p<>Nil do

Begin M:= m + 1;

P:= P^ Next;

S:= S + P^.gtri;

End;

If m > 0 then trungbinh := S/m;

End;

Bài 6: Chèn một nút vào sau nút thứ n:

Procedure chen (var L : tro; P : Tro);

var P, Q : Tro; n, m : Integer;

Begin

Write (‘Nhập vị trí muốn chèn’);

Readln (n);

New (p);

P^ gtri := X;

P^ Next := nil;

If n:= 0 then

Begin

T^ Next: = L;

L:= P;

End;

Else

Begin

M:= 1; Q := L;

While (Q^ Next <> nil) and (m < n) do Begin Q:= Q^ Next; m := m +1; End;

if Q^ Next <> nil then

Writeln (‘có ít hơn n phần tử’);

Else

Begin

P^ Next := Q^ Next;

Q^ Next := P;

End;

End;

End;

Bài 7: xoá nút thứ n

Procedure xoá (var L : tro; n: Integer ); var P, Q : Tro; m : Integer;

Begin

If n:= 1 then Begin

P := L; L:= L^ next;

Trang 8

Dispose (p);

End;

If n > 1 then

Begin

P := L; m := 1;

While ( m < n) and ( P^.next <> nil) do

Begin

M:= m + 1; q:= p;

P := P^ next;

End;

If P^.next := nil then

Writeln (‘Có ít hơn n phần tử’);

Else

Begin P^ Next := Q^ Next;

Dispose (p);

P:= Q ^ Next;

End;

End;

End;

Bài 8: Hoán đổi giá trị trong các nút sao cho khi duyệt danh sách ta được dãy số theo thứ tự tăng dần.

Procedure hoandoi (var L : tro);

var P, Q : Tro; m : Integer;

Begin

P:=L;

Repeat While P^ Next := nil do Begin

If R^ gtri < P^ gtri then Begin

M:= R^.Gtri;

R^ gtri = P^ gtri ; P^ gtri := m ; End;

R := R^.next;

End;

P := P^ next;

End;

Until P^ Next := nil;

End;

IV CÂY NHỊ PHÂN TÌM KIẾM

1 Viết chương trình tạo cây nhị phân cho trước rồi hiển thị nó theo thứ tự trước, sau.

-Procedure duyettruoc (T);

Begin

If T<> nil then

Begin

Write (T^.gtri);

Duyettruoc (T^ L);

Duyettruoc (T^ R);

End;

Trang 9

-Procedure duyetsau (T);

Begin

If T<> nil then

Begin

Duyetsau (T^ L);

Duyetsau (T^ R);

Write (T^.gtri);

End;

End;

2 Viết chương trình tạo cây nhị phân tìm kiếm chứa các số nguyên nhập từ bàn phím trên một dòng rồi hiển thị

nó theo thứ tự giữa.

Procedure TaoNP (Var T := Tro);

Var x: Integer;

Begin

T:= Nil;

Write (‘Nhap day cac so nguyen tren mot dong);

While Not Eoln do

Begin

Readln (X);

Chennut (T, X);

End;

Write (‘duyetgiua’);

Duyetgiua (T);

End;

3 Đếm số nút Cành (đếm số toán tử) của cây.

*Function Dem canh (T);

If Rptr(T)=Lptr(T)=Nill then Return(0)

Else Return(1+Dem canh(Lptr(T)+Dem canh(Rptr(T));

*Không Đệ Quy:

Function Dem canh(T);

S:=Ø

Dem:=0;

If T≠ null then Spush(S,t);

While S≠ Ø Do

Begin

P:=Spop(S);

If (Lptr(P) ≠ null)or(Rptr(P) ≠ null) then

Dem:=Dem+1;

If Rptr(P) ≠ null then Spush(S, Rptr(P));

If Lptr(P) ≠ null then Spush(S, Lptr(P));

End;

Return(Dem);

4 Viết hàm đêm số nút của cây nhị phân cho trước

Function demnut (T : tro) : integer;

Var

Begin

P := T;

If T:= nil then demnut := 0;

Else demnut := 1 + demnut ( P^.L) +demnut (P^.R);

End;

5 Viết hàm tính chiều cao của một cây nhị phân cho trứơc.

Function Max (a,b :integer ) : integer;

Var

Begin

If a >b then Max := a else Max := b;

Trang 10

Function Max (a,b :integer ) : integer;

Var

Begin

P:= T;

If P:= Nil then chieucao := 0;

Else

Chieucao := 1+Max(chieucao(P^.L),

chieucao (P^.R);

End;

6 Viết thủ tục hàm tính chiều cao và chiều sâu (còn gọi là mức) của một nút cho trước trong cây nhị phân tìm kiếm.

* Function chieucaonut (T: tro, X:integer ) : integer;

Var

Begin

P:= T;

While P <> nil do

Begin

If P^.gtri < X then P:= P^.R;

Else if P^.gtri > X then P:= P^.L;

Else chieucaonut := chieucao (p);

End;

End;

* Function chieusau (T: tro, X:integer ) : integer;

Var

Begin

P:= T;

If P := nil then chieusau := 1;

Else if P^.gtri := X then chieusau := 0;

Else if P^.gtri > X then

Chieusau := 1+ chieusau (P^ R, X);

Else Chieusau := 1+ chieusau (P^ L, X);

End;

7 Viết hàm đếm số nút lá trong cây nhị phân cho trước

Function demla (T: tro) : integer;

Var

Begin

P:= T;

If P := nil then demla := 0;

Else if (P^.L := Nil) and (P^.R :=nil);

Then demla :=1;

Else demla := demla (P^.L ) +demla (P^.R );

End;

8 Viết hàm đếm số nút bậc 2 trong cây nhị phân cho trước

Function nutbac2 (T: tro) : integer;

Var

Begin

P:= T;

If P := nil then SNB2:= 0

Else If T^.Left=Nil then SNB2:=SNB2(T^.Right)

Else If SNB2:=SNB2(T^.Left)

Trang 11

Else SNB2:=1+SNB2(T^.Left)+SNB2(T^.Right);

Sonutbac2:=SNB2;

End;

9 Bổ sung một nút mới vào cây nhị phân.

Procedure bosung (Var T:Tronut; X:Integer);

Var Tròn,r,p,q:Tronut;

Begin

New(p);

p^.info:=X;

p^.Left:=p^.Right:=nil;

q:=T;

while q<>nil do

Begin r:=q;

if X<q^.info then q:=q^.Left else if X>q^.info then q:=q^.Right else if x=q^.info then

Begin write (‘Da ton tai’); exit;

End;

End;

If T=nil then T:=p Else if X<r^.info then r^.Left:=p

Else r^.Right:=p;

End;

V Cho đồ thị ko định hướng G = <V,E> với V= { 1,2,….,N} được lưu trữ trong ma trận kề A [ 1…n, 1…n]

với ý nghĩa A[i,j] = 1 nếu tồn tại cung i,j và A[i,j] = 0 nếu ko tồn tại cung i,j

1 Thủ tục thăm đồ thị theo chiều sâu.

Procedure Duyet sau (A:mang;n,v,w:integer);

Var

Begin

Write (A[v]);

KT[v]:=False;

For w:=1 to n Do

If (A[v,w]=1) and (KT[w]) then

Duyet sau(A,n,w);

End;

2.Xác định đồ thị cho trước có liên thông ko?

Function Lienthong (A:mang; n:integer) : boalean;

Var V: integer;

Begin

for := 1 to n do Kt [i] := true;

write (‘Nhap dinh xuat phat’);

readln (v);

Duyetsau (A,n,v);

for := 1 to n do

if kt [j] then lienthong := False;

Trang 12

else := lienthong := true;

end;

3 Đếm số miền liên thông của đồ thị cho trước

Function Demlt (A:mang; n, v:integer) : boolean; Var V: integer;

Begin Dem := 01;

for := 1 to n do Kt [i] := true;

Duyetsau (A,n,v);

for := 1 to n do

if kt [j] then

Begin

Dem:= dem +1;

Duyetsau (A, n, J);

End;

Demlt := dem;

End;

4 Kiểm tra xem 2 đỉnh cho trước có liên thông ko?

Function kt (P,Q : integer) : Boolean;

Var

Begin

Kt := false;

For i:= 1 to n do Kt [i] := true;

For i:= 1 to n do

if (A[p,j] :=1) and kt [j] then begin

Kt := false;

If j := Q then Kt := true

Else KT := Kt (j, Q);

End;

End;

5 Kiểm tra một đồ thị có chu trình ko?

Function Chutrinh (P : integer) : Boolean;

Var

Begin

For i:= 1 to n do Kt [i] := true;

For i:= 1 to n do

if (A[p,j] :=1) and kt [j] then begin

A[p,j] := 0;

A[j,p] := 0;

Trang 13

If kt (i,p) := True then

Chutrinh := true;

Else chutrin := false;

End;

End;

6 đồ thị có bao nhiêu cung:

Function socung (A:mang; n, v:integer) : boolean;

Var dem:= 0

Begin

for i:= 1 to n do

for j:= 1 to n do

if A[i,j] := 1 then Dem := Dem +1;

socung := dem div 2;

end;

7 Nếu đồ thị ko liên thông thì bổ sung thêm một số tối thiểu các cung để đồ thị liên thông.

Function Bosung ( Var A:mang; n:integer) : boalean;

Var V: integer;

Begin

for i:= 1 to n do Kt [i] := true;

if kt [j] then

begin

A[v,j] := 1;

A[j,v] := 1;

Bosung (A, n, J);

End;

End;

Ngày đăng: 02/12/2013, 09:11

TỪ KHÓA LIÊN QUAN

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

w