В целочисленном векторе vector(n) найти его вторые по значению минимальный и максимальный элементы и поменять их местами - C (СИ)

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

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

Задание 1 В целочисленном векторе vector(n) найти его вторые по значению минимальный и максимальный элементы и поменять их местами. Предусмотреть случай, когда таких элементов нет. Входные данные: n=10 v_min=-5 v_max=10 Исходный вектор: 7 -5 1 3 -2 5 2 0 10 1 Выходные данные: min_2=-2 n_min_2=5 max_2=7 n_max_2=1 Выходной вектор: -2 -5 1 3 7 5 2 0 10 1

Решение задачи: «В целочисленном векторе vector(n) найти его вторые по значению минимальный и максимальный элементы и поменять их местами»

textual
Листинг программы
#include <stdio.h>
#include <conio.h>
 
#define N 10
 
void swap(int& n1, int& n2)
 { int _tn = n1; n1 = n2; n2 = _tn; } 
 
int main()
{
    int A[N] = { 3, 5, 7, 1, 2, 4, 6, 9, 8, 5 };
 
    for (int i = 0; i < N; i++)
        printf("%d ",A[i]);
    printf("\n");
 
    int n = 2, last_min = 0, last_max = 0;
    while (--n >= 0)
    {
        int min = 0, max = 0;
        for (int t = 0; t < N; t++)
        {
            min = ((A[t] < A[min]) && 
                ((A[t] != A[last_min]) || (n >= 1))) ? t : min;
            max = ((A[t] > A[max]) && 
                ((A[t] != A[last_max]) || (n >= 1))) ? t : max;
        }
 
        last_min = min; last_max = max;
    }
 
    swap(A[last_min],A[last_max]);
 
    for (int r = 0; r < N; r++)
        printf("%d ",A[r]);
    printf("\n");
 
    _getch();
 
    return 0;
}

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

В этом коде ищется вторые по значению минимальный и максимальный элементы в векторе, затем они меняются местами. Вот список действий:

  1. Объявляются массив и функция
    • int A[N] = {3, 5, 7, 1, 2, 4, 6, 9, 8, 5}; - инициализация массива
    • void swap(int& n1, int& n2); - объявление функции для обмена элементов
  2. Вывод начального содержимого массива
    • for (int i = 0; i < N; i++) printf(%d ,A[i]); printf(\n); - цикл вывода элементов массива
  3. Начальные итерации цикла поиска вторых по значению минимального и максимального элементов
    • int n = 2, last_min = 0, last_max = 0; - инициализация переменных
    • while (--n >= 0) - цикл прохода по всем элементам, начиная со второго
  4. Поиск вторых по значению минимального и максимального элементов
    • int min = 0, max = 0; - инициализация переменных
    • for (int t = 0; t < N; t++) - цикл прохода по всем элементам массива
    • min = ((A[t] < A[min]) && ((A[t] != A[last_min]) || (n >= 1))) ? t : min; - поиск второго по значению минимального элемента
    • max = ((A[t] > A[max]) && ((A[t] != A[last_max]) || (n >= 1))) ? t : max; - поиск второго по значению максимального элемента
  5. Обновление последних найденных минимального и максимального элементов
    • last_min = min; - обновление значения last_min
    • last_max = max; - обновление значения last_max
  6. Обмен найденных минимального и максимального элементов
    • swap(A[last_min],A[last_max]); - вызов функции для обмена элементов
  7. Вывод измененного содержимого массива
    • for (int r = 0; r < N; r++) printf(%d ,A[r]); printf(\n); - цикл вывода элементов массива
  8. Завершение работы программы
    • _getch(); - получение ввода от пользователя (не используется в данном коде)
    • return 0; - завершение работы программы

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


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

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

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