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

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

Войти
Регистрация
Восстановить пароль
 
lavan
53 / 53 / 1
Регистрация: 21.03.2009
Сообщений: 371
#1

сгенерировать квадратную матрицу n*n и сортировать ее в порядке возрастания - C++

21.03.2009, 22:39. Просмотров 556. Ответов 4
Метки нет (Все метки)

подскажите кто знает.я уже запарился.язык С
надо сгенерировать квадратную матрицу n*n и сортировать ее в порядке возрастания.
у меня проблема в том,что цикл отвечающий за сортировку(сортирую прямым перебором)сортирует массив но он заменяет там цифры
т.е есть такой набор
8 6 9 5 0
получаю после сортировки
0 5 5 8 9
т.е 6 заменилась на 5 вместо исходной одной 5 и 6 стало две 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
#include<stdio.h>
#include<conio.h>
#include<stdlib.h>
#define M 5
#define N 5
int main(){
int m[M][N];
int a[M];
int i,j,buf,min,k;
printf("sgener mas\n");
randomize();
for(i=0;i<M;i++) {
printf("\n");
for(j=0;j<N;j++) {
m[i][j]=random(10);
printf("%3d",m[i][j]);
}
}
 
for(i=0;i<M;i++){//prisvaivaem a[i]
printf("\n"); //znachenia m[i][j]
for(j=0;j<N;j++){
a[i]=m[i][j];
//printf("%d",a[i]);
}
}
 
for(i=0;i<M*N-1;i++){ //sortiryem a[i]
min=i;
for(j=i+1;j<M*N;j++)
if(a[j]<a[min])
min=j;
buf=a[i];
a[i]=a[min];
a[min]=buf;
}
for(i=0;i<M;i++){ //teper prisvaivaem m[i][j]
for(j=0;j<N;j++){ //otsortir massiv a[i]
m[i][j]=a[i];
printf("\n otsort mas\n");
for(i=0;i<M;i++){
printf("\n");
for(j=0;j<N;j++) {
printf("%3d",m[i][j]);
}
}
}
}
getch();
return(0);
}
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
21.03.2009, 22:39
Здравствуйте! Я подобрал для вас темы с ответами на вопрос сгенерировать квадратную матрицу n*n и сортировать ее в порядке возрастания (C++):

С помощью алгоритма вставки, нужно сортировать парные числа массива в порядке возрастания - C++
Приветствую! Нужно написать программу которая из текстового файла будет считывать в массив числа (например, 2 6 4 13 15 29). После...

Отсортировать матрицу в порядке возрастания элементов - C++
Здраствуйте! Прошу помочь написать код с помощью использования вложеных циклов, или как то так. Код не сильно заумным должен быть. Вот...

Сформировать матрицу, в которой столбцы расположены в порядке возрастания сумм их элементов - C++
Сформировать из столбцов матрицы В матрицу С, в которой столбцы расположены в порядке возрастания сумм их элементов. Как составить...

Заполнить матрицу числами натурального ряда в порядке их возрастания, начиная с единицы, перемежающихся нулями - C++
составить программу, решающую следующую задачу:Дано два натуральных числа n и m. Сформировать двумерный массив A, заполнив его числами...

Сформировать квадратную матрицу; транспонировать матрицу и инвертировать порядок элементов каждой ее строки - C++
Заданы два одномерных массива одинаковой длины: R и S.Сформировать квадратную матрицу A, каждый элемент которой, что находится в i-той...

Расположить чётные числа массива в порядке возрастания, а нечётные в порядке убывания - C++
Требуется расположить чётные числа в порядке возрастания, а не чётные в порядке убывания. Относительного расположения чисел не менять. С...

4
ISergey
Maniac
Эксперт С++
1375 / 886 / 52
Регистрация: 02.01.2009
Сообщений: 2,661
Записей в блоге: 1
21.03.2009, 22:50 #2
Обрати внимание на этот участок кода
C++
1
2
3
4
5
6
7
for(i=0;i<M;i++){//prisvaivaem a[i]
printf("\n"); //znachenia m[i][j]
for(j=0;j<N;j++){
a[i]=m[i][j];//вот здесь точно проблема
//printf("%d",a[i]);
}
}
тоесть a[i] у тебя примерно так будет выглядеть
Код
a[0] == m[0][4]
a[1] == m[1][4]
a[2] == m[2][4]
a[3] == m[3][4]
a[4] == m[4][4]
Ну а здесь точно выход за границы
C++
1
2
3
4
5
6
7
8
9
for(i=0;i<M*N-1;i++){ //sortiryem a[i]
min=i;
for(j=i+1;j<M*N;j++)
if(a[j]<a[min])
min=j;
buf=a[i];
a[i]=a[min];
a[min]=buf;
}
0
lavan
53 / 53 / 1
Регистрация: 21.03.2009
Сообщений: 371
21.03.2009, 22:59  [ТС] #3
у меня не получается отсортировать массив m[i][j]. поэтому приводил к одномерному.
а если в a[i] ставить не M*N то отсортировывается только одна строка и один столбец.
(
0
ISergey
Maniac
Эксперт С++
1375 / 886 / 52
Регистрация: 02.01.2009
Сообщений: 2,661
Записей в блоге: 1
21.03.2009, 23:04 #4
вот исправил все ошибки
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
#include<stdio.h>
#include<conio.h>
#include<stdlib.h>
#define M 5
#define N 5
int main(){
    int m[M][N];
    int a[M*N];//!
    int i,j,buf,min,k;
 
    printf("sgener mas\n");
    for(i=0;i<M;i++) 
    {
        printf("\n");
        for(j=0;j<N;j++)
        {
            m[i][j]=rand()%10;
            printf("%3d",m[i][j]);
        }
    }
 
    int buff = 0;
    for(i=0;i<M;i++)
    {
        for(j=0;j<N;j++)
        {
            //prisvaivaem a[i]
            a[buff]=m[i][j];
            buff++;
        }
    }
 
    for(i=0;i<M*N;i++)
    { //sortiryem a[i]
        min=i;
        for(j=i+1;j<M*N;j++)
            if(a[j]<a[min])
                min=j;
 
        buf=a[i];
        a[i]=a[min];
        a[min]=buf;
    }
 
    //teper prisvaivaem m[i][j]
    buff = 0;
    for(i=0;i<M;i++)
    { 
        for(j=0;j<N;j++)
        { 
            m[i][j]=a[buff++];
        }
    }
 
    printf("\n otsort mas\n");
    for(i=0;i<M;i++)
    {
        printf("\n");
        for(j=0;j<N;j++)
        {
            printf("%3d",m[i][j]);
        }
    }
 
    getch();
    return(0);
}
1
lavan
53 / 53 / 1
Регистрация: 21.03.2009
Сообщений: 371
22.03.2009, 19:15  [ТС] #5
ISergey.
большое спасибо за помощ!!
0
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
22.03.2009, 19:15
Привет! Вот еще темы с ответами:

Сортировка массива в порядке возрастания и вывод элементов в обратном порядке - C++
нашла на форуме пару примеров, но они не полные и не запускаются, выбрала из них более менее подходящий, дальше было много вариантов но не...

Первые десять элементов массива М(30) отсортировать в порядке возрастания, а остальные в порядке убывания - C++
Привет. Первые десять элементов массива М(30) отсортировать в порядке возрастания, а остальные в порядке убывания. Вот тут я сделал массив...

Расположить элементы первой половины одномерного массива в порядке возрастания, а второй - в порядке убывания - C++
Нужно расположить элементы первой половины одномерного массива в порядке возрастания, а второй половины массива в порядке убывания. Данная...

Выведите все числа от A до B включительно, в порядке возрастания, если A < B, или в порядке убывания в противном случае. - C++
пробовала сделать ,но выдаёт ошибки я не понимаю,что он требует ТЕКСТ ЗАДАЧИ. Даны два целых числа A и В (каждое в отдельной...


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

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

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