Найти разницу между массивами - C (СИ)

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

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

Допустим есть два массива целых чисел:
int n1[] = {1, 12, 123, 1234};
int n2[] = {1, 12, 121, 122, 123, 1234};
Числа упорядочены по возрастанию. Известно также количество элементов в том и в другом массиве. Нужно найти элементы, которые добавились. То есть в приведенном выше примере должны быть выведены числа 121 и 122, потому что их нет в массиве n1.

Решение задачи: «Найти разницу между массивами»

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;
}

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

  1. В данном коде реализуется функция array_sdiff, которая вычисляет разность между двумя массивами целых чисел.
  2. Функция принимает в качестве аргументов:
    • указатель на файл, в который будет выводиться результат (по умолчанию это stdout).
    • указатели на начало и конец первого массива.
    • указатели на начало и конец второго массива.
  3. Внутри функции используется два вложенных цикла while, которые выполняются до тех пор, пока не будут выполнены два условия:
    • f1 и f2 не станут равными l1 и l2 соответственно (т.е. пока не будут пройдены все элементы массивов).
    • значение текущего элемента массива f1 не станет меньше значения текущего элемента массива f2 (т.е. пока элементы не будут увеличиваться).
  4. Если выполняется первое условие, то выводится значение текущего элемента массива f1 (или f2, если условие не выполняется), после чего f1 и f2 инкрементируются на 1.
  5. Если выполняется второе условие, то выводится значение текущего элемента массива f2 (или f1, если условие не выполняется), после чего f1 и f2 инкрементируются на 1.
  6. Если оба условия не выполняются, то значения текущих элементов массивов сравниваются. Если значение f1 меньше значения f2, то выводится значение f1, после чего f1 и f2 инкрементируются на 1. Если значение f1 больше значения f2, то выводится значение f2, после чего f1 и f2 инкрементируются на 1. Если значения равны, то оба указателя инкрементируются на 1 без вывода значения.
  7. После выхода из вложенных циклов, функция продолжает работу и выводит все оставшиеся элементы первого массива, а затем все оставшиеся элементы второго массива.
  8. В функции main создаются два массива целых чисел: n1 и n2.
  9. Затем вызывается функция array_sdiff с указанием вывода в stdout и указателями на начало и конец обоих массивов.
  10. В конце функции возвращается 0, что означает успешное выполнение программы.

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


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

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

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