0 / 0 / 0
Регистрация: 08.01.2014
Сообщений: 20
1

Нахождение максимума в каждом столбце массива

08.01.2014, 15:56. Показов 1394. Ответов 16
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
есть программа нахождения максимума в массиве, а надо из этого сделать нахождение максимума в каждом столбце массива.
Помогите Пожалуйста.


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
#include <iostream>
#include<conio.h>
#include <time.h>
#include <stdlib.h>
#include <stdio.h>
#include <Windows.h>
 
using namespace std;
int x,y;
int maks=0;
void mmax(){
    maks=0;
    int** array=new int*[x]; 
for(int i=0; i<=x;i++) 
{ 
array[i]=new int[y]; 
} 
    for (int i=0; i<x; i++){
for (int j=0; j<y; j++){
    if((rand() % 20)>2){
        array[i][j]=rand() % 100;
    }
    else{
        array[i][j]=(rand() % 100)*(-1);
    }
    }
    }
 
    for (int i=0; i<x; i++){
for (int j=0; j<y; j++){
maks=max(maks,array[i][j]);
cout << array[i][j] << " ";
    }
 
cout << endl;
    }
}
 
void main(){
    
    srand(time(NULL));
    setlocale(0,"");
    cout << "Введите размер матрицы  IxJ:" << endl;
    cin >> x >> y;
    mmax();
    
    cout  <<  endl << "max: " << maks;
 
    cout << endl << "Введите размер матрицы  IxJ:" << endl;
    cin >> x >> y;
    mmax();
    cout  <<  endl << "max: " << maks;
    _getch();
}
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
08.01.2014, 15:56
Ответы с готовыми решениями:

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

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

Подсчёт суммы элементов в каждом столбце двумерного массива
Собственно, если кого-то не затруднит, напишите схематический код подобной операции.

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

16
584 / 387 / 216
Регистрация: 20.01.2013
Сообщений: 1,169
08.01.2014, 16:09 2
, а надо из этого сделать
Именно из этого ?
0
0 / 0 / 0
Регистрация: 08.01.2014
Сообщений: 20
08.01.2014, 16:11  [ТС] 3
Не обязательно, но суть такая именно с вызовом функции, с указателями, все как тут, только считать максимумы надо в каждом столбце
0
244 / 155 / 48
Регистрация: 03.04.2013
Сообщений: 317
08.01.2014, 16:20 4
Заменить нахождение максимума на
C++
1
2
3
4
5
6
7
8
for (int i = 0, maxi = arr[i][0]; i<x; i++, maxi = arr[i][0])
        for (int j = 0; j<y; j++)
        {
            if (arr[i][j]>maxi)
                maxi = arr[i][j];
            if (j == (y-1))
                cout << "In line "<<i+1<<" Max = "<<maxi << endl;
        }
1
0 / 0 / 0
Регистрация: 08.01.2014
Сообщений: 20
08.01.2014, 16:48  [ТС] 5
Спасибо большое, работает


Alex566, сдесь в строках ищет максимум, а надо столбцы
0
244 / 155 / 48
Регистрация: 03.04.2013
Сообщений: 317
08.01.2014, 17:05 6
Просто поменять местами индексы.
C++
1
2
3
4
5
6
7
8
for (int i = 0, maxi = arr[i][0]; i<10; i++, maxi = arr[i][0])
        for (int j = 0; j<10; j++)
        {
            if (arr[j][i]>maxi)
                maxi = arr[j][i];
            if (j == 9)
                cout << "In colum "<<i+1<<" Max = "<<maxi << endl;
        }
0
0 / 0 / 0
Регистрация: 08.01.2014
Сообщений: 20
08.01.2014, 17:11  [ТС] 7
выводится массив коряво, сдвигается все, как сделать что бы сначала выводился массив, а потом максимумы, а у меня все вперемешку получается
0
244 / 155 / 48
Регистрация: 03.04.2013
Сообщений: 317
08.01.2014, 17:21 8
Ту часть программы что я кинул вставьте после своего нахождения максимума. А в нем удалите строку
C++
1
maks=max(maks,array[i][j]);
И кстати в вашей программе за компаратор функция max, можно сделать так
C++
1
2
3
4
5
6
7
for (int i = 0, maxi = arr[i][0]; i<y; i++, maxi = arr[i][0])
        for (int j = 0; j<x; j++)
        {
            maxi = max(maxi,arr[j][i]);
            if (j == (x-1))
                cout << "In colum "<<i+1<<" Max = "<<maxi << endl;
        }
0
0 / 0 / 0
Регистрация: 08.01.2014
Сообщений: 20
08.01.2014, 17:35  [ТС] 9
сделала по второму совету, с максимумом 2 столбца что то не так, каждый раз разный, и неверный..да и последующие не всегда верны.
C++
1
 cout << "In colum "<<i+1<<" Max = "<<maks << endl;
думаю тут проблема какая то...
0
Заблокирован
08.01.2014, 18:07 10
lina13160, итоговый код выложите, а то бывают проблемы с тем, что правильные куски сшивают в неправильный в целом
0
244 / 155 / 48
Регистрация: 03.04.2013
Сообщений: 317
08.01.2014, 18:32 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
53
54
55
#include <iostream>
#include <time.h>
#include <cstdlib>
#include <iomanip>
using namespace std;
 
void maxincol(int **arr, unsigned x, unsigned y)
{
    for (int i = 0, maxi = arr[i][0]; i<y; i++, maxi = arr[i][0])
        for (int j = 0; j<x; j++)
        {
            if (arr[j][i]>maxi)
                maxi = arr[j][i];
            if (j == (x-1))
                cout << "В колонке №" << i + 1 << " максимальный элемент = " << maxi << endl;
        }
}
 
void input(int **arr, unsigned x, unsigned y)
{
    for (int i = 0; i<x; i++)
        for (int j = 0; j<y; j++)
            if ((rand() % 20)>2)
                arr[i][j] = rand() % 100;
            else
                arr[i][j] = (rand() % 100)*(-1);
}
 
void output(int **arr, unsigned x, unsigned y)
{
    for (int i = 0; i<x; i++)
    {
        for (int j = 0; j<y; j++)
            cout <<setw(4)<< arr[i][j];
        cout << endl;
    }
}
 
int main()
{
    setlocale(0, "");
    srand(time(NULL));
    unsigned x, y;
    int **arr;
    cout << "Введите размер матрицы  IxJ: ";
    cin >> x >> y;
    arr = new int*[x];
    for (int i = 0; i <= x; i++)
        arr[i] = new int[y];
    input(arr, x, y);
    output(arr, x, y);
    maxincol(arr, x, y);
    system("pause");
    return 0;
}
0
0 / 0 / 0
Регистрация: 08.01.2014
Сообщений: 20
08.01.2014, 23:55  [ТС] 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
#include <iostream>
#include<conio.h>
#include <time.h>
#include <stdlib.h>
#include <stdio.h>
#include <Windows.h>
 
using namespace std;
int x,y,b;
int maks=0;
 
void mmax(){
    maks=0;
    b=0;
    int** array=new int*[x]; 
for(int i=0; i<=x;i++) 
{ 
array[i]=new int[y]; 
} 
    for (int i=0; i<x; i++){
for (int j=0; j<y; j++){
    if((rand() % 20)>2){
        array[i][j]=rand() % 100;
    }
    else{
        array[i][j]=(rand() % 100)*(-1);
    }
    }
    }
 
    for (int i=0; i<x; i++){
for (int j=0; j<y; j++){
cout << array[i][j] << " ";
    }
 
 
cout << endl;
    }
            for (int i = 0, maks = array[i][0]; i<x; i++, maks = array[i][0])
        for (int j = 0; j<y; j++)
        {
            if (array[j][i]>maks)
                maks=max(maks,array[j][i]);
            if (j == (x-1))
        
                cout << "In colum "<<i+1<<" Max = "<<maks << endl;
        } 
} 
 
void main(){
    
    srand(time(NULL));
    setlocale(0,"");
    cout << "Введите размер матрицы  IxJ:" << endl;
    cin >> x >> y;
    mmax();
    
    cout  <<  endl << "max: " << maks;
 
    cout << endl << "Введите размер матрицы  IxJ:" << endl;
    cin >> x >> y;
    mmax();
    cout  <<  endl << "max: " << maks;
    _getch();
}
0
0 / 0 / 0
Регистрация: 08.01.2014
Сообщений: 20
09.01.2014, 07:23  [ТС] 13
Вот ваша программа, опять же не правильно посчитаны максимумы во 2 и 3 столбце...
Как такое получается..
если несколько раз запускать, и матрицы побольше брать, то все хорошо вроде, но 3х3, 4х4 уродцы какие то получаются
Миниатюры
Нахождение максимума в каждом столбце массива  
0
Заблокирован
09.01.2014, 09:49 14
lina13160, это скриншоты работы программы Alex566. Я запустил программу из сообщения №12 - посчитало правильно
0
244 / 155 / 48
Регистрация: 03.04.2013
Сообщений: 317
09.01.2014, 15:08 15
Да пардон. Я оставил с нахождения по строкам строчку по этому за максимум у вас брало 1 элемент строки а потом считало столбцы.
C++
1
for (int i = 0, maxi = arr[i][0]; i<y; i++, maxi = arr[i][0])
заменить на
C++
1
for (int i = 0, maxi = arr[0][i]; i<y; i++, maxi = arr[0][i])
и все будет отлично.
0
0 / 0 / 0
Регистрация: 08.01.2014
Сообщений: 20
09.01.2014, 15:14  [ТС] 16
Даа, Вот так все отлично, аж душа радуется
Спасибо огромное)
0
244 / 155 / 48
Регистрация: 03.04.2013
Сообщений: 317
09.01.2014, 15:44 17
P. S.
Цитата Сообщение от lina13160 Посмотреть сообщение
for(int i=0; i<=x;i++)
Выделяется память на 1 строку больше чем используется. А после завершения работы не удаляется. Не хватает:
C++
1
2
3
for(int i=0; i<x;i++)
    delete[] arr[i];
delete[] arr;
0
09.01.2014, 15:44
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
09.01.2014, 15:44
Помогаю со студенческими работами здесь

Подсчитать сумму элементов в каждом столбце массива и вывести
Массив задала, заполнила, вывела, нужно теперь подсчитать сумму элементов в каждом столбце и...

Сдвинуть в каждом столбце циклически все элементы массива
Дан вещественный массив А и целое число 0&lt;k&lt;N. Сдвинуть в каждом столбце циклически все элементы...

Вычисление произведения отрицательных элементов в каждом столбце двумерного массива
Напишите фрагменты программ для решения следующих задач: 1)вычисление произведения отрицательных...

В каждом столбце массива найти сумму и количество нечетных чисел
Помогите исправить код буду очень благодарен. 1)Дан двумерный массив целых чисел. В каждом столбце...


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

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

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