1. Este site usa cookies. Ao continuar a usar este site está a concordar com o nosso uso de cookies. Saber Mais.

Duvida simples - Linguagem C

Discussão em 'Programação' iniciada por pedrosll, 1 de Dezembro de 2012. (Respostas: 4; Visualizações: 800)

  1. Boas pessoal,

    Estou aqui com um problema num exercício que consiste em analisar o numero de peças isoladas desta matriz:
    [​IMG]

    A definição de peça isolada é que não tenha outra peça nem em cima nem em baixo, nem à esquerda nem à direita.

    O que tenho até agora é:

    int analisa_jogo(int jogador, int tabul[N][N])
    {
    int i=0, j=0,p_isoladas;

    if (jogador == 1)
    for (i=0; i<N; i++)
    for(j=0; j<N; j++)
    if (tabul[j]==1)

    Agora não sei como continuar porque não sei como faço para verificar se as peças dos cantos estão isoladas.
    Do género, se eu fizer: if ( tabul[i+1][j]==0 && tabul [j+1]==0 && tabul[i-1][j] && tabul[j-1]) p_isoladas = p_isoladas +1 funciona para as peças que se encontram as bordas? Eu acho que não mas não sei qual é a solução.
     
  2. ixjf

    ixjf Power Member

    Just a tip: Usa "+=" em vez de "variável = variável + valor".

    E.g.

     
  3. mauro1855

    mauro1855 I'm cool cuz I Fold

    Não é a mesma coisa em termos computacionais?
     
  4. s0ldier

    s0ldier Power Member

    Sim é basicamente o mesmo, mas deixa o código ligueiramente mais facil de ler. (minha opinião)

    Não pensei muito no assunto, mas se fizeres algo do tipo que dizes deve funcionar porque quando tiveres por ex: tab[5][5], terás de ver no tab[4][5], tab[6][5], tab[5][4], tab[5][6] vês todas as posições à volta do tab[5][5] se isto for == 0, entao p_isoladas++

    Cumps
     
  5. DotcomL

    DotcomL Power Member

    Para analisar as peças à volta podes considerar o exemplo completo que são as peças no centro, em que tens de analisar as peças das linhas i-1, i, i+1, e para cada linha analisar as peças j-1,j,j+1.
    Isto cria 2 tipos de erros:
    • Quando i==j estás na própria peça, por isso fazes uma condição para passar essa à frente.
    • Quando i ou j for <0 ou >N-1 estás fora da tabela (caso dos cantos ou lados), por isso também crias condição para passar à frente.
    Durante esta fase terás de verificar se as peças analisadas são diferentes da peça "jogador". E aí tens mais formas de abordar. Podes por exemplo ter uma variável flag, que estará a 1 caso seja encontrada uma peça igual. No fim do ciclo, verificas o valor da variável, e se ela estiver a 1 não incrementas p_isoladas.

    Penso que não faltará nenhuma condição específica. Manda feedback ;)

    E outra tip para manter o código limpo: não cries um if para cada jogador, simplesmente onde estás a pôr o nº do jogador mete mesmo a variável "jogador"
     
    Última edição: 6 de Dezembro de 2012

Partilhar esta Página