Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
 
Рейтинг 5.00/5: Рейтинг темы: голосов - 5, средняя оценка - 5.00
1 / 1 / 1
Регистрация: 10.03.2012
Сообщений: 14
1

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

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

Характеристикой строки назовем наибольшее количество идущих подряд нулей. Упорядочить строки матрицы по возрастанию их характеристик.
Помогите с алгоритмом сортировки пожалуйста,заранее спасибо.
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
21.05.2012, 01:26
Ответы с готовыми решениями:

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

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

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

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

4
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;
}
критика приветствуется
1
1 / 1 / 1
Регистрация: 10.03.2012
Сообщений: 14
22.05.2012, 00:53  [ТС] 3
C++
1
int Find(int *ar,int sizeY)//подсчет характеристики столбцов
Не вычислит последовательность из одного нуля...или мне показалось)
1
Форумчанин
Эксперт CЭксперт С++
8161 / 5009 / 1436
Регистрация: 29.11.2010
Сообщений: 13,455
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;
1
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;
}
жду критики))
0
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
22.05.2012, 07:24

Заказываю контрольные, курсовые, дипломные и любые другие студенческие работы здесь.

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

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

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

Найти сумму элементов каждой строки матрицы и упорядочить строки по возрастанию
Дана матрица Х(10х10). Найти сумму элементов каждой строки матрицы и упорядочить строки по...


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

Или воспользуйтесь поиском по форуму:
5
Ответ Создать тему
Опции темы

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