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

В парных строках матрицы заменить все отрицательные элементы на ноль - C++

Восстановить пароль Регистрация
 
vital260
0 / 0 / 0
Регистрация: 17.09.2011
Сообщений: 15
17.09.2011, 16:02     В парных строках матрицы заменить все отрицательные элементы на ноль #1
помогите пожалуйста с задачей на С++
строки 6 столбцов 4,
b [i] [j] = (sqrt (i)-sqrt (j)) / a [i] [j]
в парных строках матрицы заменить все отрицательные элементы на ноль
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
17.09.2011, 16:02     В парных строках матрицы заменить все отрицательные элементы на ноль
Посмотрите здесь:

C++ В четных строках матрицы заменить все отрицательные элементы на ноль
C++ Найти строку, содержащую наибольший элемент матрицы и заменить все отрицательные элементы этой строки числом 0
C++ В матрице упорядочить элементы нечетных столбцов по убыванию. Все отрицательные заменить на ноль
Заменить все отрицательные элементы матрицы на ноль C++
Заменить все отрицательные элементы массива C++
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
talis
 Аватар для talis
789 / 541 / 37
Регистрация: 11.05.2010
Сообщений: 1,298
Записей в блоге: 1
17.09.2011, 16:29     В парных строках матрицы заменить все отрицательные элементы на ноль #2
vital260, что вы имеете виду, когда говорите о парных строках матрицы? Чётные?

Добавлено через 1 минуту
Или, типа, если a[i][j] < 0, тогда b[i][j] = 0?
vital260
0 / 0 / 0
Регистрация: 17.09.2011
Сообщений: 15
17.09.2011, 16:33  [ТС]     В парных строках матрицы заменить все отрицательные элементы на ноль #3
да чётные строки.
talis
 Аватар для talis
789 / 541 / 37
Регистрация: 11.05.2010
Сообщений: 1,298
Записей в блоге: 1
17.09.2011, 16:34     В парных строках матрицы заменить все отрицательные элементы на ноль #4
vital260, а при адресации первым идёт строка или столбец?

a[строка][столбец]

или

a[столбец][строка]

?
vital260
0 / 0 / 0
Регистрация: 17.09.2011
Сообщений: 15
17.09.2011, 16:40  [ТС]     В парных строках матрицы заменить все отрицательные элементы на ноль #5
первая строка.
talis
 Аватар для talis
789 / 541 / 37
Регистрация: 11.05.2010
Сообщений: 1,298
Записей в блоге: 1
17.09.2011, 17:26     В парных строках матрицы заменить все отрицательные элементы на ноль #6
Сообщение было отмечено автором темы, экспертом или модератором как ответ
Цитата Сообщение от vital260 Посмотреть сообщение
помогите пожалуйста с задачей на С++
Если на C++, то так:

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
#include <iostream>
#include <iomanip>
#include <algorithm>
#include <vector>
 
using namespace std;
 
int main()
{
    vector<int> matrix;
 
    int rows, columns;
 
    #define addr( row_n, col_n ) ( (row_n * columns) + col_n )
 
    cout << "Enter matrix rows and columns count:\n";
    cin >> rows >> columns;
 
    cout << "Creating " << rows << "x" << columns << " matrix...\n";
 
    matrix.resize( rows * columns );
 
    for( int r = 0; r < rows; r++ )
    {
        for( int c = 0; c < columns; c++ )
        {
            cout << '[' << r << ", " << c << "] > ";
            cin >> matrix[ addr(r, c) ];
        }
 
        cout << "\n";
    }
 
    // вывод начальной матрицы -----------------------------------------------
    cout << "Original matrix:\n";
 
    int i = 0;
    for_each( matrix.begin(), matrix.end(),
             [&](int a)
             {
                 cout << setw(7) << a << ' ';
                 i++;
 
                 if( i == rows )
                 {
                    cout << '\n';
                    i = 0;
                 }
             }
             );
 
    // присваивание 0 каждому отрицательному элементу каждой чётной строки ---
    i = 0;
    for_each( matrix.begin(), matrix.end(),
             [&](int &a)
             {
                 if( i >= 0 && a < 0 )
                     a = 0;
 
                 i++;
 
                 if( i == rows )
                 {
                    cout << '\n';
                    i = -rows;
                 }
             }
             );
 
    // вывод конечной матрицы ------------------------------------------------
    cout << "Resulting matrix:\n";
 
    i = 0;
    for_each( matrix.begin(), matrix.end(),
             [&](int a)
             {
                 cout << setw(7) << a << ' ';
                 i++;
 
                 if( i == rows )
                 {
                    cout << '\n';
                    i = 0;
                 }
             }
             );
 
    return 0;
}
Добавлено через 3 минуты
Используются лямбда-выражения, нужен компилятор с поддержкой C++0x

Добавлено через 14 минут
Проверял на квадратных матрицах. С прямоугольными - ошибка, вот исправленный вариант:

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
#include <iostream>
#include <iomanip>
#include <algorithm>
#include <vector>
 
using namespace std;
 
int main()
{
    vector<int> matrix;
 
    int rows, columns;
 
    #define addr( row_n, col_n ) ( (row_n * columns) + col_n )
 
    cout << "Enter matrix rows and columns count:\n";
    cin >> rows >> columns;
 
    cout << "Creating " << rows << "x" << columns << " matrix...\n";
 
    matrix.resize( rows * columns );
 
    for( int r = 0; r < rows; r++ )
    {
        for( int c = 0; c < columns; c++ )
        {
            cout << '[' << r << ", " << c << "] > ";
            cin >> matrix[ addr(r, c) ];
        }
 
        cout << "\n";
    }
 
    // вывод начальной матрицы -----------------------------------------------
    cout << "Original matrix:\n";
 
    int i = 0;
    for_each( matrix.begin(), matrix.end(),
             [&](int a)
             {
                 cout << setw(7) << a << ' ';
                 i++;
 
                 if( i == columns )
                 {
                    cout << '\n';
                    i = 0;
                 }
             }
             );
 
    // присваивание 0 каждому отрицательному элементу каждой чётной строки ----
    i = 0;
    for_each( matrix.begin(), matrix.end(),
             [&](int &a)
             {
                 if( i >= 0 && a < 0 )
                     a = 0;
 
                 i++;
 
                 if( i == columns )
                    i = -columns;
             }
             );
 
    // вывод конечной матрицы -----------------------------------------------
    cout << "Resulting matrix:\n";
 
    i = 0;
    for_each( matrix.begin(), matrix.end(),
             [&](int a)
             {
                 cout << setw(7) << a << ' ';
 
                 i++;
 
                 if( i == columns )
                 {
                    cout << '\n';
                    i = 0;
                 }
             }
             );
 
    return 0;
}
При условии, что нумерация строк с нуля.
vital260
0 / 0 / 0
Регистрация: 17.09.2011
Сообщений: 15
17.09.2011, 19:36  [ТС]     В парных строках матрицы заменить все отрицательные элементы на ноль #7
спасибо большое.
а в какой среде была набрана програма?
talis
 Аватар для talis
789 / 541 / 37
Регистрация: 11.05.2010
Сообщений: 1,298
Записей в блоге: 1
17.09.2011, 19:46     В парных строках матрицы заменить все отрицательные элементы на ноль #8
Сообщение было отмечено автором темы, экспертом или модератором как ответ
vital260, Code::Blocks 10.05 с обновлённым mingw, чтобы получить gcc 4.5 с поддержкой C++0x. Сейчас попробую проще сделать, чтобы без алгоритмов и лямбд

Добавлено через 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
#include <iostream>
#include <iomanip>
#include <vector>
 
using namespace std;
 
int main()
{
    vector<int> matrix;
 
    int rows, columns;
 
    #define addr( row_n, col_n ) ( (row_n * columns) + col_n )
 
    cout << "Enter matrix rows and columns count:\n";
    cin >> rows >> columns;
 
    cout << "Creating " << rows << "x" << columns << " matrix...\n";
 
    matrix.resize( rows * columns );
 
    for( int r = 0; r < rows; r++ )
    {
        for( int c = 0; c < columns; c++ )
        {
            cout << '[' << r << ", " << c << "] > ";
            cin >> matrix[ addr(r, c) ];
        }
 
        cout << "\n";
    }
 
    // вывод начальной матрицы -----------------------------------------------
    cout << "Original matrix:\n";
 
    int i = 0;
    for( vector<int>::iterator it = matrix.begin(); it != matrix.end(); it++ )
    {
         cout << setw(7) << *it << ' ';
         i++;
 
         if( i == columns )
         {
            cout << '\n';
            i = 0;
         }
     }
 
    // присваивание 0 каждому отрицательному элементу каждой чётной строки ----
    i = 0;
    for( vector<int>::iterator it = matrix.begin(); it != matrix.end(); it++ )
    {
        if( i >= 0 && *it < 0 )
         *it = 0;
 
        i++;
 
        if( i == columns )
            i = -columns;
    }
 
    // вывод конечной матрицы -----------------------------------------------
    cout << "Resulting matrix:\n";
 
    i = 0;
    for( vector<int>::iterator it = matrix.begin(); it != matrix.end(); it++ )
    {
        cout << setw(7) << *it << ' ';
 
        i++;
 
        if( i == columns )
        {
            cout << '\n';
            i = 0;
        }
    }
 
    return 0;
}
vital260
0 / 0 / 0
Регистрация: 17.09.2011
Сообщений: 15
17.09.2011, 19:59  [ТС]     В парных строках матрицы заменить все отрицательные элементы на ноль #9
спасибо ещё раз.
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
17.09.2011, 20:02     В парных строках матрицы заменить все отрицательные элементы на ноль
Еще ссылки по теме:

Отрицательные элементы массива заменить на их абсолютную величину и все нечётные элементы на корень C++
C++ В массиве заменить все отрицательные элементы на минимальный элемент, а все положительные – на максимальный
C++ В одномерном массиве все отрицательные элементы заменить нулями и упорядочить элементы массива по убыванию

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

Или воспользуйтесь поиском по форуму:
talis
 Аватар для talis
789 / 541 / 37
Регистрация: 11.05.2010
Сообщений: 1,298
Записей в блоге: 1
17.09.2011, 20:02     В парных строках матрицы заменить все отрицательные элементы на ноль #10
vital260, если вам не критично в стиле C++, то matrix из вектора можно превратить в обычный массив, либо так же одномерный, либо уже двумерный... В общем, свобода для творчества. В случае с двумерным массивом - убирайте отрицательные элементы только если счётчик строк имеет чётное значение. Или, если вы это делаете в отдельном цикле, увеличивайте его сразу на два.
Yandex
Объявления
17.09.2011, 20:02     В парных строках матрицы заменить все отрицательные элементы на ноль
Ответ Создать тему
Опции темы

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