Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Центр помощи > как переделать под классы программу на С++


Автор: gerewget 18.1.2015, 23:00
Прошу помогите как переделать эту программу под классы?

вот что делает программа:
Обнаружение всех элементарных циклов ориентированного графа.
Код

int k,p=0;
 
int cycle(int **m,int n, int *m2,int *m_ver,int first,int t);
 
int obrabotka(int L1,int **m1,int n,int *m_v,int first,int t,int i);
 
void vivod(int **m1,int n);
void free(int **R, int n);
 
 
 
void main(void)
 
{
 
int t=0,*m_versh,*m_obrabotannie,i,j,size,**array, first_1,*mtmp,sch=0;
 
 
m_versh=new int[size];
 
m_obrabotannie=new int[size];
 
mtmp=new int[size];
    
cout << "Enter razmernost grapha: ";
    
cin >> size;
    
array = new int*[size];
    
for ( i = 0; i < size; i++ )
       
  {
array[i] = new int[size];
  }
    
for ( i = 0; i < size; i ++ )
      
{ 
cout << "Enter " << (i + 1) << " stroku: ";
          
for ( j = 0; j < size; j ++ )
          
  { 
cin >> array[i][j]; 
  }
       
}
 
{
 
 
for(i=0;i<size;i++)
 
for(j=0;j<size;j++)
 
 {
 
if(array[i][j] == 1)
 
  {
 
first_1=i;
 
for(int q=0;q<size;q++)
 
if(array[j][q]==1)
 
   {
 
mtmp[t]=q;
 
t++;
 
   }
 
 p+=cycle(array,size,mtmp,m_versh,first_1,t);
 
  }
 
 }
 
cout << "Vvedennaya matrica smezhnostey: ";
 
cout<<endl<<"---------"<<endl;
 
vivod(array, size);
cout<<endl<<"---------"<<endl;
 
cout<<endl<<"Kolichestvo prostyx ciklov:"<< p<<endl;
 
 
 
free(array,size);
 
getch();
 
}
 
}
 
 
 
 
int cycle(int **m,int n, int *m2,int *m_ver,int first,int t)
 
{
 
int L,count=0,i=0;
 
for(int s=0;s<t;s++)
 
  {
 
L=m2[s];
 
count+=obrabotka(L,m,n,m_ver,first,t,i);
 
  }
 
return(count);
 
}
 
 
 
int obrabotka(int L1,int **m1,int n,int *m_v,int first,int t,int i)
 
{
 
int u=0,buf=0;
k=0;
 
while(k!=1)
 
 {
 
for(int j=0;j<n;j++)
 
  {
 
if(j==0 && u==0)
 
   {
m_v[i]=L1;
 
u=1;
 
i++;
 
   }
 
 
if(m1[L1][j] == 1)
 
   {
 
buf=j;
 
for(int l=0;l<(i-1);l++)
 
 
       if( j==m_v[l] )
 
{k=1;
 
p=0;
 
return(p);
 
   }
j=buf;
if(j==first)
 
   {
p=1;
 
k=1;
 
return(p);
 
   }
 
//else
 
//   {
 
//cout<<"Error - No end"<<endl;
 
//getch();
 
//exit(0);
 
//   }
 
 
j=buf;
 
 
p=1;
 
k=1;
 
obrabotka(j,m1,n,m_v,first,t,i);
 
  }
 
 }
 
}
 
 
return p;
 
}
 
 
 
void free(int **R, int n)
 
{
 
for(int e=0;e<n;e++)
 
free(*(R+e));
 
free(R);
 
}
 
void vivod(int **m1,int n)
 
{
 
for(int k=0;k<n;k++)
 
{
for(int l=0;l<n;l++)
  
cout<<m1[k][l];
 
cout<<endl;
}
 
}

Автор: bsa 23.1.2015, 17:51

M
bsa
Для домашних заданий, курсовых и т.п. существует \"Центр Помощи\".




Тема перенесена. 

Автор: interv 26.1.2015, 08:34
Ёб...ный стыд Кто Вас так учил писать сударь?
http://habrahabr.ru/post/189094/
ща попробуем ченить написать

Добавлено через 9 минут и 32 секунды
Знач так!
Избавти код от мусора сначала, и сформульруйте задачу правильно.
т.е. какие методы и свойства будут у класса. Чтобы облегчить Вам жизнь, вот нормальный Ваш код:
Код

int k,p=0;
int cycle(int **m,int n, int *m2,int *m_ver,int first,int t);
int obrabotka(int L1,int **m1,int n,int *m_v,int first,int t,int i);
void vivod(int **m1,int n);
void free(int **R, int n);
 
void main(void)
{
  int t=0,*m_versh,*m_obrabotannie,i,j,size,**array, first_1,*mtmp,sch=0;
  m_versh=new int[size];
  m_obrabotannie=new int[size];
  mtmp=new int[size];
  cout << "Enter razmernost grapha: ";
  cin >> size;
  array = new int*[size];
  for ( i = 0; i < size; i++ )
    array[i] = new int[size];
  for ( i = 0; i < size; i ++ )
  { 
    cout << "Enter " << (i + 1) << " stroku: ";
    for ( j = 0; j < size; j ++ )
      cin >> array[i][j]; 
  }
  for(i=0;i<size;i++)
    for(j=0;j<size;j++)
    if(array[i][j] == 1)
    {
      first_1=i;
      for(int q=0;q<size;q++)
      if(array[j][q]==1)
      {
        mtmp[t]=q;
        t++;
      }
      p+=cycle(array,size,mtmp,m_versh,first_1,t);
    }
  cout << "Vvedennaya matrica smezhnostey: " << endl << "---------" << endl;
  vivod(array, size);
  cout<<endl<<"---------"<<endl;
  cout<<endl<<"Kolichestvo prostyx ciklov:"<< p<<endl;
  free(array,size);
  getch();
}
 
int cycle(int **m,int n, int *m2,int *m_ver,int first,int t)
{
  int L,count=0,i=0;
  for(int s=0;s<t;s++)
  {
    L=m2[s];
    count+=obrabotka(L,m,n,m_ver,first,t,i);
  }
  return count;
}

int obrabotka(int L1,int **m1,int n,int *m_v,int first,int t,int i)
{
  int u=0,buf=0;
  k=0;
  while(k!=1)
  {
    for(int j=0;j<n;j++)
    {
      if(j==0 && u==0)
      {
        m_v[i]=L1;
        u=1;
        i++;
      }
      if(m1[L1][j] == 1)
      { 
        buf=j; 
        for(int l=0;l<(i-1);l++)
          if(j == m_v[l])
          {
            k=1;
            p=0;
            return p;
          }
        j=buf;
        if(j==first)
        {
          p=1;
          k=1;
          return p;
        }
        j=buf;
        p=1;
        k=1;
        obrabotka(j,m1,n,m_v,first,t,i);
      }
    }
  }
  return p;
}
 
void free(int **R, int n)
{
  for(int e=0;e<n;e++)
    free(*(R+e));
  free(R);
}
 
void vivod(int **m1,int n)
{
  for(int k=0;k<n;k++)
  {
    for(int l=0;l<n;l++)
      cout<<m1[k][l];
    cout<<endl;
  }
}

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)