Ir ao conteúdo

Posts recomendados

Postado

Gente, meu professor disse que esse código ta muito extenso e pediu para eu enxugar ele um pouco, alguém me ajuda por favor 

/*
Trabalho Prático: Autômatos Celulares
Disciplina: AEDS 1
*/

#include <iostream>
#include<conio.h>
#include <locale> //biblioteca do comando de acentuação

using namespace std;

#define LINHA 5
#define COLUNA 5

//Funções
int atribuir ( int l, int c, int nivel, int option, int mat[LINHA][COLUNA]);
int fun_decrementar (int mat[LINHA][COLUNA]);
int fun_imprimir (int mat[LINHA][COLUNA]);
void stop_program (int value, int sistema, int correção);
void clear_screen (int sistema, int historico_exe, int correção);


int main()
{
    setlocale(LC_ALL,"portuguese");//comando para acentuação

    int mat[LINHA][COLUNA] {0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0};

    cout <<"Seja bem vindo(a) ao Autômatos Celulares. "<<endl;
    int sistema;
    int historico_exe;
    int correção;
    int loop =0;

   do //loop teclas Enter e Esc
   {

    do //coleta de preferências de execução
    {
      cout <<"Antes de começar, por favor me diga qual o seu sistema operacional: \n1: Sistema Windows \n2: Sistema Mac ou linux"<<endl;
      cin >> sistema;
      if (sistema !=1 && sistema !=2)
      {
          cout<<"Por favor digite uma das duas opções"<<endl;
      }

      cout <<"Deseja ver o histórico de execução das matrizes: \n1: Sim \n2: Não"<<endl;
      cin >> historico_exe;
      if (historico_exe !=1 && historico_exe !=2)
      {
          cout<<"Por favor digite uma das duas opções"<<endl;
      }
    }while ((sistema !=1 && sistema !=2) || (historico_exe !=1 && historico_exe !=2));
    correção = sistema; //corrigindo bug
    clear_screen (sistema,  2, correção);

    int option;
    float l=0;
    float c=0;
    const char Enter = 10;
    const char ESC = 27;

    cout <<"-------------------------------------------------------------------------------------------"<<"\n";
        do
        {
            cout <<"Tamanho da matriz: 5x5. "<<endl;
            cout <<"Escolha uma das opções de interação: \n1: Interação nas coordenadas do ponto Lin 2 e col 2 \n2: Interação no ponto Lin 1 e Col 3 (mesmo do que está nas instruções do trabalho)"<<endl;
            cout <<"Qual opção você deseja? ";
            cin >> option;
            cout <<endl;

            if ((option != 1) && (option != 2))
            {
                clear_screen (sistema, 0, correção);
                cout << '\a' <<endl;
                cout <<"Opção inválida"<<endl;
            }

        }
        while ((option != 1) && (option != 2));

//Posicionando o valor 2 na coordenada escolhida pelo usuário
        if (option==1)
        {
            l=2,c=2;
        }

        if (option==2)
        {
            l=1,c=3;
        }
//-------------------------------------------------------------

        clear_screen (sistema, historico_exe, correção);
        cout <<"--------------------------------------"<<endl;
        cout<<"\n1 interação, tempo 0: \n\n";

        mat [LINHA][COLUNA] = atribuir ( l, c, 0, option, mat);
        fun_imprimir (mat);

        cout <<"--------------------------------------"<<endl;
        !getchar (); //negação do getchar para evitar que acione o próximo comando

        cout<<"\nPressione Enter para o próximo estágio: ";
        if (getchar ()== Enter)
        {clear_screen (sistema, historico_exe, correção);

            cout<<"\n2 interação, tempo 1: \n\n";

            mat [LINHA][COLUNA] = atribuir ( l, c, 1, option, mat);
            fun_imprimir (mat);
        }

        else //se tecla diferente de enter o programa vai parar para evitar erros com a matriz
        {
            stop_program (1, sistema, correção);
            break;
        }

        cout <<"--------------------------------------"<<endl;
        cout<<"\nPressione Enter para o próximo estágio: ";
        if (getchar ()== Enter)
        {
            clear_screen (sistema, historico_exe, correção);
            cout<<"\n3 interação, tempo 2: \n\n";

            mat [LINHA][COLUNA] = atribuir ( l, c, 2, option, mat);
            fun_imprimir (mat);

        }
        else //se tecla diferente de enter o programa vai parar para evitar erros com a matriz
        {
            stop_program (1, sistema, correção);
            break;
        }

        cout <<"--------------------------------------"<<endl;
        cout<<"\nPressione Enter para o próximo estágio: ";
        if (getchar ()== Enter)
        {
            clear_screen (sistema, historico_exe, correção);
            cout<<"\n4 interação, tempo 3: \n\n";

            mat [LINHA][COLUNA] = atribuir ( l, c, 3, option, mat);
            fun_imprimir (mat);

        }
        else //se tecla diferente de enter o programa vai parar para evitar erros com a matriz
        {
            stop_program (1, sistema, correção);
            break;
        }

        cout <<"--------------------------------------"<<endl;
        cout<<"\nPressione Enter para o próximo estágio: ";
        if (getchar ()== Enter)
        {
            clear_screen (sistema, historico_exe, correção);
            cout<<"\n5 interação, tempo 4: \n\n";

            mat [LINHA][COLUNA] = atribuir ( l, c, 4, option, mat);
            fun_imprimir (mat);

        }
        else //se tecla diferente de enter o programa vai parar para evitar erros com a matriz
        {
            stop_program (1, sistema, correção);
            break;
        }

        cout <<"--------------------------------------"<<endl;
        cout<<"\nPressione Enter para o próximo estágio: ";
        if (getchar ()== Enter)
        {
            clear_screen (sistema, historico_exe, correção);
            cout<<"\n6 interação, tempo 5: \n\n";

            mat [LINHA][COLUNA] = atribuir ( l, c, 5, option, mat);
            fun_imprimir (mat);

        }
        else //se tecla diferente de enter o programa vai parar para evitar erros com a matriz
        {
            stop_program (1, sistema, correção);
            break;
        }

        cout <<"--------------------------------------"<<endl;
        cout<<"\nPressione Enter para o próximo estágio: ";
        if (getchar ()== Enter)
        {
            clear_screen (sistema, historico_exe, correção);
            cout<<"\n7 interação, tempo 6: \n\n";

            mat [LINHA][COLUNA] = atribuir ( l, c, 6, option, mat);
            fun_imprimir (mat);


        }
        else //se tecla diferente de enter o programa vai parar para evitar erros com a matriz
        {
            stop_program (1, sistema, correção);
            break;
        }

        if (option == 2 )
        {
            //clear_screen (sistema, historico_exe, correção);
            cout <<"--------------------------------------"<<endl;
            cout<<"\nPressione Enter para o próximo estágio: ";
            if (getchar ()== Enter)
            {
                clear_screen (sistema, historico_exe, correção);
                cout<<"\n8 interação, tempo 7: \n\n";

                mat [LINHA][COLUNA] = atribuir ( l, c, 7, option, mat);
                fun_imprimir (mat);

            }

            else //se tecla diferente de enter o programa vai parar para evitar erros com a matriz
            {
               stop_program (1, sistema, correção);
                break;
            }

            cout <<"--------------------------------------"<<endl;
            cout<<"\nPressione Enter para o próximo estágio: ";
            if (getchar ()== Enter)
            {
                clear_screen (sistema, historico_exe, correção);
                cout<<"\n9 interação, tempo 8: \n\n";

                mat [LINHA][COLUNA] = atribuir ( l, c, 8, option, mat);
                fun_imprimir (mat);
            }

            else //se tecla diferente de enter o programa vai parar para evitar erros com a matriz
            {
               stop_program (1, sistema, correção);
                break;
            }
        }
        cout <<"\n-----------------------------------------------\n       Aplicação Concluída com Sucesso!!!\n-----------------------------------------------\n";
        cout << "-----------------------------------------------\n           Deseja executar novamente? \n-----------------------------------------------\n     Enter para executar ou Esc para sair ";
        char resp;
        resp = getch ();
        if (resp == ESC )
        {
            loop=9;
        }

        if (resp == Enter)
        {
            loop=0;
        }

        cout <<endl;

    } while (loop != 9);

    cout <<endl;
    system ("PAUSE");
}

//Espaço pra funções--------------------------------
int fun_imprimir (int mat[LINHA][COLUNA]) // esta função imprime as matrizes
{
    for(int i=0; i<LINHA; i++)
    {
        for(int j=0; j<COLUNA; j++)
        {
            cout<< mat[i][j] <<"   ";
        }
        cout<<"\n\n";
    }
    return ( mat[LINHA][COLUNA]);
}

int fun_decrementar (int mat[LINHA][COLUNA]) //esta função decrementa os valores 2 pra 1 e 1 pra 0
{
    for(int i=0; i<LINHA; i++)
    {
        for(int j=0; j<COLUNA; j++)
        {
            if(mat[i][j]==1)
            {
                mat[i][j]=0;
            }

            if(mat[i][j]==2)
            {
                mat[i][j]=1;
            }

        }
    }

    return ( mat[LINHA][COLUNA]);
}

void stop_program (int value, int sistema, int correção) //esta função para a execução do programa quando é digitada a tecla incorreta
{
        if (value == 1)
        {
        cout <<"--------------------------------------------------------------------------"<<endl;
        clear_screen (sistema, 2, correção);
        cout <<'\a'<<"Por favor, clique em apenas Enter para ir pra próxima interação."<<endl;
        cout<< "Infelizmente será necessário reiniciar a aplicação."<<endl;
        cout <<"--------------------------------------------------------------------------"<<endl;
        }
}

void clear_screen (int sistema, int historico_exe, int correção) //esta função limpa a tela
{
        if (correção != sistema)//correção de bug o sistema mudando de valor
        {
            sistema = 1;
        }

    if (sistema == 1 ) //sistema Windows
    {
        if (historico_exe == 2 )
        {
            system("cls");
        }

    }


   if (sistema == 2) //sistema Mac
    {
        if (historico_exe == 2)
        {
            system ("clear");
        }
    }
}


int atribuir ( int l, int c, int nivel, int option, int mat[LINHA][COLUNA]) //esta função faz atribuição do valor 2
{
    //espaço para as variáveis
        int a0 = l-1;
        int a1 = l+1;
        int b0 = c-1;
        int b1 = c+1;
        int a= l;
        int b=c;

        int lii0 = l-1-1;
        int lii1 = l+1+1;
        int coo0 = c-1-1;
        int coo1 = c+1+1;
        int li0 = l-1;
        int li1 = l+1;
        int co0 = c-1;
        int co1 = c+1;
        int li= l;                  // variavel linha
        int co=c;                  // variavel coluna
        int cooo0 = coo0 -1;
        int liii1 = lii1 +1;


      if (nivel == 0) //posicionando o 2 onde o usuário escolher
      {
            for(int i=0; i<LINHA; i++)
        {
            for(int j=0; j<COLUNA; j++)
            {
                if(mat[a][b]==0)
                {
                    mat[a][b]=2;
                }
            }
        }

      }


      if (nivel == 1) //Decrementando o 2 e atriuindo a vizinhança
      {
          for(int i=0; i<5; i++)
            {
                for(int j=0; j<5; j++)
                {
                    if(mat[a][b]==0)
                    {
                        mat[a][b]=2;
                    }

                    if(mat[a][b]==2)
                    {
                        mat[a][b]=1;
                    }

                    if(mat[a0][b]==0)
                    {
                        mat[a0][b]=2;
                    }
                    if(mat[a1][b]==0)
                    {
                        mat[a1][b]=2;
                    }
                    if(mat[a][b1]==0)
                    {
                        mat[a][b1]=2;
                    }
                    if(mat[a][b0]==0)
                    {
                        mat[a][b0]=2;
                    }
                }
            }
      }


      if (nivel == 2)
      {

        fun_decrementar (mat); //os valores 2 e 1 são decrementados
            if (option == 1) //atribuindo valor 2 as células vizinhas com base na opção escolhida pelo usuário
            {
                mat [lii0][co]=2, mat[lii1][co]=2, mat[li][coo0]=2, mat[li][coo1]=2, mat[li0][co0]=2, mat[li0][co1]=2,
                                                mat[li1][co0]=2, mat[li1][co1]=2;
            }

            if (option == 2) //atribuindo valor 2 as células vizinhas com base na opção escolhida pelo usuário
            {
                mat [lii0][co]=2, mat[lii1][co]=2, mat[li][coo0]=2, mat[li][coo1]=2, mat[li0][co0]=2, mat[li0][co1]=2,
                                                mat[li1][co0]=2, mat[li1][co1]=2, mat[li1][cooo0]=0 ;
            }
      }

      if (nivel == 3)
      {
        fun_decrementar (mat); //os valores 2 e 1 são decrementados
            if (option == 1) //atribuindo valor 2 as células vizinhas com base na opção escolhida pelo usuário
            {
                mat[lii0][co0]=2, mat[li0][coo0]=2, mat[li1][coo0]=2, mat[lii1][co0]=2, mat[lii0][co1]=2, mat[li0][coo1]=2,
                                                 mat[li1][coo1]=2, mat[lii1][co1]=2;
            }

            if (option == 2)
            {
                mat[lii0][co0]=2, mat[li0][coo0]=2, mat[li1][coo0]=2, mat[lii1][co0]=2, mat[lii0][co1]=2,
                mat[li0][coo1]=2, mat[li1][coo1]=2, mat[lii1][co1]=2, mat[lii1+1][co]=2, mat[lii1][coo0-1]=0;
            }
      }

      if (nivel == 4)
      {
        fun_decrementar (mat); //decrementando a matriz
            if (option ==1)
            {
                mat[lii0][coo0]=2, mat[lii0][coo1]=2, mat[lii1][coo0]=2, mat[lii1][coo1]=2;
            }

            if (option ==2)
            {
                mat[lii0][coo0]=2, mat[lii0][coo1]=2, mat[lii1][coo0]=2, mat[lii1][coo1]=2,
                mat[li1][cooo0]=2,mat[liii1][co0]=2,mat[liii1][co1]=2,mat[liii1][cooo0]=0,mat[lii1][cooo0]=0;
            }
      }

      if (nivel == 5)
      {
        fun_decrementar (mat);
            if (option ==2)
            {
                mat[liii1][cooo0]=0, mat[liii1][coo0]=2, mat[lii1][cooo0]=2;
            }
      }

      if (nivel == 6)
      {
        fun_decrementar (mat);
            if(option == 2)
            {
                mat[liii1][cooo0]=2;
            }
      }

      if (nivel == 7)
      {
        fun_decrementar (mat);
      }

      if (nivel == 8)
      {
        fun_decrementar (mat);
      }

    return mat[LINHA][COLUNA];
}

 

  • Obrigado 1
Postado

@João Vitor Pinheiro dos Sa Acho que seu professor tem razão hein? 🤔

 

  • Escreveu um programa C. Use C++ já vai ajudar a dimiuir o programa. Use classes.
  • Poste a especificação do programa. É difícil julgar sem isso...
     
  • 11 horas atrás, João Vitor Pinheiro dos Sa disse:
    mesmo do que está nas instruções do trabalho

    Evite essas coisas. Quase certamente pode conseguir nomes mais expressivos. Fosse eu seu professor e perderia muito por isso: 
 

11 horas atrás, João Vitor Pinheiro dos Sa disse:
          if (option ==2)
            {
                mat[lii0][coo0]=2, mat[lii0][coo1]=2, mat[lii1][coo0]=2, mat[lii1][coo1]=2,
                mat[li1][cooo0]=2,mat[liii1][co0]=2,mat[liii1][co1]=2,mat[liii1][cooo0]=0,mat[lii1][cooo0]=0;
            }
  
  • não use system(). Nunca. Para nada.
  • use encapsulamento. Coloque esses parâmetros DENTRO de algo. Uma struct ou class. É muito mais simples.
  • não use tantas chaves onde não precisa.
  • Não precisa mesmo perguntar se o programa está rodando em Windows ou Linux ou MacOS certo?

  • Evite esses comentários meio óbvios como "funções", comente o que está fazendo e porque. Escreva para você mesmo ler depois.

 

  • não use acentos em comentários
  • evite /* */ use //
  • Que significa
            !getchar();  // negação do getchar para evitar que
                         // acione o próximo comando

    ?
    getchar()  retorna int. Qual a razão de aplicar um ! e depois descartar? 

  • prefira not ao  invés de ! É muito difícil de perceber ! no meio do texto e not getchar() é mais legível, embora faça pouco sentido se algum.

  • Seu compilador já deve ter dito mas

                    atribuir(l, c, 4, option, mat);

    O primeiro parâmetro de atribuir() é int. l é float. Se isso está certo ajude você mesmo a saber que está e declare
     

                    atribuir( (int)l, c, 4, option, mat);

     

  • Curtir 1

Crie uma conta ou entre para comentar

Você precisa ser um usuário para fazer um comentário

Criar uma conta

Crie uma nova conta em nossa comunidade. É fácil!

Crie uma nova conta

Entrar

Já tem uma conta? Faça o login.

Entrar agora

Sobre o Clube do Hardware

No ar desde 1996, o Clube do Hardware é uma das maiores, mais antigas e mais respeitadas comunidades sobre tecnologia do Brasil. Leia mais

Direitos autorais

Não permitimos a cópia ou reprodução do conteúdo do nosso site, fórum, newsletters e redes sociais, mesmo citando-se a fonte. Leia mais

×
×
  • Criar novo...