PDA

View Full Version : سوال: رفع اشکال



roohollahnoori
چهارشنبه 25 شهریور 1388, 08:08 صبح
لطفا بگین اشکال برنامه من چیه ؟ ازvectorوusing space std اشکال میگیره
#include<iostream>
#include <vector>
using namespace std;
//****************
void floyd(float p[4][4],float A[4][4],vector<char> C[4][4])
{int i,j,k;
for(i=0;i<4;i++)
for(j+0;j<4;j++)
{A[i][j]=p[i][j];
C[i][j].push_back('N');
}
//floyd base
for (k=0;k<4;k++)
for(i+0;i<4;i++)
for(j=0;j<4;j++)
if((A[i][k]+A[k][j]) < A[i][j])
{ A[i][j]=A[i][k]+ A[k][j];
C[i][j].push-back(k+'0');
}
//display result table
cout<<"\n\nfloyd result;\n";
cout<<"\npath table values:\n\n";
for(i=0;i<4;i++)
{cout<<"\t";
for(j=0;j<4;j++)
if(A[i][j]==std::numeric_limits<floyd>::max())
cout<<"m";
else
cout<<A[i][j]<<" ";
cout<<endl;
}
cout<<"\nall paths:\n";
for(i=0;i<4;i++)
{ for(j=0;j<4;j++)
{cout<<"\nfrom"<<i<<"to"<<j<<":"<<i;
for(k=0;k<C[i][j].size();k++)
if(C[i][j][k]!='N')
cout<<","<<cC[i][j][k];
cout<<","<<j;
}
cout<<endl;
}
}
//************
int main()
{int i,j,k;
float p[4][4],A[4][4];
vector<char>C[4][4];
for(i=0;i<4;i++)
for(j=0;j<4;j++)
{p[i][j]=0;
if(i!=j)
p[i][j]=std::numeric_limits<float>::max();
}
p[0][1]=5;
p[1][0]=50;
p[1][2]=15;
p[1][3]=5;
p[2][0]=30;
p[2][3]=15;
p[3][0]=15;
p[3][2]=5;
cout<<"Gragh values:\n\n" ;
for(i=0;i<4;i++)
{cout<<'\t';
for(j=0;j<4;j++)
if(p[i][j]==std::numeric_limits<float>::max())
cout<<"m";
else
cout<<p[i][j]<<'';
cout<<endl;
}
floyd(p,A,C);
system("pause");
return 0;
}

tdkhakpur
چهارشنبه 25 شهریور 1388, 12:32 عصر
به احتمال زیاد کامپایلر شما تنظیم نیست؟
errore ها را ارسال کنید

deopen
پنج شنبه 26 شهریور 1388, 13:02 عصر
دوست عزیز کد شما مشکلات نحوی بسیاری دارد , من منظور شما را از این قسمت از کد نفهمیدم :


for(i+0;i<4;i++)

i+0 چه معنایی داره ؟؟

یا


C[i][j].push-back(k+'0')

push_back درستش است.

واقعا از این تکه کد تعجب کردم :


if(A[i][j]==std::numeric_limits<floyd>::max())
cout<<"m";
else
cout<<A[i][j]<<" ";

شما ابتدا باید limits را ضمیمه میکردید و درستش بشکل زیر است :


if(A[i][j]==numeric_limits<float>::max())

شما در کد زیر یک signed int و یک unsigned int را با هم مقایسه کردید :


for(k=0;k<C[i][j].size();k++)

درستش این است :


for(unsigned int k=0;k<C[i][j].size();k++)
if(C[i][j][k]!='N')
cout<<","<<C[i][j][k];

اینجا هم یک کارکتر خالی را به cout فرستادید:


cout<<p[i][j]<<'';

و اینجا j تعریف نشده :


for(j=0;j<4;j++)

کد DEbug شده شما را ضمیمه کردم :


#include<iostream>
#include <vector>

#include<limits>

using namespace std;
//****************
void floyd(float p[4][4],float A[4][4],vector<char> C[4][4])
{int i,j,k;
for(i=0;i<4;i++)
for(int j=0;j<4;j++)//----------------------j+0 :-O
{A[i][j]=p[i][j];
C[i][j].push_back('N');
}
//floyd base
for (k=0;k<4;k++)
for(i;i<4;i++)//-------------------i+0 :-O
for(j=0;j<4;j++)
if((A[i][k]+A[k][j]) < A[i][j])
{ A[i][j]=A[i][k]+ A[k][j];
C[i][j].push_back(k+'0');//-------------------push-back :-O na push_back
}
//display result table
cout<<"\n\nfloyd result;\n";
cout<<"\npath table values:\n\n";
for(i=0;i<4;i++)
{cout<<"\t";
for(j=0;j<4;j++)
if(A[i][j]==numeric_limits<float>::max())
cout<<"m";
else
cout<<A[i][j]<<" ";
cout<<endl;
}
cout<<"\nall paths:\n";
for(i=0;i<4;i++)
{ for(j=0;j<4;j++)
{cout<<"\nfrom"<<i<<"to"<<j<<":"<<i;
for(unsigned int k=0;k<C[i][j].size();k++)
if(C[i][j][k]!='N')
cout<<","<<C[i][j][k];
cout<<","<<j;
}
cout<<endl;
}
}
//************
int main()
{int i,j,k;
float p[4][4],A[4][4];
vector<char>C[4][4];
for(i=0;i<4;i++)
for(j=0;j<4;j++)
{p[i][j]=0;
if(i!=j)
p[i][j]=std::numeric_limits<float>::max();
}
p[0][1]=5;
p[1][0]=50;
p[1][2]=15;
p[1][3]=5;
p[2][0]=30;
p[2][3]=15;
p[3][0]=15;
p[3][2]=5;
cout<<"Gragh values:\n\n" ;
for(i=0;i<4;i++)
{cout<<'\t';
for(j=0;j<4;j++)
if(p[i][j]==std::numeric_limits<float>::max())
cout<<"m";
else
cout<<p[i][j]<<' ';
cout<<endl;
}
floyd(p,A,C);
system("pause");
return 0;
}