[Share] Lập trình xét quan hệ 2 ngôi

#include <stdio.h>
#include <conio.h>
#include<math.h>
int i,j,n;
void nhapmatran(int a[50][50])
{
 printf("Nhap so phan tu cua tap hop: ");
 scanf("%d",&n);
 printf("\nGia su tap hop dang xet la: A={");
 for (i=0;i<n-1;i++)
  printf("%c, ",'a'+i);
 printf("%c}",'a'+i);
 //-------nhap ma tran quan he -----------
 printf("\n\nNhap ma tran quan he:\n");
 for(i=0;i<n;i++)
  for(j=0;j<n;j++)
   {
    vao:
    printf("\nQuan he (%c,%c): ",'a'+i,'a'+j);
    scanf("%d",&a[i][j]);
    if(a[i][j]!=0 && a[i][j]!=1)
     {
      printf("\nChi nhap 0 hoac 1 de bieu dien quan he");
      goto vao;
     }
   }
 printf("\nDa nhap xong.......");
}

//---- In quan h?----------
void inquanhe(int a[50][50])
{
int t=0;
 printf("\n\nQuan he: R={");
 for (i=0;i<n;i++)
  for( j=0;j<n;j++)
   if(a[i][j]==1)
    t++;
  for (i=0;i<n;i++)
  for( j=0;j<n;j++)
   if(a[i][j]==1)
    if(t!=1)
     {
      printf("(%c,%c),",'a'+i,'a'+j);
      t--;
     }
    else
     printf("(%c,%c)",'a'+i,'a'+j);

 printf("}");
}
//---- In ma tr?n
void inmatran(int a[50][50])
{
printf("\nMa tran quan he:\n\n");
 for(i=0;i<n;i++)
  {
   for(j=0;j<n;j++)
    printf("%4d",a[i][j]);
   printf("\n");
  }
}
void kiemtratinhchat(int a[50][50])
{
//------------- Kiem tra tinh phan xa---------------
 for(i=0;i<n;i++)
   if(a[i][i]==0)
{
printf("\n\n%c Quan he da cho khong co tinh phan xa.",16);
     goto doixung;
   }
 printf("\n\n%c Quan he da cho co tinh phan xa.",16);

 //-------Ki?m tra tinh doi xung -----//
 doixung:
 for(i=0;i<n;i++)
  for(j=0;j<n;j++)
   if(a[i][j]!=a[j][i])
    {
printf("\n\n%c Quan he da cho khong co tinh doi xung.",16);
     goto baccau;
    }
 printf("\n\n%c Quan he da cho co tinh doi xung.",16);
 baccau:
  //-----Kiem tra tinh bac cau----
 for(i=0;i<n;i++)
  for(j=0;j<n;j++)
    for(int k=0;k<n;k++)
      if(a[i][j]==1 && a[j][k]==1)
   goto tiep;
 printf("\n%c Quan he da cho khong co tinh bac cau.\n\n",16);
   goto thoat;
 tiep:
 for(i=0;i<n;i++)
  for(j=0;j<n;j++)
    for(k=0;k<n;k++)
      if(a[i][j]==1 && a[j][k]==1 && a[i][k]==0)
  {
    printf("\n%c Quan he da cho khong co tinh bac cau.\n\n",16);
    goto thoat;
      }
 printf("\n%c Quan he da cho co tinh bac cau.\n\n",16);
 thoat:
 getch();
}
void main()
{
clrscr();
int a[50][50];
nhapmatran(a);
inquanhe(a);
inmatran(a);
kiemtratinhchat(a);
}

2 Nhận xét

  1. bạn cho mình hỏi đoạn dòng ghi n\n%c Quan he da cho khong co tinh.,16); 16 có ý nghĩa gì thế sao đoạn printf có n%c là sao

    Trả lờiXóa
  2. %c thực ra nó lấy kiểu định dạng kí tự in ra đó bạn.
    16 ở đây là mã ASCII
    VD: với số nguyên thì %d,kiểu số thực thì %f chẳng hạn :)

    Trả lờiXóa
Mới hơn Cũ hơn

Bài viết mới nhất

CẦN THIẾT