Как найти декартово произведение двух множеств

голоса
0

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

У меня возникли проблемы написания кода для вычисления декартово произведение двух множеств , т.е. Set 1 = 1,2& Set 2 =3,4

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

#include <stdio.h>
#include <conio.h>

main() {
    int i, j, k, p, ch, n1, n2, set1[10], set2[10], set3[20], flag;
    int wish;

    printf(\n Enter the size of sets1 \n);
    scanf_s(%d, &n1);
    printf(\n Enter the element of set1 \n);
    for (i = 0; i < n1; i++)
        scanf_s(%d, &set1[i]);
    printf(\n Enter the size of sets2 \n);
    scanf_s(%d, &n2);
    printf(\n Enter the elements of set2 \n);
    for (i = 0; i < n2; i++)
        scanf_s(%d, &set2[i]);

    do {
        printf(\n Menu for set operations);
        printf(\n press 1 for DIFFERENCE);
        printf(\n press 2 for CARTESIAN PRODUCT);
        printf(\n Enter your Choice);
        scanf_s(%d, &ch);
        switch (ch) {
          case 1://for difference
            k = 0;
            for (i = 0; i < n1; i++) {
                flag = 1;
                for (j = 0; j < n2; j++) {
                    if (set1[i] == set2[j]) {
                        flag = 0;
                        break;
                    }
                }
                if (flag == 1) {
                    set3[k] = set1[i];
                    k++;
                }
            }
            p = k;
            for (k = 0; k < p; k++) {
                printf( %d, set3[k]);
            }
            break;

          case 2: //for cartesian product 
            k = 0;
            for (i = 0; i < n1; i++) {
                flag = 1;
                for (j = 0; j < n2; j++) {
                }
            }
        }
        printf(\n Do you want to continue(0/1)? );
        scanf_s(%d, &wish);
    } while (wish == 0);
    getch();
}
Задан 20/10/2018 в 05:32
источник пользователем
На других языках...                            


1 ответов

голоса
1

Просто добавьте printf("{%d, %d}, ", set1[i], set2[j]); для печати cartesianпродукта. Вы должны использовать scanfвместо scanf_s Разница между зсапЕ и scanf_s

печать результат в {} {} {} .. формат

 case 2: //for cartesian product 

     /*
      A={1,2}  and B={3,4}
      Cartesian product of A and B is A x B = {{1,3},{1,4},{2,3},{2,4}}


       */

                for (i = 0; i < n1; i++)
                {

                    for (j = 0; j < n2; j++)
                    {

                        //print cartesian product of two set

                        printf("{%d, %d} ", set1[i], set2[j]); 

                    }
                }

Печать результата в {{}, {}, ...} формат

 case 2: //for cartesian product 

            printf("{");

            for (i = 0; i < n1; i++)
            {
                for (j = 0; j < n2; j++)
                {

                   if(i==n1-1 && j==n2-1)
                            printf("{%d, %d} ", set1[i], set2[j]); 
                    else
                       printf("{%d, %d}, ", set1[i], set2[j]); 

                }
            }

            printf("}");
Ответил 20/10/2018 в 05:57
источник пользователем

Cookies help us deliver our services. By using our services, you agree to our use of cookies. Learn more