• Revista PROGRAMAR: Já está disponível a edição #53 da revista programar. Faz já o download aqui!

pessantiago

retorno de valores em C

9 mensagens neste tópico

boas noites gostava de saber como é que posso fazer um radom, com uma funçao de retorne dois valores X e Y isto numa matriz. em que x=[-1,0,1] e Y[-1,0,1]

sugestões são bem vindas

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Podes passar os endereços dos arrays como parâmetro à função, e é só escreveres neles.

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Embora a sugestão de passares arrays funcione, eu sugeria talvez o uso de estruturas.

Isto porque evitam o uso de passagem de parâmetros por referência, o que pode causar alguns bugs quando não se tem cuidado. Ter uma função que muda os parâmetros que são passados pode não ser esperado.

Um exemplo de documentação sobre uso de estruturas, existem muitos mais, http://publications.gbdirect.co.uk/c_book/chapter6/structures.html

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Eu não sugeri o uso de estruturas para evitar a criação de uma estrutura exclusivamente para utilização como tipo de retorno de uma função.

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Talvez acabe por ser mais uma opção pessoal, não considero modificação aleatória de parâmetros de entrada como uma coisa boa. Naturalmente é uma das características da linguagem e tem a sua utilidade, mas criar uma estrutura parece-me mais seguro do que ter uma função que muda os parâmetros que entram.

De uma ou outra forma, o problema fica resolvido.

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Aleatória, não. Tem que estar descrita na documentação da função :D

Outra opção seria receber dois apontadores para apontadores e fazer a alocação da memória na função, mas como também costuma ser referida como má prática...

Pessoalmente, considero que a má prática é relativa à atenção com que o programador-criador está ao fazer e documentar as funções, e com que o programador-utilizador está ao estudá-las e utilizá-las.

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

  for (l=0;l<numerolinhasficheiro;l++)    //Percorre todas as palavras no ficheiro
    {
        x = random(0, lc);
        y = random(0, lc);

        c=0; //matriz_ficheiro
        do
        {
            if (matriz[y][x]==matriz_ficheiro[l][c])  //verifica se a celula (caso esteja ocupada) possui uma letra igual.
                c++;

            if ((matriz[y][x]=='-') && (((x>=0)&&(x<lc)) && ((y>=0)&&(y<lc))))//Verifica se a célula está limpa, e que está dentro dos limites da matriz.
            {
                matriz[y][x]=matriz_ficheiro[l][c];
                c++
            }

            x_aux=random(-1, 1) + x;
            y_aux=random(-1, 1) + y;
            if ((matriz[y_aux][x_aux]=='-') && ((x_aux>=0)&&(x_aux<lc)) && ((y_aux>=0)&&(y_aux<lc)) || (matriz[y_aux][x_aux]==matriz_ficheiro[l][c])) //Verifica se a celula sorteada é válida
            {
                x=x_aux;
                y=y_aux;
            }
        }
        while ((c<16) && (matriz_ficheiro[l][c]!='\n')); //tamanho máximo da palavra ou fim da palavra, passa para a próxiima linha
    }

aqui esta um exemplo

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Crie uma conta ou ligue-se para comentar

Só membros podem comentar

Criar nova conta

Registe para ter uma conta na nossa comunidade. É fácil!


Registar nova conta

Entra

Já tem conta? Inicie sessão aqui.


Entrar Agora