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

Обнуление четных эл-тов столбцов, где на побочной диагонали - отрицательный элемент

20.03.2019, 21:50. Показов 1815. Ответов 10

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
void Obn(int **A, int N)
{
    int i = 0, k;
    for (int j=N;j>0;j--)
    {
        if (A[i][j]<0)
        {
            for (k=0;k<N;k++)
            {
                if (A[i][k]%2==0)
                {
                    A[i][k]=0;
                }
            }
        }
    }
    for (int i=0;i<N;i++)
    {
        for (int j=0;j<N;j++)
        {
            cout<<A[i][j]<<"\t";
        }
        cout<<endl;
    }
}
Блин, не знаю как тут фото прикрепить. Подскажите - прикреплю еще фото, если тут конечно можно так.
0
Лучшие ответы (1)
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
20.03.2019, 21:50
Ответы с готовыми решениями:

Найти наименьший отрицательный элемент выше побочной диагонали и наименьший положительный элемент ниже побочной диагонали
3)Дан двухмерный массив.Найти наименьший отрицательный элемент выше побочной диагонали и наименьший...

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

Заменить каждый отрицательный элемент матрицы на произведение элементов побочной диагонали
Заменить каждый отрицательны элемент массива В(m,m) на произведение элементов Боковой диагонали.

Удалить строку матрицы, в которой на побочной диагонали находится первый отрицательный элемент (D7)
нужно чтобы удаляло строку матрицы, у которой на побочной диагонали находится первый отрицательный...

10
7437 / 5029 / 2892
Регистрация: 18.12.2017
Сообщений: 15,692
21.03.2019, 00:24 2
Цитата Сообщение от Kazuki11 Посмотреть сообщение
не знаю как тут фото прикрепить
значок скрепка в редакторе сообщений. к этой задаче фото не нужно. начинайте вопрос с формулировки условия задачи.
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
#include <iostream>
#include <iomanip>
#include <cstdlib>
#include <ctime>
using namespace std;
 
int main()
{
    srand((int)time(0));
    int n;
    cout << "n="; cin >> n;    
    
      int **a = new int*[n]; 
    for (int i = 0; i < n; i++)
      a[i]=new int[n];
    
    for (int i = 0; i < n; i++)
    {
    for (int j = 0; j < n; j++)
    {
    a[i][j]=rand()%19 - 9;
    cout << setw(3)<< a[i][j] << " ";
    }
    cout << "\n";
    }
    cout << "\n";     
    
    for (int j = 0; j < n; j++)    
        if (a[n-1-j][j]<0)
        for (int i = 0; i < n; i++)        
            if (a[i][j]%2==0) a[i][j]=0;  
            
    for (int i = 0; i < n; i++)
    {
    for (int j = 0; j < n; j++) 
    cout << setw(3)<< a[i][j] << " ";   
    cout << "\n";
    }
    
    for (int i = 0; i < n; i++)
    delete [] a[i];
    delete [] a;
 
system("pause");
return 0;
}
0
0 / 0 / 0
Регистрация: 18.12.2018
Сообщений: 27
21.03.2019, 12:31  [ТС] 3
Появился вопрос. Немного не уловил суть задания. То есть вот оно полностью: Считать из файла N – размерность квадратной матрицы А и элементы самой матрицы. Поменять ее строки местами таким образом, чтобы элементы 1-го столбца были отсортированы по убыванию. После чего обнулить четные элементы тех столбцов, где на побочной диагонали - отрицательный элемент.
Про побочную диагональ не понял. Конкретно на самой диагонали или эти эл-ты могут быть и выше побочной диагонали? Просто после исправления с вашей помощю, получилось так, что он обнулил еще и эл-т под диагональю и он не отрицательный. Может я туплю конечно, но лучше спросить у знающих.
Миниатюры
Обнуление четных эл-тов столбцов, где на побочной диагонали - отрицательный элемент  
0
7437 / 5029 / 2892
Регистрация: 18.12.2017
Сообщений: 15,692
21.03.2019, 12:39 4
Kazuki11, код который Вам предложил под задачу, которую Вы поставили изначально
Цитата Сообщение от Kazuki11 Посмотреть сообщение
Обнуление четных эл-тов столбцов, где на побочной диагонали - отрицательный элемент
Цитата Сообщение от Kazuki11 Посмотреть сообщение
Про побочную диагональ не понял. Конкретно на самой диагонали или эти эл-ты могут быть и выше побочной диагонали? Просто после исправления на ваш код, получилось так, что он обнулил еще и эл-т под диагональю и он не отрицательный.
мне непонятно, что Вам непонятно. смотрим побочную диагональ. если на ней есть отрицательный элемент, обнуляем чётные элементы (чётные по значению, например -2, 6, 8 и т.д.) соответствующего столбца.
0
0 / 0 / 0
Регистрация: 18.12.2018
Сообщений: 27
22.03.2019, 00:48  [ТС] 5
Да, но на скриншоте обнулилось число 94. Оно не на побочной диагонали, оно не отрицательное. Вот я и не пойму в чем ошибка. Может где в коде накосячил.
0
7437 / 5029 / 2892
Регистрация: 18.12.2017
Сообщений: 15,692
22.03.2019, 09:06 6
Цитата Сообщение от Kazuki11 Посмотреть сообщение
обнулилось число 94
Kazuki11, читайте внимательнее:
Цитата Сообщение от Yetty Посмотреть сообщение
смотрим побочную диагональ. если на ней есть отрицательный элемент, обнуляем чётные элементы (чётные по значению, например -2, 6, 8 и т.д.) соответствующего столбца.
Вы просили обнулить не отрицательные элементы столбцов, а чётные. на скрине отрицательные элементы побочной диагонали: -20 (первый столбец, соответственно в первом столбце обнулились чётные числа: -4 и -20) и -22 (четвёртый столбец, соответственно в четвёртом столбце обнулились чётные числа -22 и 94)

Добавлено через 4 минуты
А вот строки у Вас меняются неправильно (первая и вторая матрица) - но Вы насчёт этой части задания не обращались
0
0 / 0 / 0
Регистрация: 18.12.2018
Сообщений: 27
22.03.2019, 15:37  [ТС] 7
А, понял. Я конечно уже надоел с расспросами и прошу прощения. Но почему не правильная сортировка? Все же идёт по убыванию. От большего к меньшему.
0
7437 / 5029 / 2892
Регистрация: 18.12.2017
Сообщений: 15,692
22.03.2019, 17:39 8
Цитата Сообщение от Kazuki11 Посмотреть сообщение
А, понял.
уже легче
Цитата Сообщение от Kazuki11 Посмотреть сообщение
почему не правильная сортировка? Все же идёт по убыванию. От большего к меньшему.
по убыванию идут только элементы первого столбца, а нужно чтобы строки переставлялись, т.е. не только первый элемент строки, а вся строка
0
0 / 0 / 0
Регистрация: 18.12.2018
Сообщений: 27
22.03.2019, 17:48  [ТС] 9
То есть нужно, чтобы ещё и вся строка переставлялась? Ох, и как тогда это исправить? Вот часть моего кода
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
void Change(int **A, int N)
{
    int i = 0, k;
    for (int j = 0; j < N - 1; j++)
    {
        for (int i = 0; i < N - 1; i++)
        {
            if (A[i][0] < A[i + 1][0])
            {
                k = A[i][0];
                A[i][0] = A[i + 1][0];
                A[i + 1][0] = k;
            }
        }
    }
    for (int i = 0; i < N; i++)
    {
        for (int j = 0; j < N; j++)
        {
            cout << A[i][j] << "\t";
        }
        cout << endl;
    }
    cout << endl;
}
0
7437 / 5029 / 2892
Регистрация: 18.12.2017
Сообщений: 15,692
22.03.2019, 21:31 10
Лучший ответ Сообщение было отмечено Kazuki11 как решение

Решение

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
#include <iostream>
#include <cstdlib>
#include <ctime>
using namespace std;
 
void Set(int **a, int n)
{
    for (int i = 0; i < n; i++)    
        for (int j = 0; j < n; j++)        
        a[i][j]=rand()%9 + 1;       
}
 
void SortRows(int **a, int n)
{
    for (int i = 1; i < n; i++)    
        for (int k = 0; k < n-i; k++)        
            if (a[k][0]<a[k+1][0])                 
                swap(a[k],a[k+1]);
}
 
void Print(int **a, int n)
{
    for (int i = 0; i < n; i++)
    {
        for (int j = 0; j < n; j++)                
        cout << a[i][j] << " ";                          
        cout << "\n";
    }
    cout << "\n";
}    
 
int main()
{
    srand((int)time(0));
    int n;
    cout << "n="; cin >> n;    
    
        int **a = new int*[n];
      for (int i = 0; i < n; i++)
          a[i]=new int[n];    
      
    Set(a,n);
    Print(a,n);
    SortRows(a,n);
    Print(a,n);   
    
    for (int i = 0; i < n; i++)
    delete [] a[i];
    delete [] a;
    
system("pause");
return 0;
}
Вам осталось объединить коды и организовать ввод данных с файла.
1
0 / 0 / 0
Регистрация: 18.12.2018
Сообщений: 27
22.03.2019, 21:39  [ТС] 11
Спасибо огромное.
0
22.03.2019, 21:39
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
22.03.2019, 21:39
Помогаю со студенческими работами здесь

Двухмерные массивы: Найти наибольший элемент выше побочной диагонали и наименьший элемент ниже побочной диагонали
Помогите пожалуйста доделать программу осталось только вот это задача!!!!!!! Дан двухмерный...

Поменять местами максимальный элемент главной диагонали матрицы и минимальный элемент побочной. Где ошибки?
Здравствуйте,скажите в чём причина? И где ошибки? int i; min = matrix.get(0).get(size-1);...

Добавить число к элементам тех столбцов матрицы, где первый элемент отрицательный
читаем данные из файла..находим среднее арифметическое элементов...затем это среднее арифметическое...

Создать матрицу, где элементы побочной диагонали равны суммам элементов столбцов исходной матрицы
Ввести квадратную матрицу D(k,k), Построить матрицу D1(k,k), у которой элементы побочной диагонали...


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

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

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