一顾青山 发表于 2024-1-10 11:09:48

离散数学实验二

一、实验目的:二、实验内容:1、输入集合A和B,输出公式 file:///C:/Users/WANGTA~1/AppData/Local/Temp/msohtmlclip1/01/clip_image002.gif。2、输入a和b,输出其最小公倍数和最大公约数。3、验证:设A是有限的非空集合,|A|=n,对于A上的任意关系R, file:///C:/Users/WANGTA~1/AppData/Local/Temp/msohtmlclip1/01/clip_image004.gif=file:///C:/Users/WANGTA~1/AppData/Local/Temp/msohtmlclip1/01/clip_image006.gif三、实验语言:   采用matlab/C/C++语言实现。四、实验原理和实现过程(算法描述):实验原理1.差集(A - B):

思路: 将属于集合A但不属于集合B的元素找出来。
步骤: 遍历集合A的每个元素,检查它是否也在集合B中。如果不在B中,则该元素属于A - B。
对称差(A ⊕ B):

思路: 找出只属于A或只属于B的元素。
步骤: 遍历集合A和集合B的元素,对于每个元素,检查它是否只存在于其中一个集合中。如果是,则属于对称差。
交集(A × B):

思路: 找出同时属于集合A和集合B的元素。
步骤: 遍历集合A的每个元素,检查它是否也在集合B中。如果是,则该元素属于交集。 2.最大公约数:
思路: 利用欧几里得算法,通过反复用较小数除较大数并取余,直到余数为0,此时除数即为最大公约数。
最小公倍数:
思路: 利用最大公约数的性质,LCM(A, B) = (A * B) / GCD(A, B)。

五、实验数据及结果分析:1.2.file:///C:/Users/WANGTA~1/AppData/Local/Temp/msohtmlclip1/01/clip_image008.gif3. file:///C:/Users/WANGTA~1/AppData/Local/Temp/msohtmlclip1/01/clip_image010.gif4. 在有限集合A上,当i大于集合A的元素个数n时,再次进行关系的幂运算并取并集不再产生新的元素,因此对于 file:///C:/Users/WANGTA~1/AppData/Local/Temp/msohtmlclip1/01/clip_image012.gif中的关系元素,它们在 file:///C:/Users/WANGTA~1/AppData/Local/Temp/msohtmlclip1/01/clip_image014.gif中已经全部包含。因此,两者的并集是相等的。六、源程序清单:1.#include <stdio.h>

void printSet(int set[], int size) {
    for (int i = 0; i < size; ++i) {
      printf("%d ", set);
    }
    printf("\n");
}

void calculateSets(int A[], int sizeA, int B[], int sizeB) {
    // A - B (Difference)
    printf("A - B: ");
    for (int i = 0; i < sizeA; ++i) {
      int isInB = 0;
      for (int j = 0; j < sizeB; ++j) {
            if (A == B) {
                isInB = 1;
                break;
            }
      }
      if (!isInB) {
            printf("%d ", A);
      }
    }
    printf("\n");

    // A ⊕ B (Symmetric Difference)
    printf("A ⊕ B: ");
    for (int i = 0; i < sizeA; ++i) {
      int isInB = 0;
      for (int j = 0; j < sizeB; ++j) {
            if (A == B) {
                isInB = 1;
                break;
            }
      }
      if (!isInB) {
            printf("%d ", A);
      }
    }
    for (int i = 0; i < sizeB; ++i) {
      int isInA = 0;
      for (int j = 0; j < sizeA; ++j) {
            if (B == A) {
                isInA = 1;
                break;
            }
      }
      if (!isInA) {
            printf("%d ", B);
      }
    }
    printf("\n");

    // A × B (Intersection)
    printf("A × B: ");
    for (int i = 0; i < sizeA; ++i) {
      for (int j = 0; j < sizeB; ++j) {
            if (A == B) {
                printf("%d ", A);
                break;
            }
      }
    }
    printf("\n");
}

int main() {
    int sizeA, sizeB;

    // Input sizes of sets A and B
    printf("Enter the size of set A: ");
    scanf("%d", &sizeA);

    int A;
    printf("Enter elements of set A:\n");
    for (int i = 0; i < sizeA; ++i) {
      scanf("%d", &A);
    }

    printf("Enter the size of set B: ");
    scanf("%d", &sizeB);

    int B;
    printf("Enter elements of set B:\n");
    for (int i = 0; i < sizeB; ++i) {
      scanf("%d", &B);
    }

    // Calculate and print results
    calculateSets(A, sizeA, B, sizeB);

    return 0;
}2.#include <stdio.h>

// Function to calculate GCD (Euclidean algorithm)
int findGCD(int a, int b) {
    while (b != 0) {
      int temp = b;
      b = a % b;
      a = temp;
    }
    return a;
}

// Function to calculate LCM
int findLCM(int a, int b) {
    return (a * b) / findGCD(a, b);
}

int main() {
    int num1, num2;

    // Input two numbers
    printf("Enter the first number: ");
    scanf("%d", &num1);

    printf("Enter the second number: ");
    scanf("%d", &num2);

    // Calculate GCD and LCM
    int gcd = findGCD(num1, num2);
    int lcm = findLCM(num1, num2);

    // Output results
    printf("GCD of %d and %d is: %d\n", num1, num2, gcd);
    printf("LCM of %d and %d is: %d\n", num1, num2, lcm);

    return 0;
}七、其他收获和体会:
页: [1]
查看完整版本: 离散数学实验二