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

Определить количество отрицательных элементов выше и ниже диагонали

26.03.2012, 19:30. Показов 3751. Ответов 7
Метки нет (Все метки)

Дана квадратная вещественная матрица.
Определить отдельно количество k1 отрицательных элементов, расположенных выше главной диагонали, и количество k2 отрицательных элементов, расположенных ниже этой диагонали.
- Этот пункт уже сделан (см. скриншот), как сделать следующий?
Если k1!=k2, то изменить знаки определенного количества отрицательных элементов таким образом, чтобы выполнялось равенство k1=k2 .

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
#include <iostream>
#include <ctime>
#include <cstdlib>
 
using namespace std;
 
int main ()
{       setlocale(LC_ALL, "");
        srand(time(NULL));
 
        int n, m, i, j;
        double **matr = NULL;
 
        cout << "Введите количество строк n = ";
        cin >> n;
        cout << "Введите количество столбцов m = ";
        cin >> m;
        cout << "\nматрица размером " << n << "x" << m <<"\n\n";
        //Выделяем память под матрицу 
    // Выделяем память под массив строк матрицы 
        matr = new double* [n];
        for (i = 0; i < n; ++i)
        {
                matr[i] = new double [m];
                for (j = 0; j < m; ++j)
                {
                        // Выделяем память под каждую строку матрицы 
                        matr[i][j] = (double) (rand()%100-50)/100;
                        cout << matr[i][j] << "\t";
                }
                cout <<"\n" ;
    }
//количество k1 отрицательных элементов, расположенных ВЫШЕ главной диагонали
        int k1=0;
        for (i=0; i<n; ++i)
        {
            for(j=0; j<m; ++j)
                if (matr[i][j]<0 && i<j) k1=k1+1;
        }
cout<<"\nКоличество k1 отрицательных элементов, расположенных выше главной диагонали - "<<k1<<endl;
//количество k2 отрицательных элементов, расположенных НИЖЕ главной диагонали
        int k2=0;
        for (i=0; i<n; ++i)
        {
            for(j=0; j<m; ++j)
                if (matr[i][j]<0 && i>j) k2=k2+1;
        }
cout<<"\nКоличество k2 отрицательных элементов, расположенных ниже главной диагонали - "<<k2<<endl;
        // Удаление матрицы из памяти
        // Удаление каждой строки матрицы 
        for (int i = 0; i <n ; ++i)
                delete[] matr [i];
        // Удаление массива строк матрицы 
        delete[] matr;
        return 0;
}
Просьба помочь, очень долго мучился над 1-й половиной задания, хотелось бы и 2-ю часть сделать!
Миниатюры
Определить количество отрицательных элементов выше и ниже диагонали  
__________________
Помощь в написании контрольных, курсовых и дипломных работ, диссертаций здесь
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
26.03.2012, 19:30
Ответы с готовыми решениями:

Определить количество отрицательных элементов расположенных выше главной диагонали
Определить количество отрицательных элементов расположенных выше главной диагонали

Определить количество отрицательных элементов, расположенных выше главной диагонали матрицы
Доброго времени суток, помогите пожалуйста с заданием. Желательно максимально просто Задание 2....

Определить количество отрицательных элементов, расположенных выше главной диагонали матрицы
Ребят, помогите!!! Необходимо определить количество отрицательных элементов, расположенных выше...

Определить количество отрицательных элементов, расположенных выше главной диагонали матрицы
2. Определить количество отрицательных элементов, расположенных выше главной диагонали матрицы.

7
3795 / 3108 / 859
Регистрация: 25.03.2012
Сообщений: 11,475
Записей в блоге: 1
26.03.2012, 20:16 2
Как тебе такое решение?

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
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
#include <iostream>
#include <ctime>
#include <cstdlib>
 
using namespace std;
 
int main ()
{       
        setlocale(LC_ALL, "");
        srand(time(NULL));
 
        int n, m, i, j, bu, bd;
        double **matr = NULL;
        double **buf_up;
        double **buf_down;
        cout << "Введите количество строк n = ";
        cin >> n;
        cout << "Введите количество столбцов m = ";
        cin >> m;
        cout << "\nматрица размером " << n << "x" << m <<"\n\n";
        //Выделяем память под матрицу 
    // Выделяем память под массив строк матрицы 
        matr = new double* [n];
        buf_up=new double* [n*m/2];
        buf_down=new double* [n*m/2];
        for (i = 0; i < n; ++i)
        {
                matr[i] = new double [m];
                for (j = 0; j < m; ++j)
                {
                        // Выделяем память под каждую строку матрицы 
                        matr[i][j] = (double) (rand()%100-50)/100;
                        cout << matr[i][j] << "\t";
                }
                cout <<"\n" ;
    }
        //количество k1 отрицательных элементов, расположенных ВЫШЕ главной диагонали
                int k1=0;
                bu=0; 
        for (i=0; i<n; ++i)
        {
                        for(j=i+1; j<m; ++j)
                            if (matr[i][j]<0) {
                                k1++;
                                buf_up[bu]=&(matr[i][j]);
                                bu++;
                            }
        }
        cout<<"\nКоличество k1 отрицательных элементов, расположенных выше главной диагонали - "<<k1<<endl;
          //количество k2 отрицательных элементов, расположенных НИЖЕ главной диагонали
                int k2=0;
                bd=0;
        for (i=0; i<n; ++i)
        {
                        for(j=0; j<i; ++j)
                            if (matr[i][j]<0) {
                                    k2=k2+1;
                                    buf_down[bd]=&(matr[i][j]);
                                    bd++;
                            }
        }
            cout<<"\nКоличество k2 отрицательных элементов, расположенных ниже главной диагонали - "<<k2<<endl;
 
        while (bu>bd){
            bu--;
            *(buf_up[bu])=-(*(buf_up[bu]));
            }
        while (bd>bu){
            bd--;
            *(buf_down[bd])=-(*(buf_down[bd]));
            }
 
            cout<<"\nИзменённый массив - "<<k2<<endl;
       for (i = 0; i < n; ++i)
        {
                for (j = 0; j < m; ++j)
                {
                        cout << matr[i][j] << "\t";
                }
                cout <<"\n" ;
         }
 
        char c;
            cin>>c;
        // Удаление матрицы из памяти
                // Удаление каждой строки матрицы 
        for (int i = 0; i <n ; ++i)
                delete[] matr [i];
        // Удаление массива строк матрицы 
        delete[] matr;
        delete[] buf_up;
        delete[] buf_down;
        return 0;
}
0
0 / 0 / 0
Регистрация: 21.11.2011
Сообщений: 70
26.03.2012, 20:37  [ТС] 3
Kuzia domovenok, У меня измененный массив ни чем не отличается от исходного!!!
0
3795 / 3108 / 859
Регистрация: 25.03.2012
Сообщений: 11,475
Записей в блоге: 1
26.03.2012, 20:42 4
Цитата Сообщение от XaJlop4ik Посмотреть сообщение
Kuzia domovenok, У меня измененный массив ни чем не отличается от исходного!!!
Пример массива, который не отличается в студию. Ты забыл, что они рандомно генерируются? Я не знаю какой конкретно у тебя. Ты сколько раз запускал?
0
0 / 0 / 0
Регистрация: 21.11.2011
Сообщений: 70
26.03.2012, 20:52  [ТС] 5
Kuzia domovenok, Очень много раз запускал... все равно не выходит(
вот скрин:
Миниатюры
Определить количество отрицательных элементов выше и ниже диагонали  
0
3795 / 3108 / 859
Регистрация: 25.03.2012
Сообщений: 11,475
Записей в блоге: 1
26.03.2012, 21:02 6
Ты б ещё матрицы 100 на 100 сделал, ё-моё!

У тебя количество k1=23
А количество k2 равно 22
!!Естесственно, чтобы преобразовать массив, нужно изменить лишь один минус!
Теперь ищи какой единственный из 45 минусов изменён
Называется игра "найди отличие"
я нашёл, но не скажу. Главное работает!

Добавлено через 6 минут
Ну как?
На будущее: людям будешь показывать - не задавай таких огромных массивов:
(3 на 3) или (4 на 4) самое то!
К тому же, в больших массивах и случайные числа равномернее распределены, соответственно количество отрицательных элементов в обеих половинках становится примерно равным. И изменять массив практически не нужно.
НАГЛЯДНОСТЬ же теряется!
1
10 / 10 / 1
Регистрация: 02.10.2011
Сообщений: 69
26.03.2012, 21:06 7
на скрине смотри 10 столбец 9 строку
1
0 / 0 / 0
Регистрация: 21.11.2011
Сообщений: 70
26.03.2012, 21:12  [ТС] 8
Kuzia domovenok, спасибо за программу)

Dima249, спасибо, быстро нашел)
0
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
26.03.2012, 21:12
Помогаю со студенческими работами здесь

Найти число отрицательных элементов в области выше главной и ниже побочной диагонали
В квадратной матрице а (7,7) найти число отрицательных элементов в области выше главной и ниже...

Определить: сумма элементов выше главной диагонали меньше суммы элементов ниже главной диагонали?
Дана квадратная матрица натуральных чисел,( получаемая через rand()) .Определить, верно ли...

Найти количество нулевых элементов матрицы, стоящих выше и ниже побочной диагонали
Дана квадратная вещественная матрица размерности n. Найти количество нулевых элементов, стоящих...

Посчитать количество отрицательных элементов выше главной диагонали
Дана задача: Посчитать количество отрицательных элементов выше главной диагонали матрицы размером...


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

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

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