Tải bản đầy đủ (.doc) (14 trang)

Tài liệu CAU TRUC & GIAI THUAT

Bạn đang xem bản rút gọn của tài liệu. Xem và tải ngay bản đầy đủ của tài liệu tại đây (104.17 KB, 14 trang )

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;
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;
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.
* 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:
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);

×