Нужно сделать без мах (Упорядочить элементы массива по убыванию) - 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, т.е. успешный конец работы программы.
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д