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

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
Рейтинг: Рейтинг темы: голосов - 11, средняя оценка - 4.73
VoDka
0 / 0 / 0
Регистрация: 18.10.2010
Сообщений: 8
#1

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

18.10.2010, 20:03. Просмотров 1446. Ответов 6
Метки нет (Все метки)

Помогите пожалуйста, суть:. Дана матрица целых чисел. Собрать все отрицательные элементы выше побочной диагонали , получается абсолютно все, и ввод матрицы и вывод на экран все робит, подскажите с куском программы, отвечающим именно за перестановку.....заранее признателен
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
18.10.2010, 20:03     Собрать все отрицательные элементы выше побочной диагонали
Посмотрите здесь:
C++ Собрать все положительные элементы массива выше главной диагонали
C++ В двумерном массиве вывести все элементы выше главной диагонали и ниже побочной
C++ Заменить все нулевые элементы матрицы, которые стоят на побочной диагонали и выше нее, на 1
C++ Обнулить элементы матрицы, лежащие одновременно выше главной диагонали и выше побочной диаго-нали.
Заменить элементы главной диагонали суммами элементов их строк стоящих выше побочной диагонали C++
Обнулить элементы матрицы, лежащие одновременно выше главной диагонали и ниже побочной диагонали C++
C++ Программа, которая зануляет элементы выше и ниже главной и побочной диагонали
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
nikkka
Мат в 32 хода
235 / 170 / 8
Регистрация: 10.09.2009
Сообщений: 1,096
18.10.2010, 20:13     Собрать все отрицательные элементы выше побочной диагонали #2
ну вот смотри. допустим ты пустил цикл
C++
1
2
3
4
5
for(int i=0;i<SIZE;i++)
    for(int k=0;k<SIZE;k++) // a[i,k]
    {
    ...
    }
который пробегает все пары значений до SIZE. если элемент выше диагонали, то его индекс "высоты" по любому меньше индекса "ширины" т.е. i<k.
VoDka
0 / 0 / 0
Регистрация: 18.10.2010
Сообщений: 8
18.10.2010, 20:54  [ТС]     Собрать все отрицательные элементы выше побочной диагонали #3
а суть то в чем? ты цикл пустил просто по всему массиву, а сравнение то где + если элемент ниже диагонали и отрицателен, то как поместить его выше, точнее не как, а нужно задать еше одну проверку чтобы он не менял местами 2 отрицательных элемента, так как толку от этого нет
jlw
6 / 6 / 0
Регистрация: 30.09.2010
Сообщений: 18
18.10.2010, 21:04     Собрать все отрицательные элементы выше побочной диагонали #4
Думаю, что так:

C++
1
2
3
4
5
6
for (int i = 0; i < N; ++i)
    for (int j = 0; j < N; ++j)
        if (j < i)
            if (A[i][j] < 0)
                if (A[j][i] >= 0)
                    swap(A[i][j], A[j][i]);
VoDka
0 / 0 / 0
Регистрация: 18.10.2010
Сообщений: 8
18.10.2010, 21:15  [ТС]     Собрать все отрицательные элементы выше побочной диагонали #5
А если все же условие не выполнится?, например, если оба элемента будут отрицательными, то замены не будет, а разместить нужно+ я так думаю надо еще проверку на кол-во отриц элементов запустить, чтобы их кол-во не превышало кол-во элементов выше диагонали
jlw
6 / 6 / 0
Регистрация: 30.09.2010
Сообщений: 18
18.10.2010, 22:03     Собрать все отрицательные элементы выше побочной диагонали #6
Выглядит не самым лучшим образом, но других вариантов в голову не приходит...

C++
1
2
3
4
5
6
7
8
9
10
for (int i = 0; i < N; ++i)
    for (int j = 0; j < N; ++j)
        if (j < i && A[i][j] < 0)
            if (A[j][i] >= 0)
                swap(A[i][j], A[j][i]);
            else
                for (int k = 0; k < N; ++k)
                    for (int z = 0; z < N; ++z)
                        if (z > k && A[k][z] >= 0)
                            swap(A[i][j], A[k][z]);
А количество отрицательных элементов не должно превышать количество свободных мест выше главной диагонали по условию. Но если нужна проверка, то отдельно перебираем все элементы, суммируя количество отрицательных элементов, а потом сравниваем с величиной (N^2-N)/2.
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
18.10.2010, 22:32     Собрать все отрицательные элементы выше побочной диагонали
Еще ссылки по теме:
C++ Обнулить в квадратной матрице элементы, лежащие выше главной и ниже побочной диагонали
C++ Обнулить элементы матрицы, лежащие выше побочной диагонали. Условный оператор не использовать
C++ Возвести в квадрад отрицательные элементы, которые находятся на главной диагонали и выше нее.
C++ Переставить все элементы k-ой строки матрицы (между собой) и все элементы побочной диагонали

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

Или воспользуйтесь поиском по форуму:
VoDka
0 / 0 / 0
Регистрация: 18.10.2010
Сообщений: 8
18.10.2010, 22:32  [ТС]     Собрать все отрицательные элементы выше побочной диагонали #7
Спасибо огромное, доработал, все отлично

Добавлено через 9 минут
Кстати а возможно их еще и с диагонали убрать?
Yandex
Объявления
18.10.2010, 22:32     Собрать все отрицательные элементы выше побочной диагонали
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru