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

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

Войти
Регистрация
Восстановить пароль
 
fort-_-minor
6 / 6 / 2
Регистрация: 30.07.2010
Сообщений: 87
#1

Cортировка матриц - C++

04.08.2010, 19:39. Просмотров 649. Ответов 12
Метки нет (Все метки)

Здраствуйте! Задание такое: отсортировать по возрастанию 1 рядок и 2 столбец матрицы. Так понимаю сначала программа выполняет 1 действие потом второе. Пока пробовал писать код смотрел на 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
#include <iostream>
#include <stdafx.h>
#include <iostream>
#include <ctime>
int main (void)
{
    const size_t ROW=4;
    const size_t COLUMN=4;
    int MAS[ROW][COLUMN];
    srand (time (NULL));
    std::cout << "Start matrix:\n";
    for (size_t i=0; i<ROW; i++)
    {
        for (size_t j=0; j<COLUMN; j++) 
        {
            MAS[i][j]=rand()%50;
            std::cout << MAS[i][j] << " "; 
        }
        std::cout << std::endl; 
    }
    std::cout << std::endl;
    size_t;
    for (size_t i=0; i<ROW; i++)
    {
        for (size_t j=0; j>COLUMN; j--)
        {
            if (MAS[i][j-1]>MAS[i][j])
            {
                x=MAS[i][j-1]; MAS[i][j-1]=MAS[i][j]; MAS[i][j]=x;
            }
                std::cout << "REZULT: " << REZULT;
    std::cout << std::endl;
    return 0;
        }
    }
}
Тут программа только пытается отсортировать 1 строку просто похоже сортирует все подряд а как обратиться к самой 1 строке не знаю.. Дальше по заданию в самом коде ничего не писал... Помогите разобраться пожалуйста:rolleye
Чтоб не плодить темы есть еще 2 задача :
Определить сколько элементов матрицы в рядках с парными номерами превышают отношение максимального эемента к минимальному. Алгоритм думаю такой:
1. Программа проходит матрицу от 0 до n
2. Ищет максимальный и минимальный элемент и запоминает их.
3. Ищет отношение максимального элемента к минимальному и запоминает его.
4. Берет только 2 и 4 строки (если матрица размером 4х4) и все элементы из них сравнивает с отношением макс/мин.
5. Выводит результат работы программы на экран..
С кодом кроме рандомного заполнения матрицы элементами ничего не скажу(
Спасибо.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
04.08.2010, 19:39
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Cортировка матриц (C++):

Cортировка массива - C++
Здравствуйте! Существует задание: Дан массив n действительных чисел. Если исходный массив имеет равное количество положительных и...

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

Cортировка в файле - C++
Подскажите как можно сделать сортировку в файле по алфавиту.Если я записываю данные файл например у меня наименование товара я ввожу...

Cортировка массива. - C++
помогите с кодом, а то завтра надо уже сдать 1)При записи отсортированный массив у меня в файле записывается не через пробелы а...

Cортировка Шелла - C++
надо перевести на метод шелла #include &lt;iostream&gt; #include &lt;cstdlib&gt; using namespace std; int main() { ...

Cортировка цифр - C++
В данном натуральном числе переставить цифры таким образом, чтобы образовалось наименьшее число, записанное этими же цифрами (Задача без...

12
ForEveR
В астрале
Эксперт С++
7978 / 4737 / 321
Регистрация: 24.06.2010
Сообщений: 10,543
Завершенные тесты: 3
04.08.2010, 19:44 #2
size_t;

Первый вопрос. Почему идентификатор типа вообще отдельно стоит?
0
fort-_-minor
6 / 6 / 2
Регистрация: 30.07.2010
Сообщений: 87
04.08.2010, 19:51  [ТС] #3
виноват
0
ForEveR
В астрале
Эксперт С++
7978 / 4737 / 321
Регистрация: 24.06.2010
Сообщений: 10,543
Завершенные тесты: 3
04.08.2010, 19:53 #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
#include <iostream>
#include <iostream>
#include <ctime>
 
int main ()
{
    const size_t ROW=4;
    const size_t COLUMN=4;
    int MAS[ROW][COLUMN];
        srand (time (NULL));
    std::cout << "Start matrix:\n";
    for (size_t i=0; i<ROW; i++)
        {
        for (size_t j=0; j<COLUMN; j++) 
                {
            MAS[i][j]=rand()%50;
            std::cout << MAS[i][j] <<' '; 
                }
        std::cout << std::endl; 
        }
    std::cout << std::endl;
    for (size_t i=0; i<COLUMN-1; i++)
    {
        for (size_t j=0;j<COLUMN-1-i; j++)
                {
                       if(MAS[0][j]>MAS[0][j+1])
                       {
                           int temp=MAS[0][j];
                           MAS[0][j]=MAS[0][j+1];
                           MAS[0][j+1]=temp;
                       }
        }
    }
    std::cout<<"After sort 1 row:\n";
    for(size_t i=0;i<ROW;++i)
    {
        for(size_t j=0;j<COLUMN;++j)
        {
            std::cout<< MAS[i][j] <<' ';
        }
        std::cout<<std::endl;
    }
    std::cout<<"After sort 2 column:\n";
    for (size_t i=0; i<ROW-1; i++)
    {
        for (size_t j=0;j<ROW-1-i; j++)
        {
             if(MAS[j][1]>MAS[j+1][1])
             {
                 int temp=MAS[j][1];
                 MAS[j][1]=MAS[j+1][1];
                 MAS[j+1][1]=temp;
             }
        }
    }
    for(size_t i=0;i<ROW;++i)
    {
        for(size_t j=0;j<COLUMN;++j)
        {
            std::cout<< MAS[i][j] <<' ';
        }
        std::cout<<std::endl;
    }
        return 0;
}
1
fort-_-minor
6 / 6 / 2
Регистрация: 30.07.2010
Сообщений: 87
04.08.2010, 20:08  [ТС] #5
Спасибо, А зачем <iostream> 2 раза?) Тут бы еще на счет 2 задачи что то придумать....
0
ForEveR
В астрале
Эксперт С++
7978 / 4737 / 321
Регистрация: 24.06.2010
Сообщений: 10,543
Завершенные тесты: 3
04.08.2010, 20:12 #6
fort-_-minor, Очепятка. Второе ща посмотрю. МОжет что подскажу
0
fort-_-minor
6 / 6 / 2
Регистрация: 30.07.2010
Сообщений: 87
04.08.2010, 20:16  [ТС] #7
C++
1
2
3
4
5
6
7
8
9
10
11
12
 for (size_t i=0; i<COLUMN-1; i++)
    {
        for (size_t j=0;j<COLUMN-1-i; j++)
                {
                       if(MAS[0][j]>MAS[0][j+1])
                       {
                           int temp=MAS[0][j];
                           MAS[0][j]=MAS[0][j+1];
                           MAS[0][j+1]=temp;
                       }
        }
    }
Эта часть кода уже наверное не нужна если я вроде разобрался...
0
ForEveR
В астрале
Эксперт С++
7978 / 4737 / 321
Регистрация: 24.06.2010
Сообщений: 10,543
Завершенные тесты: 3
04.08.2010, 20:19 #8
fort-_-minor, Это обычная сортировка пузырьком. Чуть-чуть усовершенствованная правда. И она нужна. Именно она первую строку. Вторая такая же сортирует второй столбец
1
fort-_-minor
6 / 6 / 2
Регистрация: 30.07.2010
Сообщений: 87
04.08.2010, 20:20  [ТС] #9
Хм, спасибо, похоже разобрался не до конца...
0
fasked
Эксперт С++
4942 / 2522 / 180
Регистрация: 07.10.2009
Сообщений: 4,311
Записей в блоге: 1
04.08.2010, 20:24 #10
вариант первой задачи на Си:
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
#include <stdlib.h>
#include <stdio.h>
 
#define N_ROW 5
#define N_COL 5
 
/* обмен значениями */
void swap(int *a, int *b);
 
/* заполнение матрицы случайными значениями */
void rand_2d_arr(int (*arr_2d)[N_COL]);
 
/* вывод матрицы на экран */
void print_2d_arr(int (*arr_2d)[N_COL]);
 
int main()
{
    int i;
    int j;
    int arr_2d[N_ROW][N_COL];
 
    rand_2d_arr(arr_2d);
    print_2d_arr(arr_2d);
 
    /* сортировка первой строки */
    for(i = 0; i < N_ROW; ++i)
        for(j = N_ROW - 1; j > i; --j)
            if(arr_2d[0][j] < arr_2d[0][j-1])
                swap(&arr_2d[0][j], &arr_2d[0][j-1]);
 
    /* вывод результата */
    printf("\n");
    print_2d_arr(arr_2d);
 
    /* сортировка второго столбца */
    for(i = 0; i < N_COL; ++i)
        for(j = N_COL - 1; j > i; --j)
            if(arr_2d[j][1] < arr_2d[j-1][1])
                swap(&arr_2d[j][1], &arr_2d[j-1][1]);
 
    /* вывод результата */
    printf("\n");
    print_2d_arr(arr_2d);
 
    system("pause");
    return EXIT_SUCCESS;
}
 
void rand_2d_arr(int (*arr_2d)[N_COL])
{
    int i, j;
 
    for(i = 0; i < N_ROW; ++i)
        for(j = 0; j < N_COL; ++j)
            arr_2d[i][j] = rand() % 9;
}
 
void print_2d_arr(int (*arr_2d)[N_ROW])
{
    int i, j;
 
    for(i = 0; i < N_ROW; ++i)
    {
        for(j = 0; j < N_COL; ++j)
            printf("%d ", arr_2d[i][j]);
 
        printf("\n");
    }
}
 
void swap(int *a, int *b)
{
    int t;
 
    t  = *a;
    *a = *b;
    *b = t;
}
1
ForEveR
В астрале
Эксперт С++
7978 / 4737 / 321
Регистрация: 24.06.2010
Сообщений: 10,543
Завершенные тесты: 3
04.08.2010, 20:36 #11
Вторая. Вроде работает.

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
#include <iostream>
#include <ctime>
 
int main()
{
    srand(time(NULL));
    const int ROW=4;
    const int COLUMN=4;
    int Arr[ROW][COLUMN];
    for(int i=0;i<ROW;++i)
    {
        for(int j=0;j<COLUMN;++j)
        {
            Arr[i][j]=1+rand()%50;
        }
    }
    int max=Arr[ROW-1][COLUMN-1];
    int min=Arr[0][0];
    for(int i=0;i<ROW;++i)
    {
        for(int j=0;j<COLUMN;++j)
            std::cout<<Arr[i][j]<<' ';
        std::cout<<std::endl;
    }
    for(int i=0;i<ROW;++i)
    {
        for(int j=0;j<COLUMN;++j)
        {
            if(Arr[i][j]>max)
                max=Arr[i][j];
            if(Arr[i][j]<min)
                min=Arr[i][j];
        }
    }
    std::cout<< max <<' ' << min <<'\n';
    int fract=max/min;
    int cnt=0;
    std::cout<<fract<<'\n';
    for(int i=0;i<ROW;++i)
    {
        for(int j=0;j<COLUMN;++j)
        {
            if(((i+1)%2)==0)
            {
                if(Arr[i][j]>fract)
                    cnt++;
            }
        }
    }
    std::cout<<cnt<<'\n';
    return 0;
}
1
fasked
Эксперт С++
4942 / 2522 / 180
Регистрация: 07.10.2009
Сообщений: 4,311
Записей в блоге: 1
04.08.2010, 20:45 #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
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
#include <stdlib.h>
#include <stdio.h>
 
#define N_ROW 5
#define N_COL 5
 
/* заполнение матрицы случайными значениями */
void rand_2d_arr(int (*arr_2d)[N_COL]);
 
/* вывод матрицы на экран */
void print_2d_arr(int (*arr_2d)[N_COL]);
 
/* поиск максимума в матрице */
int max_element(int (*arr_2d)[N_COL]);
 
/* поиск минимума в матрице */
int min_element(int (*arr_2d)[N_COL]);
 
int main()
{
    int i = 0;
    int j = 0;
    int min = 0;
    int div = 0;
    int count = 0;
    int arr_2d[N_ROW][N_COL];
 
    rand_2d_arr(arr_2d);
    print_2d_arr(arr_2d);
  
    /* защита от деления на ноль */
    if((min = min_element(arr_2d)) == 0)
        div = 0;
    else
        div = max_element(arr_2d) / min;
 
    /* подсчет результата */
    for(i = 1; i < N_ROW; i += 2)
        for(j = 0; j < N_COL; ++j)
            if(arr_2d[i][j] > div)
                ++count;
 
    printf("result: %d\n", count);
 
    system("pause");
    return EXIT_SUCCESS;
}
 
void rand_2d_arr(int (*arr_2d)[N_COL])
{
    int i, j;
 
    for(i = 0; i < N_ROW; ++i)
        for(j = 0; j < N_COL; ++j)
            arr_2d[i][j] = rand() % 9;
}
 
void print_2d_arr(int (*arr_2d)[N_ROW])
{
    int i, j;
 
    for(i = 0; i < N_ROW; ++i)
    {
        for(j = 0; j < N_COL; ++j)
            printf("%d ", arr_2d[i][j]);
 
        printf("\n");
    }
}
 
int max_element(int (*arr_2d)[N_COL])
{
    int i, j;
    int max = arr_2d[0][0];
 
    for(i = 0; i < N_ROW; ++i)
        for(j = 0; j < N_COL; ++j)
            if(arr_2d[i][j] > max)
                max = arr_2d[i][j];
 
    return max;
}
 
int min_element(int (*arr_2d)[N_COL])
{
    int i, j;
    int min = arr_2d[0][0];
 
    for(i = 0; i < N_ROW; ++i)
        for(j = 0; j < N_COL; ++j)
            if(arr_2d[i][j] < min)
                min = arr_2d[i][j];
 
    return min;
}
1
fort-_-minor
6 / 6 / 2
Регистрация: 30.07.2010
Сообщений: 87
05.08.2010, 13:42  [ТС] #13
На с ничего не писал никогда, все равно спасибо за помощь)
0
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
05.08.2010, 13:42
Привет! Вот еще темы с ответами:

Cортировка записей в массиве - C++
(Я знаю что на форуме уйма таких заданий, но они не дали мне ответ) Доброго времени суток, что не так с моей сортировкой? Я вроде...

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

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

Cортировка методом Шелла - C++
Нужно выполнить сортировку 5-видов, 4 нормально работают, а 5 (методом Шелла) не работает. Которые работают, они закоменчены) помогите...


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

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

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