Сформировать две последовательности, состоящих из четных и нечетных элементов исходной - C (СИ)

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

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

Дана последовательность из n целых элементов. Сформировать две новых последовательности, состоящих соответственно из четных и нечетных (по индексу) элементов исходной последовательности. Элементы в результирующих последовательностях должны быть отсортированы по убыванию. Все последовательности: исходную и полученные вывести на экран.

Решение задачи: «Сформировать две последовательности, состоящих из четных и нечетных элементов исходной»

textual
Листинг программы
#include <stdio.h>
#include <stdlib.h>
#include "time.h"
 
void Print_Arr(short* A, unsigned short N)
{
    register unsigned short i = 0;
    for(; i<N; i++)
    {
        printf("%d %s", A[i]," ");
    }
    printf("\n");
}
 
int main()
{
    srand(time(NULL));
    register unsigned short n, i,Swap;
    short temporary;
    n = rand()%100+3;
    short* B0;
    short* B1;
    short* A = (short*)malloc(n*sizeof(short));
    if(n&1)
    {
        B0 = (short*)malloc((n/2+1)*sizeof(short)); // последовательность с нечетных индексов
        B1 = (short*)malloc((n/2)*sizeof(short));   // последовательность с   четных индексов
    }
    else
    {
        B0 = (short*)malloc((n/2)*sizeof(short));
        B1 = (short*)malloc((n/2)*sizeof(short));
    }
    // заполняем последовательность элементами
    printf("%s"," ::: Входная последовательность ::: \n\n");
    for(i=0; i<n; i++)
    {
        A[i] = rand()%20;
        printf("%d %s",A[i]," ");
        if(i&1)
        {
            Swap =(i-1)/2;
            B0[Swap]=A[i];
        }
        else
        {
            Swap = (i/2);
            B1[Swap] = A[i];
        }
    }
    printf("\n");
 
    if(n&1)
        i = i/2;
    else
        i = i/2-1;
 
    for(; i!=65535; i--)
        for(Swap=(i); Swap!=65535; Swap--)
        {
            if(B0[i]>B0[Swap])
            {
                temporary = B0[i];
                B0[i] = B0[Swap];
                B0[Swap] = temporary;
            }
            if(B1[i]>B1[Swap])
            {
                temporary = B1[i];
                B1[i] = B1[Swap];
                B1[Swap] = temporary;
            }
        }
    printf("%s","\n ::: Последовательность с четными индексами ::: \n\n");
    if(n&1)
    {
        n = n/2+1;
        Print_Arr(B1,n);
        printf("%s","\n ::: Последовательность с нечетными индексами ::: \n\n");
        Print_Arr(B0,n-1);
    }
    else
    {
        n = n/2;
        Print_Arr(B1,n);
        printf("%s","\n ::: Последовательность с нечетными индексами ::: \n\n");
        Print_Arr(B0,n);
    }
 
    free(B1);
    free(B0);
    free(A);
    return 0;
}

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

Код разделяет входную последовательность на две последовательности, состоящие из четных и нечетных элементов, и сортирует их. Затем он выводит отсортированные последовательности.

  1. Объявлены следующие переменные:
    • n: количество элементов во входной последовательности (генерируется случайным образом и округляется до ближайшего большего числа, кратного 3)
    • i: индекс текущего элемента
    • Swap: временная переменная для обмена элементов
    • temporary: временная переменная для сохранения элемента
    • B0: массив для хранения нечетных элементов
    • B1: массив для хранения четных элементов
    • A: массив для хранения входной последовательности
  2. Если n нечетное, то выделяется память под B0 и B1 (количество элементов в B0 на 1 больше, чем в B1, так как n нечетное). Если n четное, то выделяется память только под B1, а B0 остается неинициализированным.
  3. Входная последовательность заполняется случайными элементами.
  4. Затем элементы входной последовательности сортируются в B0 и B1 с помощью алгоритма сортировки пузырьком.
  5. После сортировки выводятся отсортированные последовательности. Если n нечетное, то сначала выводится B1 (последовательность с четными индексами), затем B0 (последовательность с нечетными индексами). Если n четное, то сначала выводится B0, затем B1.
  6. В конце программы освобождается выделенная память и возвращается 0, что означает успешное выполнение программы.

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


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

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

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