Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.75/4: Рейтинг темы: голосов - 4, средняя оценка - 4.75
1 / 1 / 0
Регистрация: 06.10.2009
Сообщений: 24
1

Упорядочить строки матрицы

15.06.2010, 01:17. Показов 703. Ответов 6
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Задача - дана вещественная квадратная матрица А порядка н. Упорядочить строки матрицы по неубыванию максимальных элементов строк

проблемы с С++ , не могу найти ошибку . Программа не правильно сортирует матрицу . Помогите найти и исправить ошибку , заранее спасибо

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
#include<stdio.h>
#include<stdlib.h>
#include<ctime>
#define MAXN 20
#define MAX 100
#include<conio.h>
 
/*Dana veshestvennaya kvadratnaya matrica A poryadka n. Yporyadochit stroki matrici 
po neybivaniu maksimalnix elementov strok*/
 
using namespace std;
void PrintArr(int a[MAXN][MAXN], int n)
{
int i, j;
for(i = 0; i < n; i++)
for(j = 0; j < n; j++)
printf(j == n-1 ? "%5d\n" : "%5d", a[i][j]);
printf("\n");
}
int FindMax(int a[MAXN], int n)
{
int i, maxim = a[0];
for(i = 1; i < n; i++)
if(a[i] > maxim)
maxim = a[i];
return maxim;
}
void SwapLine(int *a, int *b, int n)
{
int i, t;
for(i = 0; i < n; i++)
{
t = a[i];
a[i] = b[i];
b[i] = t;
}
}
int main(void)
{
int n, a[MAXN][MAXN], m[MAXN], i, j, n1;
printf("Vvedite N: \nn = ");
scanf("%d", &n);
n1 = n;
srand((unsigned)time(NULL));
for(i = 0; i < n; i++)
for(j = 0; j < n; j++)
a[i][j] = (int)(rand() % (MAX+1));
printf("Poluchennaya matrica: \n");
PrintArr(a, n);
for(i = 0; i < n; i++)
m[i] = FindMax(a[i], n);
do {
int newn = 0;
for(i = 0; i < n-1; i++)
if(m[i] > m[i + 1])
SwapLine(a[i], a[i+1], n1), newn = i;
n = newn + 1;
} 
while(n > 1);
printf("Novaya matrica: \n");
PrintArr(a, n1);
getch();
return 0;
}
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
15.06.2010, 01:17
Ответы с готовыми решениями:

Упорядочить столбцы матрицы по убыванию элементов строки, содержащей максимальный элемент матрицы
дана матрица A(n,m). Упорядочить столбцы матрицы по убыванию элементов строки, содержащей...

Упорядочить строки матрицы по неубыванию суммы элементов каждой строки
17.22. Дан двумерный массив. Разместить его строки так, чтобы при их просмотре сверху вниз: а)...

Упорядочить строки матрицы лексикографически по неубыванию первых k элементов строки.
Помогите решить задачу, пожалуйста Упорядочить строки матрицы D ( m, n) лексикографически по...

Упорядочить строки матрицы D (m. n) Лексикографически по неубыванию первых k элементов строки
Помогите решить задачу C++ пожалуйста, пожалуйста Упорядочить строки матрицы D (m. n)...

6
7 / 6 / 2
Регистрация: 03.06.2010
Сообщений: 13
15.06.2010, 01:40 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
#include "stdafx.h"
#include "math.h"
#include "conio.h"
#include <iostream>
#include <iomanip>
using namespace std;
void main()
{   
    int N=0;
    setlocale(LC_ALL,"Russian");
    cout<<"Введите размер массива:\nN=";
    cin>>N;
    // Делаем динамический массив под первую матрицу.
    int **MatricaA= new int*[N];
    for(int i=0;i<N;i++)
        MatricaA[i]= new int [N];
    int Step_value=0;
    // Набираем значения.
    for(int i=0; i<N; i++) 
        for(int j=0; j<N; j++)
            MatricaA[i][j]=rand()%10;
    for(int i=0; i<N; i++) 
    {
        for(int j=0;j<N;j++)
            cout<<setw(4)<<MatricaA[i][j];
        cout<<endl;
    }
    for(int k=0;k<N;k++)
        for(int i=0;i<N;i++)
            for(int j=0; j<N-1; j++)  
                if(MatricaA[i][j]>MatricaA[i][j+1])
                {
                    Step_value=MatricaA[i][j];
                    MatricaA[i][j]=MatricaA[i][j+1];
                    MatricaA[i][j+1]=Step_value;
                }
    cout<<"\nРезультат\n";
    for(int i=0; i<N; i++) 
    {
        for(int j=0;j<N;j++)
            cout<<setw(4)<<MatricaA[i][j];
        cout<<endl;
    }
    getch();
}
Как я помню, неубывание это каждый следующий не меньше предыдущего?
Да, у Вас же вещественная матрица! Вот, посмотрите этот кодец:
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
#include "stdafx.h"
#include "math.h"
#include "conio.h"
#include <iostream>
#include <iomanip>
using namespace std;
float RandoMarazm(float random_min,float random_max)
{
    return random_min+(float)rand()/(RAND_MAX + 1)*(random_max-random_min);
}
void main()
{   
    int N=0;
    setlocale(LC_ALL,"Russian");
    cout<<"Введите размер массива:\nN=";
    cin>>N;
    // Делаем динамический массив под первую матрицу.
    float **MatricaA= new float*[N];
    for(int i=0;i<N;i++)
        MatricaA[i]= new float [N];
    float Step_value=0;
    // Набираем значения.
    for(int i=0; i<N; i++) 
        for(int j=0; j<N; j++)
            MatricaA[i][j]=RandoMarazm(0.,4.);// Можете поставить не 0 и 4, а, например -1. и 5. Компилятор будет рандомить в этом случае в этих диапазонах
    for(int i=0; i<N; i++) 
    {
        for(int j=0;j<N;j++)
            cout<<setw(4)<<MatricaA[i][j];
        cout<<endl;
    }
    for(int k=0;k<N;k++)
        for(int i=0;i<N;i++)
            for(int j=0; j<N-1; j++)  
                if(MatricaA[i][j]>MatricaA[i][j+1])
                {
                    Step_value=MatricaA[i][j];
                    MatricaA[i][j]=MatricaA[i][j+1];
                    MatricaA[i][j+1]=Step_value;
                }
    cout<<"\nРезультат\n";
    for(int i=0; i<N; i++) 
    {
        for(int j=0;j<N;j++)
            cout<<setw(10)<<MatricaA[i][j];
        cout<<endl;
    }
    getch();
}
0
1 / 1 / 0
Регистрация: 06.10.2009
Сообщений: 24
15.06.2010, 01:49  [ТС] 3
да так и есть , то есть если матрица
1 34 2
5 24 7
10 50 13

то должно получиться
10 50 13
1 34 2
5 24 7
0
7 / 6 / 2
Регистрация: 03.06.2010
Сообщений: 13
15.06.2010, 02:35 4
Стойте, а разве не
10 50 13
5 34 7
1 24 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
#include "stdafx.h"
#include "math.h"
#include "conio.h"
#include <iostream>
#include <iomanip>
using namespace std;
float RandoMarazm(float random_min,float random_max)
{
    return random_min+(float)rand()/(RAND_MAX + 1)*(random_max-random_min);
}
void main()
{   
    int N=0;
    setlocale(LC_ALL,"Russian");
    cout<<"Введите размер массива:\nN=";
    cin>>N;
    // Делаем динамический массив под первую матрицу.
    float **MatricaA= new float*[N];
    for(int i=0;i<N;i++)
        MatricaA[i]= new float [N];
    float Step_value=0;
    // Набираем значения.
    for(int i=0; i<N; i++) 
        for(int j=0; j<N; j++)
            MatricaA[i][j]=RandoMarazm(1.,4.);
    for(int i=0; i<N; i++) 
    {
        for(int j=0;j<N;j++)
            cout<<setw(10)<<MatricaA[i][j];
        cout<<endl;
    }
    int m=0;
    while(m!=N)
    {
        for(int k=0;k<N;k++)
            for(int j=0;j<N; j++)
               for(int i=0;i<N-1;i++)
                    if(MatricaA[i][j]<MatricaA[i+1][j])
                    {
                        Step_value=MatricaA[i][j];
                        MatricaA[i][j]=MatricaA[k][j];
                        MatricaA[k][j]=Step_value;
                    }
        m++;
    }
    cout<<"\nРезультат\n";
    for(int i=0; i<N; i++) 
    {
        for(int j=0;j<N;j++)
            cout<<setw(10)<<MatricaA[i][j];
        cout<<endl;
    }
    getch();
}
0
Заблокирован
15.06.2010, 02:49 5
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
#include<stdio.h>
#include<stdlib.h>
#include<ctime>
#define MAXN 20
#define MAX 100
#include<conio.h>
 
/*Dana veshestvennaya kvadratnaya matrica A poryadka n. Yporyadochit stroki matrici 
po neybivaniu maksimalnix elementov strok*/
 
using namespace std;
void PrintArr(int a[MAXN][MAXN], int n){
    int i, j;
    for(i = 0; i < n; i++)
        for(j = 0; j < n; j++)
            printf(j == n-1 ? "%5d\n" : "%5d", a[i][j]);
    printf("\n");
}
int FindMax(int a[MAXN], int n){
    int i, maxim = a[0];
    for(i = 1; i < n; i++)
        if(a[i] > maxim)
            maxim = a[i];
    return maxim;
}
void SwapLine(int *a, int *b, int n){
    int i, t;
    for(i = 0; i < n; i++){
        t = a[i];
        a[i] = b[i];
        b[i] = t;
    }
}
int main(void){
    int n, a[MAXN][MAXN], m[MAXN], i, j, n1,im,ind;
    printf("Vvedite N: \nn = ");
    scanf("%d", &n);
    n1 = n;
    srand((unsigned)time(NULL));
    for(i = 0; i < n; i++)
        for(j = 0; j < n; j++)
            a[i][j] = (int)(rand() % (MAX+1));
    printf("Poluchennaya matrica: \n");
    PrintArr(a, n);
    for(i = 0; i < n; i++)
        m[i] = FindMax(a[i], n);
    for(j=0;j<n;j++){
        im=m[j];
        ind=j;
        for(i = j; i < n; i++)
            if(m[i]>im){
                ind=i;
                im=m[ind];
            }
        SwapLine(a[j], a[ind], n1);
    }
    printf("Novaya matrica: \n");
    PrintArr(a, n1);
    getch();
    return 0;
}
1
1 / 1 / 0
Регистрация: 06.10.2009
Сообщений: 24
15.06.2010, 10:56  [ТС] 6
rrrFer, спасибо , но программа тоже не правильно сортирует .....
1
Заблокирован
15.06.2010, 11:44 7
iYoung,
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
#include<stdio.h>
#include<stdlib.h>
#include<ctime>
#define MAXN 20
#define MAX 100
#include<conio.h>
 
/*Dana veshestvennaya kvadratnaya matrica A poryadka n. Yporyadochit stroki matrici 
po neybivaniu maksimalnix elementov strok*/
 
using namespace std;
void PrintArr(int a[MAXN][MAXN], int n){
        int i, j;
        for(i = 0; i < n; i++)
                for(j = 0; j < n; j++)
                        printf(j == n-1 ? "%5d\n" : "%5d", a[i][j]);
        printf("\n");
}
int FindMax(int a[MAXN], int n){
        int i, maxim = a[0];
        for(i = 1; i < n; i++)
                if(a[i] > maxim)
                        maxim = a[i];
        return maxim;
}
void SwapLine(int *a, int *b, int n){
        int i, t;
        for(i = 0; i < n; i++){
                t = a[i];
                a[i] = b[i];
                b[i] = t;
        }
}
int main(void){
        int n, a[MAXN][MAXN], m[MAXN], i, j, n1,ind,t;
        printf("Vvedite N: \nn = ");
        scanf("%d", &n);
        n1 = n;
        //srand((unsigned)time(NULL));
        srand(0);
        for(i = 0; i < n; i++)
                for(j = 0; j < n; j++)
                        a[i][j] = (int)(rand() % (MAX+1));
        printf("Poluchennaya matrica: \n");
        PrintArr(a, n);
        for(i = 0; i < n; i++)
                m[i] = FindMax(a[i], n);
        for(j=0;j<n;j++){
                ind=j;
                for(i = j; i < n; i++)
                        if(m[i]>m[ind])
                                ind=i;
                SwapLine(a[j], a[ind], n1);
                t=m[j];
                m[j]=m[ind];
                m[ind]=t;
        }
        printf("Novaya matrica: \n");
        PrintArr(a, n1);
        getch();
        return 0;
}
1
15.06.2010, 11:44
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
15.06.2010, 11:44
Помогаю со студенческими работами здесь

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

Упорядочить строки матрицы по убыванию значений произведений наименьшего и наибольшего элементов каждой строки
Дана матрица чисел M*N.Упорядочить строки матрицы по убыванию значений произведений наименьшего и...

Упорядочить строки матрицы
Помогите, пожалуйста, разобраться с этой бестией и отладить программу. Описание программы:...

Упорядочить строки матрицы по алфавиту
Дана символьная матрица. Упорядочить строки матрицы по алфавиту. Помогите пожалуйста.


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

Или воспользуйтесь поиском по форуму:
7
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru