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

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
Kawar
1 / 1 / 0
Регистрация: 10.03.2012
Сообщений: 14
#1

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

21.05.2012, 01:26. Просмотров 621. Ответов 4
Метки нет (Все метки)

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

Упорядочить строки матрицы по возрастанию их характеристик - C++
характеристической строки назовем наибольшее количество идущих подряд нулей. Упорядочить строки матрицы по возрастанию их характеристик ...

Упорядочить столбцы матрицы по возрастанию их характеристик - C++
Характеристикой столбца матрицы назовем произведение положительных элементов с четными номерами строк. Упорядочить столбцы матрицы по...

Упорядочить элементы строк матрицы по возрастанию, а сами строки по возрастанию суммы элементов - C++
Дана матрица Х. Упорядочить элементы строк матрицы по возрастанию, а сами строки по возрастанию суммы элементов строк (использовать...

Упорядочить строки матрицы по возрастанию суммы их элементов - C++
Помогите сделать задание. Дана матрица размером NxM. Упорядочить ее строки по возрастанию суммы их элементов.

Упорядочить строки матрицы по возрастанию их последних элементов - C++
Помогите переделать, покопался на форуме нашел по возрастанию первых элементов, а нужно последних. Спасибо. #include...

Упорядочить строки матрицы по возрастанию их первых элементов - C++
В работе память для массива должна выделяться динамически. На экран выводить исходные данные и результат. Дана матрица размером...

Упорядочить строки матрицы по возрастанию максимумов их элементов - C++
Добрый день! срочно нужна помощь в решении задачи: Дана целочисленная прямоугольная матрица. Определить: 1)количество отрицательных...

Упорядочить по возрастанию элементы каждой строки матрицы - C++
Дана матрица размером n*m. Упорядочить по возрастанию элементы каждой строки матрицы. Заранее спасибо за помощь!

Упорядочить строки матрицы по возрастанию суммы их элементов - C++
Помогите сделать задание. Дана матрица размером NxM. Упорядочить ее строки по возрастанию суммы их элементов. Выдает ошибку error C2440:...

Упорядочить по возрастанию элементы каждой строки матрицы n*m - C++
Упорядочить по возрастанию элементы каждой строки матрицы размером n*m Динамический массив Помогите


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
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
Модератор
Эксперт CЭксперт С++
6969 / 4140 / 588
Регистрация: 29.11.2010
Сообщений: 10,978
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     Упорядочить строки матрицы по возрастанию их характеристик
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru