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

В квадратной матрице A[N][N] определить номер столбца... - C++

Восстановить пароль Регистрация
 
 
Рейтинг: Рейтинг темы: голосов - 14, средняя оценка - 4.64
wertrix
0 / 0 / 0
Регистрация: 01.10.2010
Сообщений: 49
12.10.2010, 10:12     В квадратной матрице A[N][N] определить номер столбца... #1
В квадратной матрице A[N][N] определить номер столбца матрицы, имеющего наибольшую сумму элементов. Поменять этот столбец со строкой, имеющей наименьшую сумму элементов.

Помогите, пожалуйста, решить данную задачу. Двумерный массив вводить через (нас так к сожалению учат...):
C++
1
2
3
4
5
6
7
8
9
const int N1=10;
             M1=10;
int a[N1][M1],i,j,n,m;
printf("input size: ");
scanf("%d%d",&n,&m);
printf("input elements: ");
for(i=0; i<n; i++)
for(j=0; j<n; j++)
scanf("%d",&a[i][j]);
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
12.10.2010, 10:12     В квадратной матрице A[N][N] определить номер столбца...
Посмотрите здесь:

В квадратной матрице определить наименьшие элементы каждого рядка C++
Двумерные массивы. Определить номер строки и номер столбца, на пересечении которых находятся требуемые элементы массива: C++
определить номер столбца матрицы с минимальным количеством отрицательных элементов и прибавить значения этого столбца к соответствующим элементам всех C++
C++ В квадратной матрице найти сумму модулей элементов в строках, содержащих хотя бы один отрицательный элемент; определить номер 1ой строки с 0-ым элем-о
C++ Определить номер столбца квадратной матрицы, сумма элементов которой максимальна
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Andrew_Lvov
Эксперт C++
 Аватар для Andrew_Lvov
259 / 189 / 5
Регистрация: 19.08.2010
Сообщений: 758
Записей в блоге: 1
12.10.2010, 12:15     В квадратной матрице A[N][N] определить номер столбца... #2
Ну и ? Вы не можете посчитать сумму элементов ? Или найти максимум в одномерном массиве ?
wertrix
0 / 0 / 0
Регистрация: 01.10.2010
Сообщений: 49
12.10.2010, 12:44  [ТС]     В квадратной матрице A[N][N] определить номер столбца... #3
У меня получается только найти сумму элементов в каком-либо столбце, а вот как найти сумму во всех, сравнить и найти максимальную и номер этого столбца записать в переменную, и как потом менять строчки.. вот в чем проблема...
silent_1991
Эксперт C++
4938 / 3014 / 149
Регистрация: 11.11.2009
Сообщений: 7,024
Завершенные тесты: 1
12.10.2010, 12:48     В квадратной матрице A[N][N] определить номер столбца... #4
Давайте ваши наработки. Будем разбираться.
wertrix
0 / 0 / 0
Регистрация: 01.10.2010
Сообщений: 49
12.10.2010, 12:53  [ТС]     В квадратной матрице A[N][N] определить номер столбца... #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
#include <stdio.h>
#include <conio.h>
#include <stdlib.h>
 
int main()
{
    const int N1=10,
            M1=10;
    int a[N1][M1],i,j,n,m,s1,s2,max1,max2,i_,j_;
    
    s1=0;
    s2=0;
    max1=0;
    max2=0;
 
    printf("input size: ");
    scanf("%d%d",&n,&m);
    
    printf("input elements:\n");
    for(i=0; i<n; i++)
        for(j=0; j<m; j++)
            scanf("%d",&a[i][j]);
    
    for(i=0; i<n; i++)
        max1+=a[i][0];
 
    printf("max1 = %d\t",max1);
 
    getch();
 
    return 0;
}
Пока получилось такое, просто находит сумму элементов в первом столбце..
silent_1991
Эксперт C++
4938 / 3014 / 149
Регистрация: 11.11.2009
Сообщений: 7,024
Завершенные тесты: 1
12.10.2010, 12:57     В квадратной матрице A[N][N] определить номер столбца... #6
Ну а теперь чисто логически. Вы находите сумму элементов в столбце, двигаясь в цикле по строкам, при этом зафиксировав столбец. Проблема в том, что так вы найдёте сумму элементов только в одном, зафиксированном столбце. Как сделать так, чтобы столбец фиксировался на время, пока не посчитается сумма всех его элементов, а потом менялся на следующий (подсказка: аналогично заполняется матрица)?
Acid_C@t
 Аватар для Acid_C@t
1 / 1 / 0
Регистрация: 18.09.2010
Сообщений: 5
12.10.2010, 13:07     В квадратной матрице A[N][N] определить номер столбца... #7
можна вообще изначальный массив не трогать
посчитать суммы по строчках и коллонках, сравнить, а дальше уже перезаписать в другой массив аналогичного размера с внесением изменений
wertrix
0 / 0 / 0
Регистрация: 01.10.2010
Сообщений: 49
12.10.2010, 13:08  [ТС]     В квадратной матрице A[N][N] определить номер столбца... #8
Что-то даже ничего в голову не приходит...
silent_1991
Эксперт C++
4938 / 3014 / 149
Регистрация: 11.11.2009
Сообщений: 7,024
Завершенные тесты: 1
12.10.2010, 13:20     В квадратной матрице A[N][N] определить номер столбца... #9
Acid_C@t,
А если у нас массив 1000000*1000000 элементов? Решая локальную задачу, всегда надо думать, что она может быть применима в глобальных случаях.

Добавлено через 10 минут
wertrix,
А хоть пытались в неё что-нибудь впустить?)))
Вы когда вводили матрицу с клавиатуры, вы, по сути, вводили её построчно. Т.е. во внешнем цикле фиксировали строку ровно на столько итераций вложенного, чтобы заполнить всю строку данными. Т.е. как работает ваш цикл ввода:
Фиксируете строку матрицы (i) (внешний цикл).
Пробегаете по элементам строки (по столбцам - j) (вложенный цикл).
Как только заполнили полностью строку - перешли на новую строку (увеличили i) и опять бежим по её элементам.

В данном случае надо сделать то же самое, только наоборот (во внешнем цикле зафиксировать столбец, во внутреннем бежать по его элементам и суммировать их. Как только закончится вложенный цикл - сумма всех элементов столбца готова - можно сравнивать её с предыдущей максимальной и минимальной суммой и в случае необходимости сохранять индекс столбца)
wertrix
0 / 0 / 0
Регистрация: 01.10.2010
Сообщений: 49
12.10.2010, 13:29  [ТС]     В квадратной матрице A[N][N] определить номер столбца... #10
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
    for(i=0; i<n; i++)
                max1+=a[i][0];
    
    for(j=0; j<n; j++)
    {
        for(i=0; i<n; i++)
            s1+=a[i][j];
            if(s1>max1)
            {
                max1=s1;
                j_=j;
            }
    }
 
    printf("stolbec max = %d\t",j_);
Пытался сделать так, как вы сказали, но программа выдает неверный ответ...
silent_1991
Эксперт C++
4938 / 3014 / 149
Регистрация: 11.11.2009
Сообщений: 7,024
Завершенные тесты: 1
12.10.2010, 13:33     В квадратной матрице A[N][N] определить номер столбца... #11
Начнём с того, что у вас n и m разные, следовательно внешний цикл должен быть по m. Далее, вы после проверки условия s1 > max1 должны в любом случае обнулять s1, иначе сумма у вас будет считаться не по одному фиксированному столбцу, а по всем.
wertrix
0 / 0 / 0
Регистрация: 01.10.2010
Сообщений: 49
12.10.2010, 13:39  [ТС]     В квадратной матрице A[N][N] определить номер столбца... #12
C++
1
2
3
4
5
6
7
8
9
10
11
for(j=0; j<m; j++)
    {
        for(i=0; i<n; i++)
            s1+=a[i][j];
            if(s1>max1)
            {
                max1=s1;
                j_=j;
                s1=0;
            }
    }
получилось это, но опять где-то ошибка и программа неверно считает
silent_1991
Эксперт C++
4938 / 3014 / 149
Регистрация: 11.11.2009
Сообщений: 7,024
Завершенные тесты: 1
12.10.2010, 13:43     В квадратной матрице A[N][N] определить номер столбца... #13
Я же сказал - после условия и в любом случае обнулять. Вы хотя бы немного думайте. А то вот вы обнулили в случае, если s1 больше max. А если меньше или равно? Продолжаем увеличивать s1. Только вот это уже не сумма элементов столбца.
wertrix
0 / 0 / 0
Регистрация: 01.10.2010
Сообщений: 49
12.10.2010, 13:48  [ТС]     В квадратной матрице A[N][N] определить номер столбца... #14
C++
1
2
3
4
5
6
7
8
9
10
11
    for(j=0; j<m; j++)
    {
        for(i=0; i<n; i++)
            s1+=a[i][j];
            if(s1>max1)
            {
                max1=s1;
                j_=j;
            }
            s1=0;
    }
Даже когда сумма обнуляется после условия, программа неверно считает.
silent_1991
Эксперт C++
4938 / 3014 / 149
Регистрация: 11.11.2009
Сообщений: 7,024
Завершенные тесты: 1
12.10.2010, 13:59     В квадратной матрице A[N][N] определить номер столбца... #15
А s1 хоть инициализировали перед циклом?
wertrix
0 / 0 / 0
Регистрация: 01.10.2010
Сообщений: 49
12.10.2010, 14:01  [ТС]     В квадратной матрице A[N][N] определить номер столбца... #16
Да, s1=0
silent_1991
Эксперт C++
4938 / 3014 / 149
Регистрация: 11.11.2009
Сообщений: 7,024
Завершенные тесты: 1
12.10.2010, 14:03     В квадратной матрице A[N][N] определить номер столбца... #17
А max1?
Вот такой цикл у меня считает правильно:

C
1
2
3
4
5
6
7
8
9
10
11
12
13
for (j = 0, sum = 0, maxSum = 0, index = 0; j < m; j++)
{
    for (i = 0; i < n; i++)
        sum += matrix[i][j];
 
    if (sum > maxSum)
    {
        maxSum = sum;
        index = j;
    }
 
    sum = 0;
}
wertrix
0 / 0 / 0
Регистрация: 01.10.2010
Сообщений: 49
12.10.2010, 14:34  [ТС]     В квадратной матрице A[N][N] определить номер столбца... #18
Спасибо вам, теперь работает, видимо где то у меня была ошибка... Теперь буду пытаться делать дальше

Добавлено через 21 минуту
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
#include <stdio.h>
#include <conio.h>
#include <stdlib.h>
 
int main ()
{
    const int N1 = 10,
            M1 = 10;
    int a[N1][M1],i,j,n,m,sum1=0,sum2=0,maxsum1=0,maxsum2=0,i_,j_;
 
    printf ("input size: ");
    scanf ("%d%d",&n,&m);
    
    printf ("input elements:\n");
    for (i = 0; i < n; i++)
        for (j = 0; j < m; j++)
            scanf ("%d",&a[i][j]);
    
    for (j = 0, sum1 = 0, maxsum1 = 0, j_ = 0; j < m; j++)
    {
        for (i = 0; i < n; i++)
            sum1 += a[i][j];
 
        if (sum1 > maxsum1)
        {
            maxsum1 = sum1;
            j_ = j+1;
        }
        sum1 = 0;
    }
 
        for (i = 0, sum2 = 0, maxsum2 = 0, i_ = 0; i < m; i++)
    {
        for (j = 0; j < n; j++)
            sum2 += a[i][j];
 
        if (sum2 > maxsum2)
        {
            maxsum2 = sum2;
            i_ = i+1;
        }
        sum2 = 0;
    }
 
    printf ("i = %d\nj = %d",i_,j_);
 
    getch ();
 
    return 0;
}
вот что у меня получилось, пока что программа выводит номер строки и номер столбца, в которых сумма элементов максимальна, как мне теперь их поменять местами?
silent_1991
Эксперт C++
4938 / 3014 / 149
Регистрация: 11.11.2009
Сообщений: 7,024
Завершенные тесты: 1
12.10.2010, 14:41     В квадратной матрице A[N][N] определить номер столбца... #19
Хм... это удастся корректно сделать, только если n == m...

Добавлено через 1 минуту
А. Ну так у вас по заданию матрица квадратная... Тогда всё окай)))

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

Добавлено через 1 минуту
Только вот задание вообще-то странное... Обязательно потеряется один элемент.
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
12.10.2010, 15:08     В квадратной матрице A[N][N] определить номер столбца...
Еще ссылки по теме:

C++ В квадратной матрице найти номер первого отрицательного элемента в строке и составить из них массив.
В матрице целых чисел размером 3x7 определить номер столбца, который содержит наименьший элемент C++
В целочисленной матрице найти номер столбца с минимальной суммой элементов C++

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

Или воспользуйтесь поиском по форуму:
wertrix
0 / 0 / 0
Регистрация: 01.10.2010
Сообщений: 49
12.10.2010, 15:08  [ТС]     В квадратной матрице A[N][N] определить номер столбца... #20
Да уж, не говори странное

Добавлено через 25 минут
Как мне переписать строчку во временный одномерный массив?
Я его ввел, попробовал сделать и получилось следующее:

C++
1
2
3
4
5
6
7
8
    for (i2 = 0; i2 < n; i2++)
    {
        for (j = 0; j < n; j++)
            b[i2] = a[i_][j]; \\тут пытаюсь присвоить значение
    }
 
    for (i2 = 0; i2 < n; i2++) \\а тут хочу вывести массив b и посмотреть что получится
        printf ("\n%d\t",b[i2]);
Yandex
Объявления
12.10.2010, 15:08     В квадратной матрице A[N][N] определить номер столбца...
Ответ Создать тему
Опции темы

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