Найти произведение элементов массива, расположенных между максимальным и минимальным элементами - C (СИ)

  1. Ребят, подскажите хотя бы с чего начать и как делать Необходимо в одномерном массиве,состоящем из N вещественных элементов, вычислить: 1) Сумму отрицательных элементов массива 2) Произведение элементов массива, расположенных между максимальным и минимальным элементами 3)Заполнить его случайными значениями и распечатать его по 10 чисел в строке 4) Упорядочить элементы массива по возрастанию


textual

Код к задаче: «Найти произведение элементов массива, расположенных между максимальным и минимальным элементами - C (СИ)»

#include <stdio.h>
#include <stdlib.h>
#include <time.h>
 
int is_negative(const int n)
{
    return n < 0;
}
 
int sum_if(const int *ptr, size_t count, int (*predicate)(int))
{
    int s = 0;
    while (count--)
    {
        if (predicate(*ptr))
        {
            s += *ptr;
        }
        ptr++;
    }
    return s;
}
 
const int* max_element(const int* begin, const int* end)
{
    const int* max = begin;
    while (++begin != end)
    {
        if (*begin > *max)
        {
            max = begin;
        }
    }
    return max;
}
 
const int* min_element(const int* begin, const int* end)
{
    const int* min = begin;
    while (++begin != end)
    {
        if (*begin < *min)
        {
            min = begin;
        }
    }
    return min;
}
 
int accumulate(const int* begin, const int *end, int start_value, int (*func)(int, int))
{
    while (begin != end)
    {
        start_value = func(start_value, *begin++);
    }
    return start_value;
}
 
int mul(int n1, int n2)
{
    return n1 * n2;
}
 
void fill(int *ptr, size_t size)
{
    while (size--)
    {
        *ptr++ = rand() % 20 - 10;
    }
}
 
void dump(const int *ptr, size_t size, size_t in_row_count)
{
    size_t i = 0;
    for (; i < size; i++)
    {
        printf("%d ", *ptr++);
        if ((i + 1) % in_row_count == 0)
        {
            putchar('\n');
        }
    }
}
 
int compare_int(const void* ptr1, const void *ptr2)
{
    return *(const int*)ptr1 - *(const int*)ptr2;
}
 
int main()
{
    const int *min, *max, *buf;
    int array[45];
    srand(time(NULL));
    fill(array, 45);
    dump(array, 45, 10);
    printf("\nNegative elemets sum: %d\n", sum_if(array, 45, is_negative));
    
    min = min_element(array, array + 45);
    max = max_element(array, array + 45);
    if (min > max)
    {
        buf = min;
        min = max;
        max = buf;
    }
    printf("Between max and min: %d\n", accumulate(min + 1, max, 1, mul));
    qsort(array, 45, sizeof(int), compare_int);
    dump(array, 45, 45);
    putchar('\n');
    return EXIT_SUCCESS;
}

СДЕЛАЙТЕ РЕПОСТ

15   голосов, оценка 3.867 из 5



Похожие ответы
  1. Здравствуйте! Данная "программа" должна обрабатывать числа, расстояние между которыми меньше 5, а также находить среди таких двух чисел самое большее чётное произведение. КОМПИЛИРУЕТСЯ ВСЁ НОРМАЛЬНО, НО ИСПОЛЬНЯТЬ ЭТА ГАДЮКА НИЧО НЕ ХОЧЕТ ИМЕННО В СЛУЧАЕ, КОГДА НА ВХОД ПОСУТПАЕТ БОЛЕЕ 5 ЧИСЕЛ. Т.е. цикл for(i=5;i int main(void) {   char j,c;      int i;      int n;      int a[5];      int x;      int max=-1;           scanf("%d",&n);     for (i=0;i<=4;i++){         scanf("%d",&a[i]);         }     for (i=5;imax )&&  (a[j-1]*a[c]%2 ==0))                     max=a[c]*a[j-1];                                             }                     }                 for (j=0;j<4;j++){             a[j]=a[j+1];         }         a[4]=x;         }      if (max==-1)          printf("-1");     else printf ("%d",max);     getchar();     getchar();     return 0; }Добавлено через 9 минут Тэкс... Счётчик тут должен робить... Тэк... Вывод массива когда у его индекса чото вычитаем тоже работает... Угу... Кажется я как-то выхожу из границ массива, но я в упор не могу разглядеть этого... Так, падажжи еманаДобавлено через 37 секунд лол, разглядеть он не может, у тебя две строки где идут пляски с массивамми, там же очевидно и ошибкаДобавлено через 3 минуты эхх, пойти спать или сожжрать таки хлеб с пащтетом? но тогда изжога будет от паштета с хлебом, я не хочу изжоги, антиацида нет с собой

  1. Задана последовательность из N вещественных чисел. Определить сколько чисел меньше K, равно K и больше K. (массив random )

  1. Добрый вечер! Дан массив M*N. Необходимо отсортировать ее по строкам так, чтобы вначале шли все положительные элементы, отсортированные по убыванию, а затем все остальные, отсортированные по возрастанию (если в строке имеются нули - переставить их в конец строки). Вывести получившуюся матрицу. У меня проблема с перестановкой нулей. C1 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 #include     int main()     {   int N, M,t, i,j,k, mas[10][10]={0}, q;         printf("VVEDITE N,M \n");     scanf("%d%d", &N,&M);     printf("VVEDITE MASSIV \n");       for (i=0; i < N; i++)        for (j=0; j < M; j++)            scanf ("%d", &mas[i][j]);       for(k = 0; k < N; k++){     for(i = 0 ; i < M; i++){         for(j = i + 1; j < M; j++){               if((mas[k][i] < mas[k][j]) && (mas[k][i]!=0)){                       t = mas[k][i];                     mas[k][i] = mas[k][j];                     mas[k][j] = t;               }         }     } }   if (mas[i][j]<0) {     } {   for(k = 0; k < N; k++){         for(i = 0 ; i < M; i++){             for(j = i + 1; j < M; j++){                   if(mas[k][i] < mas[k][j]) {                       t = mas[k][i];                     mas[k][i] = mas[k][j];                     mas[k][j] = t;               }         }     } } } for(i = 0 ; i < M; i++)     {         for(j = 0; j < M; j++)             if (mas[i][j]==0)         {                 for ( q = j; q < N-1 ; q++)                 {                     mas[i][q] = mas[i][q + 1];                 }                 mas[N-1][M-1] = 0;           }     }   for (i=0; i < N; i++)        {for (j=0; j < M; j++)               printf ("%d\t", mas[i][j]);        printf (" \n");}   getch();}

  1. Сформировать массив из элементов исходных массивов, больших второго элемента первого массива и положительных элементов второго массива. Требуется сформировать новый массив по заданию. В программе реализовать: 1) генерацию случайным образом элементов исходных массивов; 2) выполнение действия в соответствии с условием задачи; 3) порядок вывода: • исходные массивы, • сформированный массив, если он был сформирован. В противном случае – соответствующее сообщение. Помогите, а то не могу сделать

  1. Найти максимальный элемент и поменять его местами с последним элементом массива. В программе предусмотреть и реализовать: 1) генерацию элементов исходного массива с помощью датчика случайных чисел; 2) выполнение в соответствии с условием задачи; 3) порядок вывода: • исходный массив, • максимальный или минимальный элемент массива и его номер, • массив, полученный в результате выполнения задания.

  1. Заполнить одномерный массив вводом с клавиатуры. Выяснить верно ли что сумма элементов массива есть чётное число.

  1. Я написала программу с двумя элементами ввода массивов, но результат выводит не неверный и после выбора ручного ввода программа вылетает. Помогите пожалуйстаC1 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 #include #include #include #include #include #include #define N 500 #define MIN 80 int main(void) { setlocale (0, "rus"); int a[N],n,i, min=a[0], nummin=0, sum=0, nol=0, k; srand((unsigned)time(NULL)); printf ( " Определите характер заполнения: 1- автоматическое, 2- вручную"); printf("\n"); scanf("%d",&k);   switch(k) { case 1: { printf("vvedite n - "); scanf("%d",&n); for (i=0; ia[i])           {               printf("\n");               min=a[i];              nummin=i;}         for (i=nummin+1; i

  1. Добрый вечер! Не подскажите где ошибка? При запуске программы вылезает окно с ошибкой. Вроде часть где массив заполняется верна. Само задание: В заданном массиве A[N][N] найдите суммы элементов в каждой строке. Сформируйте одномерный массив S[N], содержащий полученные суммы, расположенные в порядке возрастания.C1 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 #define _CRT_SECURE_NO_WARNINGS #include #include #include int main() {   int **a;  // указатель на массив   int n,sum ;   printf("Enter n: ");     scanf("%i", &n);    int i=0, j=0;     a = (int**)malloc(n * sizeof(int));   // Ввод элементов массива   for (i = 0; i

  1. Вроде всё работает, программа считает сумму элементов матрицы. Но она выводит все результаты, и промежуточные. Вот они мне и не нужны, а нужна только итоговая сумма, что изменить для этого? Ну и второе, каким образом можно изменить эту же программу, чтобы она осуществляла поиск индекса элемента, вводимого с клавиатура. В случае, если такого элемента нет - вывод фразы, что его нет. Заранее благодарю.C1 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 #include   main() {       int A[10][10],i,j,n,m,S=0;     printf("Razmer stroki:");     scanf("%d",&n);     printf("Razmer stolba:");     scanf("%d",&m);     for(i=0;i

  1. Написать программу вывода элементов одномерного массива при наличии чисел заглушек и с правильным порядком индексации C1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 #include #include     int main(){     int a[10] = {-1, 7, 1, 3, 1, -1, 4, -1, 6, 5 };   int  i = 0;               for(i = 0; i < sizeof(a)/ sizeof(*a); ++i)            if (a[i] != -1 )    printf ("a[%d]= %d\n", i, a[i]);    return 0; }Помогите вывести правильную индексацию массива