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

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

Войти
Регистрация
Восстановить пароль
 
Рейтинг: Рейтинг темы: голосов - 10, средняя оценка - 5.00
Oldgy
3 / 3 / 0
Регистрация: 10.12.2008
Сообщений: 46
#1

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

10.06.2009, 10:08. Просмотров 1494. Ответов 8
Метки нет (Все метки)

Помогите пожалуйста написать программу. Очень буду Вам благодарен, очень срочно надо.
В одномерном массиве состоящем из n вещественных элементов вычислить произведение элементов массива расположенных после максимального по модулю элемента.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
10.06.2009, 10:08
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Произведение элементов массива расположенных после максимального по модулю элемента (С) (C++):

Произведение элементов массива, расположенных после максимального по модулю элемента - C++
Помогите написать программу. Я работаю с программой MS Visual Studio 2005. В одномерном массиве, состоящем из п целых элементов,...

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

произведение элеменов массива, расположенных после максимального по модулю элемента - C++
здравствуйте!помогите пожалуйста решить задачу: в одномерном массиве состоящем из n веществ.элементов вычислить: 1)кол-во элементов...

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

Найти произведение элементов массива, расположенных после минимального по модулю элемента - C++
1. Дан одномерный массив целых чисел. Найти произведение элементов массива, расположенных после минимального по модулю элемента. напишите...

Найти произведение элементов массива, расположенные после максимального по модулю элемента - C++
Здравствуйте, помогите пожалуйста решить задачу на С++ Задание (непрерывные последовательности данных. Одномерные массивы). На языке...

8
Deiron
26 / 26 / 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;
}
1
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);

}
1
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;
}
А если соединить и дополнить эти циклы в одну программу, что получится?
0
Deiron
26 / 26 / 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;
}
0
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 секунд
На название переменных не смотри. лень было переназывать
0
Deiron
26 / 26 / 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]
0
Lerikh
14 / 14 / 0
Регистрация: 09.06.2009
Сообщений: 42
10.06.2009, 20:30 #8
нет. считает он правильно. по крайней мере пока я его проверял ошибок не находил...

Добавлено через 1 минуту 6 секунд
максимального элемента в произведении нет. он пропускается
0
Rififi
2360 / 1053 / 44
Регистрация: 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;
}
0
10.06.2009, 20:36
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
10.06.2009, 20:36
Привет! Вот еще темы с ответами:

В одномерном массиве, состоящем из n целых элементов, 1) номер максимального элемента массива; 2) произведение элементов массива, расположенных между - C++
Помогите исправить программу Задание: В одномерном массиве, состоящем из n целых элементов, 1) номер максимального элемента...

Вычислить произведение элементов массива расположенных после максимального - C++
Выручите пж....... Задали написать программу произведение элементов массива после максимального..... Напишите код - заранее благодарен :)

Найти сумму и произведение положительных элементов массива, расположенных до максимального элемента - C++
С++ Builder Функции Дан массив чисел В. Найти сумму и произведение положительных элементов массива, расположенных до максимального...

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


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

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

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