Ir ao conteúdo
  • Comunicados

    • Gabriel Torres

      Seja um moderador do Clube do Hardware!   12-02-2016

      Prezados membros do Clube do Hardware, Está aberto o processo de seleção de novos moderadores para diversos setores ou áreas do Clube do Hardware. Os requisitos são:   Pelo menos 500 posts e um ano de cadastro; Boa frequência de participação; Ser respeitoso, cordial e educado com os demais membros; Ter bom nível de português; Ter razoável conhecimento da área em que pretende atuar; Saber trabalhar em equipe (com os moderadores, coordenadores e administradores).   Os interessados deverão enviar uma mensagem privada para o usuário @Equipe Clube do Hardware com o título "Candidato a moderador". A mensagem deverá conter respostas às perguntas abaixo:   Qual o seu nome completo? Qual sua data de nascimento? Qual sua formação/profissão? Já atuou como moderador em algo outro fórum, se sim, qual? De forma sucinta, explique o porquê de querer ser moderador do fórum e conte-nos um pouco sobre você.   OBS: Não se trata de função remunerada. Todos que fazem parte do staff são voluntários.
    • DiF

      Poste seus códigos corretamente!   21-05-2016

      Prezados membros do Fórum do Clube do Hardware, O Fórum oferece um recurso chamado CODE, onde o ícone no painel do editor é  <>     O uso deste recurso é  imprescindível para uma melhor leitura, manter a organização, diferenciar de texto comum e principalmente evitar que os compiladores e IDEs acusem erro ao colar um código copiado daqui. Portanto convido-lhes para ler as instruções de como usar este recurso CODE neste tópico:  
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

Editado por dif
excesso de formatação

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
  • Autor do tópico
  • 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.

    Editado por isrnick

    Compartilhar este post


    Link para o post
    Compartilhar em outros sites
  • Autor do tópico
  • 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
    Editado por guigo1302

    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.

    Editado por isrnick

    Compartilhar este post


    Link para o post
    Compartilhar em outros sites
  • Autor do tópico
  • 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






    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

    ×