Сформировать две последовательности, из положительных и отрицательных элементов исходной последовательности - C (СИ)
Формулировка задачи:
Дана последовательность из n целых элементов . Сформировать две новых последовательности, состоящих соответственно из положительных и отрицательных элементов исходной последовательности. Элементы в результирующих последовательностях должны быть отсортированы по возрастанию. Все последовательности: исходную и полученные вывести на экран.
Решение задачи: «Сформировать две последовательности, из положительных и отрицательных элементов исходной последовательности»
textual
Листинг программы
#include <stdio.h> #include <stdlib.h> #include <locale.h> #include <time.h> #include <string.h> #define N 20 int compare(const void *a1, const void *a2) { return *(int*)a1 - *(int*)a2; } void rnd(int* init_seq) { srand(time(0)); for(unsigned i = 0; i < N;++i) init_seq[i] = rand()%200+(-100); } void print(int* seq,unsigned size) { for(unsigned i = 0; i < size;++i) { if(i && !(i%5)) printf("\n"); printf("array[%u]:%d\t",i,seq[i]); } printf("\n"); } void split(int* init_seq,int** split_seq,unsigned* sizes) { int temp_seq[2][N]; for(unsigned i = 0; i < N;++i) { if(init_seq[i] < 0) temp_seq[1][sizes[1]++] = init_seq[i]; else temp_seq[0][sizes[0]++] = init_seq[i]; } for(unsigned i = 0;i < 2;++i) { split_seq[i] = (int*)malloc(sizes[i]*sizeof(int)); memcpy(split_seq[i],temp_seq[i],sizes[i]*sizeof(int)); qsort(split_seq[i],sizes[i],sizeof(int),compare); } } int main() { setlocale(LC_ALL,"Russian"); int init_seq[N]; rnd(init_seq); int* split_seq[2] = {0,0}; unsigned sizes[2] = {0,0}; printf("Исходная последовательность:\n"); print(init_seq,N); split(init_seq,split_seq,sizes); printf("Первая последовательность:\n"); print(split_seq[0],sizes[0]); printf("Вторая последовательность:\n"); print(split_seq[1],sizes[1]); for(unsigned i = 0; i < 2; ++i) free(split_seq[i]); return 0; }
Объяснение кода листинга программы
- Включаем необходимые заголовочные файлы для работы с языком C
- Определяем константу N, которая задает размер последовательности
- Создаем функцию сравнения, которая будет использоваться в функции qsort
- Создаем функцию rnd, которая случайным образом заполняет исходную последовательность значениями от -100 до 199
- Создаем функцию print, которая выводит элементы последовательности на экран
- Создаем функцию split, которая разделяет исходную последовательность на две части (положительные и отрицательные элементы) и сортирует их
- В функции main устанавливаем локальную настройку на русский язык
- Создаем массив init_seq и заполняем его случайными значениями с помощью функции rnd
- Создаем двумерный массив split_seq и двумерный массив sizes для хранения полученных последовательностей
- Выводим исходную последовательность на экран с помощью функции print
- Разделяем исходную последовательность на две части с помощью функции split и сохраняем полученные последовательности в массив split_seq
- Выводим первую последовательность (положительные элементы) на экран с помощью функции print
- Выводим вторую последовательность (отрицательные элементы) на экран с помощью функции print
- Освобождаем память, выделенную под массивы split_seq с помощью функции free
- Завершаем программу и возвращаем 0
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д