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

Произведение элементов массива расположенных после максимального по модулю элемента (С) - C++

Восстановить пароль Регистрация
 
Рейтинг: Рейтинг темы: голосов - 10, средняя оценка - 5.00
Oldgy
3 / 3 / 0
Регистрация: 10.12.2008
Сообщений: 46
10.06.2009, 10:08     Произведение элементов массива расположенных после максимального по модулю элемента (С) #1
Помогите пожалуйста написать программу. Очень буду Вам благодарен, очень срочно надо.
В одномерном массиве состоящем из n вещественных элементов вычислить произведение элементов массива расположенных после максимального по модулю элемента.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
10.06.2009, 10:08     Произведение элементов массива расположенных после максимального по модулю элемента (С)
Посмотрите здесь:

Произведение элементов массива, расположенных после максимального по модулю элемента C++
C++ произведение элеменов массива, расположенных после максимального по модулю элемента
C++ Найти произведение элементов массива, расположенных после минимального по модулю элемента
C++ Найти сумму модулей элементов массива, расположенных после минимального по модулю элемента
Найти сумму и произведение положительных элементов массива, расположенных до максимального элемента C++
C++ Найти сумму и произведение положительных элементов массива, расположенных до максимального элемента
Вычислить сумму модулей элементов массива, расположенных после минимального по модулю элемента C++
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Deiron
25 / 25 / 1
Регистрация: 25.05.2009
Сообщений: 98
10.06.2009, 10:23     Произведение элементов массива расположенных после максимального по модулю элемента (С) #2
вещественные это double?
Тогда вот:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
double func(double* arr,int size)
{
    int i,imax=0;
    double max_mod=fabs(arr[0]);
    double temp;
    double result=1.0;
    for (i=1;i<size)
    {
        temp=fabs(arr[i]);
        if (temp>max_mod) {
            max_mod=temp;
            imax=i;
        }
    }
    for (i=imax;i<size;i++)
        result=result*arr[i];
    return result;
}
Lerikh
 Аватар для Lerikh
14 / 14 / 0
Регистрация: 09.06.2009
Сообщений: 42
10.06.2009, 10:27     Произведение элементов массива расположенных после максимального по модулю элемента (С) #3
или вот:

#include <stdio.h>
#include <math.h>

void main(void)
{
float ar[6] = {-1.5f, 3.0f, 4.3f, -10.8, 2.0f, 7.4f};
float absmax = 0;
int maxel = 0;

for(int i = 0; i < 6; i++)
{
if(absmax < fabsf(ar[i]))
{
absmax = fabsf(ar[i]);
maxel = i;
}
}

absmax = 1;

for (int i = maxel+1; i < 6; i++)
{
absmax *= ar[i];
}

printf("Res is: %f", absmax);

}
Oldgy
3 / 3 / 0
Регистрация: 10.12.2008
Сообщений: 46
10.06.2009, 11:08  [ТС]     Произведение элементов массива расположенных после максимального по модулю элемента (С) #4
Deiron, Lerikh, спасибо большое Вам.
Lerikh, а зачем нужны буквы f после цифр?

//--------------------nahodim naibolshij po modulu element------------------------------------------//

int max=0; //prinimaem 1 element za maksimal'nij.
for(i=1;i<20;i++)
if(fabs(mas [i]) > fabs(mas [max])) max=i; //sravnivaem ostavshiesa elementi s maksimal'nim.
printf("Naibolshij po modulu element-> mas[%i]=%1.1lf\n",max+1,mas [max]);

//--------------------nahodim proizvedenie vseh elementov, sledujuschih za maksimal'nim po modulu elementom.

double proizved;
for( i=max+2;i<20;i++)
{
proizved = mas[max+2]*mas[i] ; //mas[max+2] - sledujuschij element v massive posle maksimal'nogo po modulu elementa v massive.
}
printf("Proizvedenie elementov massiva, raspolozhennih\n");
printf("posle maksimal'nogo po modulu elementa = %1.2lf",proizved);
getch();
delete[] mas;
clrscr();
return 0;
}
А если соединить и дополнить эти циклы в одну программу, что получится?
Deiron
25 / 25 / 1
Регистрация: 25.05.2009
Сообщений: 98
10.06.2009, 11:55     Произведение элементов массива расположенных после максимального по модулю элемента (С) #5
f указывает на то, что они типа float. Но на самом деле - это не нужно. Достаточно float ar[6] = {-1.5, 3.0, 4.3, -10.8, 2.0, 7.4};

Объединить два цикла в один? А как ты себе это представляешь?
Ты должен найти максимальный элемент - это один цикл. А потом - перемножить все элементы после него, это еще один цикл. Ты не сможешь перемножить все элементы после максимального, не зная максимального. Кстати, в моей функции недочет. Она максимальный элемент тоже "заносит" в список умножаемых. Чтобы умножались только те, что после надо сделать так:
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.h>
#include <conio.h>
double func(double* arr,int size)
{
        int i,imax=0;
        double max_mod=fabs(arr[0]);
        double temp;
        double result=1.0;
        for (i=1;i<size)
        {
                temp=fabs(arr[i]);
                if (temp>max_mod) {
                        max_mod=temp;
                        imax=i;
                }
        }
        if ((imax==size-1)||(size==1)) return 0.0;
        for (i=imax+1;i<size;i++)
                result=result*arr[i];
        return result;
}
void main()
{
    double *arr;
    double result;
    int i,size;
    cout<<"введите размерность массива: ";
    cin>>size;
    arr=new int [size];
    cout<<"введите массив из "<<size<<" элементов"<<endl;
    for (i=0;i<size;i++) cin>>arr[size];
    result=func(arr,size);
    cout<<"произведение элементов стоящих после максимального по модулю элемента равно "<<result;
    getch();
        delete [] arr;
}
Lerikh
 Аватар для Lerikh
14 / 14 / 0
Регистрация: 09.06.2009
Сообщений: 42
10.06.2009, 19:17     Произведение элементов массива расположенных после максимального по модулю элемента (С) #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
#include <stdio.h>
#include <math.h>
 
void main(void)
{
    float ar[6] = {-1.5f, 3.0f, 4.3f, -10.8, 2.0f, 7.4f};
    float absmax = 0;
    float maxel = 0;
 
    for(int i = 0; i < 6; i++)
    {
        if(absmax < fabsf(ar[i]))
        {
            absmax = fabsf(ar[i]);
            maxel = 1;
        }
        else
        {
            maxel *= ar[i];
        }
 
    }
 
    printf("Res is: %f", maxel);
 
}
Добавлено через 1 минуту 30 секунд
На название переменных не смотри. лень было переназывать
Deiron
25 / 25 / 1
Регистрация: 25.05.2009
Сообщений: 98
10.06.2009, 20:08     Произведение элементов массива расположенных после максимального по модулю элемента (С) #7
ух ты. Я бы не додумался до такого хитроумного хода. Но он, если я правильно понимаю, как и первый вариант моего кода включает максимальный элемент в произведение. То есть произведение будет равно arr[max]*arr[max+1]*...*arr[size-1], а не arr[max+1]*arr[max+2]*...*arr[size-1]. То есть, чтобы в произведение входили только те элементы, что после максимального, надо поделить все это дело на arr[max]
Lerikh
 Аватар для Lerikh
14 / 14 / 0
Регистрация: 09.06.2009
Сообщений: 42
10.06.2009, 20:30     Произведение элементов массива расположенных после максимального по модулю элемента (С) #8
нет. считает он правильно. по крайней мере пока я его проверял ошибок не находил...

Добавлено через 1 минуту 6 секунд
максимального элемента в произведении нет. он пропускается
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
10.06.2009, 20:36     Произведение элементов массива расположенных после максимального по модулю элемента (С)
Еще ссылки по теме:

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

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

Или воспользуйтесь поиском по форуму:
Rififi
 Аватар для Rififi
2332 / 1047 / 43
Регистрация: 03.05.2009
Сообщений: 2,656
10.06.2009, 20:36     Произведение элементов массива расположенных после максимального по модулю элемента (С) #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
#include <cmath>
#include <numeric>
#include <algorithm>
#include <iterator>
#include <iostream>
 
template <typename T>
struct fabs_less : public std::binary_function<T, T, bool>
{
    bool operator()(const T& lhs, const T& rhs) const
    { return std::fabs(lhs) < std::fabs(rhs); }
};
 
template <typename T>
typename std::iterator_traits<T>::value_type
mul(T begin, T end)
{
    typedef typename std::iterator_traits<T>::value_type value_type;
    T f = std::max_element(begin, end, fabs_less<value_type>());
    if (std::distance(f, end) == 1)
        return value_type();
    std::advance(f, 1);
    return std::accumulate(f, end, value_type(1), std::multiplies<value_type>());
}
 
int main()
{
    float arr[] = { 1, 2, 3, -4, 1, 2, 3, -1 };
    const size_t N = sizeof(arr) / sizeof(arr[0]);
    std::cout << mul(arr, arr+N) << std::endl; // == -6
    return 0;
}
Yandex
Объявления
10.06.2009, 20:36     Произведение элементов массива расположенных после максимального по модулю элемента (С)
Ответ Создать тему
Опции темы

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