Модераторы: Poseidon
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> как переделать под классы программу на С++ 
:(
    Опции темы
gerewget
Дата 18.1.2015, 23:00 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 1
Регистрация: 18.1.2015

Репутация: нет
Всего: нет



Прошу помогите как переделать эту программу под классы?

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

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;
}
 
}

PM MAIL   Вверх
bsa
Дата 23.1.2015, 17:51 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Модератор
Сообщений: 9185
Регистрация: 6.4.2006
Где: Москва, Россия

Репутация: 1
Всего: 196




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




Тема перенесена. 
PM   Вверх
interv
Дата 26.1.2015, 08:34 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 93
Регистрация: 24.1.2012

Репутация: 4
Всего: 4



Ёб...ный стыд Кто Вас так учил писать сударь?
Боб Мартин «Чистый код»
ща попробуем ченить написать

Добавлено через 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;
  }
}

PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Центр помощи"

ВНИМАНИЕ! Прежде чем создавать темы, или писать сообщения в данный раздел, ознакомьтесь, пожалуйста, с Правилами форума и конкретно этого раздела.
Несоблюдение правил может повлечь за собой самые строгие меры от закрытия/удаления темы до бана пользователя!


  • Название темы должно отражать её суть! (Не следует добавлять туда слова "помогите", "срочно" и т.п.)
  • При создании темы, первым делом в квадратных скобках укажите область, из которой исходит вопрос (язык, дисциплина, диплом). Пример: [C++].
  • В названии темы не нужно указывать происхождение задачи (например "школьная задача", "задача из учебника" и т.п.), не нужно указывать ее сложность ("простая задача", "легкий вопрос" и т.п.). Все это можно писать в тексте самой задачи.
  • Если Вы ошиблись при вводе названия темы, отправьте письмо любому из модераторов раздела (через личные сообщения или report).
  • Для подсветки кода пользуйтесь тегами [code][/code] (выделяйте код и нажимаете на кнопку "Код"). Не забывайте выбирать при этом соответствующий язык.
  • Помните: один топик - один вопрос!
  • В данном разделе запрещено поднимать темы, т.е. при отсутствии ответов на Ваш вопрос добавлять новые ответы к теме, тем самым поднимая тему на верх списка.
  • Если вы хотите, чтобы вашу проблему решили при помощи определенного алгоритма, то не забудьте описать его!
  • Если вопрос решён, то воспользуйтесь ссылкой "Пометить как решённый", которая находится под кнопками создания темы или специальным флажком при ответе.

Более подробно с правилами данного раздела Вы можете ознакомится в этой теме.

Если Вам помогли и атмосфера форума Вам понравилась, то заходите к нам чаще! С уважением, Poseidon, Rodman

 
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Центр помощи | Следующая тема »


 




[ Время генерации скрипта: 0.0936 ]   [ Использовано запросов: 21 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.