Jump to content

Dúvida a implementar funções em C


Psycop
 Share

Recommended Posts

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:

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

Link to comment
Share on other sites

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

Por muito mais que que estude só aprendo uma coisa, que ainda tenho muita coisa para aprender.

A beleza de um código está em decompor problemas complexos em pequenos blocos simples.

"learn how to do it manually first, then use the wizzy tool to save time."

"Kill the baby, don't be afraid of starting all over again. Fail soon, learn fast."

Link to comment
Share on other sites

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:

/************************************************
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

Link to comment
Share on other sites

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

funcao_que_muda_variavle(&x);

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.

What have you tried?

Não respondo a dúvidas por PM

A minha bola de cristal está para compor; deve ficar pronta para a semana.

Torna os teus tópicos mais atractivos e legíveis usando a tag CODE para colorir o código!

Link to comment
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now
 Share

×
×
  • Create New...

Important Information

By using this site you accept our Terms of Use and Privacy Policy. We have placed cookies on your device to help make this website better. You can adjust your cookie settings, otherwise we'll assume you're okay to continue.