Форум программистов, компьютерный форум, киберфорум
Наши страницы
C для начинающих
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.50/6: Рейтинг темы: голосов - 6, средняя оценка - 4.50
spyhunter12
0 / 0 / 0
Регистрация: 15.12.2009
Сообщений: 17
1

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

11.10.2011, 12:48. Просмотров 1039. Ответов 10
Метки нет (Все метки)

Здравствуйте. Не могли бы мне помочь, нужно написать вот такую вот нехитрую программу (просто я пока в этом слаб), если можно, с комментариями. Вот условие:


В одномерном массиве, состоящем из п вещественных элементов, вычислить:
1) количество элементов массива, больших С;
2) произведение элементов массива, расположенных после максимального по модулю элемента.
Преобразовать массив таким образом, чтобы сначала располагались все отрицательные элементы, а потом - все положительные (элементы, равные 0, считать положительными).
Буду премного благодарен!


Есть кое-что похожее, вот данные вместе с кодом.
Задание
В одномерном массиве, состоящем из п вещественных элементов, вычислить:
1) сумму отрицательных элементов массива;
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
57
58
59
60
61
62
63
64
65
/*
Подключние рабочих библиотек:
    <stdio.h> - библиотека ввода/вывода
*/
#include <stdio.h>
 
int main(int argc, char* argv[])
{
    /* Именованная константа, определяющая количество элементов массива */
    const    MAX_ELEMENTS = 8;
 
    /* Объявление и инициализация переменных */
    float    m[MAX_ELEMENTS];
    float    sum = 0;
    float    result = 1;
    int      iMax, iMin;
 
    /* Запрашиваем ввод данных с клавиатуры */
    for (int i = 0; i < MAX_ELEMENTS; i++)
    {
        printf("m[%d] = ", i);
        scanf("%f", &m[i]);
    }
 
/* Принимаем индексы максимального и минимального массива равными 0 */
    iMin = iMax = 0;
    for (i = 0; i < MAX_ELEMENTS; i++)
    {
        /* Вычисляем сумму отрицательных элементов массива */
        if (m[i] < 0) sum += m[i];
 
        /* Находим индексы максимального и минимального элементов массива */
        if (m[i] > m[iMax]) iMax = i;
        if (m[i] < m[iMin]) iMin = i;
    }
 
    /* Находим произведение элементов массива, находящихся между минимальным и максимальными элементами */
    for (i = ((iMax < iMin) ? iMax : iMin);
        i <= ((iMax > iMin) ? iMax : iMin);
        result *= m[i++]);
 
    /* Выводим на экран результат вычислений */
    printf("\nСумма отрицательных элементов = %.2f\n", sum);
    printf("Результат = %.2f\n\n", result);
 
    /* Сортировка элементов массива по возрастанию */
    for (i = 0; i < MAX_ELEMENTS; i++)
    {
        for (int j = i + 1; j < MAX_ELEMENTS; j++)
        {
            if (m[i] > m[j])
            {
                result = m[i];
                m[i] = m[j];
                m[j] = result;
            }
        }
    }
 
    /* Вывод на экран отсортированного по возрастанию массива */
    printf("Отсортированный массив:\n");
    for (i = 0; i < MAX_ELEMENTS; printf("%.2f ", m[i++]));
 
    return 0;
}
0
Лучшие ответы (1)
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
11.10.2011, 12:48
Ответы с готовыми решениями:

Найти произведение элементов массива, расположенных между максимальным и минимальным элементами
Помогите, пожалуйста, найти ошибки. При выводе выдает все нули =/ Само задание : В одномерном...

Найти произведение элементов массива расположенных между максимальным и минимальным элементом
Ребят, помогите, не моего ума задача, нужно сделать на языке СИ В однородном массиве состоящем из...

Найти произведение элементов массива, расположенных между максимальным и минимальным элементами
Ребят, подскажите хотя бы с чего начать и как делать Необходимо в одномерном массиве,состоящем...

Найти квадраты всех чисел, расположенных между минимальным и максимальным значениями массива
Дан массив из 18 вещественных чисел, все элементы которого различны. 1) Найти произведение...

Вычислить произведение элементов массива, расположенных между максимальным и минимальным элементами
В одномерном массиве, состоящем из 10 целых элементов, вычислить произведение элементов массива,...

10
-=ЮрА=-
Заблокирован
Автор FAQ
11.10.2011, 13:23 2
Лучший ответ Сообщение было отмечено Памирыч как решение

Решение

Цитата Сообщение от spyhunter12 Посмотреть сообщение
В одномерном массиве, состоящем из п вещественных элементов, вычислить:
1) количество элементов массива, больших С;
2) произведение элементов массива, расположенных после максимального по модулю элемента.
Преобразовать массив таким образом, чтобы сначала располагались все отрицательные элементы, а потом - все положительные (элементы, равные 0, считать положительными).
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
#include <stdlib.h> //malloc
#include <stdio.h>
#include <conio.h>  //getch
#include <math.h>   //fabs
 
int main()
{
    printf("Enter num of elements in array\r\n");
    int i,j,N;scanf("%d",&N);
    //Выделяем память под массив
    float *arr = (float *)malloc(N*sizeof(float));
    printf("Enter value C : ");
    float C;scanf("%f",&C);
 
    int   num = 0;    //количество элементов массива, больших С
    float MaxMod = 0; // максимального по модулю элемент
    for(i = 0; i < N; i++)
    {
        printf("arr[%d] = ",i + 1);
        scanf("%f",&arr[i]);
        if(C < arr[i])
            num++;
        if(MaxMod < fabs(arr[i]))
            MaxMod = fabs(arr[i]);
    }
    printf("Kol-vo > C : %d\r\n",num);
    printf("Max po Mod : %f\r\n",MaxMod);
    int flag = 0;//Сигнализирует о том что достигнут 
    //максимальный по модулю элемент
    float mult = 1;//произведение элементов массива, 
    //расположенных после максимального по модулю элемента.
    for(i = 0; i < N; i++)
    {
        if(MaxMod == fabs(arr[i]))
            flag = 1;
        if(flag == 1)
            mult *= arr[i];
    }
    printf("Proizved : %f\r\n",mult);
    //Сортировка рямым выбором
    float buf;//буферная переменная
    printf("Sorted array\r\n");
    for(i = 0; i < N; i++)
    {
        for(j = i + 1; j < N; j++)
        {
            if(arr[j] < arr[i])
            {
                buf = arr[i];
                arr[i] = arr[j];
                arr[j] = buf;
            }
        }
        printf("arr[%d] = %f\r\n",i + 1,arr[i]);
    }
    printf("Press any key to continue\r\n");
    getch();
    return 0;
}
1
Миниатюры
Найти произведение элементов массива, расположенных между максимальным и минимальным значениями  
-=ЮрА=-
11.10.2011, 13:25
  #3

Не по теме:

PS:

Цитата Сообщение от spyhunter12 Посмотреть сообщение
const * *MAX_ELEMENTS = 8;
/* Объявление и инициализация переменных */
* * float * *m[MAX_ELEMENTS];
- это не совсем гуд, в общем случае мы должны вводить число элементов, а программа выделять память под массив;)

Цитата Сообщение от -=ЮрА=- Посмотреть сообщение
scanf("%d",&N);
* * * * //Выделяем память под массив
* * * * float *arr = (float *)malloc(N*sizeof(float));

1
spyhunter12
0 / 0 / 0
Регистрация: 15.12.2009
Сообщений: 17
11.10.2011, 13:44  [ТС] 4
Супер, спасибо большое, все очень доступно и понятно. А то в школе паскаль изучал, теперь надо на C перебираться))
0
spyhunter12
0 / 0 / 0
Регистрация: 15.12.2009
Сообщений: 17
11.10.2011, 13:58  [ТС] 5
Добавлено через 17 секунд
Цитата Сообщение от -=ЮрА=- Посмотреть сообщение
C
1
2
3
4
5
6
7
8
9
10
11
12
int flag = 0;//Сигнализирует о том что достигнут 
    //максимальный по модулю элемент
    float mult = 1;//произведение элементов массива, 
    //расположенных после максимального по модулю элемента.
    for(i = 0; i < N; i++)
    {
        if(MaxMod == fabs(arr[i]))
            flag = 1;
        if(flag == 1)
            mult *= arr[i];
    }
    printf("Proizved : %f\r\n",mult);
В вашем коде произведение вычисляется, начиная с того элемента, который является макс. по модулю, а в условии требуется произведение последующих элементов. Можно ли представить вот так?
C
1
2
3
4
5
6
7
8
9
10
11
12
int flag = 0;//Сигнализирует о том что достигнут 
    //максимальный по модулю элемент
    float mult = 1;//произведение элементов массива, 
    //расположенных после максимального по модулю элемента.
    for(i = 0; i < N; i++)
    {
        if(MaxMod == fabs(arr[i]))
            flag = 1;
        if(flag == 1)
            mult *= arr[i];
    }
    printf("Proizved : %f\r\n",mult/MaxMod);
0
aeshes
442 / 205 / 21
Регистрация: 07.10.2011
Сообщений: 462
11.10.2011, 14:02 6
в принципе можно. А еще при поиске максимального по модулю элемента можно было запомнить его индекс N_max и в цикле считать произведение элементов массива, начиная с N_max+1
0
spyhunter12
0 / 0 / 0
Регистрация: 15.12.2009
Сообщений: 17
11.10.2011, 14:06  [ТС] 7
Цитата Сообщение от aeshes Посмотреть сообщение
в принципе можно. А еще при поиске максимального по модулю элемента можно было запомнить его индекс N_max и в цикле считать произведение элементов массива, начиная с N_max+1
Не, не канает, только что проверил. Надо менять что-то в самом условии, а не в print'e
0
-=ЮрА=-
Заблокирован
Автор FAQ
11.10.2011, 14:17 8
Цитата Сообщение от spyhunter12 Посмотреть сообщение
Можно ли представить вот так?
- можно, но лучше сделать вот так
C++
1
2
3
4
5
6
7
8
for(i = 0; i < N; i++)
        {
                if(flag == 1)
                        mult *= arr[i];
                if(MaxMod == fabs(arr[i]))
                        flag = 1;
               
        }
Добавлено через 2 минуты
aeshes,
spyhunter12, прочтите мой 8-й пост, я не знал включать или нет в произведение сам Макс по модулю элемент, поэтому изначально включал и его, теперь программа будет считать произведение после максимального...
0
aeshes
442 / 205 / 21
Регистрация: 07.10.2011
Сообщений: 462
11.10.2011, 14:20 9
Цитата Сообщение от spyhunter12 Посмотреть сообщение
Не, не канает, только что проверил. Надо менять что-то в самом условии, а не в print'e
Точно, знаки теряются.
Ну тогда просто найди индекс максимального элемента и вычисляй произведение после него

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
        int N_max=0;
        for(i = 0; i < N; i++)
        {
                printf("arr[%d] = ",i + 1);
                scanf("%f",&arr[i]);
                if(C < arr[i])
                        num++;
                if(MaxMod < fabs(arr[i]))
                {
                        MaxMod = fabs(arr[i]);
                        N_Max=i;
                }
        }
        printf("Kol-vo > C : %d\r\n",num);
        printf("Max po Mod : %f\r\n",MaxMod);
        float mult = 1;//произведение элементов массива, 
        //расположенных после максимального по модулю элемента.
        for(i = N_max+1; i < N; i++)
        {
                         mult *= arr[i];
        }
-=ЮрА=-, а зачем вообще флажок?
1
spyhunter12
0 / 0 / 0
Регистрация: 15.12.2009
Сообщений: 17
11.10.2011, 14:30  [ТС] 10
Цитата Сообщение от -=ЮрА=- Посмотреть сообщение
- можно, но лучше сделать вот так
блин, по ходу я начинаю въезжать) то есть, если сначала было условие нахождения MaxMod, произведение начиналось с него) а сейчас идет условие flag, и когда находим MaxMod, он начинает произведение уже со следующего i) я правильно понял?

Добавлено через 3 минуты
Цитата Сообщение от aeshes Посмотреть сообщение
C
1
for(i = N_max+1; i < N;
кстати да, в паскале так делал) спасибо и за такой вариант
0
-=ЮрА=-
Заблокирован
Автор FAQ
11.10.2011, 14:46 11
spyhunter12, допустим i - соответсвует MaxMod = fabs(arr[i])
смотрим
C
1
2
3
flag == 0
if(MaxMod == fabs(arr[i])) - угу
                   flag = 1;
И теперь счёт начнём с i +1 итерации
PS:Не занимайся лишней работой
1
11.10.2011, 14:46
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
11.10.2011, 14:46

В одномерном массиве вычислить произведение элементов массива, расположенных между максимальным и минимальным элементами
Ребят помогите!) нужно решить одну задачку.. В одномерном массиве, состоящем из n ...

Найти сумму элементов массива, находящихся между максимальным и минимальным значениями
Найти сумму элементов массива А (45), находящихся между максимальным и минимальным значениями. Код...

Найти сумму элементов массива А (45), находящихся между максимальным и минимальным значениями.
Найти сумму элементов массива А (45), находящихся между максимальным и минимальным значениями....


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

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

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