View Full Version : Bài tập TP-Chung sức giúp cái nào ! Sẽ cám ơn thoả đáng
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 .
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.
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;
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;
đã 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... ;)
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;
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
OK rồi đó. Phoenix chỉ việc copy và paste từ file text vào đây, để giữa 2 tag code là xong.
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ợ
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.
sao cái khung ở đây nó to wá dzậy nè
Tại vì có vài dòng code nó dài quá, không break ra được. Để K edit lại.
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 đã.
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é .
Powered by vBulletin® Version 4.2.0 Copyright © 2024 vBulletin Solutions, Inc. All rights reserved.