Ir ao conteúdo
  • Cadastre-se
alissonr539

Dúvida em C

Recommended Posts

Sabendo que a frente de um robô pode assumir quatro orientações diferentes: norte 
('N'), sul ('S'), leste ('L') ou oeste ('O'). Escreva um programa que leia a orientação 
inicial do robô e suas coordenadas no plano (x,y). O programa deve depois ler uma 
sequência de diversos comandos (um char cada comando) e para cada comando 
mostrar a posição e orientação do robô. 
comandos possíveis: 
D //faz o robô girar 90 graus para a direita 
E //faz o robô girar 90 graus para a esquerda 
F //move o robô para frente 
//se a orientação for norte subtrai 1 na coordenada y 
//se a orientação for sul soma 1 na coordenada y 
//se a orientação for leste soma 1 na coordenada x 
//se a orientação for oeste subtrai 1 na coordenada x 
S //para sair do programa 

Exemplo de entrada 







Exemplo de saída 
L 3 3 
N 3 3 
N 3

Compartilhar este post


Link para o post
Compartilhar em outros sites

Sabendo que a frente de um robô pode assumir quatro orientações diferentes: norte 

('N'), sul ('S'), leste ('L') ou oeste ('O'). Escreva um programa que leia a orientação 

inicial do robô e suas coordenadas no plano (x,y). O programa deve depois ler um

sequência de diversos comandos (um char cada comando) e para cada comando 

mostrar a posição e orientação do robô. 

comandos possíveis: 

D //faz o robô girar 90 graus para a direita 

E //faz o robô girar 90 graus para a esquerda 

F //move o robô para frente 

//se a orientação for norte subtrai 1 na coordenada y 

//se a orientação for sul soma 1 na coordenada y 

//se a orientação for leste soma 1 na coordenada x 

//se a orientação for oeste subtrai 1 na coordenada x 

S //para sair do programa 

Exemplo de entrada 

Exemplo de saída 

L 3 3 

N 3 3 

N 3

Qual é a dúvida?

Compartilhar este post


Link para o post
Compartilhar em outros sites

não tenho ideia de como fazer, pensei em fazer por switch mas sempre me tranco na lógica, me falaram que é por um laço mas não sei como fazer, to no começo do curso de eng e não sei mesmo, poderia me ajudar ?

Compartilhar este post


Link para o post
Compartilhar em outros sites

Como eu faria isso:

- primeiro o programa deve pedir que o usuário digite a orientação inicial do robô (Norte, Leste, Sul ou Oeste). 

- ele deve então checar qual letra foi digitada, e dependendo da letra (N, L, S ou O) de orientação será dado um número a uma variável, onde:

Norte - 0

Leste - 1

Sul - 2

Oeste - 3

Isto é importante pois isto será usado pra determinar a orientação do robô quando a pessoa digitar E (esquerda) ou D (direita), incrementando ou decrementando de 1 esta variável.

- em seguida deve pedir que o usuário digite as coordenadas x e y iniciais do robô

- é então que o programa deve entrar num laço, e este laço deve repetir os comandos do bloco até que o usuário digite a opção "S" que indica que o usuário deseja sair do programa

- no bloco do laço ele pede que o usuário escolha se o robô deve girar para a Esquerda, Direita, ou ir para a Frente, ou o usuário quer Sair do do programa.

- aí é que entram os ifs (ou switch) pra checar se o usuário escolheu esquerda, direita ou frente. Esquerda subtrai 1 da orientação, Direita adiciona 1 da orientação, e Frente adiciona ou subtrai 1 de x ou de y dependendo da orientação, como diz o enunciado.

- ainda dentro do bloco do laço, por fim o programa precisa usar um "if" pra checar se o usuário não escolheu Sair do programa, e, caso não tenha, ele deve imprimir a orientação e a posição atual do robô. Pra saber a orientação basta pegar o resto da divisão por 4 do número da orientação, e checar se o resto indica que é Norte (0), Leste (1) , sul (2) ou oeste (3), e imprimir a letra correspondente. E então imprimir as coordenadas x e y.

Compartilhar este post


Link para o post
Compartilhar em outros sites

não teria como fazer um esboço do código pra mim? 

na hora de fazer o laço eu me atrapalho e não sei o que fazer direito

nunca tinha trabalhado com esse tipo de problema

Compartilhar este post


Link para o post
Compartilhar em outros sites

Fala Alisson, tranquilo?

 

O problema pode ser resolvido usando if's no lugar de switch caso sua dúvida seja com o switch. Tenta fazer com if e ai a gente te ajuda com o switch, ou especifique melhor sua dúvida com o switch.

Se sua dúvida for: "Não tenho ideia de como resolver", o melhor é ir fazendo esboços, que dai você vai aprimorando a ideia.

 

Você já tem algo iniciado?

 

Uma ideia é resolver da seguinte forma:

Lê a orientação atual do robo e salva em uma variável;Lê a posição do robo e salva em um vetor;Lê a nova orientação do roboEnquanto a nova orientação for diferente de S {     SE (nova orientação for E e a orientação atual for N) {         Muda a orientação atual para O     }     .     .     . // Precisa fazer isso para todas as opções possiveis caso a nova orientação for E ou D    . // Fica mais fácil e bonito com o switch     .     SE (nova orientação for F){         SE (orientação atual for N){             posição 0 do vetor onde foi salvo a posição do robo -1         }         SE (orientação atual for O){              posição 1 do vetor onde foi salvo a posição do robo -1         }         .         .         . // Faz isso pra todas as opções possiveis também        .         .     }fimse     le a nova orientação do robo }fimenquanto

Compartilhar este post


Link para o post
Compartilhar em outros sites

Há 3 tipos de laços em C: "while", "do while" e "for". Vou explicar os 2 primeiros que é um dos dois que você usará nesse programa.

 

"While" checa a condição antes de executar as linhas de comando do bloco, ele funciona de forma parecida com um "if", ou seja ele só executa as linhas do bloco se a condição for verdadeira, mas com a diferença de que ao chegar ao final do bloco de comandos ele checa a condição novamente, se a condição ainda for verdadeira ele executa os comandos do bloco novamente, e fica repetindo esse ciclo até que a condição se torne falsa. A sintaxe do "while" é:

while (<condição>) {    <bloco de comandos>}

Lê-se: "Enquanto" (="while") a <condição> for verdadeira execute repetidamente o seguinte <bloco de comandos> (ou seja, até que a <condição> se torne falsa).

 

 

 

O laço "do while" executa os comandos do bloco uma vez antes de verificar a condição, se a condição for verdadeira ele executa o bloco de comandos novamente, e fica repetindo esse ciclo até que a condição se torne falsa. A sintaxe do "do while" é:

do {    <bloco de comandos>} while (<condição>);
Lê-se: "Faça" (="do") a execução do seguinte <bloco de comandos>, e então o execute novamente "enquanto" (="while") a <condição> for verdadeira.

 

 

 

No caso deste programa usar o "do while" como laço seria o mais conveniente, já que ele tem que entrar no laço pelo menos uma vez pra pedir que o usuário escolha entre as opções Esquerda, Direita, Frente ou Sair. E aí no final a condição para permanecer no laço seria que o usuário não tenha escolhido a opção Sair do programa.


@guigo1302 Eu acho que ele ainda nem aprendeu a usar vetores, isso não é necessário, e usar variáveis x e y é mais descritivo considerando o enunciado.

Compartilhar este post


Link para o post
Compartilhar em outros sites

O problema é esse, com while eu entendi a lógica, agora meu professor cobra isso com o for, tipo como o cara falou lá em cima, atribuir às coordenadas N, S, L e O valores numéricos e dai com o for fazer um ciclo que ele pare quando a tecla digitada for S

Com while eu consegui fazer funcionar tranquilamente, agora com for, não consigo achar uma lógica pra isso


Se ainda fossem uma sequencia definida, mas é uma sequencia aleatória...

Compartilhar este post


Link para o post
Compartilhar em outros sites

Não há porque usar um "for" nesse caso, você tem que usar o tipo de laço adequado pra cada situação, forçar o uso de "for" só por que quer que o use seria besteira.

 

Teria que ser algo ridículo desse tipo:

char comando;...printf("[E, D, F ou S]: ");for (scanf("%c", &comando); comando!='S'; scanf("%c", &comando)){    ...    <ifs, switches, etc>    ...    printf("[E, D, F ou S]: ");}

Compartilhar este post


Link para o post
Compartilhar em outros sites

Crie uma conta ou entre para comentar

Você precisar ser um membro para fazer um comentário

Criar uma conta

Crie uma nova conta em nossa comunidade. É fácil!

Crie uma nova conta

Entrar

Já tem uma conta? Faça o login.

Entrar agora





Sobre o Clube do Hardware

No ar desde 1996, o Clube do Hardware é uma das maiores, mais antigas e mais respeitadas publicações sobre tecnologia do Brasil. Leia mais

Direitos autorais

Não permitimos a cópia ou reprodução do conteúdo do nosso site, fórum, newsletters e redes sociais, mesmo citando-se a fonte. Leia mais

×