Форум программистов, компьютерный форум, киберфорум
Наши страницы
С++ для начинающих
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.75/4: Рейтинг темы: голосов - 4, средняя оценка - 4.75
vital260
0 / 0 / 0
Регистрация: 17.09.2011
Сообщений: 15
#1

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

17.09.2011, 16:02. Просмотров 718. Ответов 9
Метки нет (Все метки)

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

В четных строках матрицы заменить все отрицательные элементы на ноль
в четных строках матрицы заменить все отрицательные элементы на ноль: ...

Заменить все отрицательные элементы матрицы на ноль
Из произвольной матрицы (3х4) составить новую матрицу ,где все отрицательные...

В матрице упорядочить элементы нечетных столбцов по убыванию. Все отрицательные заменить на ноль
Пожалуйста, помогите! Нужно в матрице в нечетных столбцах упорядочить элементы...

Заменить в нечетных строках матрицы положительные элементы на 1, а в четных - отрицательные на 0
В матрице целых чисел размером 5х4 заменить в нечетных строках положительные...

Все отрицательные элементы матрицы заменить числом 1
Что делать не пойму, помогите пожалуйста. На самом начальном изучении мы, так...

9
talis
793 / 545 / 61
Регистрация: 11.05.2010
Сообщений: 1,298
Записей в блоге: 1
17.09.2011, 16:29 #2
vital260, что вы имеете виду, когда говорите о парных строках матрицы? Чётные?

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

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

или

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

?
0
vital260
0 / 0 / 0
Регистрация: 17.09.2011
Сообщений: 15
17.09.2011, 16:40  [ТС] #5
первая строка.
0
talis
793 / 545 / 61
Регистрация: 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;
}
При условии, что нумерация строк с нуля.
1
vital260
0 / 0 / 0
Регистрация: 17.09.2011
Сообщений: 15
17.09.2011, 19:36  [ТС] #7
спасибо большое.
а в какой среде была набрана програма?
0
talis
793 / 545 / 61
Регистрация: 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;
}
1
vital260
0 / 0 / 0
Регистрация: 17.09.2011
Сообщений: 15
17.09.2011, 19:59  [ТС] #9
спасибо ещё раз.
0
talis
793 / 545 / 61
Регистрация: 11.05.2010
Сообщений: 1,298
Записей в блоге: 1
17.09.2011, 20:02 #10
vital260, если вам не критично в стиле C++, то matrix из вектора можно превратить в обычный массив, либо так же одномерный, либо уже двумерный... В общем, свобода для творчества. В случае с двумерным массивом - убирайте отрицательные элементы только если счётчик строк имеет чётное значение. Или, если вы это делаете в отдельном цикле, увеличивайте его сразу на два.
1
17.09.2011, 20:02
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
17.09.2011, 20:02

Заменить все отрицательные элементы матрицы на максимальный элемент
Дана вещественная матрица h(i,j). Составить программу замены всех отрицательных...

Найти строку, содержащую наибольший элемент матрицы и заменить все отрицательные элементы этой строки числом 0
Здравтсвуйте! помогите пжл решить задачу. Найти строку, содержащую...

Все отрицательные элементы массива уменьшить в двое, а все нулевые элементы заменить на...
Задан массив М, состоящий из К строк и N столбцов. Все отрицательные элементы...


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

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

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