PDA

View Full Version : Bài tập TP-Chung sức giúp cái nào ! Sẽ cám ơn thoả đáng



yumi
17-08-2002, 08:35
Tui đang làm gấp bài này mà không được , ai biết giúp Tui cái
Bài 1 : Thuật toán :
1) Lập trình thuật toán về toán học rời rạc :
a) Tìm cây khung nhỏ nhất .
b) Tìm kiếm trên đồ thị :
- Dùng Dijksta tìm đường đi ngắn nhất
- Cài đặt thuật toán tìm kiếm theo chiều rộng , chiều sâu
c) Tìm liệt kê tổ hợp , chỉnh hợp , lặp và không lặp bằng phương pháp sinh tuần tự .
d) Liệt kê bằng phương pháp đệ quy quay lui (8 hậu người đi tuần , sáu sĩ quan Ơle)
2) Tính hậu số vẽ đồ thị
3) Tính đa thức nội suy laysuy và UD Newton tính xấp xỉ gần đúng .
4) Tính tích phân gần đúng hàm số .
5) Phương pháp lặp giải gần đúng hệ tuyến tính .

yumi
17-08-2002, 08:37
Ai sửa cái này hộ Tui với , Tui làm mãi nó ko chạy được
Program tamquanhau;
Var i:integer ; q : boolean ;
X:Array [1..8] of integer ;
A:Array [1..8] of boolean ;
B:Array [2..26] of boolean ; {Số đường chéo tiến}
B:Array [-7..7] of Boolean ; {Số đường chéo lùi}
Procedure Dat_hau(i:integer ; var q:Boolean) ;
Var j:integer ;
Begin j:=0 ;
Repeat j:=inc(j) ; q:=false ;
If (a[i] and b[i+j] and c[i-j]) then
Begin
X[i]:=j ; a[j]:=false ;
B[i+j]:=false ; c[[i-j]:=false ;
If i<8 then
Begin dat_hau(i+1,q);
If not q then
Begin a[j]:=true; b[i+j]:=true;c[i-j]:=true;
End;end else q:=true ; end;
Until q or (j:=8)
End;
Begin for i:=1 to 8 do a[i]:=true;
For i:=2 to 16 do b[i]:=true;
For i:=-7 to 7 do c[i]:=true ;
Bat_dau(1,q)
If q then for i:=1 to 8 do write (x[i]:4);
Writeln;end.

phoenix
17-08-2002, 11:07
Giai thuat Dijkstra:



Procedure Dijkstra;
var
D,P,C: array [1..n] of integer;
i,j,k,mk,mx,min,x: integer;
begin
k:=n-1;{so phan tu cua tap hop C}
{xay dung tap hop C, mang D & P}
for i:=2 to n do
begin C[i-1]:=i; D[i]:=L[1,i]; P[i]:=1
end;
for j:=1 to n-2 do
begin
{tim gia tri nho nhat cua mang D}
min:=D[C[1]]; mx:=1;
for i:=2 to k do
if D[C[i]]< min then
begin min:=D[C[i]]; mx:=i
end;
{loai bo dinh C[mx] ra khoi tap hop C}
mk:=C[mx]; C[mx]:=C[k]; k:=k-1;
for i:=1 to k do
begin
x:=C[i];
if D[x]>D[mk]+L[mk,x] then
begin D[x]:=D[mk]+L[mk,x]; P[x]:=mk
end
end
end
end;

phoenix
17-08-2002, 11:27
Giai thuat tim kiem theo chieu rong = ds ke (breadth-first search)


Procedure Listbfs;
var i,k:integer;
mark: array [1..maxn] of integer;
Front,Rear,q: pt;
Procedure Init_Queue;
{khoi tao hang rong}
begin
Front:=nil; Rear:=nil
end;
Procedure Insert_Queue(r:integer);
{them nut r vao trong hang}
begin
New(q); q^.info:=r; q^.link:=nil;
if Rear<> nil then Rear^.link:=q;
Rear:=q;
if Front=nil then Front:=q
end;
Procedure Delete_Queue(var r:integer);
{lay nut r ra khoi hang}
begin
r:=Front^.info; q:=Front;
Front:=Front^.link;
if Front=nil then Rear:=nil;
Dispose(q)
end;
Procedure Visit(k:integer);
var t:ref;
begin
Insert_Queue(k);
repeat
Delete_Queue(k);
i:=i+1; mark[k]:=i; t:=adj[k];
while t<> z do
begin
if mark[t^.id]=0 then
begin
Insert_Queue(t^.id);
mark[t^.id]:=-1
end;
t:=t^.next
end
until Front =nil
end;
begin
i:=0;
Init_Queue;
for k:=1 to n do mark[k]:=0;
for k:=1 to n do
if mark[k]=0 then Visit(k)
end;

phoenix
17-08-2002, 11:58
đã lâu ko dùng tới Pascal nên ko nhớ kỹ lắm, nếu có sai sót thì bạn sửa lại dùm nha.

bài tamquanhau, giai he pt tuyen tinh & liet ke to hop chinh hop thì tui có sẵn chương trình hoàn chỉnh viết =ngôn ngữ C, tui lười dịch qua Pascal wá, nếu bạn cần tham khảo thì tui sẽ gửi cho.

Tính hậu số vẽ đồ thị: bạn giải thích thêm về cái đề này đi

danceswithwolves
17-08-2002, 12:29
to phoenix@:

nếu bạn sử dụng tag \[code\] thì các bạn khác sẽ dễ đọc code hơn... ;)

phoenix
17-08-2002, 13:28
Giai thuat de quy tim kiem theo chieu sau


Procedure Listdfs;
var i,k:integer;
mark:array[1..maxn] of integer;
Procedure Visit(k:integer);
var t:ref;
begin
i:=i+1; mark[k]:=i;
{duyet cac dinh trong danh sach ke cua dinh k}
t:=adj[k];
while t<>z do
begin
if mark[t^.id]=0 then Visit(t^.id);
t:=t^.next
end
end;
begin
i:=0;
for k:=1 to n do mark[k]:=0;
for k:=1 to n do
if mark[k]=0 then Visit(k)
end;

phoenix
17-08-2002, 13:34
tui muốn dùng tab lắm nhưng tui không tài nào chỉnh sửa được
admin ơi làm ơn thêm phần hướng dẫn sử dụng đi
chương trình do tui viết ra mà tui còn thấy khó đọc nữa huống chi là các bạn

vikhoa
17-08-2002, 15:22
OK rồi đó. Phoenix chỉ việc copy và paste từ file text vào đây, để giữa 2 tag code là xong.

phoenix
17-08-2002, 15:24
trời... vikhoa làm gì 1 tràng dzậy, có giận em thì nói chứ đừng làm dzậy em sợ

phoenix
17-08-2002, 15:43
Bài tính tích phân tui chỉ làm được thế này thôi, đề bài của bạn chung chung quá, có mấy vấn đề tui ko rõ lắm
Tích phân xác định của một hàm số f(x) trong đoạn [a,b]


Program Tich_phan;
var
a,b,Delta:real;
I,N:integer;
S:real;
Function FX(x:real);
var HamFX: real;
begin
{HamFX:=x*sin(x);{chi la mot vi du ve ham f(x) de thu}
HamFX:=(a+i*Delta)*sin(a+i*Delta);
FX:=HamFX;
end;
begin
{Hay thay doi cac thong so N,a,b de xem ket qua}
{N cang cao, ket qua cang chinh xac}
N:=100;
a:=0; b:=1;
Delta:=( b-a)/N;
S:=0;
for i:=0 to N-1 do
begin
S:=S+(FX(a+i*Delta)+FX(a+(i+1)*Delta))*Delta/2;
end;
writeln('Tich phan =',S);
readln;
end.

phoenix
17-08-2002, 15:52
ok, cám ơn vikhoa nha,

phoenix
17-08-2002, 16:15
sao cái khung ở đây nó to wá dzậy nè

vikhoa
18-08-2002, 01:05
Tại vì có vài dòng code nó dài quá, không break ra được. Để K edit lại.

phoenix
21-08-2002, 20:50
yumi ơi, mình giải duoc mấy câu rồi nè, bạn đâu rồi hả yumi, hay bạn giận diễn đàn này nên bỏ đi rồi, đừng bỏ diendan nha.

real_time
11-10-2002, 10:56
mình có giải thuật tính tích phân gần đúng hàm số jumi có lấy không? nhưng giải thuật của mình thì còn thiếu và sơ sài lắm nên chưa port lên đây vội mà phải hỏi y' kiến đã.

yumi
13-10-2002, 18:11
Tưởng ở đay không làm ăn nên một đi lâu ngày mới quay lại , không ngờ ANh-Em nhiệt tình quá , nhưng mà sao trả lưòi chậm thế? Làm ăn vầy mất khách lắm . Bác Admin và MOD phải nhiệt tình hơn nữa nhé .