Найти разницу между массивами - C (СИ)
Формулировка задачи:
Допустим есть два массива целых чисел:
Числа упорядочены по возрастанию. Известно также количество элементов в том и в другом массиве.
Нужно найти элементы, которые добавились. То есть в приведенном выше примере должны быть выведены числа 121 и 122, потому что их нет в массиве n1.
int n1[] = {1, 12, 123, 1234}; int n2[] = {1, 12, 121, 122, 123, 1234};
Решение задачи: «Найти разницу между массивами»
textual
Листинг программы
#include <stdio.h> void array_sdiff(FILE* _out, const int* f1, const int* l1, const int* f2, const int* l2){ while((f1 != l1) && (f2 != l2)){ if(*f1 < *f2) fprintf(_out, "%d ", *f1++); else if(*f1 > *f2) fprintf(_out, "%d ", *f2++); else { ++f1; ++f2; } } while(f1 != l1) fprintf(_out, "%d ", *f1++); while(f2 != l2) fprintf(_out, "%d ", *f2++); } int main(void){ int n1[] = {1, 12, 123, 1234}; int n2[] = {1, 12, 121, 122, 123, 1234}; array_sdiff(stdout, n1, n1 + sizeof(n1)/sizeof(n1[0]), n2, n2 + sizeof(n2)/sizeof(n2[0])); return 0; }
Объяснение кода листинга программы
- В данном коде реализуется функция
array_sdiff
, которая вычисляет разность между двумя массивами целых чисел. - Функция принимает в качестве аргументов:
- указатель на файл, в который будет выводиться результат (по умолчанию это stdout).
- указатели на начало и конец первого массива.
- указатели на начало и конец второго массива.
- Внутри функции используется два вложенных цикла
while
, которые выполняются до тех пор, пока не будут выполнены два условия:f1
иf2
не станут равнымиl1
иl2
соответственно (т.е. пока не будут пройдены все элементы массивов).- значение текущего элемента массива
f1
не станет меньше значения текущего элемента массиваf2
(т.е. пока элементы не будут увеличиваться).
- Если выполняется первое условие, то выводится значение текущего элемента массива
f1
(илиf2
, если условие не выполняется), после чегоf1
иf2
инкрементируются на 1. - Если выполняется второе условие, то выводится значение текущего элемента массива
f2
(илиf1
, если условие не выполняется), после чегоf1
иf2
инкрементируются на 1. - Если оба условия не выполняются, то значения текущих элементов массивов сравниваются. Если значение
f1
меньше значенияf2
, то выводится значениеf1
, после чегоf1
иf2
инкрементируются на 1. Если значениеf1
больше значенияf2
, то выводится значениеf2
, после чегоf1
иf2
инкрементируются на 1. Если значения равны, то оба указателя инкрементируются на 1 без вывода значения. - После выхода из вложенных циклов, функция продолжает работу и выводит все оставшиеся элементы первого массива, а затем все оставшиеся элементы второго массива.
- В функции
main
создаются два массива целых чисел:n1
иn2
. - Затем вызывается функция
array_sdiff
с указанием вывода в stdout и указателями на начало и конец обоих массивов. - В конце функции возвращается 0, что означает успешное выполнение программы.
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д