Фикс программы сравнения множеств чисел (Си)

Реализую программу сравнения множеств,в целом программа работает нормально до момента ввода во множество одинаковых чисел,я пытался это как то исправить но мой способ работает тольо если повторения находяться в конце множества,в середине и в начале это вызывает проблемы и ламает программу.Прошу вашей помощи.

#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
#include <math.h>
#include <string.h>

void main()
{
    int input[10] = { 0 };
    int input1[10] = { 0 };
    int a;
    int b;
    int q;
    int mark = 0;
    int mark1 = 0;
    int marker=0;
    int marker1 = 0;
    printf("Enter a number of elements you want to place in first plural : ");
    scanf("%d", &a);
    for (int i = 0; i < a; i++)
    {
        scanf("%d", &q);
        
        for (int j = 0; j < a; j++)
        {
            if (q == input[j])
            {
                //printf("Error");
                mark=1;
                
            }

        }

        if (mark != 1)
        {
            input[i]=q;
        }

        else
        {
            mark1++;
        }
        

    }
    a -= mark1;
    printf("The plural you entered :\n");
    for (int i = 0; i < a; i++)
    {
        if (a == 1)
        {
            printf("{%d}", input[i]);
        }

        else
        {
            if (i == 0)
            {
                printf("{%d,", input[i]);
            }

            else if (i == (a - 1))
            {
                printf("%d}", input[i]);
            }

            else
            {
                printf("%d,", input[i]);
            }
        }
    }

    mark = 0;
    mark1 = 0;

    printf("\nEnter a number of elements you want to place in second plural : ");
    scanf("%d", &b);
    for (int i = 0; i < b; i++)
    {
        scanf("%d", &q);

        for (int j = 0; j < b; j++)
        {
            if (q == input1[j])
            {
                printf("Error");
                mark = 1;

            }

        }

        if (mark != 1)
        {
            input1[i] = q;
        }

        else
        {
            mark1++;
        }


    }
    b -= mark1;


    printf("The plural you entered :\n");
    for (int i = 0; i < b; i++)
    {
        if (b == 1)
        {
            printf("{%d}", input1[i]);
        }

        else
        {
            if (i == 0)
            {
                printf("{%d,", input1[i]);
            }

            else if (i == (b - 1))
            {
                printf("%d}", input1[i]);
            }

            else
            {
                printf("%d,", input1[i]);
            }
        }
    }

    for (int i = 0; i < a; i++)
    {
        for (int j = 0; j < b; j++)
        {
            if (input[i] == input1[j])
            {
                marker++;
            }
        }

    }
    //printf("%d", marker);

    for (int i = 0; i < b; i++)
    {
        for (int j = 0; j < a; j++)
        {
            if (input1[i] == input[j])
            {
                marker1++;
            }
        }

    }
    //printf("%d", marker1);

    if((marker == a) && (marker1 == b))
    {
        printf("\nB=A");
    }

    else if (marker1 == b)
    {
        printf("\nB->A");
    }

    else if (marker == a)
    {
        printf("\nA->B");
    }

    else if((marker == 0) && (marker1==0))
    {
        printf("\nA!=B");
    }

    else if ((marker != a) && (marker1 != b) && (marker != 0) && (marker1!=0) )
    {
        printf("\nAB");
    }

    
}

Я не успел нормально описать код да и время поджимает поэтому если будут возникать вопросы - задавайте

Программа должна проверять числовые множества на их взаимное расположение, пересекаются они или нет, и одна из множеств под множеством другой A->B (A - под множество B ) B=A (В под множество А и наоборот) A!=B(множества не пересекаются) AB (множества пересекаются)

Через цикл for я считываю поочередно элементы множества в q,а потом сравнивая с элементами массива решаю что делать с ним дальше, пустить в массив или нет.Для сравнения множеств я использовал целый ряд маркеров которые выступают чем то типо мощности множества.

По моему предположению проблема заключается в том что если цифра введённая в q уже есть в массиве то ячейка массива пропускается что и создаёт проблему.


Ответы (1 шт):

Автор решения: MarshalStroheim
#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
#include <math.h>
#include <string.h>

void main()
{
  int input[10] = { 0 };
  int input1[10] = { 0 };
  int a;
  int b;
  int q;
  int mark = 0;
  int mark1 = 0;
  int marker=0;
  int marker1 = 0;
  printf("Enter a number of elements you want to place in first plural : ");
  scanf("%d", &a);
  for (int i = 0; i < a; i++)
  {
    printf("\nEnter element %d ", i+1);
    scanf("%d", &q);
    
    for (int j = 0; j < a; j++)
    {
      if (q == input[j])
      {
        //printf("Error");
        mark=1;
        
      }

    }

    if (mark != 1)
    {
      input[i]=q;
    }

    else
    {
      mark1++;
      mark = 0;
      i--;
      printf("\nError\n");
    }
    

  }
  //a -= mark1;
  printf("The plural you entered :\n");
  for (int i = 0; i < a; i++)
  {
    if (a == 1)
    {
      printf("{%d}", input[i]);
    }

    else
    {
      if (i == 0)
      {
        printf("{%d,", input[i]);
      }

      else if (i == (a - 1))
      {
        printf("%d}", input[i]);
      }

      else
      {
        printf("%d,", input[i]);
      }
    }
  }

  mark = 0;
  mark1 = 0;

  printf("\nEnter a number of elements you want to place in second plural : ");
  scanf("%d", &b);
  for (int i = 0; i < b; i++)
  {
    printf("\nEnter element %d ", i + 1);
    scanf("%d", &q);

    for (int j = 0; j < b; j++)
    {
      if (q == input1[j])
      {
        //printf("Error");
        mark = 1;

      }

    }

    if (mark != 1)
    {
      input1[i] = q;
    }

    else
    {
      mark1++;
      mark = 0;
      i--;
      printf("\nError\n");
    }


  }
  
  printf("The plural you entered :\n");
  for (int i = 0; i < b; i++)
  {
    if (b == 1)
    {
      printf("{%d}", input1[i]);
    }

    else
    {
      if (i == 0)
      {
        printf("{%d,", input1[i]);
      }

      else if (i == (b - 1))
      {
        printf("%d}", input1[i]);
      }

      else
      {
        printf("%d,", input1[i]);
      }
    }
  }

  for (int i = 0; i < a; i++)
  {
    for (int j = 0; j < b; j++)
    {
      if (input[i] == input1[j])
      {
        marker++;
      }
    }

  }
  //printf("%d", marker);

  for (int i = 0; i < b; i++)
  {
    for (int j = 0; j < a; j++)
    {
      if (input1[i] == input[j])
      {
        marker1++;
      }
    }

  }
  //printf("%d", marker1);

  if((marker == a) && (marker1 == b))
  {
    printf("\nThe sets are equal ");
  }

  else if (marker1 == b)
  {
    printf("\nthe set B is a subset of the set A ");
  }

  else if (marker == a)
  {
    printf("\nthe set А is a subset of the set В ");
  }

  else if((marker == 0) && (marker1==0))
  {
    printf("\nSets do not intersect ");
  }

  else if ((marker != a) && (marker1 != b) && (marker != 0) && (marker1!=0) )
  {
    printf("\nThe sets intersect ");
  }

  
}
→ Ссылка