9 / 9 / 4
Регистрация: 05.12.2013
Сообщений: 65
1

Вывести на экран максимальные элементы в каждом столбце двумерного массива

24.02.2014, 22:19. Показов 1200. Ответов 7
Метки нет (Все метки)

Всем привет. Не могу догнать, как решить задачу с двумерным массивом с помощью указателей.

Задание такое: Нужно вывести на экран максимальные элементы в каждом столбце двумерного массива (матрицы).


Задача без указателей, которая работает исправно:

C++ (Qt)
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
 int main () {
    int a[5][5], i,j,n;
    int max=1;
 
    printf ("Enter the size n:");
    scanf ("%i",&n);
    printf ("Enter the elements:");
 
    for (i=0; i<n; i++) {
    for (j=0; j<n; j++)
    scanf ("%i",&a[i][j]);
 
    }
 
    }
 
    for (i=0; i<n; i++) {
    for (j=0; j<n; j++)
    printf ("%5i",a[i][j]);
    printf ("\n");
 
    } // вывод матрицы
 
    for (j=0; j<n; j++) {
 
    max = a[0][j];
    for (i=0; i<n; i++) {
 
    if (a[i][j] > max)
    max = a[i][j];
    }
 
    printf ("Max. element = %4i",max);
}
Вот корявый код с указателями:

C++ (Qt)
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
int *c,i,j,n,max=1;
 
        printf ("Enter the size n:");
        scanf ("%i",&n);
        c=(int*)malloc(n*n*sizeof(int));
 
        printf ("Enter the elements:");
 
        for (i=0; i<n; i++)
        {
            for (j=0; j<n; j++)
                scanf ("%i",n+i*j+j);
        }
        for (i=0; i<n; i++)
        {
            for (j=0; j<n; j++)
                printf ("%5i",n+i*j+j);
            printf ("\n");
 
        } // вывод матрицы
 
        for (j=0; j<n; j++)
        {
 
            max = *c;
            for (i=0; i<n; i++)
            {
 
                if (*c > max)
                    max = *c+i;
            }
 
            printf ("Max. element = %4i",max);
        }
        free(c);
        getch();
В общем, я знаю примерно в чем у меня проблема, но понять никак не могу, как ее решить.

Добавлено через 49 минут
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
int *a,i,j,n,max=1;
 
        printf ("Enter the size n:");
        scanf ("%i",&n);
        a=(int*)malloc(n*n*sizeof(int));
 
        printf ("Enter the elements:");
 
        for (i=0; i<n; i++)
        {
            for (j=0; j<n; j++)
 
                scanf ("%i",*(a+i*n+j));
        }
        for (i=0; i<n; i++)
        {
            for (j=0; j<n; j++)
                printf ("%5i",*(a+i*n+j));
            printf ("\n");
 
        } // вывод матрицы
 
        for (j=0; j<n; j++)
        {
 
            max = *(a+i*n+j);
            for (i=0; i<n; i++)
            {
 
                if (*(a+i*n+j) > max)
                    max = *(a+i*n+j);
            }
 
            printf ("Max. element = %4i",max);
        }
        free(a);
        getch();
Все запускается, только когда вводишь элементы и при записи элементов следующей строки программа прекращает работу.
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
24.02.2014, 22:19
Ответы с готовыми решениями:

Найти максимальные числа в каждом столбце матрицы и вывести на экран
Очень срочно!!!Задан двухмерный массив (8 на 8) с числами от 1 до 100.Найти максимальные числа в...

Найти максимальные элементы в каждом столбце матрицы и вывести результат
Дан двумерный массив А(10,30). Найти максимальные элементы в каждом столбце и распечатать исходный...

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

Найти минимальные элементы в каждом столбце произвольного двумерного массива
Помогите пожалуйста решить задачу: Найти минимальные элементы в каждом столбце произвольного...

7
320 / 225 / 74
Регистрация: 22.11.2013
Сообщений: 865
Записей в блоге: 1
24.02.2014, 22:29 2
А зачем такие сложности, почему не создать двухмерный массив?
C++
1
2
3
4
5
6
7
8
9
10
11
  int **a, i,j,n;
    int max=1;
 
    printf ("Enter the size n:");
    scanf ("%i",&n);
    printf ("Enter the elements:");
    a=(int**)malloc(sizeof(int*)*n);
    for (i=0;i<n;i++)a[i]=(int*)malloc(sizeof(int)*n);
....
    for (i=0;i<n;i++) free(a[i]);
 free(a);
А остальное по примеру 1
0
9 / 9 / 4
Регистрация: 05.12.2013
Сообщений: 65
24.02.2014, 22:33  [ТС] 3
Ну а как тогда потом определять элементы в столбцах? С матрицей как-то все виднее по-моему.
0
320 / 225 / 74
Регистрация: 22.11.2013
Сообщений: 865
Записей в блоге: 1
24.02.2014, 22:47 4
Так это и есть матрица, а вы работали с вектором... Обращение будет такое далее:
C++
1
2
3
4
5
 for (i=0; i<n; i++) {
    for (j=0; j<n; j++)
    scanf ("%i",&a[i][j]);
 
    }
т.е. один в один пример 1. Только внимательно прочел, что Вы хотите и дежавю у меня только сегодня помогал Ввод с клавы размера целочисленной матрицы, а затем самой матрицы. Найти наибольший элемент. Разрешается использовать только один оператор цикла, единственное Ваш код тяготеет больше к Си, а там ориентирован на классический C++
0
9 / 9 / 4
Регистрация: 05.12.2013
Сообщений: 65
24.02.2014, 23:06  [ТС] 5
Не выходит у меня почему-то ничего
0
320 / 225 / 74
Регистрация: 22.11.2013
Сообщений: 865
Записей в блоге: 1
24.02.2014, 23:08 6
Цитата Сообщение от MessageToBears Посмотреть сообщение
Не выходит у меня почему-то ничего
Тот код по ссылке рабочий, отличие основное выделение освобождение памяти через new/delete а у Вас через malloc/free
1
9 / 9 / 4
Регистрация: 05.12.2013
Сообщений: 65
24.02.2014, 23:26  [ТС] 7
Дело в том, что мне нужно в каждом столбце найти максимальный элемент. А там немного непонятно, особенно:

почему мы изначально создаем указатель на указатель на массив. не проще ли просто создать указатель на массив и играть от него уже?

C++
1
2
3
4
5
a=(int**)malloc(sizeof(int*)*n);
    for (i=0;i<n;i++)a[i]=(int*)malloc(sizeof(int)*n);
....
    for (i=0;i<n;i++) free(a[i]);
 free(a);
Эти строчки тоже непонятны, что делать после первого цикла for, и для чего нужен последний?!
0
320 / 225 / 74
Регистрация: 22.11.2013
Сообщений: 865
Записей в блоге: 1
27.02.2014, 08:13 8
Да тоже самое создается указатель на указатели... Указатель на массив это и есть указатель на указатель

Добавлено через 1 минуту
Первый malloc и первый for выделяют память, вторые освобождают
1
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
27.02.2014, 08:13
Помогаю со студенческими работами здесь

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

В каждом столбце матрицы найти максимальные элементы
Можете помочь. Как сделать чтобы после матрицы отображались макcимальные элементы из столбцов? Что...

В матрице B в каждом столбце максимальные элементы увеличить на число K.
Добрый день,уважаемые форумчане. Поиск использовал,соседние темы смотрел,ответа на мою задачу не...

Посчитать и вывести на экран сумму элементов в каждом столбце массива
Цикл с после условием Задан массив f 4,5 нужно посчитать и вывести на экран сумму элементов в...


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

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

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2023, CyberForum.ru