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

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

Восстановить пароль Регистрация
 
lina13160
0 / 0 / 0
Регистрация: 08.01.2014
Сообщений: 20
08.01.2014, 15:56     Нахождение максимума в каждом столбце массива #1
есть программа нахождения максимума в массиве, а надо из этого сделать нахождение максимума в каждом столбце массива.
Помогите Пожалуйста.


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();
}
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
08.01.2014, 15:56     Нахождение максимума в каждом столбце массива
Посмотрите здесь:

C++ В каждом столбце массива найти сумму и количество нечетных чисел
C++ вычисление произведения отрицательных элементов в каждом столбце двумерного массива
C++ Подсчёт суммы элементов в каждом столбце двумерного массива
Подсчитать сумму элементов в каждом столбце массива и вывести C++
C++ Нахождение минимума/максимума в конкретной строке или столбце
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
egor2116
 Аватар для egor2116
337 / 368 / 42
Регистрация: 20.01.2013
Сообщений: 1,100
08.01.2014, 16:09     Нахождение максимума в каждом столбце массива #2
, а надо из этого сделать
Именно из этого ?
lina13160
0 / 0 / 0
Регистрация: 08.01.2014
Сообщений: 20
08.01.2014, 16:11  [ТС]     Нахождение максимума в каждом столбце массива #3
Не обязательно, но суть такая именно с вызовом функции, с указателями, все как тут, только считать максимумы надо в каждом столбце
Alex566
 Аватар для Alex566
240 / 152 / 18
Регистрация: 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;
        }
lina13160
0 / 0 / 0
Регистрация: 08.01.2014
Сообщений: 20
08.01.2014, 16:48  [ТС]     Нахождение максимума в каждом столбце массива #5
Спасибо большое, работает


Alex566, сдесь в строках ищет максимум, а надо столбцы
Alex566
 Аватар для Alex566
240 / 152 / 18
Регистрация: 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;
        }
lina13160
0 / 0 / 0
Регистрация: 08.01.2014
Сообщений: 20
08.01.2014, 17:11  [ТС]     Нахождение максимума в каждом столбце массива #7
выводится массив коряво, сдвигается все, как сделать что бы сначала выводился массив, а потом максимумы, а у меня все вперемешку получается
Alex566
 Аватар для Alex566
240 / 152 / 18
Регистрация: 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;
        }
lina13160
0 / 0 / 0
Регистрация: 08.01.2014
Сообщений: 20
08.01.2014, 17:35  [ТС]     Нахождение максимума в каждом столбце массива #9
сделала по второму совету, с максимумом 2 столбца что то не так, каждый раз разный, и неверный..да и последующие не всегда верны.
C++
1
 cout << "In colum "<<i+1<<" Max = "<<maks << endl;
думаю тут проблема какая то...
Ev_Hyper
 Аватар для Ev_Hyper
1807 / 1628 / 435
Регистрация: 15.12.2013
Сообщений: 5,790
08.01.2014, 18:07     Нахождение максимума в каждом столбце массива #10
lina13160, итоговый код выложите, а то бывают проблемы с тем, что правильные куски сшивают в неправильный в целом
Alex566
 Аватар для Alex566
240 / 152 / 18
Регистрация: 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;
}
lina13160
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();
}
lina13160
0 / 0 / 0
Регистрация: 08.01.2014
Сообщений: 20
09.01.2014, 07:23  [ТС]     Нахождение максимума в каждом столбце массива #13
Вот ваша программа, опять же не правильно посчитаны максимумы во 2 и 3 столбце...
Как такое получается..
если несколько раз запускать, и матрицы побольше брать, то все хорошо вроде, но 3х3, 4х4 уродцы какие то получаются
Миниатюры
Нахождение максимума в каждом столбце массива  
Ev_Hyper
 Аватар для Ev_Hyper
1807 / 1628 / 435
Регистрация: 15.12.2013
Сообщений: 5,790
09.01.2014, 09:49     Нахождение максимума в каждом столбце массива #14
lina13160, это скриншоты работы программы Alex566. Я запустил программу из сообщения №12 - посчитало правильно
Alex566
 Аватар для Alex566
240 / 152 / 18
Регистрация: 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])
и все будет отлично.
lina13160
0 / 0 / 0
Регистрация: 08.01.2014
Сообщений: 20
09.01.2014, 15:14  [ТС]     Нахождение максимума в каждом столбце массива #16
Даа, Вот так все отлично, аж душа радуется
Спасибо огромное)
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
09.01.2014, 15:44     Нахождение максимума в каждом столбце массива
Еще ссылки по теме:

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

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

Или воспользуйтесь поиском по форуму:
Alex566
 Аватар для Alex566
240 / 152 / 18
Регистрация: 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;
Yandex
Объявления
09.01.2014, 15:44     Нахождение максимума в каждом столбце массива
Ответ Создать тему
Опции темы

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