Pascal zadatak- pronalazenje mostova u grafu

Član
Učlanjen(a)
10.02.2013
Poruka
2
Pozdrav svima!
Imam jedan problem za zadatkom koji pronalazi mostove u grafu: deluje da je dobro napisan, ali ipak postoji greska jer ne vraca nikakav rezultat. Bila bih zahvalna ako neko moze da pogleda kod i javi ako uoci gresku...Hvala :)


program mostovi;
var e:array [1..100,1..100] of boolean;
d,l,otac,odc,doc:array [1..100] of integer;
bio:array [1..100] of boolean;
i,j,n,m,a,b,nmostova,t:integer;
function Art(st:integer):integer;
var i,k,q:integer;
begin
bio[st]:=true;
inc(t);
l[st]:=t;
d[st]:=t;
k:=0;
for i:=1 to n do
if (i<>st) and (e[st,i]) then
begin
if not(bio) then
begin
otac:=st;
k:=k+1;
q:=Art(i);
if (l > d[st]) then
begin
inc(nmostova);
odc[nmostova]:=st;
doc[nmostova]:=i;
end;
if l<l[st] then l[st]:=l;
end
else
if (i<>otac[st]) then
if d<l[st] then l[st]:=d;
end;
Art:=k;
end;
begin
fillchar(bio,sizeof(bio),false);
fillchar(d,sizeof(d),0);
fillchar(l,sizeof(l),0);
fillchar(otac,sizeof(otac),0);
fillchar(odc,sizeof(odc),0);
fillchar(doc,sizeof(doc),0);
read(n,m);
for i:=1 to m do
begin
read(a,b);
e[a,b]:=true;
e[b,a]:=true;
end;
nmostova:=0;
t:=0;
otac[1]:=-1;
a:=art(1);
writeln('mostovi su grane izmedju cvorova:');
for i:=1 to nmostova do
writeln(odc,' ',doc);
end.

Unosi se n-broj grana, m-broj covorova, a u petlji susedi(a i b) na svakoj grani.
 
Poslednja izmena:
Član
Učlanjen(a)
26.07.2012
Poruka
455
u Pascalu sam radio jako davno (prije 10-15 godina) pa nemoj uzimati zdravo za gotovo ovu moju sugestiju, no mislim da ti je problem u sledećem

var e:array [1..100,1..100] of boolean;
d,l,otac,odc,doc:array [1..100] of integer;
bio:array [1..100] of boolean;
i,j,n,m,a,b,nmostova,t:integer; - ovde si deklarirala između ostalih i promenjivu "n" a nisi joj dodelila nikakvu vrednost!!!
function Art(st:integer):integer;
var i,k,q:integer;
begin
bio[st]:=true;
inc(t);
l[st]:=t;
d[st]:=t;
k:=0;
for i:=1 to n do - ovde pokrečeš for petlju od 1 do n - pošto nisi dodelila vrednost za n ne zna se dokle da je vrti!!!!


mislim da je tu problem!

još jedna sugestija na dodeljivanje imena promenjivih (iz iskustva!!!) - nije ti dobro davati imena promenjivih a,b,c,d.... jer sa pedesetak promenjivih u nekom ozbiljnijem programu ćeš se vrlo lako izgubiti, stoga se potrudi za ubuduće dodeljivati imena koja će te asocirati na ulogu promenjive u programu i nazive piši da budu uočljiviji npr. brojGodinaOca ili broj_godina_oca, brojCvorova - kužiš!

pozz!
 
Poslednja izmena:
Član
Učlanjen(a)
10.02.2013
Poruka
2
Hvala na odgovoru! Inace, sve gore navedene promenljive su globalne, tako da im je vrednost dodeljena u glavnom programu pre poziva funkcije i problem nije u tome. Sto se naziva promenljivih tice- praktikujem to kada pisem vece programe, za ove manje ne, ali hvala na sugestiji :) primenjivacu od sada to i na manje, jer je lakse sagledati program. Pozdrav
 
Član
Učlanjen(a)
26.07.2012
Poruka
455
ok, kažeš da su globalne promenjive i da im je vrednost dodeljena u glavnom programu, e onda mi nije jasno zašto ih ponovo iniciraš, jer ako su globalne promenjive onda su vidljive u svim podprocedurama i podprogramima! ovako ispada da iniciraš promenjivu n sa vrednošću 0!

pozz!
 
Natrag
Top