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

Сортировка двухмерного массива по i и j

12.11.2011, 01:50. Показов 1533. Ответов 9
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Нужно написать алгоритм, который создавал бы массив чисел, при чем так, чтобы каждый последующий элемент (по i или по j) был меньше предыдущего. Т.е. matr[i][j] > matr[i][j + 1] и matr[i][j] > matr[i + 1][j]
Вот дословно условие задачи:
"Написать пограмму, которая в двухмерно массиве A(N,M) целых чисел, таком, что для всех I от 1 до N, J от 1 до M-1 выполняется A(I, J) > A(I, J+1) и для всех I от 1 до N-1 выполняется A(I, M) < A(I+1, M), находит все элементы A(I, J), равные J + I, или устанавливает, что таких элементов нет."
Перепробовал уже кучу способов, но в итоге прога либо уходит в бесконечный цикл, либо ОЧЕНЬ долго ищет элементы... Помогите, пожалуйста!

Добавлено через 16 минут
Забыл добавить - язык С
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
12.11.2011, 01:50
Ответы с готовыми решениями:

Сортировка двухмерного массива
Здравствуйте, Нужно применить сортировку к текстовой базе данных. Поля базы только string. Я...

Сортировка двухмерного массива
Помогите!!!Нужно отсортировать двухмерный массив с использованием указателя. #include&lt;iostream&gt;...

Сортировка двухмерного массива
Дан двухмерный массив. Отсортировать столбики массива, поставив вначале четные элементы,а потом...

Сортировка двухмерного массива вставками
Доброго времени суток! Пытаюсь реализовать сортировку двухмерного массива вставками по...

9
794 / 546 / 61
Регистрация: 11.05.2010
Сообщений: 1,298
Записей в блоге: 1
12.11.2011, 15:14 2
Цитата Сообщение от razer89 Посмотреть сообщение
прога либо уходит в бесконечный цикл, либо ОЧЕНЬ долго ищет элементы
прогу в студию
0
594 / 532 / 76
Регистрация: 22.03.2011
Сообщений: 1,585
12.11.2011, 15:24 3
так вам создать или сортировать надо?
4 4 4 4
4 3 3 3
4 3 2 2
4 3 2 1
вот.

Добавлено через 1 минуту
Цитата Сообщение от razer89 Посмотреть сообщение
находит все элементы A(I, J), равные J + I, или устанавливает, что таких элементов нет.
а вот и задание.
0
15 / 15 / 0
Регистрация: 20.06.2010
Сообщений: 142
12.11.2011, 15:53  [ТС] 4
OstapBender, создать отсортированный массив вида:

9 8 7 6 5 4 3 2 1
8 7 6 5 4 3 2 1 0
7 6 5 4 3 2 1 0 -1
6 5 4 3 2 1 0 -1 -2

Т.е. каждый следующий элемент (как в строке, так и в столбце) должен быть меньше предыдущего.

talis, special for you:
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
//---------------------------------------------------------------------------
 
#pragma hdrstop
#include <stdio.h>
#include <stdlib.h>
#include <tchar.h>
//---------------------------------------------------------------------------
 
#pragma argsused
int _tmain(int argc, _TCHAR* argv[]){
    int n, m, i, j, temp;
    unsigned long matr[25][25];
    puts ("Vvedite razmernost' matrici (i)");
    scanf ("%d", &n);
    puts ("Vvedite razmernost' matrici (j)");
    scanf ("%d", &m);
 
        for (i = 0; i < n; i++) {
            printf ("\n");
            for (j = 0; j < m; j++) {
                srand (time(0));
                if (i == 0) {
                    if (j == 0) {
                        matr[i][j] = rand()%1000;
                        printf (" %d", matr[i][j]);
                    }
                    else if (j > 0) {
                        temp = rand()%1000;
                        if (matr[i][j-1] > temp) {
                            matr[i][j] = temp;
                            printf (" %d", matr[i][j]);
                        }
                        else j--;
                    }
                }
 
            }
        }
    getchar ();
}
Данный код создает первые несколько элементов (к примеру, для матрицы 5*5 он вывел 334, 118, 40, 21, 1, и больше у него не осталось вариантов). Как оптимизировать код так, чтобы он выводил случайные числа из заданного промежутка?

Да, и еще появилась идейка. Допустим, размерность матрицы зададим 10*10. Значит в ней будет 100 элементов. А что, если создать обычный одномерный массив из случайных чисел, и потом уже на основе его заполнять матрицу (найти в массиве наибольший элемент -> поместить его в матрицу matr[0][0]; затем найти в массиве наибольший элемент, но меньше matr[0][0], и поместить его в matr[0][1] и т.д....). Получится ли реализовать такой алгоритм?
0
794 / 546 / 61
Регистрация: 11.05.2010
Сообщений: 1,298
Записей в блоге: 1
12.11.2011, 16:15 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
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
#include <stdio.h>
 
#define AT(arr,r,c) (arr)[(r)*columns+(c)]
 
int main( )
{
    int * matrix;
    int rows = 0, columns = 0;
 
    while( rows < 1 )
    {
        printf( "rows: " );
        scanf( "%d", &rows );
 
        if( rows < 1 )
           puts( "rows count should be greater then one" );
    }
 
 
    while( columns < 1 )
    {
        printf( "columns: " );
        scanf( "%d", &columns );
 
        if( columns < 1 )
           puts( "columns count should be greater then one" );
    }
 
    printf( "creating %dx%d matrix...", rows, columns );
    matrix = malloc( rows * columns * sizeof( int )  );
 
    if( !matrix )
    {
        puts( " error" );
        return -1;
    }
 
    putchar( '\n' );
 
    // -- заполнение ----
 
    int _r, _c;
    for( _r = 0; _r < rows; _r++ )
    {
        for( _c = 0; _c < columns; _c++ )
            AT( matrix, _r, _c ) = columns - _c + rows - _r;
    }
 
    // -- вывод ----------
 
    for( _r = 0; _r < rows; _r++ )
    {
        for( _c = 0; _c < columns; _c++ )
            printf( "%3d ", AT( matrix, _r, _c ) );
 
        putchar( '\n' );
    }
 
    putchar( '\n' );
 
    // -- поиск элементов matrix[_r][_c] == _r + _c
 
    if( (_r + _c) & 1 )
        puts( "No elemets are expected." );
    else
        puts( "-- [i][j] == i + j: ----" );
 
    // проверяем предположение
    for( _r = 0; _r < rows; _r++ )
    {
        for( _c = 0; _c < columns; _c++ )
        {
            if( AT( matrix, _r, _c ) == _r + _c )
               printf( "(%3d, %3d) = %3d\n", _r, _c, _r + _c );
        }
    }
 
    putchar( '\n' );
 
 
    // -- завершение ----
 
    puts( "freeing matrix\n" );
    free( matrix );
 
 
    return 0;
}
1
15 / 15 / 0
Регистрация: 20.06.2010
Сообщений: 142
12.11.2011, 16:26  [ТС] 6
Цитата Сообщение от talis Посмотреть сообщение
42: int _r, _c;
RAD Studio выдает ошибку при компилировании [BCC32 Error] File1.c(42): E2140 Declaration is not allowed here
0
794 / 546 / 61
Регистрация: 11.05.2010
Сообщений: 1,298
Записей в блоге: 1
12.11.2011, 16:27 7
razer89, ну переместите их в начало функции. Педантичная у вас RAD Studio какая...
0
15 / 15 / 0
Регистрация: 20.06.2010
Сообщений: 142
12.11.2011, 16:33  [ТС] 8
Цитата Сообщение от talis Посмотреть сообщение
razer89, ну переместите их в начало функции. Педантичная у вас RAD Studio какая...
ага, уже догадался. ну вроде работает. осталось только разобраться, как это оно работает...)) в частности, не понял что делает
C
1
    matrix = malloc( rows * columns * sizeof( int )  );
Огромное спасибо за помощь!
0
794 / 546 / 61
Регистрация: 11.05.2010
Сообщений: 1,298
Записей в блоге: 1
12.11.2011, 16:35 9
malloc выделяет нужное количество памяти и сохраняет адрес начала выделенного блока в указателе matrix. В скобках - размер блока памяти в байтах.
0
15 / 15 / 0
Регистрация: 20.06.2010
Сообщений: 142
12.11.2011, 16:45  [ТС] 10
Цитата Сообщение от talis Посмотреть сообщение
malloc выделяет нужное количество памяти и сохраняет адрес начала выделенного блока в указателе matrix. В скобках - размер блока памяти в байтах.
Мда... Я как самый начинающий новичек весьма отдаленно понимаю, что значат Ваши слова...) Ну чтож, учиться, учиться и еще раз учиться...
0
12.11.2011, 16:45
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
12.11.2011, 16:45
Помогаю со студенческими работами здесь

Сортировка строк двухмерного массива
Нужно написать функцию для сортировки двухмерного массива. Пользователь должен выбрать сортировку...

Сортировка двухмерного динамического массива
Доброго времени суток. Столкнулся с проблемой при сортировке двухмерного динамического массива, а...

Сортировка первого столбца двухмерного массива.
Необходимо отсортировать первый столбец двухмерного массива. Программа кажется это и делает,...

Сортировка двухмерного массива
Отсортировать по возрастанию элементов последней строки целочисленного двухмерного массива 3х4.


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

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