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

Если след матрицы A[n][m] больше 50, то все эелементы матрицы увеличить на 2. - C++

Восстановить пароль Регистрация
 
hakerok115
 Аватар для hakerok115
0 / 0 / 0
Регистрация: 08.03.2010
Сообщений: 57
20.01.2011, 15:56     Если след матрицы A[n][m] больше 50, то все эелементы матрицы увеличить на 2. #1
Если след матрицы A[n][m] больше 50, то все эелементы матрицы увеличить на 2.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
20.01.2011, 15:56     Если след матрицы A[n][m] больше 50, то все эелементы матрицы увеличить на 2.
Посмотрите здесь:

Проверить, все ли столбцы матрицы упорядочены по возрастанию. Если да, то увеличить все элементы матрицы вдвое C++
C++ Удалить все столбцы матрицы, в которых первый элемент больше последнего
Организовать ввод квадратной матрицы, увеличить все элементы, удалить первый элемент... C++
C++ Если число отрицательных элементов матрицы превышает число положительных, увеличить каждый её элемент на величину среднего арифметического её элем-ов
Определить, что все элементы строки первой матрицы больше соответствующих элементов строки второй матрицы C++
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
sandye51
программист С++
 Аватар для sandye51
677 / 579 / 39
Регистрация: 19.12.2010
Сообщений: 2,016
20.01.2011, 16:09     Если след матрицы A[n][m] больше 50, то все эелементы матрицы увеличить на 2. #2
hakerok115, след только у квадратной матрицы бывает
VenCarbon
32 / 31 / 3
Регистрация: 14.12.2010
Сообщений: 158
20.01.2011, 16:46     Если след матрицы A[n][m] больше 50, то все эелементы матрицы увеличить на 2. #3
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
#include <iostream>;
#include <conio.h>;
using namespace std;
 
void main()
{
   int n, m;
   cin >> n, m;
   int **a = new int*[n]; //creates dynamic two-dimensional array
   for (int i = 0; i < n; i++) { 
      a[i] = new int[m];
   }
   for (int i = 0; i < n; i++) {
      for (int j = o; j < m; j++) {
         a[i][j] = rand() % 100 + 1; // initializes the matrix with random numerals
      }
   }
   int sum = 0;
   int min;
   (m >n) ? (min = n) : (min = m);
   for (int i = 0; i < min; i++) {
      sum += a[i][i]; // totalizes main diagonal elements
   }
   if (sum <= 50) {
      for (int i = 0; i < n; i++) {
         for (int j = o; j < m; j++) {
            a[i][j] *= 2;
         }
      }
   }
   for (int i = 0; i < n; i++) {
      for (int j = o; j < m; j++) {
         cout << a[i][j] << ' ';
      }
      cout << endl;
   }
}
След матрицы, если верить Вики - это сумма элементов главной диагонали. Поэтому их и суммируем. Дальше действуем по условиям.
В моем представлении, как-то так...
hakerok115
 Аватар для hakerok115
0 / 0 / 0
Регистрация: 08.03.2010
Сообщений: 57
20.01.2011, 18:07  [ТС]     Если след матрицы A[n][m] больше 50, то все эелементы матрицы увеличить на 2. #4
Цитата Сообщение от VenCarbon Посмотреть сообщение
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
#include <iostream>;
#include <conio.h>;
using namespace std;
 
void main()
{
   int n, m;
   cin >> n, m;
   int **a = new int*[n]; //creates dynamic two-dimensional array
   for (int i = 0; i < n; i++) { 
      a[i] = new int[m];
   }
   for (int i = 0; i < n; i++) {
      for (int j = o; j < m; j++) {
         a[i][j] = rand() % 100 + 1; // initializes the matrix with random numerals
      }
   }
   int sum = 0;
   int min;
   (m >n) ? (min = n) : (min = m);
   for (int i = 0; i < min; i++) {
      sum += a[i][i]; // totalizes main diagonal elements
   }
   if (sum <= 50) {
      for (int i = 0; i < n; i++) {
         for (int j = o; j < m; j++) {
            a[i][j] *= 2;
         }
      }
   }
   for (int i = 0; i < n; i++) {
      for (int j = o; j < m; j++) {
         cout << a[i][j] << ' ';
      }
      cout << endl;
   }
}
След матрицы, если верить Вики - это сумма элементов главной диагонали. Поэтому их и суммируем. Дальше действуем по условиям.
В моем представлении, как-то так...
А можно написать через другие функции.
ForEveR
Модератор
Эксперт C++
 Аватар для ForEveR
7927 / 4709 / 318
Регистрация: 24.06.2010
Сообщений: 10,524
Завершенные тесты: 3
20.01.2011, 18:48     Если след матрицы A[n][m] больше 50, то все эелементы матрицы увеличить на 2. #5
hakerok115, Что значит через другие функции? Разбить на функции программу или не использовать рандома + динамического распределения памяти? Конкретнее плз

Добавлено через 58 секунд
VenCarbon, Кстати. Увеличить на два, обычно не значит умножить на два...

Добавлено через 16 минут
С "другими" функциями

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
#include <iostream>
#include <iterator>
#include <algorithm>
#include <vector>
#include <ctime>
#include <cstdlib>
#include <iomanip>
 
int main()
{
    srand(static_cast<unsigned>(time(0)));
    int n, m;
    std::cin>>n;
    m=n;
    std::vector<std::vector<int> > vec;
    vec.resize(n);
    std::for_each(vec.begin(), vec.end(), [m](std::vector<int>& one) {one.resize(m);});
    std::for_each(vec.begin(), vec.end(), [m](std::vector<int>& one)
    {
         std::generate_n(one.begin(), m, [](){return rand()%20;});
    });
    std::for_each(vec.begin(), vec.end(), [](const std::vector<int>& vc)
    { 
        std::for_each(vc.begin(), vc.end(), [](int t) {std::cout<<std::setw(4)<<t;});
        std::cout<<'\n';
    });
    int trace=0;
    for(size_t i=0; i<vec.size(); ++i)
        trace+=vec[i][i];
    if(trace >= 50)
    {
        std::for_each(vec.begin(), vec.end(), [](std::vector<int>& vc)
        {
            std::transform(vc.begin(), vc.end(), vc.begin(), [](int f) {return f+2;});
        });
    }
    std::for_each(vec.begin(), vec.end(), [](const std::vector<int>& vc)
    { 
        std::for_each(vc.begin(), vc.end(), [](int t) {std::cout<<std::setw(4)<<t;});
        std::cout<<'\n';
    });
    system("pause");
    return 0;       
}
Добавлено через 17 минут
Или так. Покороче.

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
#include <iostream>
#include <iterator>
#include <algorithm>
#include <vector>
#include <ctime>
#include <cstdlib>
#include <iomanip>
#include <functional>
 
int main()
{
    srand(static_cast<unsigned>(time(0)));
    int n, m;
    std::cin>>n;
    m=n;
    std::vector<std::vector<int> > vec;
    vec.resize(n);
    std::for_each(vec.begin(), vec.end(), [m](std::vector<int>& one) {one.resize(m);});
    std::for_each(vec.begin(), vec.end(), [m](std::vector<int>& one)
    {
         std::generate_n(one.begin(), m, [](){return rand()%20;});
    });
    auto print=[](const std::vector<int> & vc)
    {
        std::for_each(vc.begin(), vc.end(), [](int t) {std::cout<<std::setw(4)<<t;});
        std::cout<<'\n';
    };
    std::for_each(vec.begin(), vec.end(), print);
    int trace=0;
    for(size_t i=0; i<vec.size(); ++i)
        trace+=vec[i][i];
    if(trace >= 50)
    {
        std::for_each(vec.begin(), vec.end(), [](std::vector<int>& vc)
        {
            std::transform(vc.begin(), vc.end(), vc.begin(), [](int f) {return f+2;});
        });
    }
    std::for_each(vec.begin(), vec.end(), print);
    system("pause");
    return 0;       
}
VenCarbon
32 / 31 / 3
Регистрация: 14.12.2010
Сообщений: 158
20.01.2011, 20:00     Если след матрицы A[n][m] больше 50, то все эелементы матрицы увеличить на 2. #6
Ой... про увеличить на два недосмотрела...

Решаю задачи доступными для меня способами. Не знаю других способов, кроме динамики, если не известны размеры заранее.
ForEveR
Модератор
Эксперт C++
 Аватар для ForEveR
7927 / 4709 / 318
Регистрация: 24.06.2010
Сообщений: 10,524
Завершенные тесты: 3
20.01.2011, 20:02     Если след матрицы A[n][m] больше 50, то все эелементы матрицы увеличить на 2. #7
VenCarbon, Ну тогда на будущее.
Есть два/три способа.
Первый - использовать массив с заранее большим размером ну 100 на 100 например, в нем использовать только тем элементы которые нужны (ПЛОХОЙ способ).
Второе - использовать контейнеры STL. Вектор, список, строка и так далее.
Третий - написать свой классы потипу вектора (динамический массив), в итоге явно распределять память не потребуется
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
20.01.2011, 20:06     Если след матрицы A[n][m] больше 50, то все эелементы матрицы увеличить на 2.
Еще ссылки по теме:

C++ Все нулевые элементы матрицы увеличить на 5, ненулевые уменьшить в 2 раза
Увеличить все четные элементы матрицы на 16, а нечетные элементы увеличить втрое C++

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

Или воспользуйтесь поиском по форуму:
VenCarbon
32 / 31 / 3
Регистрация: 14.12.2010
Сообщений: 158
20.01.2011, 20:06     Если след матрицы A[n][m] больше 50, то все эелементы матрицы увеличить на 2. #8
Хорошо, спасибо. сейчас посмотрю.
Yandex
Объявления
20.01.2011, 20:06     Если след матрицы A[n][m] больше 50, то все эелементы матрицы увеличить на 2.
Ответ Создать тему
Опции темы

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