21

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

В простораї так сказати інтернету знайшов програму, її трохи переробив ось сам код:

#include <iostream>
#include <conio.h>
#include <stdio.h>
#include <time.h>
using namespace std;
 
 //Вивід на екран  
void Display(int A[],int k, int** m){
      cout<<"\n\n";
      cout<<"                |";
      for (int i = 0; i < k; i++){
            cout.width(3);
            cout<<A[i]<<" |";
      }
      cout<<"\n";
      cout<<"            ";
      for(int i = 0; i < k+1; i++){
            cout<<"-----";
      }
      cout<<"\n";
      
      for (int i = 0; i < k; i++){
            cout<<"           ";
            cout.width(4);
            cout<<A[i]<<" |";
            for (int j = 0; j < k; j++){
                    cout.width(3);
                    cout<<m[i][j]<<" |";;
            }
                if(i < k-1){
                cout<<"\n"; 
                cout<<"            ";
                for(int i = 0; i < k+1; i++) {
                    cout<<"-----";
                }
            }
            cout<<"\n"; 
       } 
      
      cout<<"            "; 
      for(int i = 0; i < k+1; i++){
            cout<<"-----";
      }
}
 
void Display(int A[],int k, int m[4][4]){
      cout<<"\n\n";
      cout<<"                |";
      for (int i = 0; i < k; i++){
            cout.width(3);
            cout<<A[i]<<" |";
      }
      cout<<"\n";
      cout<<"            ";
      for(int i = 0; i < k+1; i++){
            cout<<"-----";
      }
      cout<<"\n";
      
      for (int i = 0; i < k; i++){
            cout<<"           ";
            cout.width(4);
            cout<<A[i]<<" |";
            for (int j = 0; j < k; j++){
                    cout.width(3);
                    cout<<m[i][j]<<" |";;
            }
                if(i < k-1){
                cout<<"\n"; 
                cout<<"            ";
                for(int i = 0; i < k+1; i++) {
                    cout<<"-----";
                }
            }
            cout<<"\n"; 
       } 
      
      cout<<"            "; 
      for(int i = 0; i < k+1; i++){
            cout<<"-----";
      }
}
 
// провірка на рефлективність
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;
}
 
int main (){
    srand(time(0));
    int key;
    int i;
    int Na;
    do{
        system("cls");
        cout<<"\n";
        cout<<"        Please, input size set A --> ";
        cin>>Na;
    }while (Na<1 || Na>10);
    
    int *A = new int[Na];
    
    int **M = new int *[Na];
    for (int i = 0; i<Na; i++){
        M[i] = new int [Na];
        }
    
    int M2[4][4] = {
        1, 0, 0, 0,
        0, 1, 0, 0,
        0, 0, 0, 0,
        0, 0, 0, 1
    };
    
    int A2[4] = {1, 2, 3, 4}; 
        
    do {

        cout<<"   1) Perevirka na reflektuvnist' \n";
        cout<<"   If you want to EXIT input 0\n";
        cin>>key; 

        switch (key){
               case 1:{
                    system("cls");
                    cout<<"\n  Check the properties of relation R(A)={{1,1},{2,2},{3,3},{4,4}}:";
                        Display(A2,4,M2);
                        cout<<"\n This relation is: ";
                        if (ref(M2,4)) cout<<"\n    - reflexive";
                        if ((ref(M2,4))==0) cout<<"\n    -not refleksive";
                        cout<<"\n\n   Press any key!> ";
                        getch();
                        break;
                    }        
               }
      
             
        } while (key != 0) ;
        delete []A;   
        for (int i = 0; i<Na; i++){
           delete[] M[i];
        }     
        delete[] M;       
    return 0;
    }

Справа в тому що майже всі введення треба змінювати в коді!!!Тобто наприклад просить ввести розмір множини,він там обмежується циклом, але це нічого не дає, томущо в коді вже задана множинна А2.

В чому проблема: функція перевіряє матрицю, яка задається в самому коді (тобто моя матриця яка буде створена по розміру множинни взагалі не існує)
Хто може дещо підкорегувати і доробити(я звісно сам попробую ще):

1. Там де вводиться розмір множинни А, потрібно щоб вводився сам розмір множинни і сама множинна по розміру!
2. Коли ввелася множинна наприклад так:
cout<<'1 element mnozhunu';
cin>>1elm
cout<<'2 element mnozunu';
cin>>2elm
ну це по розміру! наприклад буде множинна там А=(1,2,3,4)
3. Потім потрібно задавати відношення
cout<<'1vidn';
cin>>(ну і тут задається наприклад через дефіс 1-1)

22

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

Або знайшов інший вихід без матриць!!!Хто може написати програму наприклад:
Задається будь-яка множина через кому А(1,2,3,4)!Потім задаються відношення наприклад 1-1,1-2,2-2,2-3,3-4,3-3!!!І це відношення буде не рефлективним тому що не має пари 4-4!!!

Тобто якщо є множинаа А(1,2,3,4), і відношення 1-1,2-2,3-3,4-4 то рефлексивне. Якщо хоч якогось не має то не рефлексивне