Форум программистов, компьютерный форум, киберфорум
Наши страницы

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
hakerok115
0 / 0 / 0
Регистрация: 08.03.2010
Сообщений: 57
#1

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

20.01.2011, 15:56. Просмотров 504. Ответов 7
Метки нет (Все метки)

Если след матрицы A[n][m] больше 50, то все эелементы матрицы увеличить на 2.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
20.01.2011, 15:56
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Если след матрицы A[n][m] больше 50, то все эелементы матрицы увеличить на 2. (C++):

Проверить, все ли столбцы матрицы упорядочены по возрастанию. Если да, то увеличить все элементы матрицы вдвое - C++
Если кто сможет напишите пожалуйста код программы Проверить, все ли столбцы матрицы упорядочены по возрастанию. Если да, то увеличить...

Сформировать одномерный массив из диагональных элементов матрицы. Найти след матрицы - C++
Для заданной квадратной матрицы сформировать одномерный массив из ее диагональных элементов. Найти след матрицы, суммируя элементы...

Увеличить все четные элементы матрицы на 16, а нечетные элементы увеличить втрое - C++
Данная матрица целых чисел размером 4x4. Увеличить все четные элементы на 16, а нечетные элементы увеличить втрое. Вывести на экран...

Определить, что все элементы строки первой матрицы больше соответствующих элементов строки второй матрицы - C++
Помогите,пожалуйста,с решением массивов в с++.надо в статическом и динамическом варианте. Даны две целочисленные квадратные матрицы...

Если последняя строка данной матрицы содержит нулевые элементы - домножить все элементы матрицы на 10 - C++
Дана действительная матрица С(n*m).Если последняя строка данной матрицы содержит нулевые элементы то домножить все элементы матрицы на 10

Все нулевые элементы матрицы увеличить на 5, ненулевые уменьшить в 2 раза - C++
В двумерном массиве (3х3) все нулевые элементы увеличить на 5 , ненулевые уменьшить в 2 раза .Пожалуйста проверьте программу и исправьте...

7
sandye51
программист С++
685 / 587 / 39
Регистрация: 19.12.2010
Сообщений: 2,016
20.01.2011, 16:09 #2
hakerok115, след только у квадратной матрицы бывает
0
VenCarbon
33 / 32 / 3
Регистрация: 14.12.2010
Сообщений: 158
20.01.2011, 16:46 #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;
   }
}
След матрицы, если верить Вики - это сумма элементов главной диагонали. Поэтому их и суммируем. Дальше действуем по условиям.
В моем представлении, как-то так...
1
hakerok115
0 / 0 / 0
Регистрация: 08.03.2010
Сообщений: 57
20.01.2011, 18:07  [ТС] #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;
   }
}
След матрицы, если верить Вики - это сумма элементов главной диагонали. Поэтому их и суммируем. Дальше действуем по условиям.
В моем представлении, как-то так...
А можно написать через другие функции.
0
ForEveR
В астрале
Эксперт С++
7983 / 4742 / 321
Регистрация: 24.06.2010
Сообщений: 10,547
Завершенные тесты: 3
20.01.2011, 18:48 #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;       
}
1
VenCarbon
33 / 32 / 3
Регистрация: 14.12.2010
Сообщений: 158
20.01.2011, 20:00 #6
Ой... про увеличить на два недосмотрела...

Решаю задачи доступными для меня способами. Не знаю других способов, кроме динамики, если не известны размеры заранее.
1
ForEveR
В астрале
Эксперт С++
7983 / 4742 / 321
Регистрация: 24.06.2010
Сообщений: 10,547
Завершенные тесты: 3
20.01.2011, 20:02 #7
VenCarbon, Ну тогда на будущее.
Есть два/три способа.
Первый - использовать массив с заранее большим размером ну 100 на 100 например, в нем использовать только тем элементы которые нужны (ПЛОХОЙ способ).
Второе - использовать контейнеры STL. Вектор, список, строка и так далее.
Третий - написать свой классы потипу вектора (динамический массив), в итоге явно распределять память не потребуется
1
VenCarbon
33 / 32 / 3
Регистрация: 14.12.2010
Сообщений: 158
20.01.2011, 20:06 #8
Хорошо, спасибо. сейчас посмотрю.
1
20.01.2011, 20:06
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
20.01.2011, 20:06
Привет! Вот еще темы с ответами:

Увеличить все элементы матрицы на значение первого элемента найденной строки - C++
Найти в матрице первую строку, все элементы которой имеют отрицательное значение. Увеличить все элементы матрицы на значение первого...

Организовать ввод квадратной матрицы, увеличить все элементы, удалить первый элемент... - C++
Помогите пожалуйста Составить программу, в которой 1) организовать ввод квадратной матрицы размера nxn из целых чисел 2) увеличить все...

Если число отрицательных элементов матрицы превышает число положительных, увеличить каждый её элемент на величину среднего арифметического её элем-ов - C++
Здравствуйте. Вот задание: Если число отрицательных элементов матрицы превышает число положительных, увеличить каждый её элемент на...

Удалить все столбцы матрицы, в которых первый элемент больше последнего - C++
Спасите помогите запуталась в задаче,не получается,хотя вроде всё понятно(( Удалить все столбцы, в которых первый элемент больше...


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

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

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