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

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
guardian
1 / 1 / 1
Регистрация: 17.10.2014
Сообщений: 6
#1

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

02.06.2016, 08:18. Просмотров 148. Ответов 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
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
02.06.2016, 08:18
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Цикл для подсчета наибольшего произведения в стобцах (C++):

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

Составить программу для подсчета произведения элементов целочисленной прямоугольной таблицы Y - C++
Составить программу для подсчета произведения элементов целочисленной прямоугольной таблицы Y, состоящий из M строк и N столбцов, сумма...

Составить программу для подсчета произведения элементов целочисленной прямоугольной таблицы - C++
3. Составить программу для подсчета произведения элементов целочисленной прямоугольной таблицы Y, состоящий из M строк и N столбцов, сумма...

Составить программу для подсчета произведения элементов целочисленной матрицы Y, рамерами m на n, сумма двох индексов которых - число парное. - C++
Составить программу для подсчета произведения элементов целочисленной матрицы Y, рамерами m на n, сумма двох индексов которых - число...

Как созать цикл for для нахождения произведения элементов массива - C++
Вот к примеру для нахождения суммы необходимо так: for (i=0, sum=0; i&lt;n; i++ ) sum+=m; А вот как для нахождения произведения у меня...

Функция для поиска наибольшего и второго наибольшего элемента вектора - C++
Есть вектор который заполняется рандомно. И нужно найти два элемента - самое большое значение и второе по величине. И главным условием...

Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
TimeTwo
68 / 68 / 31
Регистрация: 29.11.2009
Сообщений: 321
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
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;
}
0
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
02.06.2016, 11:00
Привет! Вот еще темы с ответами:

Цикл с встроенным Switch (вычислить значение произведения) - C++
есть произведение, его нужно посчитать 3-мя разными способами, используя разные циклы - do, for и while, чтобы выбор цикла так же...

Подсчет произведения всех элементов массива (цикл и рекурсия) - C++
#include &lt;iostream&gt; #include &lt;conio.h&gt; #include &lt;cmath&gt; using namespace std; unsigned long long Arr (unsigned int n) {if (n==0) ...

Программа для работы с текстовым файлом. Описать ф-ю для подсчета строк, состоящих из одинаковых символов - C++
Здравствуйте, помогите пожалуйста написать программу, которая будет из текстового файла выдавать число строк, состоящих из одинаковых...

Написать программу для проверки работы процедуры ScalarProduct для вычисления скалярного произведения двух векторов - C++
Написать программу для проверки работы процедуры ScalarProduct для вычисления скалярного произведения двух векторов. Вот отрывок, надо...


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

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

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