Переписать в обратном порядке элементы вещественного массива, расположенные между минимумом и максимумом - C (СИ)
Формулировка задачи:
2)Переписать в обратном порядке элементы вещественного массива, расположенные между минимумом и максимумом массива. Все элементы массива различны.
Решение задачи: «Переписать в обратном порядке элементы вещественного массива, расположенные между минимумом и максимумом»
textual
Листинг программы
#include <stdio.h>
#include <time.h>
#include <Windows.h>
#define SIZE 20
// (rand() % (max + 1 - min)) + min
int main(int argc, char *argv[])
{
srand(time(NULL));
int arr[SIZE], min, max, i, max_pos = 0, min_pos = 0;
int temp_element = 0;
for (i = 0; i < SIZE; i++) {
arr[i] = rand() % 99 + 1;
printf("%2d ",arr[i]);
}
min = arr[0];
max = arr[0];
for (i = 0; i < SIZE; i++) {
if (arr[i] < min) {
min = arr[i];
min_pos = i;
}
if (arr[i] > max) {
max = arr[i];
max_pos = i;
}
}
printf("\nmin pos %d, max pos %d\n", min_pos, max_pos);
int counter;
int *ptr_min = &arr[min_pos];
int *ptr_max = &arr[max_pos];
if (max_pos > min_pos) {
for (i = min_pos, counter = 0; i < max_pos-counter; i++, counter++)
{
temp_element = arr[i];
arr[i] = arr[max_pos - counter];
arr[max_pos - counter] = temp_element;
}
}
else if (min_pos > max_pos) {
for (i = max_pos, counter = 0; i < min_pos-counter; i++, counter++)
{
temp_element = arr[i];
arr[i] = arr[min_pos - counter];
arr[min_pos - counter] = temp_element;
}
}
else {
printf("Minimum and maximum elements have the same index. Cannot evaluate \n");
return 0;
}
for (i = 0; i < SIZE; i++) {
printf("%2d ", arr[i]);
}
system("\npause");
return 0;
}
Объяснение кода листинга программы
В этом коде:
- Объявлен массив arr типа int размерностью SIZE, и инициализированы начальные значения переменных min и max равными первому элементу массива.
- Заполняется массив arr случайными числами от 1 до 99 с помощью функции rand().
- Находятся индексы минимального и максимального элементов массива с помощью цикла for и сравнениями.
- Выводится на экран индексы минимального и максимального элементов.
- Создаются указатели на минимальный и максимальный элементы.
- Если индекс максимального элемента больше индекса минимального элемента, то производится перестановка элементов в обратном порядке с помощью цикла for и временной переменной temp_element.
- Если индекс минимального элемента больше индекса максимального элемента, то производится перестановка элементов в обратном порядке с помощью цикла for и временной переменной temp_element.
- Если индекс минимального и максимального элементов одинаковый, то выводится сообщение об ошибке и программа завершается.
- Выводится на экран обновленный массив arr.
- Программа ожидает нажатия клавиши с помощью функции system(
\npause). - Программа завершается.