Ir para conteúdo
Fórum Script Brasil
  • 0

Acessar matriz dentro de uma função


Yunus

Pergunta

Como comparar uma determinada posição de uma matriz através de colchetes sendo que passei como ponteiro de ponteiro (int **matriz)

Main:

while (qtdRainhas < n)
            {
                printf("\nInsira a linha: ");
                scanf("%i", &ri);
	            printf("\nInsira a coluna: ");
	            scanf("%i", &rj);
	            verifica = verificaConflitos(ri-1, rj-1, tabuleiro, n);
                printf("verificou");
	            if (verifica == 0)
	            {
	                printf("\nentrou if\n");
	                tabuleiro[ri][rj] = 1;
	                printf("Inseriu rainha %i" , i);
	                qtdRainhas++;
	            }
                else
                    printf("\nPosicao invalida, insira novamente!");
            }
            printf("\n");
	        Imprimir(tabuleiro, n);

.h

/**Imprime todas as posições do tabuleiro*/
void Imprimir(int **tabuleiro, int n);
/**VERIFICA SE É POSSÍVEL POSICIONAR A RAINHA EM matriz(ri, rj).
RETORNA 1 SE NÃO É POSSÍVEL E 0 SE FOR POSSÍVEL*/
int verificaConflitos (int ri, int rj, int **tabuleiro , int n);

funcoes.c

int verificaConflitos (int ri, int rj, int **tabuleiro, int n)
{
    int i, i1, i2, j, j1, j2;
    int teste = 0;

    i1 = ri;
    i2 = ri;
    j1 = rj;
    j2 = rj;
    printf("\nentrou verificaConflito");
    /**TESTA SE EXISTE ALGUMA NA MESMA LINHA OU COLUNA*/
    for (i = 0; i < n; i++)
    {
        printf("\nentrou for");
        if (tabuleiro[ri][i] == 1 || tabuleiro[i][rj] == 1)//o erro acontece aqui!
        {
            teste = 1;
            printf("\nentrou if");
            break;
        }
        printf("\nsaiu for");
    }

O programa não está completo, mas tem o suficiente... Coloquei alguns printf's para ver até onde o programa vai. Penso que seja algo errado em relação ao "tabuleiro [ri] " por tê-lo passado como "** tabuleiro". Alguém sabe me dizer o problema e como consertá-lo?

Link para o comentário
Compartilhar em outros sites

1 resposta a esta questão

Posts Recomendados

  • 0

Boa noite!

 

Antes de qualquer coisa, queria dizer que no seu código não está demonstrada a criação da matriz porém estou assumindo que você está declarando conforme a sua outra pergunta. Por isso inclusive que fiz alguns comentários lá para que você já corrija a criação da matriz também! :-)

 

Você só disse que ocorre um problema mas não explicou qual o problema que acontece. Imagino que ocorra algum erro que termine o seu programa, o que indica acesso não permitido a alguma região da memória. Se for isso, o problema está no acesso à matriz em si. Passar como ponteiro ou array não muda a forma de acesso nesse caso.

Isso acontece porque sua matriz tem um tamanho de 10 x 10, por exemplo. E assim você só pode acessar de 0 a 9 em cada dimensão. Exemplo: matriz[x][y] sendo x de 0 a 9 e y também de 0 a 9.

Se x ou y for maior que 9, você terá problemas...

No seu código de verificação você está usando n para indicar o tamanho da matriz. É o mesmo tamanho utilizado para criar a matriz?

Você também não está verificando o valor digitado pelo usuário para ri e rj.

A lógica em si parece estar ok...

Link para o comentário
Compartilhar em outros sites

Participe da discussão

Você pode postar agora e se registrar depois. Se você já tem uma conta, acesse agora para postar com sua conta.

Visitante
Responder esta pergunta...

×   Você colou conteúdo com formatação.   Remover formatação

  Apenas 75 emoticons são permitidos.

×   Seu link foi incorporado automaticamente.   Exibir como um link em vez disso

×   Seu conteúdo anterior foi restaurado.   Limpar Editor

×   Você não pode colar imagens diretamente. Carregar ou inserir imagens do URL.



  • Estatísticas dos Fóruns

    • Tópicos
      152,1k
    • Posts
      651,8k
×
×
  • Criar Novo...