Programação Imperativa

100 Questões Fichas Testes/Exames

Questão 47: posFinal

Voltar

Considere as seguintes definições para representar as posições e movimentos de um robot.

typedef enum movimento {Norte, Oeste, Sul, Este} Movimento;
typedef struct posicao {
    int x, y;
} Posicao; 

Defina a função Posicao posFinal (Posicao inicial, Movimento mov[], int N) que, dada uma posição inicial e um array com N movimentos, calcula a posição final do robot depois de efectuar essa sequência de movimentos.

Exemplo

> Movimento mov[5] = { Norte, Norte, Oeste, Sul, Oeste };
> Posicao inicial = { 0, 0 };
> Posicao final = posFinal(inicial, mov, 5);
> printf("(%d, %d)\n", final.x, final.y);
(-2, 1)

Resolução

Posicao posFinal (Posicao inicial, Movimento mov[], int N) {
    int i;
    for(i = 0; i < N; i++) {
        switch (mov[i]) {
            case Norte:
                inicial.y++;
                break;
            case Este:
                inicial.x++;
                break;
            case Sul:
                inicial.y--;
                break;
            case Oeste:
                inicial.x--;
                break;
            default:
                break;
        }
    }
    return inicial;
}