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

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

Задание

Заполнить одномерный массив неповторяющимися числами в диапазоне от -30 до +70. Распечатать одномерный массив. Найти минимальное значение в массиве и его индекс. Сделать дубликат массива в динамической области памяти. Провести сортировку массива-дубликата методом прямого поиска. Распечатать результат сортировки. Удалить дубликат из динамической памяти.

#include <stdio.h>
#include <stdlib.h>
#include <locale.h>
#include <time.h>

#define   N 15

// 1. Инициализация генератора случайных чисел
void Randomize()
{
    srand(time(0));
}
//2. Генератор случайного числа в диапазоне от 0 до range
int Random(int range)
{
    return (rand() % range);
}
// 3. Проверка повторения случайного числа
// c -  указатель начала  массива, n - индекс нового элемента
int Test_Repetition(int *c, int n)
{ int x, j;
    x = 0;       // Считаем, что значение новое
    // Цикл сравнения со всеми предыдущими
    for (j=0; j<n; j++)
        if (*(c+n)==*(c+j))
            {
                x = 1; // Элементы совпали
                break;
            }
    return x;
}
// 4. Добавить новый элемент
// с - указатель начала  массива, n - номер нового элемента
// range1, range2 – левая и правая границы диапазона
void New_Item(int *c, int n, int range1, int range2)
{   int x = 0; // Элементы массива разные
    do
    {
        c[n] = Random(range2 - range1) + range1; // Новое значение
        x =Test_Repetition(c,n); // Проверка на повторение
    }
    while (x==1); // Повторять, когда элементы совпали
}
// 5. Заполнение одномерного массива
// c - массив, n - количество элементов
void Filling (int *c, int n, int range1, int range2)
{       int  i;
    c[0]=Random (range2 - range1) + range1; // Элемент с индексом 0.
    // Цикл заполнения массива
    for (i=1;i<n; i++)  // Цикл заполнения элементов значениями
        New_Item(c, i, range1, range2);
}
// 6. Распечатка одномерного массива
void Print(int *c, int n)
{   int i;
    for (i=0; i<n; i++)
        printf("%4d",c[i]);
    puts(""); // Переход на новую строку
}
// 7. Поиск минимального значения
// с – указатель на начало одномерного массива,
// n - количество элементов массива,
// index – указатель на индекс минимума
int Min(int *c, int n, int *index)
{ int i, min;
    min = c[0]; // Начальное значение минимума
    (*index) = 0; // Начальное значение индекса минимума
    for  ( i=1; i<n; i++ )
        if (c[i]<min)
            {
                min = c[i];
                (*index) = i;
            }
    return min;
}
// 8. Создание дубликата массива в динамической памяти
int * Copy (int *c, int n)
{ int *m, i;
// Резервирование памяти под дубликат массива
    m = (int*)malloc(sizeof(int)*n);
    // Копирование массива
    for ( i = 0; i<n; i++ ) m[i] = c[i];
    // Функция возвращает адрес нового массива
    return m;
}
// 9. Обмен элементов местами в массиве
void Exchange (int *c, int n, int k)
{ int tmp; //Переменная для временного хранения данных
    tmp = c[n];
    c[n] = c[k];
    c[k] = tmp;
}
// 10 .Сортировка методом прямого поиска
void SearchSort ( int *c, int n )
{ int i, min, indexMin; int *p;
     for ( i=0; i<n-1; i++) // Определить массив с индексами от i до n
        {  p = (c+i); // Задать адрес начала массива
             min = Min (p, n-i, &indexMin); // Найти минимум в массиве
            // Обменять местами минимальный элемент с первым
            Exchange ( p, 0, indexMin );        }
}

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

void Title()
{
    puts("");
    puts("Задание:\n");
}

// Главная функция
int main()
{
    int m[N];
    int min, IndexMin;
    int *Duplicate;

    Rus();
    Randomize();
    Title();
    puts("\nЗаполнение массива");
    Filling(m,N,-30,70);
    puts("\nРаспечатка массива\n");
    Print (m,N);
    puts("\nМинимальное значение массива\n");
    min = Min(m,N,&IndexMin);
    printf("min = %d его индекс = %d \n", min, IndexMin);
    puts("\nСоздание дубликата массива\n");
    Duplicate = Copy(m,N);
    puts("\nРаспечатка дубликата массива\n");
    Print (Duplicate,N);
    puts("\nСортировка дубликата методом прямого поиска");
    SearchSort(Duplicate,N);
    puts("\nРаспечатка дубликата массива после сортировки\n");
    Print (Duplicate,N);
    puts("\nУдаление дубликата");
    free(Duplicate);
    return 0;
}