Листинг обработки одномерных массивов

Тема: Обработка одномерных массивов

Задание

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

#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);
}

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;
   for (i=0;i<Nx;i++)  {        /* i - is a namber of row       */
      *(x+i) = -50+random(range);
                       }
  // Вывод одномерного массива
  printf("Распечатка массива \n");
  for (i=0; i<Nx; i++)  //заметьте еще раз, проверяется условие i<N
    printf("%d ",(*(x+i)));

   for (i=0;i<Ny;i++)  {        /* i - is a namber of row       */
      *(y+i) = -50+random(range);
                       }

  // Вывод одномерного массива
  printf("\n Распечатка массива \n");
  for (i=0; i<Ny; i++)  //заметьте еще раз, проверяется условие i<N
    printf("%d ",(*(y+i)));

   for (i=0;i<Nres;i++)  {        /* i - is a namber of row       */
      *(pol+i) = 1000;
      *(otr+i) = -1000;
                         }
// раскидываем массив х
int jpol=0, jotr=0;
for (i=0;i<Nx;i++)  {        /* i - is a namber of row       */
      if (*(x+i)>0) {*(pol+jpol)=*(x+i);jpol++;}
      if (*(x+i)<0) {*(otr+jotr)=*(x+i);jotr++;}
                    }

// раскидываем массив y

for (i=0;i<Ny;i++)  {        /* i - is a namber of row       */
      if (*(y+i)>0) {*(pol+jpol)=*(y+i);jpol++;}
      if (*(y+i)<0) {*(otr+jotr)=*(y+i);jotr++;}
                    }

 // Создаем доп массив для сортировки (по заданию)

  for (i=0; i<jpol; i++)  //
   *(pol2+i+1)=*(pol+i);

//сортировка массива pol
if (jpol>=1) {
    for (int j=0; j<jpol-1;j++)
{

    for (int i=0; i<jpol-1;i++)
    {
        if (*(pol+i)>*(pol+i+1))
       {
           int temp = *(pol+i);
           *(pol+i) = *(pol+i+1);
           *(pol+i+1)=temp;
       }
    }
}
           }

//сортировка массива otr
if (jotr>=1) {
  int m,min;
/* Сортировка методом прямого поиска */
  for (i=0;i<jotr-1;i++) /* в переменной i - индекс первого элемента
   массива, то есть массив от d[i] до d[N] */
    {  /* Найти минимум в массиве от i-того до N-ного */
      m=i; min=(*otr+i); /* m-индекс минимума, min-значение минимума */
      for (j=i+1;j<jotr; j++) /* Поиск в оставшейся части массива */
 {
    if (*(otr+j)<min)  /* Найдено новое значение минимума? */
      { min=*(otr+j); m=j; } /* Запомнить минимум и его индекс */
 }
      /* Обменять первый (i-ый) и минимум (m-ый) местами */
      *(otr+m)=*(otr+i); *(otr+i)=min;
    }
}

//сортировка массива pol2
if (jpol>=1) {
           int m=0;
/* Сортировка методом прямого включения */
  for (i=2; i<=jpol; i++) /* в переменной i - индекс включаемого элемента */
    {       /* включение i-того элемента */
      m=i; // Начальное значение индекса цикла включения
      *pol2=*(pol2+i); // Установка барьера
      while (*(pol2+m)<*(pol2+m-1)) // включение
  { //  Обмен с предыдущим элементом местами
      int tmp = *(pol2+m); *(pol2+m) = *(pol2+m-1); *(pol2+m-1)= tmp;
      m--; // включение идет к началу массива
 };
    }; }

  // Вывод одномерного массива
  printf("\n Распечатка массива otr \n");
  for (i=0; i<jotr; i++)  //
    printf("%d ",(*(otr+i)));
    printf("\n Распечатка массива pol \n");
  for (i=0; i<jpol; i++)  //
    printf("%d ",(*(pol+i)));
  printf("\n Распечатка массива pol2 \n");
  for (i=1; i<=jpol; i++)  //
    printf("%d ",(*(pol2+i)));

 return 0;
}

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

Один комментарий к “Листинг обработки одномерных массивов

Обсуждение закрыто.