С Новым годом! Форум программистов, компьютерный форум, киберфорум
Наши страницы

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

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

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

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

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

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

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
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
15.06.2010, 01:17
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Упорядочить строки матрицы (C++):

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

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

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

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

Упорядочить строки матрицы - C++
Помогите, пожалуйста, разобраться с этой бестией и отладить программу. Описание программы: Преобразование матрицы A (m x n) так, чтобы...

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

6
Gleban_38
7 / 6 / 1
Регистрация: 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
iYoung
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
Gleban_38
7 / 6 / 1
Регистрация: 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
rrrFer
Заблокирован
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
iYoung
1 / 1 / 0
Регистрация: 06.10.2009
Сообщений: 24
15.06.2010, 10:56  [ТС] #6
rrrFer, спасибо , но программа тоже не правильно сортирует .....
1
rrrFer
Заблокирован
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
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
15.06.2010, 11:44
Привет! Вот еще темы с ответами:

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

Упорядочить строки матрицы по убыванию - C++
Дана матрица А(n,m). Упорядочить строки матрицы по убыванию суммы находящихся в них элементов.

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

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


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

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

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