Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > C/C++ программирование > Общие вопросы C/C++
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 01.04.2012, 11:16   #1
MrRifleman
Пользователь
 
Регистрация: 24.03.2012
Сообщений: 13
Вопрос Задача на массив

В одномерном массиве, состоящем из n вещественных элементов, вычислить: 1) сумму положительных элементов массива; 2) произведение элементов массива, расположенных между максимальным по модулю и минимальным по модулю элементами. Упорядочить элементы массива по убыванию.

Помогите плиз

Код:
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
#include <math.h>
 
void fill(float *arr, int size)
{
        int i;
        for(i = 0; i < size; i++)
                arr[i] = (float)(rand() % 100 - rand() % 100) / 10.0;
}
 
void show(float *arr, int size)
{
        int i;
        for(i = 0; i < size; i++)
                printf("%.2f ", arr[i]);
        printf("\n");
}
 
float sum(float *arr, int size)
{
        int i;
        float sum = 0.0;
        for(i = 0; i < size; i++)
                if (arr[i] > 0)
                        sum += arr[i];
        return sum;
}
 
int main()
{
        const int size = 10;
        float max, min;
        int max_pos, min_pos, i;
        float p = 1.0;
        float *arr = (float*) malloc(sizeof(float) * size);
        srand(time(NULL));
        fill(arr, size);
        max = arr[max_pos = 0];
        min = arr[min_pos = 0];
        for(i = 0; i < size; i++)
        {
                if (fabs(arr[i]) > max)
                        max = fabs(arr[max_pos = i]);
                if (fabs(arr[i]) < min)
                        min = fabs(arr[min_pos = i]);
        }
        if (max_pos < min_pos)
        {
                i = max_pos;
                max_pos = min_pos;
                min_pos = i;
        }
        for(i = min_pos + 1; i < max_pos; i++)
                p *= arr[i];
        show(arr, size);
        printf("Min abs: %.3f\n", arr[min_pos]);
        printf("Max abs: %.3f\n", arr[max_pos]);
        printf("Sum: %.4f\n", sum(arr, size));
        printf("P: %.4f\n", p);
        free(arr);
        system("pause");
        return 0;
}
В коде есть ошибка, неправильно считает произведение, и по ходу не правильно находит по модулю + дополните по убыванию

Последний раз редактировалось MrRifleman; 01.04.2012 в 11:38.
MrRifleman вне форума Ответить с цитированием
Старый 01.04.2012, 11:33   #2
_Bers
Старожил
 
Регистрация: 16.12.2011
Сообщений: 2,329
По умолчанию

http://www.programmersforum.ru/showthread.php?t=34061
_Bers вне форума Ответить с цитированием
Старый 01.04.2012, 13:55   #3
LiuLiuJons
Форумчанин
 
Регистрация: 28.12.2011
Сообщений: 124
По умолчанию

Вот тут у вас ошибка была, при инициализации:
Код:
		max_pos = 0;
        max = fabs(arr[0]);
		min_pos = 0;
        min = fabs(arr[0]);
Надо было задать модули и здесь.

А сортировку легко сделаете, если это всё сами писали, вот примеры:
сортировка
"Думай не о задаче, а о решении" (с)
LiuLiuJons вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Задача на массив. glebast Помощь студентам 2 03.01.2012 16:43
задача на массив diamn3452 Паскаль, Turbo Pascal, PascalABC.NET 0 19.12.2011 18:07
Задача на массив serg93 Помощь студентам 2 19.10.2011 16:50
Задача на массив Jack125 Помощь студентам 1 13.11.2010 18:23
Задача на массив Юрии Александрович Паскаль, Turbo Pascal, PascalABC.NET 5 08.12.2007 15:32