1

Тема: Бінарне відношення - рефлективність

Добрий день всім! В мене є такий предмет зараз як дискретна математика і ось власне з нього мені дали написати програму! Суть полягає в тому - Написати програму яка досліджує властивість рефлективність ( хто не знає це коли який небудь елемент перебуває сам із собою!). Якщо по простіше ось приклад:

1. Спочатку задаємо множину, наприклад ( A B C D ).
2. Потім задаємо пари відношень, наприклад (A-A, A-B, B-B, C-C, D-D)
3. Тепер формуємо матрицю бінарних відношень:

   A B C D
A 1 0 0 0
B 1 1 0 0
C 0 0 1 0
D 0 0 0 1

Як бачите від пар залежить, наприклад пара А-А то буде 1 в матриці ну і так далі!
Головна властивість рефлексивності - Якщо по діагоналі стоять 1-ки то матриця рефлексивна!

Ось власне функція яка шукає:

int ref (int m[4][4], int k){
    int q;
    for (int i = 0; i<k; i++){
            if (m[i][i]==0){  // Якщо на діагоналі є 0 - НІ, не рефлексивно
                q=0;
                break;
            }
            else q=1; //Інакше - Так, рефлексивно
        }
    return q;
}

Ось власне потрібно допомога!!Потрібно зробити як вводити множинну, потім пари відношень, а головне як цю матрицю сформувати!!!Дякую наперед!!

2

Re: Бінарне відношення - рефлективність

А от введу я не два, а три елементи "А". Що тоді?

3

Re: Бінарне відношення - рефлективність

Що означає для початку "Потрібно зробити як вводити множинну"? Множинну що? Куди вводити?

4

Re: Бінарне відношення - рефлективність

Bartash написав:

А от введу я не два, а три елементи "А". Що тоді?

Тоді це буде не бінарне, а тернарне відношення.

5

Re: Бінарне відношення - рефлективність

І блін, рефлексивність це не "коли який небудь елемент перебуває сам із собою!", це коли будь-який елемент з області значень відношення перебуває у відношенні сам з собою.

Навчіться писати зрозуміліше.

6 Востаннє редагувалося sardar2222 (31.03.2013 17:14:10)

Re: Бінарне відношення - рефлективність

бінарне відношення R на множині X є рефлексивним якщо для кожного a ∈ X виконується aRa, до чого сюди 3 елементи? Як сформувати матрицю такого вигляду як я кинув??? Спочатку потрібно, щоб сформувалась квадратна матриця розміру множини заповнена нулями! По горизонталі і вертикалі, щоб стояли сама множинна (для виглядку). а потім наприклад зчитує одну пару відношення А-А і в заданій матриці цей елемент заповнює 1, коли всі пари пройдуть, функція перевірить чи по діагоналі всі одинички, тоді ці пари відношень множини будуть рефлексивні

7

Re: Бінарне відношення - рефлективність

bunyk написав:
Bartash написав:

А от введу я не два, а три елементи "А". Що тоді?

Тоді це буде не бінарне, а тернарне відношення.

Я не про те.
Якщо у нас буде відношення бінарне "А-А", а множину ввести з трьома елементами "А", то як вони розмістяться у матриці?

З.І: здс, я тут почав розуміти суть: порушиться рефлексивність, так?

8

Re: Бінарне відношення - рефлективність

Bartash написав:

Якщо у нас буде відношення бінарне "А-А", а множину ввести з трьома елементами "А", то як вони розмістяться у матриці?

З.І: здс, я тут почав розуміти суть: порушиться рефлексивність, так?

множину ми можемо визначати як завгодно. множина - це набір елементів, з яких ми будуємо бінарне відношення, відповідно, якщо елементи повторюються, то на сам набір це не впливає
приклад
R1={A,B,C}, R2={A,B,A,C,C,C}
R1 еквівалентно R2

а вже потім ми з цієї множини вибираємо елементи для бінарного відношення, причому для цього один і той самий елемент ми можемо використовувати довільну кількість разів

9

Re: Бінарне відношення - рефлективність

не зовсім розумію суть проблеми
твоя матриця - це двомірний масив, а його індекси - це елементи множини
робиш окремо множину, кожному елементу еквівалентно співвідносиш число
mas[p][q]=mas[ a ][ b ]=aRb
де а,b належать множині (яку ти вводиш), p,q є цілими невід'ємними числами, що лежать в проміжку [0,n], де n - потужність множини (кількість елементів, що в ній знаходяться), ну а R - бінарне відношення, яке ти визначаєш
розберись, що в тебе є чим, а далі буде легше

10

Re: Бінарне відношення - рефлективність

множинна вводиться будь-яка кількість, а пари мають бути подвійна наприклад А-А, А-В! А-А-А не може бути!!!
рефлексивним якщо для кожного a ∈ X виконується aRa

11

Re: Бінарне відношення - рефлективність

будь-ласка поможіть терміново треба!

12

Re: Бінарне відношення - рефлективність

Закортіло мені чогось повторити set ув STL...
#include <cstdio>
#include <set>

using std::set;
using std::pair;

set<float> items;
set<pair<float, float> > pairs;

float **matrix = 0;

void fillSet()
{
    float it;
    short int cnt_res = 0;
    fflush(stdin);
    do
    {
        printf(" item to insert: ");
        if( (cnt_res = scanf("%f", &it)) == 1)
            items.insert(it);
    }while(cnt_res);
}

void initPairs()
{
    float sib1, sib2;
    short int cnt_res = 0;
    fflush(stdin);
    do
    {
        printf("Pair (N:N): ");
        if( (cnt_res = scanf("%f:%f", &sib1, &sib2)) == 2)
            pairs.insert(pair<float,float>(sib1, sib2));
    }while(cnt_res);
}

void buildMatrix()
{
    delete matrix;

    /*
        Probably, you'll sort the set, or do any other actions to make a sequence of items.
        Next, in loop below you check pairs. Guess it might be done by searching for each possible pair.
    */
    
    matrix = new float* [ items.size() ];
    for(register int i=0; i<items.size(); matrix[i++] = new float[items.size()]);
    
    for(register int iRow = 0; iRow < items.size(); iRow++)
        for(register int jCol = 0; jCol < items.size(); jCol++)
        {
            //the condition to choose whether to put 0 or 1 and such action thus (for each matrix[iRow][jCol]).
        }
}

void freeMatrix()
{
    delete[] matrix;
    matrix = 0;
}

int main()
{
    fillSet();
    initPairs();
    buildMatrix();
    freeMatrix();
    return 0;
}

13

Re: Бінарне відношення - рефлективність

Bartash написав:

Якщо у нас буде відношення бінарне "А-А", а множину ввести з трьома елементами "А", то як вони розмістяться у матриці?

Множина - це набір різних елементів.

14

Re: Бінарне відношення - рефлективність

bunyk написав:
Bartash написав:

Якщо у нас буде відношення бінарне "А-А", а множину ввести з трьома елементами "А", то як вони розмістяться у матриці?

Множина - це набір різних елементів.

У теорії - та. На практиці - не зовсім. :)

15

Re: Бінарне відношення - рефлективність

Bartash написав:
bunyk написав:
Bartash написав:

Якщо у нас буде відношення бінарне "А-А", а множину ввести з трьома елементами "А", то як вони розмістяться у матриці?

Множина - це набір різних елементів.

У теорії - та. На практиці - не зовсім. :)

Тоді та штука називається мультимножиною - http://uk.wikipedia.org/wiki/%D0%9C%D1% … 0%BD%D0%B0. В множині ж, як було сказано, всі елементи різні - http://uk.wikipedia.org/wiki/%D0%9C%D0% … 0%BD%D0%B0

16

Re: Бінарне відношення - рефлективність

Ось власне потрібно допомога!!Потрібно зробити як вводити множинну, потім пари відношень, а головне як цю матрицю сформувати!!!Дякую наперед!!

А в чому власне проблема? Задайте квадратну матрицю nxn (n - кількість елементів множини) з нулів і одиничок: 1 - якщо елементи перебувають у відношенні, 0 - якщо не перебувають.

17

Re: Бінарне відношення - рефлективність

yooll написав:

Тоді та штука називається мультимножиною - http://uk.wikipedia.org/wiki/%D0%9C%D1% … 0%BD%D0%B0. В множині ж, як було сказано, всі елементи різні - http://uk.wikipedia.org/wiki/%D0%9C%D0% … 0%BD%D0%B0

Приймаю зауваження.

18

Re: Бінарне відношення - рефлективність

хто може написати код самого введення відношення, адже ж потрібно щоб програма якось розпізнавала наприклад А-А, або 1-1, і самого заповнення матриці!

19

Re: Бінарне відношення - рефлективність

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

20

Re: Бінарне відношення - рефлективність

sardar2222 написав:

хто може написати код самого введення відношення, адже ж потрібно щоб програма якось розпізнавала наприклад А-А, або 1-1, і самого заповнення матриці!

Тут варто уявити собі взагалі всю програму і як вона виглядатиме, бо задачу реалізувати можна по-різному.
Проблема у тому, як співвідносити елементи множини та індекси у подвійних циклах (про які підказав yooll).