Сформировать две последовательности, состоящих из четных и нечетных элементов исходной - 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; }
Объяснение кода листинга программы
Код разделяет входную последовательность на две последовательности, состоящие из четных и нечетных элементов, и сортирует их. Затем он выводит отсортированные последовательности.
- Объявлены следующие переменные:
n
: количество элементов во входной последовательности (генерируется случайным образом и округляется до ближайшего большего числа, кратного 3)i
: индекс текущего элементаSwap
: временная переменная для обмена элементовtemporary
: временная переменная для сохранения элементаB0
: массив для хранения нечетных элементовB1
: массив для хранения четных элементовA
: массив для хранения входной последовательности
- Если
n
нечетное, то выделяется память подB0
иB1
(количество элементов вB0
на 1 больше, чем вB1
, так какn
нечетное). Еслиn
четное, то выделяется память только подB1
, аB0
остается неинициализированным. - Входная последовательность заполняется случайными элементами.
- Затем элементы входной последовательности сортируются в
B0
иB1
с помощью алгоритма сортировки пузырьком. - После сортировки выводятся отсортированные последовательности. Если
n
нечетное, то сначала выводитсяB1
(последовательность с четными индексами), затемB0
(последовательность с нечетными индексами). Еслиn
четное, то сначала выводитсяB0
, затемB1
. - В конце программы освобождается выделенная память и возвращается 0, что означает успешное выполнение программы.
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д