Нужно сделать без мах (Упорядочить элементы массива по убыванию) - 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;
}
Объяснение кода листинга программы
- Ввод 5 чисел с клавиатуры, сохраняемых в массиве arr[5].
- Переменные:
- nomin (именитель) содержит индекс наименьшего элемента.
- nomax (номер максимального элемента) содержит индекс наибольшего элемента.
- pr (произведение) используется для хранения произведения элементов, помещённых в кортеж.
- buf (буфер) используется для временного хранения значений при перестановке элементов.
- Находим индекс наименьшего и наибольшего элемента массива с использованием функции abs() для получения абсолютного значения числа.
- Если наименьший элемент больше, чем два предыдущих, то меняем его местами с последним, а последний элемент помещаем на первое место.
- Если произведение элементов в кортеже (от nomin+1 до nomax) не равно наименьшему элементу, то находим произведение этих элементов и сохраняем в переменной pr.
- Сортировка массива по возрастанию с использованием алгоритма пузырька.
- Вывод отсортированного массива на экран.
- Возврат 0, т.е. успешный конец работы программы.