Сформировать две последовательности, из положительных и отрицательных элементов исходной последовательности - 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;
}

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

  1. Включаем необходимые заголовочные файлы для работы с языком C
  2. Определяем константу N, которая задает размер последовательности
  3. Создаем функцию сравнения, которая будет использоваться в функции qsort
  4. Создаем функцию rnd, которая случайным образом заполняет исходную последовательность значениями от -100 до 199
  5. Создаем функцию print, которая выводит элементы последовательности на экран
  6. Создаем функцию split, которая разделяет исходную последовательность на две части (положительные и отрицательные элементы) и сортирует их
  7. В функции main устанавливаем локальную настройку на русский язык
  8. Создаем массив init_seq и заполняем его случайными значениями с помощью функции rnd
  9. Создаем двумерный массив split_seq и двумерный массив sizes для хранения полученных последовательностей
  10. Выводим исходную последовательность на экран с помощью функции print
  11. Разделяем исходную последовательность на две части с помощью функции split и сохраняем полученные последовательности в массив split_seq
  12. Выводим первую последовательность (положительные элементы) на экран с помощью функции print
  13. Выводим вторую последовательность (отрицательные элементы) на экран с помощью функции print
  14. Освобождаем память, выделенную под массивы split_seq с помощью функции free
  15. Завершаем программу и возвращаем 0

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


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

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

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