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

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

Восстановить пароль Регистрация
 
MessageToBears
8 / 8 / 1
Регистрация: 05.12.2013
Сообщений: 65
24.02.2014, 22:19     Вывести на экран максимальные элементы в каждом столбце двумерного массива #1
Всем привет. Не могу догнать, как решить задачу с двумерным массивом с помощью указателей.

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


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

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();
Все запускается, только когда вводишь элементы и при записи элементов следующей строки программа прекращает работу.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
24.02.2014, 22:19     Вывести на экран максимальные элементы в каждом столбце двумерного массива
Посмотрите здесь:

C++ вычисление произведения отрицательных элементов в каждом столбце двумерного массива
C++ Подсчёт суммы элементов в каждом столбце двумерного массива
C++ Найти в каждом столбце матрицы максимальный и минимальный элементы и вывести на печать в виде двух строк
Подсчитать сумму элементов в каждом столбце массива и вывести C++
Ввести элементы двумерного массива с клавы С++.Нужно вывести его на экран в виде таблицы, в конце каждой строки надо вывести самый большой элемент C++
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
mustimur
268 / 222 / 57
Регистрация: 22.11.2013
Сообщений: 832
Записей в блоге: 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
MessageToBears
8 / 8 / 1
Регистрация: 05.12.2013
Сообщений: 65
24.02.2014, 22:33  [ТС]     Вывести на экран максимальные элементы в каждом столбце двумерного массива #3
Ну а как тогда потом определять элементы в столбцах? С матрицей как-то все виднее по-моему.
mustimur
268 / 222 / 57
Регистрация: 22.11.2013
Сообщений: 832
Записей в блоге: 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++
MessageToBears
8 / 8 / 1
Регистрация: 05.12.2013
Сообщений: 65
24.02.2014, 23:06  [ТС]     Вывести на экран максимальные элементы в каждом столбце двумерного массива #5
Не выходит у меня почему-то ничего
mustimur
268 / 222 / 57
Регистрация: 22.11.2013
Сообщений: 832
Записей в блоге: 1
24.02.2014, 23:08     Вывести на экран максимальные элементы в каждом столбце двумерного массива #6
Цитата Сообщение от MessageToBears Посмотреть сообщение
Не выходит у меня почему-то ничего
Тот код по ссылке рабочий, отличие основное выделение освобождение памяти через new/delete а у Вас через malloc/free
MessageToBears
8 / 8 / 1
Регистрация: 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, и для чего нужен последний?!
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
27.02.2014, 08:13     Вывести на экран максимальные элементы в каждом столбце двумерного массива
Еще ссылки по теме:

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

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

Или воспользуйтесь поиском по форуму:
mustimur
268 / 222 / 57
Регистрация: 22.11.2013
Сообщений: 832
Записей в блоге: 1
27.02.2014, 08:13     Вывести на экран максимальные элементы в каждом столбце двумерного массива #8
Да тоже самое создается указатель на указатели... Указатель на массив это и есть указатель на указатель

Добавлено через 1 минуту
Первый malloc и первый for выделяют память, вторые освобождают
Yandex
Объявления
27.02.2014, 08:13     Вывести на экран максимальные элементы в каждом столбце двумерного массива
Ответ Создать тему
Опции темы

Текущее время: 18:44. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru