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

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

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

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

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

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

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

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

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

Упорядочить по возрастанию строки матрицы, заданной по формуле - C++
Помогите сделать задание - матрицу на С++

Упорядочить строки матрицы по возрастанию элементов в столбцах - C++
2. Упорядочить строки матрицы 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Эксперт С++
7211 / 4377 / 638
Регистрация: 29.11.2010
Сообщений: 11,887
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;
}
жду критики))
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
22.05.2012, 07:24
Привет! Вот еще темы с ответами:

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

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

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

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


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

Или воспользуйтесь поиском по форуму:
Yandex
Объявления
22.05.2012, 07:24
Ответ Создать тему
Опции темы

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