Форум программистов, компьютерный форум CyberForum.ru

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

Восстановить пароль Регистрация
 
guardian
0 / 0 / 0
Регистрация: 17.10.2014
Сообщений: 4
02.06.2016, 08:18     Цикл для подсчета наибольшего произведения в стобцах #1
Всем доброго утра(дня). Мне нужно было написать программу, которая создает двумерный массив и считает пару вещей в нем, одна из этих вещей: Наибольшеее произведение в столбце. Подскажите, почему цикл работает так криво и как это исправить? Дело в том, что на данный момент все произведения равны нулю.

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;
}
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
02.06.2016, 08:18     Цикл для подсчета наибольшего произведения в стобцах
Посмотрите здесь:

C++ Составить программу для подсчета произведения элементов целочисленной прямоугольной таблицы
Составить программу для подсчета произведения элементов целочисленной прямоугольной таблицы Y C++
C++ Составить программу для подсчета произведения элементов целочисленной матрицы Y, рамерами m на n, сумма двох индексов которых - число парное.
C++ Программа для подсчета символов
C++ написать программу для подсчета суммы
C++ Матрица ( проверять знак произведения двух элементов каждого столбца и печать значения произведения...)
Как созать цикл for для нахождения произведения элементов массива C++
Цикл с встроенным Switch (вычислить значение произведения) C++

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

Или воспользуйтесь поиском по форуму:
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
TimeTwo
68 / 68 / 31
Регистрация: 29.11.2009
Сообщений: 318
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 (часть произведения) будет равна нулю ... ну и все из этого вытекающее
Njkzy
29 / 29 / 14
Регистрация: 29.04.2011
Сообщений: 149
Завершенные тесты: 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;
}
Yandex
Объявления
02.06.2016, 11:00     Цикл для подсчета наибольшего произведения в стобцах
Ответ Создать тему
Опции темы

Текущее время: 09:16. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru