Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
 
1 / 1 / 1
Регистрация: 17.10.2014
Сообщений: 7
1

Цикл для подсчета наибольшего произведения в стобцах

02.06.2016, 08:18. Просмотров 376. Ответов 2
Метки нет (Все метки)

Всем доброго утра(дня). Мне нужно было написать программу, которая создает двумерный массив и считает пару вещей в нем, одна из этих вещей: Наибольшеее произведение в столбце. Подскажите, почему цикл работает так криво и как это исправить? Дело в том, что на данный момент все произведения равны нулю.

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>
#include <cmath>
#include <locale>
#include <iomanip>
 
using namespace std;
 
int main()
{
    setlocale(LC_ALL,"RUSSIAN");
    int m,n;
    cout<<"Введите число строк двумерного массива m: ";
    cin>>m;
    cout<<"Введите число столбцов двумерного массива n: ";
    cin>>n;
    double a[m][n];
    double suml=0,sumlm=0,minl=0,mult=1,multm=0,maxl=0;
    cout<<"Массив a:"<<endl;
    for(int i=0;i<m;i++)
    {
        for(int j=0;j<n;j++)
        {
            a[i][j] = ((i-j)*cos(j));
            cout<<setw(15)<<a[i][j];
        }
    cout<<endl;
    }
    cout<<"Суммы элементов строк:"<<endl;
    for(int i=0;i<m;i++)
    {
        for(int j=0;j<n;j++)
            suml=suml+a[i][j];
            if((suml<sumlm)||(i==0))
            {
                sumlm=suml;
                minl=i;
            }
        cout<<"s["<<i<<"] = "<<suml<<endl;
        suml=0;
    }
    cout<<"Наименьшая сумма элементов = "<<sumlm<<" в строке №"<<minl<<endl;
    cout<<"Произведение элементов столбцов:"<<endl;
    for(int i=0;i<m;i++)
    {
        for(int j=0;j<n;j++)
            mult=mult*a[j][i];
        if((mult>multm)||(i==0))
        {
            multm=mult;
            maxl=i;
        }
        cout<<"p["<<i<<"] = "<<mult<<endl;
        mult=1;
    }
    cout<<"Наибольшее произведение элементов = "<<multm<<" в строке №"<<maxl<<endl;
}
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
02.06.2016, 08:18
Ответы с готовыми решениями:

Программа для нахождения суммы и произведения для наибольшего и наименьшего элемента матрицы
в заданной матрице (m x n) найти сумму и произведение наибольшего и наименьшего (по абсолютной...

Составить программу для подсчёта произведения элементов
Составить программу для подсчёта произведения элементов, удовлетворяющих условию -3&lt;=bi&lt;=3 , в...

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

Программа для подсчета наибольшего количества повторения подряд числа!
Смысл задания: Пользователь задает число,например 8. Затем задает подряд 8 чисел(ну либо другое...

2
97 / 90 / 104
Регистрация: 29.11.2009
Сообщений: 407
02.06.2016, 09:21 2
1) вам нужно задать массив динамически ...
2) у вас в каждом столбце есть 0
3) что бы правильно показать номер столбца к maxl нужно прибавить единицу...

П.С. так все работает как нужно ...
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
#include <iostream>
#include <math.h>
#include <locale>
#include <iomanip>
 
using namespace std;
 
int main()
{
    const int m=10,n=10;
    int a[m][n];
    long int suml=0,sumlm=0,minl=0,mult=1,multm=0,maxl=0;
    cout<<"Массив a:"<<endl;
    for(int i=0;i<m;i++)
    {
        for(int j=0;j<n;j++)
        {
            a[i][j] = 1 + rand()%3;
            cout<<setw(15)<<a[i][j];
        }
    cout<<endl;
    }
    cout<<"Суммы элементов строк:"<<endl;
    for(int i=0;i<m;i++)
    {
        for(int j=0;j<n;j++)
            suml=suml+a[i][j];
            if((suml<sumlm)||(i==0))
            {
                sumlm=suml;
                minl=i;
            }
        cout<<"s["<<i<<"] = "<<suml<<endl;
        suml=0;
    }
    cout<<"Наименьшая сумма элементов = "<<sumlm<<" в строке №"<<minl<<endl;
    cout<<"Произведение элементов столбцов:"<<endl;
    for(int i=0;i<m;i++)
    {
        for(int j=0;j<n;j++)
            mult=mult*a[j][i];
        if((mult>multm)||(i==0))
        {
            multm=mult;
            maxl=i;
        }
        cout<<"p["<<i<<"] = "<<mult<<endl;
        mult=1;
    }
    cout<<"prois = "<<multm<<" i="<<maxl+1<<endl;
}
поэтому ищите ошибку во входных данных что бы небыло нулей + массив динамически

Добавлено через 5 минут
вот вам пример задания массива динамически ...
C++
1
2
3
4
5
6
7
    int size;
    cout<<"enter size: ";
    cin>>size;
    int** a=new int*[size];
    for(int i=0; i<size;i++) {
        a[i]=new int[size];
    }
и очистить память в конце не забудьте:
C++
1
2
3
4
    for(int i=0; i<size;i++) {
        delete [] a[i];
    }
    delete [] a;
Добавлено через 2 минуты
у вас будет в каждом столбце 0 ,так как в первой строке i (часть произведения) будет равна нулю ... ну и все из этого вытекающее
0
30 / 30 / 23
Регистрация: 29.04.2011
Сообщений: 153
Завершенные тесты: 1
02.06.2016, 11:00 3
Цитата Сообщение от guardian Посмотреть сообщение
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
cout<<"Произведение элементов столбцов:"<<endl;
* * for(int i=0;i<m;i++)
* * {
* * * * for(int j=0;j<n;j++)
* * * * * * mult=mult*a[j][i];
* * * * if((mult>multm)||(i==0))
* * * * {
* * * * * * multm=mult;
* * * * * * maxl=i;
* * * * }
* * * * cout<<"p["<<i<<"] = "<<mult<<endl;
* * * * mult=1;
* * }
Если вы зададите массив [2][3] то j у вас будет считаться до 3, а у вас не будет 3й строки, но компилятор все равно будет пытаться считать 3 строку. В целом алгоритм умножения элементов столбцов не верный. Воспользуйтесь поиском на форуме для нахождения произведения элементов столбцов двумерного массива.

Добавлено через 5 минут
Цитата Сообщение от TimeTwo Посмотреть сообщение
П.С. так все работает как нужно ...
А вы задайте массив m=2, n=3 или любую другую не квадратную матрицу тогда не будет работать.

Добавлено через 57 минут
В общем решение будет выглядеть так:
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
#include <iostream>
#include <math.h>
#include <locale>
#include <iomanip>
 
using namespace std;
 
int main()
{
    setlocale(LC_ALL, "rus");
    double m, n;
    cout << "Введите число строк двумерного массива m: ";
    cin >> m;
    cout << "Введите число столбцов двумерного массива n: ";
    cin >> n;
    
    double** a = new double* [m];
    for (int i = 0; i < m; i++)
        a[i] = new double[n];
    double suml = 0, sumlm = 0, minl = 0, mult = 1, multm = 0, maxl = 0;
    cout << "Массив a:" << endl;
    for (int i = 0; i<m; i++)
    {
        for (int j = 0; j<n; j++)
        {
            a[i][j] = ((i - j)*cos(j));
            cout << setw(15) << a[i][j];
        }
        cout << endl;
    }
    cout << "Суммы элементов строк:" << endl;
    for (int i = 0; i<m; i++)
    {
        for (int j = 0; j<n; j++)
            suml = suml + a[i][j];
        if ((suml<sumlm) || (i == 0))
        {
            sumlm = suml;
            minl = i;
        }
        cout << "s[" << i << "] = " << suml << endl;
        suml = 0;
    }
    cout << "Наименьшая сумма элементов = " << sumlm << " в строке №" << minl << endl;
    cout << "Произведение элементов столбцов:" << endl;
    double *pr = new double[n];
    for (int i = 0; i < n; i++)
        pr[i] = 1;
    for (int j = 0; j < n; j++)
    {
        for (int i = 0; i < m; i++)
        {
            pr[j] *= a[i][j];
        }
    }
    for (int i = 0; i < n; i++)
        cout << "p[" << i << "] = " << pr[i] << endl;
    for (int i = 0; i < m; i++)
        delete[] a[i];
    delete[]a;
 
    system("pause");
    return 0;
}
0
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
02.06.2016, 11:00

Заказываю контрольные, курсовые, дипломные и любые другие студенческие работы здесь.

Функция для подсчета произведения положительных элементов массива
Учитель задал написать функцию для подсчета произведения положительных элементов массива С...

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

Программа для ввода произвольного числа чисел и подсчета их произведения
Помогите, пожалуйста... Нужно составить программу для ввода произвольного числа чисел с...

Написать программу для подсчёта суммы произведения среднего арифметического
Помогите пожалуйста. Нужно написать программу для подсчёта суммы произведения среднего...


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

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

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