0 / 0 / 2
Регистрация: 14.12.2015
Сообщений: 33
1

Не удается организовать проверку на наличие положительных чисел

14.12.2015, 23:01. Показов 1265. Ответов 15
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Добрый вечер.

Не получается корректно выполнить поставленную задачу.


"Посчитать произведение отрицательных элементов в тех колонках массива, в которых есть хотя бы один положительный элемент."


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
#include<iostream>
#include<ctime>
#include <iostream>
using namespace std;
 
int main() {
    setlocale(LC_ALL, "Russian");
    char a;
    cout << "Выберите метод заполнения Массива:" << endl << "Для авто заполнения нажмите 'y'. Для ручного заполнения нажмите 'n': ";
    cin >> a; 
 
    if (a == 'y') {  // Авто заполнение
        srand(unsigned(time(NULL)));
        int N, M, s = 0;
        cout << "Введите размер матрицы: " << endl;
        cout << "Введите размер столбца: ";
        cin >> N;
        cout << "Введите размер строки: ";
        cin >> M;
        int ** massiv = new int *[N];
        for (int i = 0; i < N; i++)
            massiv[i] = new int[M];
 
        int a1 = 0, a2 = -1;  // Введение интервала доступных чисел
        cout << "Введите интервал доступных чисел [A,B]" << endl;
        cout << "Число 'А' в интервале: ";
        cin >> a1;
        cout << "Число 'B' в интервале: ";
        cin >> a2;
 
        for (int i = 0; i < N; i++)
            for (int j = 0; j < M; j++)
                massiv[i][j] = a1 + rand() % (a2 - a1 + 1);
 
 
        cout << "Готовая Матрица:" << endl << endl;
        for (int i = 0; i < N; i++)
        {
            for (int j = 0; j < M; j++)
                cout << massiv[i][j] << " ";
            cout << endl;
            // сдесь должна быть проверка на наличие положительных чисел
 
 
                    for (int p = 0;p < N;p++) // Подчет отрицательных чисел
                        if (massiv[i][p] < 0)
                            s += massiv[i][p];
            }
 
 
            
 
 
        
cout << s ;
        cout << endl;
        for (int i = 0; i < N; i++)
            delete[] massiv[i];
        delete[] massiv;
        }

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

Добавлено через 58 минут
up!

Добавлено через 1 час 6 минут
up!

Добавлено через 1 час 41 минуту
up!
0
Лучшие ответы (1)
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
14.12.2015, 23:01
Ответы с готовыми решениями:

Проверка чисел на простоту и проверку на наличие общих цифр в записи
Помогите написать программу: Для каждого (n) из некоторого количества натуральных чисел указать...

Организовать проверку на наличие уже существующей записи в таблице по "поле1", "поле2" вводимым из формы
Всем привет! Подскажите! Как организовать проверку на наличие уже существующей записи в таблице по...

Организовать проверку данных на ввод чисел в массив, которые не больше 5
Всем привет. Есть такой код #include &lt;stdio.h&gt; #include &lt;stdlib.h&gt; #include &lt;windows.h&gt;...

Организовать проверку ввода чисел так,чтобы ни одно из них не равнялось 0.
С клавиатуры вводятся три числа.Организовать проверку ввода этих чисел так,чтобы ни одно из них не...

15
2021 / 1620 / 489
Регистрация: 31.05.2009
Сообщений: 3,005
14.12.2015, 23:09 2
C++
1
2
3
4
5
6
7
8
9
for (int j = 0; j < M; ++j) {
    int i = 0;
    while (i < N && a[i][j] <= 0) {
        ++i;
    }
    if (i < N) {
        // ... считаем произведение ...
    }
}
0
0 / 0 / 2
Регистрация: 14.12.2015
Сообщений: 33
15.12.2015, 16:02  [ТС] 3
Это должно выглядеть так? :
Не коректно считает произведение отрицательных чисел


C++
1
2
3
4
5
6
7
8
9
10
11
12
13
for (int j = 0; j < M; ++j) {
                int i = 0;
                while (i < N && massiv[i][j] <= 0) {
                    ++i;
                }
                if (i < N) {
                        for (int p = 0;p < N;p++) // Подчет отрицательных чисел
                        if (massiv[i][p] < 0)
                            s += massiv[i][p];
                }
            }
            
                }
0
2021 / 1620 / 489
Регистрация: 31.05.2009
Сообщений: 3,005
15.12.2015, 21:00 4
А где у вас здесь вычисление произведения?
0
0 / 0 / 2
Регистрация: 14.12.2015
Сообщений: 33
15.12.2015, 22:52  [ТС] 5
По всей видимости это
C++
1
2
3
4
  if (i < N) {
                        for (int p = 0;p < N;p++) // Подчет отрицательных чисел
                        if (massiv[i][p] < 0)
                            s += massiv[i][p];
Но опять же я не уверен

Добавлено через 6 минут
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
#include<iostream>
#include<ctime>
#include <iostream>
using namespace std;
 
int main() {
    setlocale(LC_ALL, "Russian");
    char a;
    cout << "Выберите метод заполнения Массива:" << endl << "Для авто заполнения нажмите 'y'. Для ручного заполнения нажмите 'n': ";
    cin >> a;
 
    if (a == 'y') {  // Авто заполнение
        srand(unsigned(time(NULL)));
        int N, M, s = 0;
        cout << "Введите размер матрицы: " << endl;
        cout << "Введите размер столбца: ";
        cin >> N;
        cout << "Введите размер строки: ";
        cin >> M;
        int ** massiv = new int *[N];
        for (int i = 0; i < N; i++)
            massiv[i] = new int[M];
 
        int a1 = 0, a2 = -1;  // Введение интервала доступных чисел
        cout << "Введите интервал доступных чисел [A,B]" << endl;
        cout << "Число 'А' в интервале: ";
        cin >> a1;
        cout << "Число 'B' в интервале: ";
        cin >> a2;
 
        for (int i = 0; i < N; i++)
            for (int j = 0; j < M; j++)
                massiv[i][j] = a1 + rand() % (a2 - a1 + 1);
 
 
        cout << "Готовая Матрица:" << endl << endl;
        for (int i = 0; i < N; i++)
        {
            for (int j = 0; j < M; j++)
                cout << massiv[i][j] << " ";
            cout << endl;
            // сдесь должна быть проверка на наличие положительных чисел
 
            for (int j = 0; j < M; ++j) {
                int i = 0;
                while (i < N && massiv[i][j] <= 0) {
                    ++i;
                }
                if (i < N) {
                         // Подчет отрицательных чисел
                    for (int j = 0; j < N; ++j)
                        if (massiv[i][j] < 0)
                            s += massiv[i][j];
                }
            }
            
                }
           cout << s;
 
 
 
 
 
            
            cout << endl;
            for (int i = 0; i < N; i++)
                delete[] massiv[i];
            delete[] massiv;
        }
 
 
        // -------------------------------------------------------------------------------------------------
 
    }
Полный код программы
0
2021 / 1620 / 489
Регистрация: 31.05.2009
Сообщений: 3,005
15.12.2015, 23:59 6
Лучший ответ Сообщение было отмечено timmytheus как решение

Решение

Цитата Сообщение от timmytheus Посмотреть сообщение
По всей видимости это
Что значит "по всей видимости"? Код-то кто писал?
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
for (int j = 0; j < M; ++j) {        // в каждом j-ом столбце
    int i = 0;                     
    while (i < N && a[i][j] <= 0) {  // ищем положительный элемент
        ++i;
    }
    if (i < N) {                     // если нашли
        int p = 1;
        for (i = 0; i < N; ++i) {    // перемножаем все отрицательные числа j-го столбца
            if (a[i][j] < 0) {
                p *= a[i][j];        // p = p * a[i][j] 
            }
        }
        cout << "Произведение отрицательных элементов в "
             << j << "-ом столбце: " << p << endl;
    }
}
Только не мешайте это с выводом матрицы. Т.е. сначала выводите матрицу, а потом уже считайте произведение.
0
0 / 0 / 2
Регистрация: 14.12.2015
Сообщений: 33
16.12.2015, 00:06  [ТС] 7
Попробовал. Как то он не правильно считает

Пример на картинке.
Миниатюры
Не удается организовать проверку на наличие положительных чисел  
0
0 / 0 / 2
Регистрация: 14.12.2015
Сообщений: 33
16.12.2015, 00:09  [ТС] 8
Забыл обновить программу.
Теперь выдает такую ошибку - и программа прекращает работать
Миниатюры
Не удается организовать проверку на наличие положительных чисел  
0
0 / 0 / 2
Регистрация: 14.12.2015
Сообщений: 33
16.12.2015, 00:16  [ТС] 9
И по заданию мне нужна общая сумма таких чисел

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
#include<iostream>
#include<ctime>
#include <iostream>
using namespace std;
 
int main() {
    setlocale(LC_ALL, "Russian");
    char a;
    cout << "Выберите метод заполнения Массива:" << endl << "Для авто заполнения нажмите 'y'. Для ручного заполнения нажмите 'n': ";
    cin >> a;
 
    if (a == 'y') {  // Авто заполнение
        srand(unsigned(time(NULL)));
        int N, M, s = 0;
        cout << "Введите размер матрицы: " << endl;
        cout << "Введите размер столбца: ";
        cin >> N;
        cout << "Введите размер строки: ";
        cin >> M;
        int ** massiv = new int *[N];
        for (int i = 0; i < N; i++)
            massiv[i] = new int[M];
 
        int a1 = 0, a2 = -1;  // Введение интервала доступных чисел
        cout << "Введите интервал доступных чисел [A,B]" << endl;
        cout << "Число 'А' в интервале: ";
        cin >> a1;
        cout << "Число 'B' в интервале: ";
        cin >> a2;
 
        for (int i = 0; i < N; i++)
            for (int j = 0; j < M; j++)
                massiv[i][j] = a1 + rand() % (a2 - a1 + 1);
 
 
        cout << "Готовая Матрица:" << endl << endl;
        for (int i = 0; i < N; i++)
        {
            for (int j = 0; j < M; j++)
                cout << massiv[i][j] << " ";
            cout << endl;
            // Индивидуальное задание
            for (int j = 0; j < M; ++j) {   
                int i = 0;
                while (i < N && massiv[i][j] <= 0) {  
                    ++i;
                }
                if (i < N) {                    
                    int p = 1;
                    for (i = 0; i < N; ++i) {   
                        if (massiv[i][j] < 0) {
                            p += massiv[i][j];    
                        }
                    }
                    cout << p;
                }
            }
 
 
 
 
 
            cout << endl;
            for (int i = 0; i < N; i++)
                delete[] massiv[i];
            delete[] massiv;
        }
 
 
        // -------------------------------------------------------------------------------------------------
 
    }
}
Сделал так, и опять же получаю такую проблему. Когда пытался сделать сам задание самостоятельно, получал такую же проблему.
0
0 / 0 / 2
Регистрация: 14.12.2015
Сообщений: 33
16.12.2015, 00:19  [ТС] 10
Вот, что выдает программа.
Миниатюры
Не удается организовать проверку на наличие положительных чисел  
0
2021 / 1620 / 489
Регистрация: 31.05.2009
Сообщений: 3,005
16.12.2015, 00:47 11
Матрицу-то во время вывода зачем удалять? Вынесите код удаления матрицы за пределы цикла. И код связанный с подсчётом произведения (или суммы...) желательно тоже.
0
0 / 0 / 2
Регистрация: 14.12.2015
Сообщений: 33
16.12.2015, 00:57  [ТС] 12
В таком случаи выдает вот такое вот

Пробовал засунут вывод еще дальше, но опять же не получается.
Миниатюры
Не удается организовать проверку на наличие положительных чисел  
0
0 / 0 / 2
Регистрация: 14.12.2015
Сообщений: 33
16.12.2015, 01:13  [ТС] 13
А точнее вот так :
Миниатюры
Не удается организовать проверку на наличие положительных чисел  
0
130 / 70 / 25
Регистрация: 20.03.2014
Сообщений: 261
16.12.2015, 01:13 14
Нужно найти общую сумму и вывести или сумму каждого столбца выводить?
0
0 / 0 / 2
Регистрация: 14.12.2015
Сообщений: 33
16.12.2015, 01:24  [ТС] 15
Нужно вывести общую сумму. К сумме отрицательных чисел добавляется число, только в том случаи, если в колонке массива пресудствует положительное число. Это как я понял и пытался сделать

Добавлено через 1 минуту
Не сумму, а произведение, прошу прощения.

Добавлено через 5 минут
Ребята, проблему решил. Я просто напросто не так понял задание. Отдельное спасибо rangerx.

Вот, что получилось в итоге :
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
#include<iostream>
#include<ctime>
#include <iostream>
using namespace std;
 
int main() {
    setlocale(LC_ALL, "Russian");
    char a;
    cout << "Выберите метод заполнения Массива:" << endl << "Для авто заполнения нажмите 'y'. Для ручного заполнения нажмите 'n': ";
    cin >> a;
 
    if (a == 'y') {  // Авто заполнение
        srand(unsigned(time(NULL)));
        int N, M, s = 0;
        cout << "Введите размер матрицы: " << endl;
        cout << "Введите размер столбца: ";
        cin >> N;
        cout << "Введите размер строки: ";
        cin >> M;
        int ** massiv = new int *[N];
        for (int i = 0; i < N; i++)
            massiv[i] = new int[M];
 
        int a1 = 0, a2 = -1;  // Введение интервала доступных чисел
        cout << "Введите интервал доступных чисел [A,B]" << endl;
        cout << "Число 'А' в интервале: ";
        cin >> a1;
        cout << "Число 'B' в интервале: ";
        cin >> a2;
 
        for (int i = 0; i < N; i++)
            for (int j = 0; j < M; j++)
                massiv[i][j] = a1 + rand() % (a2 - a1 + 1);
 
 
        cout << "Готовая Матрица:" << endl << endl;
        for (int i = 0; i < N; i++)
        {
            for (int j = 0; j < M; j++)
                cout << massiv[i][j] << " ";
            cout << endl;
        
        }
            // сдесь должна быть проверка на наличие положительных чисел
            for (int j = 0; j < M; ++j) {        // в каждом j-ом столбце
                int i = 0;
                while (i < N && massiv[i][j] <= 0) {  // ищем положительный элемент
                    ++i;
                }
                if (i < N) {                     // если нашли
                    int p = 1;
                    for (i = 0; i < N; ++i) {    // перемножаем все отрицательные числа j-го столбца
                        if (massiv[i][j] < 0) {
                            p *= massiv[i][j];        // p = p * a[i][j] 
                        }
                    }
                    cout << "Произведение отрицательных элементов в "
                        << j << "-ом столбце: " << p << endl;
                }
            }
        
 
        cout << endl;
        for (int i = 0; i < N; i++)
            delete[] massiv[i];
        delete[] massiv;
 
        // -------------------------------------------------------------------------------------------------
 
    }
}
Cпасибо!
0
130 / 70 / 25
Регистрация: 20.03.2014
Сообщений: 261
16.12.2015, 01:28 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
45
46
47
48
49
50
51
52
53
54
55
56
#include <iostream>
 
using namespace std;
 
int main()
{
   int n,m;
   cout << "n,m -> ";
   cin >> n >> m;
   
   int* matrix = new int[n*m];
   
   for(int j = 0; j < m; ++j)
    for(int i = 0; i < n; ++i)
    {
        cout << "[" << i << "," << j << "] = ";
        cin >> matrix[i*n+j];
    }
   
   for(int i = 0; i < n; ++i)
   {
    for(int j = 0; j < m; ++j)
    {
        cout << matrix[i*n+j] << " ";
    }
    cout << endl;
   }
   
   int allMult = 1;
   for(int j = 0; j < m; j++)
   {
       int mult = 1;
       bool havePositive = false;
       bool haveNegative = false; 
       for(int i = 0; i < n; i++)
       {
           int index = i*n+j; 
           if(matrix[index] < 0)
           {
               mult *= matrix[index];
               haveNegative = true;
           }
           if(matrix[index] > 0)
            havePositive = true;
       }
       if(havePositive && haveNegative)
       {
           allMult *= mult;
           cout << "mult in col " << j << " = " << mult << endl;
       }
   }
   cout << "allMult = " << allMult << endl;
   
   delete[] matrix;
   return 0;
}
0
16.12.2015, 01:28
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
16.12.2015, 01:28
Помогаю со студенческими работами здесь

Определить наличие положительных чисел в последовательности
дано целое число N и набор из N целых чисел. Если в наборе есть положительные числа, то вывести...

Алгоритм на проверку простоты суммы двух положительных чисел
Добры день. Передо мной стоит задача написать программу: вводится ряд положительных чисел....

Определить наличие в заданном наборе отрицательных и положительных чисел
Пользователь вводит числа с клавиатуры, заканчивая введение нулем. Определить наличие в данном...

Определить наличие во введённом наборе отрицательных и положительных чисел
C/C++ - помогите написать программу на C++ Пользователь вводит числа с клавиатуры, заканчивая...

Организовать одномерный массив из случайных положительных и отрицательных чисел
Буду очень признателен. Спасибо. Запрещено выкладывать задания в виде изображений текста. Одно...

Реализовать проверку на наличие аккаунтов
Доброго времени суток. Имеется 3 регистрации, с помощью телефона/вк/фб. Допустим человек...


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

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

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru