Tài liệu hạn chế xem trước, để xem đầy đủ mời bạn chọn Tải xuống
1
/ 14 trang
THÔNG TIN TÀI LIỆU
Thông tin cơ bản
Định dạng
Số trang
14
Dung lượng
99,5 KB
Nội dung
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); 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 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; 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; End; -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; End; 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) . 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;. 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;