Форум программистов, компьютерный форум CyberForum.ru

Упорядочить строки матрицы по возрастанию их характеристик - C++

Восстановить пароль Регистрация
 
Kawar
1 / 1 / 0
Регистрация: 10.03.2012
Сообщений: 14
21.05.2012, 01:26     Упорядочить строки матрицы по возрастанию их характеристик #1
Характеристикой строки назовем наибольшее количество идущих подряд нулей. Упорядочить строки матрицы по возрастанию их характеристик.
Помогите с алгоритмом сортировки пожалуйста,заранее спасибо.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
21.05.2012, 01:26     Упорядочить строки матрицы по возрастанию их характеристик
Посмотрите здесь:

C++ Упорядочить строки матрицы по возрастанию их характеристик
C++ Упорядочить столбцы матрицы по возрастанию их характеристик
C++ Упорядочить строки матрицы по возрастанию их первых элементов
Упорядочить по возрастанию элементы каждой строки матрицы C++
Упорядочить строки матрицы по возрастанию значений их наибольших элементов C++
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Helmsman
1 / 1 / 0
Регистрация: 03.04.2012
Сообщений: 4
21.05.2012, 16:27     Упорядочить строки матрицы по возрастанию их характеристик #2
Я новичек! вот мой вариант решения
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
#include <cstdlib>
#include <iostream>
 
using namespace std;
 
void Print(int **ar,int sizeX,int sizeY)//распечатка матрицы
{
      for(int i=0;i<sizeY;i++)
      {
            for(int j=0;j<sizeX;j++)
            {
                    cout<<"ar["<<i<<"]["<<j<<"]="<<ar[j][i]<<"\t";
            }
            cout<<endl;
            cout<<endl;
      }
}
void Swap(int *a,int *b,int sizeY)//замена местами двух столбцов
{
     int temp;
     for(int j=0;j<sizeY;j++)
     {
         temp=a[j];
         a[j]=b[j];
         b[j]=temp;        
     }     
     
}
int Find(int *ar,int sizeY)//подсчет характеристики столбцов
{
    int count=0;
   
     for(int j=0;j<sizeY;j++)
            {
                  if(ar[j]==0&&ar[j+1]==0)  
                  {
                      count++;
                          
                  }
            } 
     return count;
    
}
void Sort(int **ar,int sizeX,int sizeY)//сортировка
{
     cout<<"Sorting..."<<endl;
     cout<<endl;
    for(int j=0;j<sizeX;j++)
    {
       for(int i=0;i<sizeX;i++)
          {
                    if(Find(ar[i],sizeY)<Find(ar[i+1],sizeY))
                    {
                       Swap(ar[i],ar[i+1],sizeY);
                    }
          } 
     }
}
 
 
int main(int argc, char *argv[])
{
    int X=5,Y=3,d=2;
    int **ar=new int *[X];
    for(int i=0;i<X;i++)
            ar[i]=new int [Y];
            
    for(int i=0;i<X;i++)
            for(int j=0;j<Y;j++)
            ar[i][j]=rand()%d;
 
            Print(ar,X,Y);
            Sort(ar,Y,X);  
            Print(ar,X,Y);  
    
    
    
    
    for(int i=0;i<X;i++)
            delete ar[i];
            delete ar;
    system("PAUSE");
    return EXIT_SUCCESS;
}
критика приветствуется
Kawar
1 / 1 / 0
Регистрация: 10.03.2012
Сообщений: 14
22.05.2012, 00:53  [ТС]     Упорядочить строки матрицы по возрастанию их характеристик #3
C++
1
int Find(int *ar,int sizeY)//подсчет характеристики столбцов
Не вычислит последовательность из одного нуля...или мне показалось)
MrGluck
Ворчун
Эксперт С++
 Аватар для MrGluck
4919 / 2662 / 243
Регистрация: 29.11.2010
Сообщений: 7,398
22.05.2012, 02:30     Упорядочить строки матрицы по возрастанию их характеристик #4
Цитата Сообщение от Helmsman Посмотреть сообщение
C++
1
2
3
for(int i=0;i<X;i++)
            delete ar[i];
            delete ar;
критика приветствуется
C++
1
2
3
for(int i=0;i<X;i++)
            delete []ar[i];
            delete []ar;
Helmsman
1 / 1 / 0
Регистрация: 03.04.2012
Сообщений: 4
22.05.2012, 07:24     Упорядочить строки матрицы по возрастанию их характеристик #5
может я не правильно понял, но согласно условия задачи нас не интересуют последовательности из одного нуля, характеристикой строки является длина самой длинной серия нулей, но вы правы, все таки функцию Find() наверное стоит переделать:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
int Find(int *ar,int sizeY)//подсчет характеристики столбцов
{
   int count=0;
   bool flag=false;
     for(int j=0;j<sizeY;j++)
            {
                  if(ar[j]==0)  
                       flag=true;  
                  else
                       flag=false; 
                  if(ar[j]==0&&flag)
                    count++;
            } 
     return count;
}
PS почему-то программа работает некорректно, сегодня попытаюсь переписать))

Добавлено через 23 минуты
кажись так:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
 
#include <cstdlib>
#include <iostream>
 
using namespace std;
 
void Print(int **ar,int sizeX,int sizeY)//распечатка матрицы
{
      for(int i=0;i<sizeY;i++)
      {
            for(int j=0;j<sizeX;j++)
            {
                    cout<<"ar["<<i<<"]["<<j<<"]="<<ar[j][i]<<"\t";
            }
            cout<<endl;
            cout<<endl;
      }
}
void Swap(int *a,int *b,int sizeY)//замена местами двух столбцов
{
     int temp;
     for(int j=0;j<sizeY;j++)
     {
         temp=a[j];
         a[j]=b[j];
         b[j]=temp;        
     }     
}
int Find(int *ar,int sizeY)//подсчет характеристики столбцов
{
   int count=0;
   bool flag=false;
     for(int j=0;j<sizeY-1;j++)
            {
                  if(ar[j]==0)  
                       flag=true;  
                  else
                       flag=false; 
                  if(ar[j+1]==0&&flag)
                   count++;
            } 
     return count;
}
void Sort(int **ar,int sizeX,int sizeY)//сортировка
{
     cout<<"Sorting..."<<endl;
     cout<<endl;
    for(int j=0;j<sizeX;j++)
    {
       for(int i=0;i<sizeX-1;i++)
          {
                    if(Find(ar[i],sizeY)<Find(ar[i+1],sizeY))
                    {
                       Swap(ar[i],ar[i+1],sizeY);
                    }
          } 
     }
}
 
 
int main(int argc, char *argv[])
{
    int X=5,Y=3,d=2;
    int **ar=new int *[X];
    for(int i=0;i<X;i++)
            ar[i]=new int [Y];
    
    srand((unsigned)time(NULL));
        for(int i=0;i<X;i++)
            for(int j=0;j<Y;j++)
            ar[i][j]=rand()%d;
 
            Print(ar,X,Y);
            Sort(ar,X,Y);  
            Print(ar,X,Y);  
    
    for(int i=0;i<X;i++)
            delete []ar[i];
            delete []ar;
    system("PAUSE");
    return EXIT_SUCCESS;
}
жду критики))
Yandex
Объявления
22.05.2012, 07:24     Упорядочить строки матрицы по возрастанию их характеристик
Ответ Создать тему
Опции темы

Текущее время: 04:35. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru