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)