Ir ao conteúdo
  • Cadastre-se

C++ Preciso enxugar esse código em c++


Posts recomendados

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
Link para o comentário
Compartilhar em outros sites

@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
Link para o comentário
Compartilhar em outros sites

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...

Ebook grátis: Aprenda a ler resistores e capacitores!

EBOOK GRÁTIS!

CLIQUE AQUI E BAIXE AGORA MESMO!