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

Номер максимального элемента массива, произведение элементов массива - C++

Восстановить пароль Регистрация
 
Vonka
 Аватар для Vonka
1 / 1 / 0
Регистрация: 13.09.2013
Сообщений: 90
25.10.2013, 01:13     Номер максимального элемента массива, произведение элементов массива #1
Помогите пожалуйста с решением данной задачи.

В одномерном массиве, состоящем из n целых элементов, вычислить:
- номер максимального элемента массива;
- произведение элементов массива, расположенных между первым и вторым нулевыми элементами.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
25.10.2013, 01:13     Номер максимального элемента массива, произведение элементов массива
Посмотрите здесь:

C++ Произведение элементов массива расположенных после максимального по модулю элемента (С)
Произведение элементов массива, расположенных после максимального по модулю элемента C++
C++ В одномерном массиве вычислить номер максимального элемента массива и сумму элементов массива, расположенных после первого положительного
C++ Массивы (найти номер максимального элемента массива, произведение элементов массива)
В одномерном массиве, состоящем из n целых элементов, 1) номер максимального элемента массива; 2) произведение элементов массива, расположенных между C++
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
MrGluck
Ворчун
Эксперт С++
 Аватар для MrGluck
4927 / 2670 / 243
Регистрация: 29.11.2010
Сообщений: 7,429
25.10.2013, 01:28     Номер максимального элемента массива, произведение элементов массива #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
#include <iostream>
#include <vector>
#include <algorithm>
#include <iterator>
#include <random>
#include <cstddef>
#include <numeric>
#include <functional>
 
 
int main()
{
    size_t N = 10;
    std::vector<int> v(N);
    std::mt19937 gen { std::random_device()() };
    std::uniform_int_distribution<> uid(-10, 10);
 
    std::generate(v.begin(), v.end(), [&uid, &gen] { return uid(gen); });
    std::copy(v.cbegin(), v.cend(), std::ostream_iterator<int>(std::cout, " "));
    std::cout << std::endl;
 
    auto max = std::max_element(v.cbegin(), v.cend());
    size_t maxNumber = std::distance(v.cbegin(), max) + 1;
    std::cout << "Number of max element is " << maxNumber << std::endl;
 
    auto beg = std::find(v.cbegin(), v.cend(), 0);
    if (beg != v.end())
    {
        auto end = std::find(beg+1, v.cend(), 0);
        long mult = std::accumulate(beg + 1, end, 1, std::multiplies<int>());
        std::cout << "Multiplication of integers between first and second "
                  << "zeroes/end of sequence is " << mult << std::endl;
    }
    else
        std::cout << "This sequence does not contain 0\n";
}
LifeWind
 Аватар для LifeWind
4 / 4 / 1
Регистрация: 13.09.2012
Сообщений: 36
25.10.2013, 11:32     Номер максимального элемента массива, произведение элементов массива #3
Вот мой вариант
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
75
76
77
78
79
80
#include <stdio.h>
#include <iostream>
#include <ctime>
 
using namespace std;
 
void vector(int *a, int n) //функция заполнения массива случайными числами
 
{
    srand(time(NULL));
    for(int i = 0; i < n; i++)
        a[i] = rand()%100;
    return;
}
 
 
void printvector(int *a, int n) //функция вывода массива на экран
{
    for(int i = 0; i < n; i++)
        cout << a[i] << " ";
}
 
void max(int *a, int n) //находим максимальный эелеменет в массиве
{
    int m = a[0];
    for(int i = 1; i < n; i++)
    {
        if(a[i] > m)
            m = a[i];
    }
    cout << endl << "Максимальный элемент в массиве: "<< m << endl;
    return;
}
 
void summ(int *a, int n)
{
    int temp1 = -1;
    int temp2 = -2;
    int sum = 0;
    for(int i = 0; i < n; i++)
        if(a[i] == 0)
        {
            temp1 = i;
            break;
        }
    for(int i = n-1; i >= 0; i--)
        if(a[i] == 0)
        {
            temp2 = i;
            break;
        }
    if(temp1 == temp2)
    {
        cout << "В массиве только один ноль" << endl;
        return;
    }
    if((temp1 == -1) && (temp2 == -2))
    {
        cout << "В массиве нет нулей" << endl;
        return;
    }
    for(int i = temp1 + 1; i < temp2; i++)
        sum*=a[i];
    cout <<  sum << endl;
    return;
}
 
void main()
{
    setlocale(LC_ALL, "Russian" );
    cout << "Введите размерность массива: " << endl;
    int n;
    cin >> n;
    int *a = new int [n];
    vector(a,n);
    printvector(a,n);
    max(a,n);
    summ(a,n);
    return;
}
Добавлено через 10 минут
Упс, немного не правильно сделал второе задание, вот поменяйте функцию summ на эту
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
void summ(int *a, int n)
{
    int temp1 = -1;
    int temp2 = -2;
    int sum = 1;
    for(int i = 0; i < n; i++)
        if(a[i] == 0)
        {
            temp1 = i;
            break;
        }
    if(temp1!=-1)
    {
        for(int i = temp1 + 1; i < n; i++)
        if(a[i] == 0)
        {
            temp2 = i;
            break;
        }
    }
    
    if(temp==-1)
    {
        cout << "В массиве нет нулей" << endl;
        return;
    }
    if(temp2 == -2)
    {
        cout << "В массиве только один ноль" << endl;
        return;
    }
    for(int i = temp1 + 1; i < temp2; i++)
        sum*=a[i];
    cout <<  sum << endl;
    return;
}
Vonka
 Аватар для Vonka
1 / 1 / 0
Регистрация: 13.09.2013
Сообщений: 90
25.10.2013, 23:08  [ТС]     Номер максимального элемента массива, произведение элементов массива #4
Цитата Сообщение от LifeWind Посмотреть сообщение
Вот мой вариант
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
75
76
77
78
79
80
#include <stdio.h>
#include <iostream>
#include <ctime>
 
using namespace std;
 
void vector(int *a, int n) //функция заполнения массива случайными числами
 
{
    srand(time(NULL));
    for(int i = 0; i < n; i++)
        a[i] = rand()%100;
    return;
}
 
 
void printvector(int *a, int n) //функция вывода массива на экран
{
    for(int i = 0; i < n; i++)
        cout << a[i] << " ";
}
 
void max(int *a, int n) //находим максимальный эелеменет в массиве
{
    int m = a[0];
    for(int i = 1; i < n; i++)
    {
        if(a[i] > m)
            m = a[i];
    }
    cout << endl << "Максимальный элемент в массиве: "<< m << endl;
    return;
}
 
void summ(int *a, int n)
{
    int temp1 = -1;
    int temp2 = -2;
    int sum = 0;
    for(int i = 0; i < n; i++)
        if(a[i] == 0)
        {
            temp1 = i;
            break;
        }
    for(int i = n-1; i >= 0; i--)
        if(a[i] == 0)
        {
            temp2 = i;
            break;
        }
    if(temp1 == temp2)
    {
        cout << "В массиве только один ноль" << endl;
        return;
    }
    if((temp1 == -1) && (temp2 == -2))
    {
        cout << "В массиве нет нулей" << endl;
        return;
    }
    for(int i = temp1 + 1; i < temp2; i++)
        sum*=a[i];
    cout <<  sum << endl;
    return;
}
 
void main()
{
    setlocale(LC_ALL, "Russian" );
    cout << "Введите размерность массива: " << endl;
    int n;
    cin >> n;
    int *a = new int [n];
    vector(a,n);
    printvector(a,n);
    max(a,n);
    summ(a,n);
    return;
}
Добавлено через 10 минут
Упс, немного не правильно сделал второе задание, вот поменяйте функцию summ на эту
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
void summ(int *a, int n)
{
    int temp1 = -1;
    int temp2 = -2;
    int sum = 1;
    for(int i = 0; i < n; i++)
        if(a[i] == 0)
        {
            temp1 = i;
            break;
        }
    if(temp1!=-1)
    {
        for(int i = temp1 + 1; i < n; i++)
        if(a[i] == 0)
        {
            temp2 = i;
            break;
        }
    }
    
    if(temp==-1)
    {
        cout << "В массиве нет нулей" << endl;
        return;
    }
    if(temp2 == -2)
    {
        cout << "В массиве только один ноль" << endl;
        return;
    }
    for(int i = temp1 + 1; i < temp2; i++)
        sum*=a[i];
    cout <<  sum << endl;
    return;
}
Спасибо)) А можно обойтись как-то без функций?))
MrGluck
Ворчун
Эксперт С++
 Аватар для MrGluck
4927 / 2670 / 243
Регистрация: 29.11.2010
Сообщений: 7,429
25.10.2013, 23:42     Номер максимального элемента массива, произведение элементов массива #5
Цитата Сообщение от Vonka Посмотреть сообщение
Спасибо)) А можно обойтись как-то без функций?))
а что занимается "вычислением"? переменные? Переменная плюс переменная = максимальный элемент в массиве? main хотя бы можно оставить?
Берете тело функции, запихиваете в main, меняете название параметров на название аргументов. Можно было бы и догадаться.

Цитата Сообщение от LifeWind Посмотреть сообщение
void vector(int *a, int n)
не советовал бы называть так функцию, встретив в коде vector, программист скорее подумает об STL контейнере. И отправится надо будет в поиск что же это есть на самом деле. Это если есть еще возможность заглянуть в исходники.
Vonka
 Аватар для Vonka
1 / 1 / 0
Регистрация: 13.09.2013
Сообщений: 90
30.10.2013, 16:27  [ТС]     Номер максимального элемента массива, произведение элементов массива #6
И все же я никак не пойму. Функции я еще не знаю. И совсем не понимаю как это будет выглядеть без них.
Еще и идет заполнение случайными числами, можно ли заполнять их самому с клавиатуры.
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
30.10.2013, 17:22     Номер максимального элемента массива, произведение элементов массива
Еще ссылки по теме:

Найти сумму и произведение положительных элементов массива, расположенных до максимального элемента C++
C++ Найти сумму и произведение положительных элементов массива, расположенных до максимального элемента
C++ Пять последних элементов массива умножить на номер максимального элемента

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

Или воспользуйтесь поиском по форуму:
LifeWind
 Аватар для LifeWind
4 / 4 / 1
Регистрация: 13.09.2012
Сообщений: 36
30.10.2013, 17:22     Номер максимального элемента массива, произведение элементов массива #7
Вот сделал без функций и через ввод клавиатуры
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
#include <stdio.h>
#include <iostream>
 
using namespace std;
 
 
 
void main()
{
    setlocale(LC_ALL, "Russian" );
    cout << "Введите размерность массива: " << endl;
    int n;
    cin >> n;
    int *a = new int [n];
    cout << "Введите элементы в массив: " << endl;
    for(int i = 0; i < n; i++)
        cin >> a[i] ;
    for(int i = 0; i < n; i++)
        cout << a[i] << " ";
    int m = a[0];
    for(int i = 1; i < n; i++)
    {
        if(a[i] > m)
            m = a[i];
    }
    cout << endl << "Максимальный элемент в массиве: "<< m << endl;
 
    int temp1 = -1;
    int temp2 = -2;
    int sum = 1;
    for(int i = 0; i < n; i++)
        if(a[i] == 0)
        {
            temp1 = i;
            break;
        }
        if(temp1!=-1)
        {
            for(int i = temp1 + 1; i < n; i++)
                if(a[i] == 0)
                {
                    temp2 = i;
                    break;
                }
        }
 
        if(temp1==-1)
        {
            cout << "В массиве нет нулей" << endl;
            return;
        }
        if(temp2 == -2)
        {
            cout << "В массиве только один ноль" << endl;
            return;
        }
        for(int i = temp1 + 1; i < temp2; i++)
            sum*=a[i];
        cout <<  sum << endl;
        return;
}
Yandex
Объявления
30.10.2013, 17:22     Номер максимального элемента массива, произведение элементов массива
Ответ Создать тему
Опции темы

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