Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > IT форум > Помощь студентам
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 21.03.2019, 17:11   #21
Cyber321
Новичок
Джуниор
 
Регистрация: 17.09.2018
Сообщений: 49
По умолчанию

Цитата:
Сообщение от Cuprum5 Посмотреть сообщение
Какой компилятор у Вас? Скажите, пожалуйста.
CodeBlocks
Cyber321 вне форума Ответить с цитированием
Старый 21.03.2019, 17:14   #22
Cyber321
Новичок
Джуниор
 
Регистрация: 17.09.2018
Сообщений: 49
По умолчанию

Вот у меня тут что-то прорисовывается, но надо чтоб выводило отрицательные числа, а выводит совсем не то.
Код:
#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 (k > 3)
                a[i][j] = (rand() % 100);
            else
                a[i][j] = ((rand() % 200) - 100);
              a[i][j] *= 2;
            cout << setw(4) << a[i][j]<<endl;
            {
          for (int j = 0; j<m; j++) 
            if (a[i][j]<0) 
            k++; 
       }
            cout << "\nOtrizatelnye elementu: \n" << k; 
        }
        cout << endl;
    }
    //удаляем матрицу
    for (int i = 0; i < n; ++i)
        delete a[i];
    delete a;
    return 0;
}

Последний раз редактировалось Cyber321; 21.03.2019 в 17:30.
Cyber321 вне форума Ответить с цитированием
Старый 21.03.2019, 17:21   #23
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,238
По умолчанию

Цитата:
Сообщение от Cyber321 Посмотреть сообщение
Вот у меня тут что-то прорисовывается, но надо чтоб выводило отрицательные числа, а выводит совсем не то.
а где у Вас вывод отрицательных чисел?!

или Вы про это "чудо":
Цитата:
Сообщение от Cyber321 Посмотреть сообщение
Код:
if (a[i][j]*m+j<0)
Вы зачем значение массива умножаете на m и к нему номер столбца добавляете?!!!


А если Вы про исходную задачу
Цитата:
Сообщение от Cyber321 Посмотреть сообщение
Предоставленная матрица размером m*n. Для каждой строки все элементы увеличить в два раза, если количество отрицательных элементов в строке более трех.
то там надо не так делать.
нужно для каждой строки в цикле обнулить счётчик отрицательных.
пройтись в цикле по строке (цикл по j) увеличивая счётчик для каждого a[i][j]<0
потом проанализировать счётчик и, если k>3, в цикле (цикл по j) умножить все элементы строки на 2
Serge_Bliznykov вне форума Ответить с цитированием
Старый 21.03.2019, 17:28   #24
Cyber321
Новичок
Джуниор
 
Регистрация: 17.09.2018
Сообщений: 49
По умолчанию

Цитата:
Сообщение от Serge_Bliznykov Посмотреть сообщение
или Вы про это "чудо":
Цитата:
Сообщение от Cyber321
Код:

if (a[i][j]*m+j<0)
Такое я нашел и по аналогии попытался сделать
Код:
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;
}
Cyber321 вне форума Ответить с цитированием
Старый 21.03.2019, 17:45   #25
Cyber321
Новичок
Джуниор
 
Регистрация: 17.09.2018
Сообщений: 49
По умолчанию

Воот, можете кто-то проверить пожалуйста?
Код:
#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 (a[i][j]<0)
             k++;
                a[i][j] = ((rand() % 200) - 100);
            cout << setw(4) << a[i][j];
            {
                cout << "\n";
        if(k > 3)
          for (int j = 0; j<m; j++)
          a[i][j] *= 2;
       }
            cout << "\nOtrizatelnye elementu: \n" << k;
        }
        cout << endl;
    }
    for (int i = 0; i < n; ++i)
        delete a[i];
    delete a;
    return 0;
}
Cyber321 вне форума Ответить с цитированием
Старый 21.03.2019, 18:03   #26
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,238
По умолчанию

Цитата:
Сообщение от Cyber321 Посмотреть сообщение
Воот, можете кто-то проверить пожалуйста?
ерунду написали.

много ошибок. и, прежде всего, нельзя проверять содержимое ячейки ДО того, как Вы эту ячейку заполнили
Serge_Bliznykov вне форума Ответить с цитированием
Старый 21.03.2019, 18:05   #27
p51x
Старожил
 
Регистрация: 15.02.2010
Сообщений: 15,695
По умолчанию

Ну вы хоть код читайте и алгоритм в голове по шагам крутите...

Код:
          if (a[i][j]<0)
             k++;
Какой в этом смысл если вы еще элемент не заполнили?

Код:
            {
                cout << "\n";
Зачем вы этот блок выделяете?

Код:
        if(k > 3)
          for (int j = 0; j<m; j++)
          a[i][j] *= 2;
       }
Бесполезно, строка еще недозаполнена.

Где обнуление k для каждой строки?

Код:
delete a[i];
Это хорошо. А где удаление а?
p51x вне форума Ответить с цитированием
Старый 21.03.2019, 18:08   #28
Cyber321
Новичок
Джуниор
 
Регистрация: 17.09.2018
Сообщений: 49
По умолчанию

Цитата:
Сообщение от Cyber321 Посмотреть сообщение
delete a;
А это не удаление а?
Cyber321 вне форума Ответить с цитированием
Старый 21.03.2019, 18:08   #29
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,238
По умолчанию

не знаю. меня, наверное, по голове надо настучать, но не могу уже смотреть на то, что твориться в теме!!!


попробуйте разобрать код
Код:
    // заполнение массива случайными значениями
    int** a = new int*[n];	
    for (int i = 0; i < n; i++) {
        a[i] = new int[m];
        for (int j = 0; j < m; j++)
        {
            a[i][j] = ((rand() % 200) - 100);
            cout << setw(4) << a[i][j];
	}
        cout << endl;
    }


    // обработка массива
    for (int i = 0; i < n; i++) {
	k=0;
        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] *= 2;
	}
	cout <<" V stroke "<< i << "\nOtrizatelnye elementu: \n" << k;
    }

    //вывод финального результата
    for (int i = 0; i < n; i++) {
        for (int j = 0; j < m; j++)
            cout << setw(4) << a[i][j];
        cout << endl;
    }
Serge_Bliznykov вне форума Ответить с цитированием
Старый 21.03.2019, 19:03   #30
Cyber321
Новичок
Джуниор
 
Регистрация: 17.09.2018
Сообщений: 49
По умолчанию

Спасибо огромное всем, я наконец-то допёр)
Cyber321 вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
задача с матрицОй ) Ponch_Begginer Помощь студентам 8 08.11.2015 16:42
Работа с матрицой vampir3001 Помощь студентам 1 19.12.2011 20:01
Работа с матрицой (Си) Roll1n Общие вопросы C/C++ 1 20.04.2010 21:28
Задача с матрицой maziLa Помощь студентам 1 09.02.2009 01:54