Сформировать третий массив на основе данных исходных массивов, который также упорядочен - 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]);
Объяснение кода листинга программы
Выполняемый код:
- Инициализируются переменные:
count
- счетчик количества уникальных чисел;temp
- временная переменная.
- В цикле
for
перебираются все элементы первого массиваa
. - Внутри цикла
for
перебираются все элементы второго массиваb
. - Если текущие элементы
a[i]
иb[j]
равны, то значение переменнойtemp
изменяется на 1, что означает, что текущее число уже было учтено как уникальное. - Если после проверки всех элементов второго массива значение переменной
temp
осталось равным 0, то текущее число из первого массива добавляется в конец результирующего массиваc
и увеличивается значение счетчикаcount
. - После завершения первой части кода выводится количество уникальных чисел в массивах
a
иb
и эти числа выводятся на экран. - Затем выполняется аналогичная первой часть кода, но уже для второго массива.
- После завершения второй части кода вызывается функция
BubbleSort
, которая сортирует результирующий массивc
по возрастанию. - Выводится отсортированный массив
c
на экран.
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д