Нужно сделать без мах (Упорядочить элементы массива по убыванию) - C (СИ)

Узнай цену своей работы

Формулировка задачи:

вот код программы препод сказал что можно сделать без мах но я без понятия как...
#include <stdio.h>
#include <math.h>

int main(void)
{
    const int N = 5;
    int arr[N];
    int i;
 
    for(i = 0; i < N; i++)
    {
        printf("Vvedite znachenia massiva %d=>",i);
        scanf("%d", &arr[i]);
    }
 
    int min = abs(arr[0]);
    int max = abs(arr[0]);
    int nomin = 0 ;
    int nomax = 0 ;
    int pr = 1;
    int buf;
 
    for(i = 1; i < N; i++)
    {
        if (abs( arr[i]) > max)
        {
            max = abs (arr[i]);
            nomax = i;
        }
        if (abs( arr[i]) < min)
        {
            min = abs (arr[i]);
            nomin = i;
        }
    }
 
    if(nomin > nomax)
    {
        buf=nomin;
        nomin=nomax;
        nomax=buf;
    }
 
    if (nomin < nomax && nomin != nomax && nomax != nomin-1 && nomax != nomin+1)
    {
        for(i = nomin+1; i < nomax;i++)
        {
            pr*=arr[i];
        }
 
    }
 
    printf("pr= %d\n\n",pr);
 
    int j;
    for (i=0; i<N;i++)
    {
        for (j = 0; j < N-i-1; j++)
        {
            if (arr[j]<arr[j+1])
            {
                buf = arr[j];
                arr[j] = arr[j+1];
                arr[j+1] = buf;
            }
        }
    }
 
    for(i=0;i<N;i++)
    {
        printf("%d ",arr[i]);
    }
 
    return 0;
}

Решение задачи: «Нужно сделать без мах (Упорядочить элементы массива по убыванию)»

textual
Листинг программы
#include <stdio.h>
#include <math.h>
#define N 5
int main(void)
{
    int arr[N];
    int i, j;
    int nomin = 0 ;
    int nomax = 0 ;
    int pr = 1;
    int buf;
 
    for(i = 0; i < N; i++)
    {
        printf("Vvedite znachenia massiva %d=>",i);
        scanf("%d", &arr[i]);
    }
    for(i = 1; i < N; i++)
    {
        if (abs( arr[i]) > abs(arr[nomax]))
        {
            nomax = i;
        }
        if (abs( arr[i]) < abs(arr[nomin]))
        {
            nomin = i;
        }
    }
 
    if(nomin > nomax)
    {
        buf=nomin;
        nomin=nomax;
        nomax=buf;
    }
 
    if (nomin < nomax && nomin != nomax && nomax != nomin-1 && nomax != nomin+1)
    {
        for(i = nomin+1; i < nomax;i++)
        {
            pr*=arr[i];
        }
 
    }
 
    printf("pr= %d\n\n",pr);
 
    for (i=0; i<N;i++)
    {
        for (j = 0; j < N-i-1; j++)
        {
            if (arr[j]<arr[j+1])
            {
                buf = arr[j];
                arr[j] = arr[j+1];
                arr[j+1] = buf;
            }
        }
    }
 
    for(i=0;i<N;i++)
    {
        printf("%d ",arr[i]);
    }
    return 0;
}

Объяснение кода листинга программы

  1. Ввод 5 чисел с клавиатуры, сохраняемых в массиве arr[5].
  2. Переменные:
    • nomin (именитель) содержит индекс наименьшего элемента.
    • nomax (номер максимального элемента) содержит индекс наибольшего элемента.
    • pr (произведение) используется для хранения произведения элементов, помещённых в кортеж.
    • buf (буфер) используется для временного хранения значений при перестановке элементов.
  3. Находим индекс наименьшего и наибольшего элемента массива с использованием функции abs() для получения абсолютного значения числа.
  4. Если наименьший элемент больше, чем два предыдущих, то меняем его местами с последним, а последний элемент помещаем на первое место.
  5. Если произведение элементов в кортеже (от nomin+1 до nomax) не равно наименьшему элементу, то находим произведение этих элементов и сохраняем в переменной pr.
  6. Сортировка массива по возрастанию с использованием алгоритма пузырька.
  7. Вывод отсортированного массива на экран.
  8. Возврат 0, т.е. успешный конец работы программы.

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

Оцени полезность:

10   голосов , оценка 4.2 из 5
Похожие ответы