Сформировать третий массив на основе данных исходных массивов, который также упорядочен - 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
на экран.
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д