Сформировать третий массив на основе данных исходных массивов, который также упорядочен - C (СИ)

Узнай цену своей работы

Формулировка задачи:

В общем, задание следующее: 1. Даны два целочисленных массива 2. Реализуйте алгоритмы сортировок данных массивов. 3. Сформировать третий массив на основе данных, который также упорядочен и представляет операцию с элементами исходных массивов: • объединение (содержит числа, принадлежащие хотя бы одному из множеств); • перечисление (числа, принадлежащие обоим множествам); • разность (числа, принадлежащие первому множеству, но не второму); • симметричную разность (объединение разностей множеств). И то, что у меня получилось:
#include <stdio.h>
#include <conio.h>
#include <stdlib.h>
 
void BubbleSort (int* a, int n) // Определение функции сортировки пузырьком
    {
        int tmp, i, j;
        for (i = 0; i < n - 1; i++)
            for (j = 0; j < n - 1; j++)
                if (a[j + 1] < a[j])
                    {
                        tmp = a[j +1];
                        a[j + 1] = a[j];
                        a[j] = tmp;
                    }
    }
void PryamoyVibor (int* b, int n) // Определение функции сортировки прямым выбором
    {
        int i, j, k;
        for (i = 0; i < n; i++)
            {
                k = i;
                for (j = i + 1; j < n; j++)
                    if (b[j] < b[k]) k = j;
                j = b[k];
                b[k] =b[i];
                b[i] = j;
            }
    }
int main ()
{
    const int n = 20;
    int a[n], b[n], c[40], d[40], i, j, k, q, w, r, count = 1;
    clrscr();
 
    printf (" Pervonachalniy massiv a[%d]: \n", n);         // Ввод массива а рандомными числами от 0 до 700
    for (i=0;i<n;i++)
        {
            a[i] = 0+rand()%700;
            printf ("%d ", a[i]);
        }
    printf ("\n\n Pervonachalniy massiv b[%d]: \n", n);     // Ввод массива b рандомными числами от 0 до 700
    for (i=0;i<n;i++)
        {
            b[i] = 0+rand()%700;
            printf ("%d ", b[i]);
        }
 
    BubbleSort (a, n);              // Вызов функции сортировки пузырьком для массива а
    printf ("\n\n Massiv a[%d], ostortirovanniy metodom puzirka: \n", n);
    for (i = 0; i < n; i++)
        printf ("%d ", a[i]);
 
    PryamoyVibor (b, n);            // Вызов функции сортировки прямым выбором для массива b
    printf ("\n\n Massiv b[%d], ostsortirovanniy metodom pryamogo vibora: \n", n);
    for (i = 0; i < n; i++)
        printf ("%d ", b[i]);
 
    for (i = 0, q = 0; i < n; i++)  // Объединение массивов a и b в один массив c
        c[q++] = a[i];
    for (j = 0; j < n; j++)
        c[q++] = b[j];
    PryamoyVibor (c, q);            // Вызов функции сортировки прямым выбором для нового массива c
 
    int temp=c[0];                  // Поиск одинаковых элементов в массиве c
    for (i=1; i<q; i++)
        {
            if(c[i]!=temp)
                {
                    for (j=i+1; j<q; j++)
                        if(c[i]==c[j])
                            c[j]=temp;
                    count++;
                }
        }
    count=0;    
    for (i=1; i<q; i++)             // Удаление одинаковых элементов в массиве c
        if (c[i]!=c[0])
            c[++count]=c[i];
    printf("\n\n Objedinenie massivov a[%d] i b[%d] (%d elementov):\n", n, n, count + 1); // Вывод на экран массива c, содержащего объединение двух массивов
    for (i=0; i<=count; i++)
        printf("%d ", c[i]);
 
    for (i = 0, w = 0; i < n; i++)
        for (j = 0; j < n; j++)
            if (a[i] == b[j])
                d[w++] = a[i];
    printf ("\n\n Peresechenie massivov a[%d] i b[%d] (%d element): \n", n, n, w);  // Вывод на экран массива d, содержащего пересечение двух массивов
    for (i = 0; i < w; i++)
        printf ("%d ", d[i]);
 
    getch();
    return 0;
}
Никак не могу сделать две последние операции - простую и симметричную разность.

Решение задачи: «Сформировать третий массив на основе данных исходных массивов, который также упорядочен»

textual
Листинг программы
    count = 0;
    temp = 0;
 
    for(i=0; i<n;i++)
    {
        for(j=0;j<n;j++)
        {
            if(a[i]==b[j])
            {
                temp = 1; //если есть одинаковые числа в массивах
            }
        }
        if(!temp) // если их нет, то отнести число к разности
        {
            c[count] = a[i];
            count++;
        }
        temp = 0;
    }
    printf ("\n\n Raznoct' massivov a[%d] i b[%d] (%d element): \n", n, n, count);
    for(i=0;i<count;i++)
        printf("%d ",c[i]);
 
    temp = 0;
    // абсолютно также, только для второго массива, счетчик count со старым значением
    for(i=0; i<n;i++)
    {
        for(j=0;j<n;j++)
        {
            if(b[i]==a[j])
            {
                temp = 1;
            }
        }
        if(!temp)
        {
            c[count] = b[i];
            count++;
        }
        temp = 0;
    }
 
    BubbleSort(c , count);
 
    printf ("\n\n Cumutru4naya raznoct' massivov a[%d] i b[%d] (%d element): \n", n, n, count);
    for(i=0;i<count;i++)
        printf("%d ",c[i]);

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

Выполняемый код:

  1. Инициализируются переменные:
    • count - счетчик количества уникальных чисел;
    • temp - временная переменная.
  2. В цикле for перебираются все элементы первого массива a.
  3. Внутри цикла for перебираются все элементы второго массива b.
  4. Если текущие элементы a[i] и b[j] равны, то значение переменной temp изменяется на 1, что означает, что текущее число уже было учтено как уникальное.
  5. Если после проверки всех элементов второго массива значение переменной temp осталось равным 0, то текущее число из первого массива добавляется в конец результирующего массива c и увеличивается значение счетчика count.
  6. После завершения первой части кода выводится количество уникальных чисел в массивах a и b и эти числа выводятся на экран.
  7. Затем выполняется аналогичная первой часть кода, но уже для второго массива.
  8. После завершения второй части кода вызывается функция BubbleSort, которая сортирует результирующий массив c по возрастанию.
  9. Выводится отсортированный массив c на экран.

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


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

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

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