Exercício pratico de relações em c++

Ver o tópico anterior Ver o tópico seguinte Ir em baixo

Exercício pratico de relações em c++

Mensagem  Renancr em Dom 26 Set 2010 - 14:10

Identificar as caracteristicas que definem as relações: funcional, injetora, total, sobrejetora, monomorfismo, epimorfismo e isomorfismo. Desenvolver um programa em C++ que receba uma matriz e classifique a qual relação pertence.

Funcional: Existe no máximo um valor lógico verdadeiro (1) por linha.
Injetora: Existe no máximo um valor lógico verdadeiro (1) por coluna.
Total: Existe pelomenos um valor lógico verdadeiro (1) por linha.
Subrejetora: Existe pelomenos um valor lógico verdadeiro (1) por coluna.
Monomorfismo: Existe pelomenos um valor lógico verdadeiro por linha e no máximo um valor verdadeiro (1) por coluna.
Epimorfismo: Existe pelomenos um valor lógico verdadediro pro coluna e no máximo um valor lógico verdadeiro (1) por linha.
Isomorfismo: Os tipos funcional, injetora, total e sobrejetora, deverão serem atendidas simultaneamente.

NÃO COPIEM MEU CÓDIGO, FAÇA O SEU SE NÃO É ZERO PRA NÓS DOIS.

Código:
#include <iostream>
using namespace std;

const int lin=4, col=4;
const int y=7;

int menu();
void preenche(int mtr[lin][col]);
void print(int mtr[lin][col]);
void funcional(int mtr[lin][col], int check[y]);
void injetora(int mtr[lin][col], int check[y]);
void total(int mtr[lin][col], int check[y]);
void sobrejetora(int mtr[lin][col], int check[y]);
void monomorfismo(int check[y]);
void epimorfismo(int check[y]);
void isomorfismo(int check[y]);

void main()
{
  int mtr[lin][col], check[y], op, i=0, l, c;
  for(l=0; l<lin; l++)
          for(c=0; c<col; c++)
              mtr[l][c]=0;
  do{
      for(i=0; i<y; i++)
        check[i]=0;
      op=menu();
      if(op == 1)
      {
        system("cls");
        preenche(mtr);
        system("pause");
      }
      else
        if(op == 2)
        {
            l=0;
            system("cls");
            print(mtr);
            funcional(mtr, check);
            injetora(mtr, check);
            total(mtr, check);
            sobrejetora(mtr, check);
            monomorfismo(check);
            epimorfismo(check);
            isomorfismo(check);
            cout<< "============================================================\n";
            i=0;
            cout<< "\tFuncional check:\t" << check[i] << endl;
            i++;
            cout<< "\tInjetora check:\t\t" << check[i] << endl;
            i++;
            cout<< "\tTotal check:\t\t" << check[i] << endl;
            i++;
            cout<< "\tSobrejetora check:\t" << check[i] << endl;
            i++;
            cout<< "\tMonomorfismo check:\t" << check[i] << endl;
            i++;
            cout<< "\tEpimorfismo check:\t" << check[i] << endl;
            i++;
            cout<< "\tIsomorfismo check:\t" << check[i] << endl;
            cout<< "============================================================\n\n";
            cout<< "============================================================\n";
            for(i = 0; i < y; i++)
            {
                if(check[i] == 1 && i == 0)
                    cout<< "\tE uma relacao Funcional\n";
                else
                    if(check[i] == 1 && i == 1)
                        cout<< "\tE uma relacao Injetora\n";
                    else
                        if(check[i] == 1 && i == 2)
                            cout<< "\tE uma relacao Total\n";
                        else
                            if( check[i] == 1 && i == 3)
                                cout<< "\tE uma relacao Sobrejetora\n";
                            else
                                if(check[i] == 1 && i == 4)
                                    cout<< "\tE uma relacao Monomorfismo\n";
                                else
                                    if(check[i] == 1 && i == 5)
                                        cout<< "\tE uma relacao Epimorfismo\n";
                                    else
                                        if(check[i] == 1 && i ==6)
                                            cout<< "\tE uma relacao Isomorfismo\n";
                                        else
                                            l++;
            }
            if(l == y)
                cout<< "\tEsta matriz nao posui nem uma relacao\n";
            cout<< "============================================================\n";
            cout<< "\n\n";
            system("pause");
        }
  }while(op != 3);
}

int menu()
{
  int op;
  do{
      system("cls");
      cout<< "===================================================\n";
      cout<< "\t1 - Preencher a matriz.\n";
      cout<< "\t2 - Verificar tipo de relacao.\n";
      cout<< "\t3 - Sair.\n";
      cout<< "===================================================\n";
      cout<< "\n\tDigite a opcao desejada.\n\t";
      cin>> op;
      if(op < 1 || op > 3)
      {
        system("cls");
        cout<< "Opcao invalida.\n";
        system("pause");
      }
  }while(op < 1 || op > 3);
  return op;
}

void preenche(int mtr[lin][col])
{
  int l, c;
  for(l=0; l < lin; l++)
      for(c=0; c < col; c++)
      {
        do{
            system("cls");
            cout<< "Digite o valor 0 ou 1 para linha " << l+1 << " coluna " << c+1 << endl;
            cin>> mtr[l][c];
            if(mtr[l][c] < 0 || mtr[l][c] > 1)
            {
              system("cls");
              cout<< "Valor invalido digite o valor Zero(0) ou Um(1).\n";
              system("pause");
            }
        }while(mtr[l][c] < 0 || mtr[l][c] > 1);
      }
}

void print(int mtr[lin][col])
{
  int l, c;
  cout<< "\n\n";
  for(l=0; l<lin; l++)
  {
      cout<< "\t\t| ";
      for(c=0; c<col; c++)
        cout<< mtr[l][c] <<" | ";
      cout<< endl;
  }
  cout<< "\n\n";
}

void funcional(int mtr[lin][col], int check[y])
{
  int l, c, i=0, cont, teste[lin];
  for(l=0; l < lin; l++)
  {
      cont=0;
      for(c=0; c < col; c++)
      {
        if(mtr[l][c] == 1)
            cont++;
      }
      if(cont > 1 || cont == 0)
      {
        teste[l]=0;
      }
      else
          teste[l]=1;
  }
  l=0;
  if(teste[l] >0 || teste[l+1] >0 || teste[l+2] >0 || teste[l+3] >0)
  {
      cont=0;
      for(l=0; l < lin; l++)
      {
          if(teste[l] == 1)
              cont++;
      }
      if(cont >= 1)
          check[i]=1;
      else
          check[i]=0;
  }
  else
      check[i]=0;
}

void injetora(int mtr[lin][col], int check[y])
{
  int l, c, i=1, cont, teste[col];
  for(c=0; c < col; c++)
  {
      cont=0;
      for(l=0; l < lin; l++)
      {
        if(mtr[l][c] == 1)
            cont++;
      }
      if(cont > 1 || cont == 0)
      {
        teste[c]=0;
      }
      else
          teste[c]=1;
  }
  c=0;
  if(teste[c] >0 || teste[c+1] >0 || teste[c+2] >0 || teste[c+3] >0)
  {
      cont=0;
      for(c=0; c < col; c++)
      {
          if(teste[c]== 1)
              cont++;
      }
      if(cont >= 1)
          check[i]=1;
      else
          check[i]=0;
  }
  else
      check[i]=0;
}

void total(int mtr[lin][col], int check[y])
{
  int l, c, i=2, cont, teste[lin];
  for(l=0; l < lin; l++)
  {
      cont=0;
      for(c=0; c < col; c++)
      {
        if(mtr[l][c] == 1)
            cont++;
      }
      if(cont == 0)
      {
        teste[l]=0;
        break;
      }
      else
        teste[l]=1;
  }
  cont=0;
  for(l=0; l < lin; l++)
  {
      if(teste[l]== 1)
        cont++;
  }
  if(cont == lin)
      check[i]=1;
  else
      if(cont != lin)
        check[i]=0;
}

void sobrejetora(int mtr[lin][col], int check[y])
{
  int l, c, i=3, cont, teste[col];
  for(c=0; c < col; c++)
  {
      cont=0;
      for(l=0; l < lin; l++)
      {
        if(mtr[l][c] == 1)
            cont++;
      }
      if(cont == 0)
      {
        teste[c]=0;
        break;
      }
      else
      {
        teste[c]=1;
      }
  }
  cont=0;
  for(c=0; c < col; c++)
  {
      if(teste[c]== 1)
        cont++;
  }
  if(cont == col)
      check[i]=1;
  else
      if(cont != col)
        check[i]=0;
}

void monomorfismo(int check[y])
{
  int i=1, x=2, k=4;
  if(check[i] == 1 && check[x] == 1)
      check[k]=1;
}

void epimorfismo(int check[y])
{
    int i=0, x=3, k=5;
    if(check[i] == 1 && check[x] == 1)
                check[k]=1;
}

void isomorfismo(int check[y])
{
    int i1=0, i2=1, i3=2, i4=3, k=6;
    if(check[i1] == 1 && check[i2] == 1 && check[i3] == 1 && check[i4] == 1)
                check[k]=1;
}
avatar
Renancr

Mensagens : 118
Data de inscrição : 08/03/2010

Ver perfil do usuário

Voltar ao Topo Ir em baixo

Ver o tópico anterior Ver o tópico seguinte Voltar ao Topo

- Tópicos similares

 
Permissão deste fórum:
Você não pode responder aos tópicos neste fórum