Функции и массивы в С++

Тема: Обработка одномерных массивов ( с использованием функций)

Задание

Заполнить два массива, размером 20 и 30 элементов, соответственно, случайными целыми числами в диапазоне от –50 до 50. Из полученных двух массивов создайте два массива отдельно отрицательных и положительных чисел. Проведите сортировку полученных массивов по возрастанию. Для контроля результата сделайте распечатку массивов, в том числе исходного.
Сортировки проведите тремя методами. При использовании каждого из методов желательно использовать свой массив. Если количество массивов меньше трех, то один из массивов перед сортировкой надо скопировать в дополнительный массив и провести его сортировку.

Листинг 2 обработка массивов через функции.

#include <stdio.h>
#include <stdlib.h>
#include <locale.h>
#include <time.h>
#define   Nx 20
#define   Ny 30
#define   Nres 50

inline void rus()  // Русификация вывода в консольное окно
{
    setlocale( LC_CTYPE, ".1251" );
    setlocale( LC_MONETARY, ".1251" );

}
void randomize()
{
    srand(time(0));
}

unsigned int random(int range)
{
    return (rand() % range);
}
void CreateMassiv(int *c, int n, int Range)
{
    int i;
     for (i=0;i<n;i++)  {        /* i - is a namber of row       */
      *(c+i) = -50+random(Range);
                       }
}

void PrintMassiv(int *c, int from, int n)
{
    int i;
     for (i=from;i<n;i++)  {        /* i - is a namber of row       */
      printf("%d ",(*(c+i)));
                       }
}

void MoveToMassiv(int *c,int *po, int *ot, int n, int *p, int *o)
{
    int i;
  for (i=0;i<n;i++)  {        /* i - is a namber of row       */
      if (*(c+i)>0) {*(po+(*p))=*(c+i);(*p)++;}
      if (*(c+i)<0) {*(ot+(*o))=*(c+i);(*o)++;}
                    }
}

void CopyMassiv(int *from, int *to, int n)
{
    int i;
     for (i=0; i<n; i++)
       *(to+i+1)=*(from+i);

}
void Sort1Massiv(int *c, int n)
{
    int i,j;
         for ( j=0; j<n-1;j++)
{

    for ( i=0; i<n-1;i++)
    {
        if (*(c+i)>*(c+i+1))
       {
           int temp = *(c+i);
           *(c+i) = *(c+i+1);
           *(c+i+1)=temp;
       }
    }
}
}
/* Сортировка методом прямого поиска */
void Sort2Massiv(int *c, int n)
{
    int i,j;
   int m,min;
  for (i=0;i<n-1;i++) /* в переменной i - индекс первого элемента
   массива, то есть массив от c[i] до c[N] */
    {  /* Найти минимум в массиве от i-того до N-ного */
      m=i; min=(*c+i); /* m-индекс минимума, min-значение минимума */
      for (j=i+1;j<n; j++) /* Поиск в оставшейся части массива */
 {
    if (*(c+j)<min)  /* Найдено новое значение минимума? */
      { min=*(c+j); m=j; } /* Запомнить минимум и его индекс */
 }
      /* Обменять первый (i-ый) и минимум (m-ый) местами */
      *(c+m)=*(c+i); *(c+i)=min;
    }
}
void Sort3Massiv(int *c, int n)
{
     int i,m=0;
/* Сортировка методом прямого включения */
  for (i=2; i<=n; i++) /* в переменной i-индекс включаемого элемента */
    {       /* включение i-того элемента */
      m=i; // Начальное значение индекса цикла включения
      *c=*(c+i); // Установка барьера
      while (*(c+m)<*(c+m-1)) // включение
  { //  Обмен с предыдущим элементом местами
      int tmp   = *(c+m);  *(c+m)  = *(c+m-1); *(c+m-1)= tmp;
      m--; // включение идет к началу массива
 };
    };
}

int main()
{

    int  i, j, range;
    rus();
    randomize();
    int x[Nx];
    int y[Ny];
    int pol[Nres];
    int otr[Nres];
    int pol2[Nres];
    range=100;
   // Создаем одномерный массив
  CreateMassiv(x, Nx, range);
   // Вывод одномерного массива
  printf("Распечатка массива \n");
  PrintMassiv(x,0,Nx);
   // Создаем одномерный массив
  CreateMassiv(y, Ny, range);
  // Вывод одномерного массива
  printf("\n Распечатка массива \n");
  PrintMassiv(y,0,Ny);

// раскидываем массив х и у
int jpol=0, jotr=0;
MoveToMassiv(x,pol,otr, Nx, &jpol, &jotr);
MoveToMassiv(y,pol,otr, Ny, &jpol, &jotr);
 // Создаем доп массив для сортировки (по заданию)
CopyMassiv(pol, pol2, jpol);

//сортировка массива pol
if (jpol>=1) { //если в массиве больше 1 елемента
 Sort1Massiv(pol, jpol);
           }
//сортировка массива otr
if (jotr>=1) { //если в массиве больше 1 елемента
 Sort2Massiv(otr,jotr);
}

//сортировка массива pol2
if (jpol>=1) {//если в массиве больше 1 елемента
 Sort3Massiv(pol2, jpol);
    }

  // Вывод одномерных массивов
  printf("\n Распечатка массива otr \n");
  PrintMassiv(otr,0,jotr);

    printf("\n Распечатка массива pol \n");
  PrintMassiv(pol,0,jpol);

  printf("\n Распечатка массива pol2 \n");
  PrintMassiv(pol2,1,jpol+1);

 return 0;
}

Листинг 2 обработка массивов без функций здесь