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

Отсортировать строки матрицы по возрастанию - C++

Восстановить пароль Регистрация
 
Warzone-blg
0 / 0 / 0
Регистрация: 20.05.2013
Сообщений: 60
28.05.2013, 12:19     Отсортировать строки матрицы по возрастанию #1
По заданию нужно отсортировать массив X (100) методом вычисления адреса...с адресом преподаватель помог...я разбил массив на 10 строк...интервалов... (0-9) (10-19)...(90-99)
И в этих интервалах нужно отсортировать методом любым....лучше всего пузырька...он самый простой...
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
#include <iostream>
#include <stdlib.h>
 using namespace std;
int main ()
{
    setlocale(LC_ALL, "Russian"); 
 
   int X[100];
   int res[10][100];
   int kol[10]={0};
   int N;
   int i,j;
   int temp;
   for(int i = 0; i < 100; i++)
        {
            X[i] = rand()%100;
            cout << X[i] << " ";
            N=X[i]/10;  
            res [N][kol[N]]=X[i];
            kol[N]++;
            }
            cout<<endl;
        for(i=0;i<10;i++)
        {for(j=0;j<kol[i];j++)
        cout<<res[i][j]<<" ";
        
      cout<<endl;
      }
              system("pause");
              return 0;
              }
Добавлено через 1 час 1 минуту
как реализовать обычную сортировку я знаю...

Добавлено через 56 секунд
как реализовать обычную сортировку я знаю...
C++
1
2
3
4
5
6
7
  for(i=0;i<10;i++)
        {for(j=0;j<kol[i];j++)
         if (X[j] > X [j+1])
           
                temp = X[j];
                X[j] = X[j+1];
                X[j+1] = temp;
а как уже разобранный по строкам отсартировать...и как вывести отсартированный?

Добавлено через 2 часа 7 минут
пытаюсь прописать что то...он выводит не то либо выдаетошибку и все закрывается....Еще 1 раз более менее получилось но как результат он выдал один большой столбец...правда отсортированный как мне нужно...

Добавлено через 5 минут
C++
1
2
3
4
5
6
7
8
9
10
 for(int j=0;j<kol[i];j++)     
    {for (int k=kol[i];k>j;k--)    
      if (res[i][k]<res[i][k-1])    
        
        int temp=res[i][k];    
        res[i][k]=res[i][k-1];    
        res[i][k-1]=temp;   
             
        cout<<res[i][j]<<" ";
        cout<<endl;}
вот такая сортировка работает но выдает как один большой столбец...как быть? посоветуйте пожалуйста

Добавлено через 20 часов 57 минут
heeelp
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
28.05.2013, 12:19     Отсортировать строки матрицы по возрастанию
Посмотрите здесь:

Необходимо отсортировать определённые столбцы матрицы по возрастанию C++
C++ Отсортировать 1 строку матрицы и 2 столбик по возрастанию
Меняя местами строки матрицы, отсортировать по возрастанию ее первый столбец C++
Отсортировать строки матрицы по возрастанию сумм положительных элементов C++
Отсортировать строки матрицы по возрастанию сумм положительных элементов C++
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Genn55
341 / 188 / 37
Регистрация: 26.12.2012
Сообщений: 658
28.05.2013, 13:22     Отсортировать строки матрицы по возрастанию #2
Как то так
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
for(int j=0;j<kol[i];j++)     
    {
        for (int k=kol[i];k>j;k--)    
      {
        if (res[i][k]<res[i][k-1])    
        
        int temp=res[i][k];    
        res[i][k]=res[i][k-1];    
        res[i][k-1]=temp;   
             
        cout<<res[i][j]<<" ";
      }
        cout<<endl;
        }
Warzone-blg
0 / 0 / 0
Регистрация: 20.05.2013
Сообщений: 60
28.05.2013, 14:57  [ТС]     Отсортировать строки матрицы по возрастанию #3
Genn55, не работает( пишет завершена работа программы...и закрывается все...
а без сортировки все работает...значит что то с ней...
[404]
Genn55
341 / 188 / 37
Регистрация: 26.12.2012
Сообщений: 658
28.05.2013, 16:20     Отсортировать строки матрицы по возрастанию #4
По моему выполнять перестановку и выводить на экран это плохая идея.Нужно выполнить перестановки,а потом в другом цикле вывести результат.
Warzone-blg
0 / 0 / 0
Регистрация: 20.05.2013
Сообщений: 60
28.05.2013, 16:24  [ТС]     Отсортировать строки матрицы по возрастанию #5
Genn55, а как это реализовать? просто другой цикл? или как? я в этом оочень новичек
Genn55
341 / 188 / 37
Регистрация: 26.12.2012
Сообщений: 658
28.05.2013, 16:39     Отсортировать строки матрицы по возрастанию #6
Да.
C++
1
2
3
  cout<<res[i][j]<<" ";
      
        cout<<endl;
Эти строки уберите и напишите примерно так
C++
1
2
3
4
5
6
7
8
     for (int i = 0; i < 10; ++i)
   {
      for (int j = 0; j < kol; ++j)
      {
         cout << rez[i][j];
      }
      cout << endl;
   }
Warzone-blg
0 / 0 / 0
Регистрация: 20.05.2013
Сообщений: 60
28.05.2013, 16:47  [ТС]     Отсортировать строки матрицы по возрастанию #7
Genn55, прекращена работа программы "Zadacha.exe" все так же...

Добавлено через 22 секунды
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
#include <iostream>
#include <stdlib.h>
 using namespace std;
int main ()
{
    setlocale(LC_ALL, "Russian"); 
 
   int X[100];
   int res[10][100];
   int kol[10]={0};
   int N;
   int i,j,k;
   int temp;
   for(int i = 0; i < 100; i++)
        {
            X[i] = rand()%100;
            cout << X[i] << " ";
            N=X[i]/10;  
            res [N][kol[N]]=X[i];
            kol[N]++;
            }
            cout<<endl;
       for(i=0;i<10;i++)
        {for(j=0;j<kol[i];j++)
        cout<<res[i][j]<<" ";
      cout<<endl;}
 
for(int j=0;j<kol[i];j++)     
    {
        for (int k=kol[i];k>j;k--)    
      
        if (res[i][k]<res[i][k-1])    
        
        int temp=res[i][k];    
        res[i][k]=res[i][k-1];    
        res[i][k-1]=temp; }  
             
          for (int i = 0; i < 10; ++i)
   {
      for (int j = 0; j < kol[i]; j++)
      
         cout << res[i][j];
      
      cout << endl;
   }
 
 
            system("pause");
              return 0;
}
Genn55
341 / 188 / 37
Регистрация: 26.12.2012
Сообщений: 658
28.05.2013, 17:02     Отсортировать строки матрицы по возрастанию #8
Сообщение было отмечено автором темы, экспертом или модератором как ответ
У вас не верно стоят скобки.
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
for(int j=0;j<kol[i];j++)
    {
        for (int k=kol[i];k>j;k--)
        {
            if (res[i][k]<res[i][k-1])
 
        int temp=res[i][k];
        res[i][k]=res[i][k-1];
        res[i][k-1]=temp;
        }
 
 
     }
 
  for (int i = 0; i < 10; ++i)
   {
      for (int j = 0; j < kol[i]; j++)
 
        {
             cout << res[i][j];
        }
 
      cout << endl;
   }
Но мне кажется что программа будет работать не верно.
Я не вникал в сам код,но мне не понятно как происходит замена.
Warzone-blg
0 / 0 / 0
Регистрация: 20.05.2013
Сообщений: 60
28.05.2013, 17:16  [ТС]     Отсортировать строки матрицы по возрастанию #9
Genn55, вот тут пишут что какой то прототип функции задан не верно...при такой же ошибке... Прекращена работа программы

Добавлено через 8 минут
Genn55, может я что в начале неправильно объявил??
Genn55
341 / 188 / 37
Регистрация: 26.12.2012
Сообщений: 658
28.05.2013, 17:26     Отсортировать строки матрицы по возрастанию #10
У меня кеде блок стоит в других я не работал.Но ваш код я попробовал запустить,как я и предполагал он не верно работает.Ошибок не пишет.Я не верно написал
C++
1
cout << res[i][j]<< " ";
Warzone-blg
0 / 0 / 0
Регистрация: 20.05.2013
Сообщений: 60
28.05.2013, 17:29  [ТС]     Отсортировать строки матрицы по возрастанию #11
Genn55, если вот так запускать...без сортировки строк...просто разбиение на эти самые строки...то все работает... так и не понял в чем может быть дело(
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
#include <iostream>
#include <stdlib.h>
#include <string.h>
 using namespace std;
int main ()
{
    setlocale(LC_ALL, "Russian"); 
 
   int X[100];
   int res[10][100];
   int kol[10]={0};
   int N;
   int i,j,k;
   int temp;
   for(int i = 0; i < 100; i++)
        {
            X[i] = rand()%100;
            cout << X[i] << " ";
            N=X[i]/10;  
            res [N][kol[N]]=X[i];
            kol[N]++;
            }
            cout<<endl;
       for(i=0;i<10;i++)
        {for(j=0;j<kol[i];j++)
        cout<<res[i][j]<<" ";
      cout<<endl;}
 
 
            system("pause");
              return 0;
}
Genn55
341 / 188 / 37
Регистрация: 26.12.2012
Сообщений: 658
29.05.2013, 02:44     Отсортировать строки матрицы по возрастанию #12
Сообщение было отмечено автором темы, экспертом или модератором как ответ
У меня работает правильно.
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
#include <iostream>
#include <stdlib.h>
#include<time.h>
 using namespace std;
int main ()
{
    setlocale(LC_ALL, "Russian");
srand(time(NULL));//для правильной работы рандомизатора
   int X[100];
   int res[10][100];
   int kol[10]={0};
   int i,j,N;
 
   for( i = 0; i < 100; i++)
        {
            X[i] = rand()%100;
           if (i%10==0)//вывод массива таблицей по 10 элементов
            cout<<"\n";
            cout << X[i] << ", ";
            N=X[i]/10;
            res [N][kol[N]]=X[i];
            kol[N]++;
        }
            cout<<"\n\n";
 //выводим сформированный массив
for(i=0;i<10;i++)
{
     for( j=0;j<kol[i];j++)
     {
    cout << res [i][j]<<", ";
     }
cout<<"\n";
}
cout<<"\n";
//сортируем пузырьком строки
for(i=0;i<10;i++)
{
for( j=0;j<kol[i];j++)
     {
 
    for (int l = 1; l <kol[i]; l++)
    for (int k = 0; k < kol[i] - 1; k++)
    if (res[i][k] > res[i][k + 1])
       {
       int temp = res[i][k];
        res[i][k] = res[i][k + 1];
       res[i][k + 1] = temp;
        }
     }
}
cout<<"\n";
//выводим результат
for(int a=0;a<10;a++)
{
     for(int b=0;b<kol[a];b++)
     {
     cout << res [a][b]<<", ";
     }
     cout<<"\n";
}
cout<<"\n";
 
 
 //system("pause");
 return 0;
}
При желании можно упростить,если убрать промежуточный вывод массива.
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
29.05.2013, 07:34     Отсортировать строки матрицы по возрастанию
Еще ссылки по теме:

Отсортировать столбцы матрицы по не возрастанию суммы их элементов C++
C++ Меняя местами строки матрицы, отсортировать по возрастанию ее первый столбец
C++ Отсортировать строки матрицы по возрастанию значений первого столбца

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

Или воспользуйтесь поиском по форуму:
Warzone-blg
0 / 0 / 0
Регистрация: 20.05.2013
Сообщений: 60
29.05.2013, 07:34  [ТС]     Отсортировать строки матрицы по возрастанию #13
Genn55, Огромное...огромное человеческое Вам спасибо)) Это была последняя задача которую я не мог решить)
Дайте пожалуйста Ваш номер телефона, я как и обещал в какой то ветке..видимо не в этой...в качестве дополнительного "спасибо" немножко пополню Ваш счет)
Yandex
Объявления
29.05.2013, 07:34     Отсортировать строки матрицы по возрастанию
Ответ Создать тему
Опции темы

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