Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > C/C++: Для новичков > Увеличение матрицы m*n при условии.


Автор: Cyber27 19.3.2019, 16:41
Здравствуйте, задачка: предоставленная матрица размером m*n. Для каждой строки все элементы увеличить в два раза, если количество отрицательных элементов в строке более трех на С++
напишите пожалуйста
Огромное спасибо, заранее!

Добавлено @ 16:44
Код

    int array[M][N], Multiplay = 1;

    for (int k = 0; k < M; k++) {
        for(int j = 0; j < N-k; j++) {
                Multiplay *= array[j][k];
        }
    }

Автор: LeonidPr 20.3.2019, 13:01
сделайте функцию, которая получает на вход матрицу, номер строки и возвращает количество отрицательных элементов в этой строке
И жизнь сразу станет легче

Автор: Cyber27 20.3.2019, 19:39
LeonidPr, Спасибо, а можно на примере? smile 

Автор: LeonidPr 21.3.2019, 15:50
Код

int countNegatives(int *matrix, int rowNum) {
    int retVal = 0;

    for (int i = 0; i < N; i++) {
        if (matrix[rowNum * N + i] < 0) {
            retVal++;
        }
    }
    return retVal;
}

Автор: Cyber27 21.3.2019, 16:30
LeonidPr, так, вроде бы?
Код

#include <iostream>
#include <stdlib.h>
#include <time.h>
#include <iomanip>
 
using namespace std;
int main()
 
{
    srand(time(NULL));
    int n, m, k=0;
    cout << "Vvod kolichestvo elementov v stroke: \n";
    cin >> m;
    cout << "Vvod kolichestvo elementov v stolbze: \n";
    cin >> n;
    //создаем, инициализируем и выводим на печать матрицу
    int** a = new int*[n];
    for (int i = 0; i < n; ++i) {
        a[i] = new int[m];
        
        for (int j = 0; j < m; ++j)
        {
            if (i % 2 == 0)
                a[i][j] = (rand() % 100);
            else
                a[i][j] = ((rand() % 200) - 100);
            cout << setw(4) << a[i][j]<<endl;
            
            if (a[i][j]*m+j<0) 
            k++; 
            cout << "Otrizatelnye elementu: \n" << k; 
        }
        cout << endl;
    }
    //удаляем матрицу
    for (int i = 0; i < n; ++i)
        delete a[i];
    delete a;
    return 0;
}

Автор: LeonidPr 21.3.2019, 16:39
ну если у вас есть код, тогда зачем спрашивать так или нет так?
просто запустите его и посмотрите, делает он то, что сказано в задании или нет))

Автор: Cyber27 21.3.2019, 16:45
LeonidPr, Мне просто кажется что в консоль выводится не то, что надо по условию

Добавлено через 1 минуту и 19 секунд
И я хотел чтоб проверили все так или может я что-то не так сделал

Добавлено через 9 минут и 2 секунды
Вот что выводит:

Автор: LeonidPr 21.3.2019, 16:55
Ну вот смотрите, что вам надо вывести по условию?
И что у вас выводится сейчас?

Автор: Cyber27 21.3.2019, 16:59
Цитата(LeonidPr @  21.3.2019,  16:55 Найти цитируемый пост)
И что у вас выводится сейчас?


LeonidPr, Вот в конце точно не отрицательные числа, а какие-то абсолютно рандомные

Автор: LeonidPr 21.3.2019, 17:04
ну значит разбирайтесь в коде и переделывайте, что бы выводилось то, что надо.
Заполнение матрицы как я понял у вас уже есть.
Дальше работайте с ней

Автор: kapbepucm 22.3.2019, 17:08
Цитата(Cyber27 @  21.3.2019,  16:59 Найти цитируемый пост)
Вот в конце точно не отрицательные числа, а какие-то абсолютно рандомные
так вы их рандомом и заполняете: 24 и 26 строка

Автор: kapbepucm 22.3.2019, 17:41
немного добавил кода:
Код
#include <iostream>
#include <stdlib.h>
#include <time.h>
#include <iomanip>
 
using namespace std;
int main()
 
{
  srand(time(NULL));
  int n, m, k=0;
  cout << "Vvod kolichestva elementov v stroke: \n";
  cin >> m;
  cout << "Vvod kolichestva elementov v stolbze: \n";
  cin >> n;
  //создаем, инициализируем и выводим на печать матрицу
  int** a = new int*[n];
  cout << "matrix:" << endl;
  for (int i = 0; i < n; ++i)
  {
    a[i] = new int[m];        
    for (int j = 0; j < m; ++j)
    {
      a[i][j] = rand()%(201)-100;
      cout << a[i][j] << " ";
    }
    cout << endl;
  }

  for (int i = 0; i < n; ++i)
  {       
    for (int j = 0; j < m; ++j)
      if (a[i][j] < 0)
        ++k;
    if (k > 3)
      for (int j = 0; j < m; ++j)
        a[i][j] = a[i][j] * 2;
    k = 0;
  }

  cout << "result:" << endl;
  for (int i = 0; i < n; ++i)
  {   
    for (int j = 0; j < m; ++j)
      cout << a[i][j] << " ";
    cout << endl;
  }

  //удаляем матрицу
  for (int i = 0; i < n; ++i)
    delete a[i];
  delete a;
  return 0;
}

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)