Ir para conteúdo


- - - - -

Dúvida a implementar funções em C


  • Por favor inicie sessão para responder
3 respostas a este tópico

#1 Psycop

Psycop

    Boolean User

  • Membro
  • PipPipPip
  • 171 mensagens

Publicado 01 de Abril de 2012 - 16:24

Olá

Estou a tentar exercitar a minha programação em C de modo a aprender mais e evoluir, so que tenho sentido dificuldades no campo das funções, nomeadamente com os parâmetros e argumentos.

Ultimamente tenho andado a tentar fazer o jogo do galo, e estava a tentar implementar uma função para fazer a leitura das coordenadas, mas não estou a conseguir.

Aqui fica o código:

Código :
************************************************
Nome: Nuno Santos
Data: 31-03-2012
Projecto: Jogo do Galo_1.03
************************************************/

#include <stdio.h>
#include <stdlib.h>

#define DIM 3

void posicoes(int posicoes(int posx, int posy))
{
    int n_jogadas = 0;
    // Acção Jogador - Coordenadas

        printf("\nDigite as coordenadas do X: ");
        scanf("%d", &posx);
        fflush(stdin);

        printf("\nDigite as coordenadas do Y: ");
        scanf("%d", &posy);
        fflush(stdin);

        posx--;
        posy--;

        n_jogadas ++;

}

int main()
{
    char Galo [DIM][DIM] = {{' ', ' ', ' '}, {' ', ' ', ' '}, {' ', ' ', ' '}};
    int i, j, n;
    int posx, posy;

    // Inicia a Matriz

    for(i = 0; i < 3; i++)
    {
        for(j = 0; j < 3; j++)
        {
            Galo[i][j] = ' ';
        }
    }

    posicoes(posx, posy);

    if(Galo[posx][posy] != ' ')
    {
        printf("\nPosicao invalida, tente novamente.\n");
    }
    else
    {
        Galo[posx][posy] = 'X';
    }

    // Apresenta a Matriz

    printf("\n");

    for(n = 0; n < 3; n++)
    {
        printf(" %c | %c | %c ", Galo[n][0], Galo[n][1], Galo[n][2]);

        if(n != 2)
        {
            printf("\n---|---|---\n");
        }
    }

    printf("\n");

    system("PAUSE");
}

Se fosse possível gostaria que me ajudassem a entender melhor esta questão das funções e como implementar correctamente o que pretendo.

Cumps

#2 pikax

pikax

    Unsigned User

  • Membro
  • PipPipPipPipPipPip
  • 2497 mensagens

Publicado 01 de Abril de 2012 - 16:57

Código (C):
//void posicoes(int posicoes(int posx, int posy)) //errado
void posicoes(int posx, int posy)
{
    int n_jogadas = 0;
    // Acção Jogador - Coordenadas

        printf("\nDigite as coordenadas do X: ");
        scanf("%d", &posx);
        fflush(stdin);

        printf("\nDigite as coordenadas do Y: ");
        scanf("%d", &posy);
        fflush(stdin);

        posx--;
        posy--;

        n_jogadas ++;

}

http://www.cplusplus.com/doc/tutorial/functions/

as funcoes teem um tipo de retorno(ex: void, char,int,etc), tem um nome(exemplo:main,posicoes,etc) e tem argumentos(sao variaveis que irao ser passadas para essa funcao).

#3 Psycop

Psycop

    Boolean User

  • Membro
  • PipPipPip
  • 171 mensagens

Publicado 02 de Abril de 2012 - 11:25

Consegui implementar a função desejada, mas tive de recorrer a variáveis globais pois não consegui de outra forma, o que acontece é que eu não sei como contornar o problema das variáveis globais.

Quanto ao código do jogo, queria pedir ajuda também na parte de apresentar as posições no tabuleiro, que serão x entradas, mas a cada nova entrada de coordenadas a anterior desaparece, como posso contornar isso?

Aqui fica o código:

Código :
/************************************************
Nome: Nuno Santos
Data: 02-04-2012
Projecto: Jogo do Galo_1.03
************************************************/

#include <stdio.h>
#include <stdlib.h>

#define DIM 3

int x, y;
int n_jogadas;

void posicoes()
{
    // Acção Jogador - Coordenadas


        printf("\nDigite as coordenadas do X: ");
        scanf("%d", &x);
        fflush(stdin);

        printf("\nDigite as coordenadas do Y: ");
        scanf("%d", &y);
        fflush(stdin);

        x--;
        y--;
}

int main()
{
    char Galo [DIM][DIM] = {{' ', ' ', ' '}, {' ', ' ', ' '}, {' ', ' ', ' '}};
    int i, j, n;

    // Inicia a Matriz

    while(n_jogadas < DIM*DIM)
    {
        for(i = 0; i < 3; i++)
        {
            for(j = 0; j < 3; j++)
            {
                Galo[i][j] = ' ';
            }
        }

        posicoes(x, y);

        if(Galo[x][y] != ' ')
        {
            printf("\nPosicao invalida, tente novamente.\n");
        }
        else
        {
            Galo[x][y] = 'X';
        }

        // Apresenta a Matriz

        printf("\n");

        for(n = 0; n < 3; n++)
        {
            printf(" %c | %c | %c ", Galo[n][0], Galo[n][1], Galo[n][2]);

            if(n != 2)
            {
                printf("\n---|---|---\n");
            }
        }

        n_jogadas++;

        printf("\n");
    }

    system("PAUSE");
}

Cumps

#4 pmg

pmg

    Unsigned User

  • Moderador
  • PipPipPipPipPipPip
  • 3688 mensagens

Publicado 02 de Abril de 2012 - 11:32

Ver MensagemPsycop, em 02 de Abril de 2012 - 11:25, disse:

... eu não sei como contornar o problema das variáveis globais.
Usa variáveis locais na função main e passa o endereço dessas variaveis para as funções que as precisam de alterar.
O operador & serve para isso mesmo:
Código (C):
funcao_que_muda_variavle(&x);


Ver MensagemPsycop, em 02 de Abril de 2012 - 11:25, disse:

Código :
void posicoes()
{
    /* ... */
}

int main()
{
        /* ... */
        posicoes(x, y);
        /* ... */
}
Sugestão: aumenta o nível de warnings do teu compilador, e faz o máximo possível de compilações limpas.