Ir para conteúdo
Fórum Script Brasil
  • 0

Corrida da lebre e a tartaruga


Shura

Pergunta

Olá sou iniciante no c e meu professor passou um exercicio que nem eu nem a maioria do pessoal não conseguiu resolver. Não queria que ninguém fizesse meu dever de casa mais não tem outro jeito se alguém ai e fera em C me dá uma ajuda o exercico e o seguinte:

7. (Simulação: A Lebre e a Tartaruga) Neste problema você recriará um dos momentos verdadeiramente grandiosos da história, quer é a clássica corrida entre a lebre e a tartaruga. Você usará a geração aleatória de números para desenvolver uma simulação desse memorável evento.

Nossos competidores começam a corrida no "quadro1" de setenta quadrados. Cada quadrado representa uma posição possível ao longo do trajeto da corrida. A linha de chegada está no quadrado 70. O primeiro competidor a alcançar ou passar do quadrado 70 ganha uma cesta de cenouras e alface. O trajeto da corrida inclui uma subida pela encosta de uma montanha escorregadia, portanto, ocasionalmente, os competidores perdem terreno.

Há um relógio que emite um tique por segundo. A cada tique do relógio, seu programa deve ajustar a posição dos animais de acordo com as seguintes regras:

Animal Tipo de Movimento Porcentagem de Tempo Movimento real

Tartaruga Movimento rápido 50% 3 quadrados para a direita

Escorregão 20% 6 quadrados para a esquerda

Movimento Lento 30% 1 quadrado para a direita

Lebre Sono 20% Absolutamente nenhum movimento

Salto grande 20% 9 quadrados para a direita

Grande escorregão 10% 12 quadrados para a esquerda

Salto pequeno 30% 1 quadrado para a direita

Pequeno escorregão 20% 2 quadrados para a esquerda

Use variáveis para controlar as posições dos animais (i.e., os números das posições vão de 1 a 70). Cada animal inicia na posição 1 (i.e. "linha de partida"). Se um animal escorregar para antes do quadrado 1, leve o animal de volta ao quadrado 1.

Gere as porcentagens da tabela anterior produzindo um inteiro aleatório, i, no intervalo 1 £ i £ 10. Para a tartaruga, realize um "movimento rápido" quando 1 £ i £ 5, um " escorregão" quando 6 £ i £ 7 ou um "movimento lento" quando 8 £ i £ 10 . Use uma técnica similar para mover a lebre.

Comece a corrida imprimindo:

BANG!!!!

E ELES PARTIRAM!!!!

Depois, para cada clique do relógio (i.e. a cada repetição do loop), imprima uma linha com 70 posições mostrando a letra "T' na posição da tartaruga e "L" na posição da lebre. Ocasionalmente, os competidores estarão no mesmo quadrado. Nesse caso, a tartaruga morde a lebre e seu programa deve imprimir "OUCH!!!" iniciando naquela posição. Todas as posições impressas diferentes das que levam o "T" , o "L" e a palavra "OUCH!!!" (no caso de os animais ocuparem o mesmo quadrado) devem estar em branco

Depois de cada linha ser impressa, teste se algum dos animais alcançou ou passou do quadrado 70. Em caso positivo, imprima o vencedor e termine a simulação. Se a tartaruga vencer, imprima TARTARUGA VENCEU!!! YAY!!! Se a lebre vencer, imprima LEBRE VENCEU!!! YUCH!!! Se ambos os animais venceram no mesmo tique do relógio, você pode querer favorecer a tartaruga ("a parte mais fraca") ou pode desejar imprimir HOUVE UM EMPATE. Se nenhum animal vencer, realize o loop novamente para simular o próximo tique do relógio.

Editado por Jonathan Queiroz
Remover caixa alta do título conforme regra 3.7 (Jonathan)
Link para o comentário
Compartilhar em outros sites

2 respostass a esta questão

Posts Recomendados

  • 0

Olá, você disse que é iniciante em C ?

Então ou você teve umas boas aulas sobre lógica de programação, ou seu professor resolveu ferrar com você !

Pelo que vi o pessoal não quer te ajudar, então vou te dar uma forçinha...

Em primeiro lugar, seu programa vai precisar de algumas coisas extras como a função rand da biblioteca stdlib:

x = rand() % 10 + 1; //Isso vai gerar números de 1 a 10.
Nesse caso, rand() vai gerar sempre os mesmos números, então adicione esta função no início do seu programa para evitar isso:
srand( time(NULL) );
Se não me engano, a função time necessita da biblioteca <time.h>. Seu programa também vai precisar limpar o terminal:
system("cls"); //Usada para limpar o terminal no windows
system("clear"); //Usada para limpar o terminal no linux
Seu programa irá rodar a 1 FPS, ou seja, 1 quadro por segundo. A cada segundo você deverá limpar o terminal e redesenhar tudo, de acordo com os novos dados. Para o windows:
#include <stdio.h> //Biblioteca necessária no WIndows

Sleep(1000); //Pausa o programa por 1000 milisegundos (1 segundo)
Para o Linux:
#include <unistd.h> //Biblioteca necessária no Linux

usleep(1000000); //Pausa o programa por 1.000.000 nanosegundos (1 segundo)

Crie duas variáveis para representar a posição da lebre e da tartaruga.

Use um laço while(posicaoLebre<=70||posicaoTartaruga<=70) para criar o loop que fará os cálculos e desenhará o trajeto.

Os cálculos deixo com você, é matemática simples, estou te ajudando na parte lógica.

Crie funções para facilitar os cálculos.

Dentro do laço while, crie um laço for após os cálculos para desenhar o trajeto, imprimindo T na posição da tartaruga, L na posição da lebre e espaço em branco (" ") nas demais posições, um condicional If/Else cuidará facilmente disso.

Crie um condicional especial para quando a posição da lebre e da tartaruga forem as mesmas, desenhando OUCH!!! e adicionando +7 no contador do for, para que o laço for não imprima 76 caracteres.

Não se esqueça ! Crie condicionais dentro do laço while, antes do laço for, para ajustar as posições da lebre ou da tartaruga caso elas passem de 70 ou tenha valores menores que 1.

No final, quando a variável da posição da lebre ou da tartaruga for igual a 70, o laço while irá acabar, então na continuação você irá comparar as variáveis e verificar quem foi o vencedor. Se quiser, de quebra ainda dê a opção de reiniciar a corrida sem ter que reiniciar o programa, simplesmente zerando as variáveis e criando um laço while global, que seria encerrado apenas com um break [while(true)].

Se quiser, faço o programa pra você... Mas acho que agora você pode fazer por si mesmo.

Editado por Aleksander Luiz
Link para o comentário
Compartilhar em outros sites

  • 0

Eu tive a mesma atividade, mas pensei pela logica de ponteiros, mas meu progama não tá rodando, poderia alguém me ajudar?

#include<stdio.h>
#include<stdlib.h>
#include<time.h>
int  movimento_tartaruga(int );
int  movimento_lebre(int);
void corrida(int *array);
int main(){   
    int array[69]={0};
    srand(time(NULL));
    corrida(array);
    
                      
        system("pause");
        return 0;
        }
    
    void corrida(int *array){
         int *tartaruga, *lebre,*fim, cont1, cont2,*ind;
         tartaruga=array;
    lebre=array;
    fim= array + 69;
    printf(" BANG!\n ELES PARTIRAM!\n");
    
    do {   
                  cont1=movimento_tartaruga(rand()%10+1);
           if( tartaruga + cont1< array)
                 tartaruga= array;
                 else
                     tartaruga= tartaruga + cont1;
            for(ind=array; ind<= tartaruga;ind++)
              printf("T");
           printf("\n\n");          
           cont2=movimento_lebre(rand()%10+1);
           if( lebre + cont2< array)
                 lebre= array;
              else
                 lebre= lebre + cont2;
          
           for(ind=array; ind<= lebre;ind++)
              printf("L");
           printf("\n");
           if(tartaruga==lebre)
              printf("OUCH!");
              printf("\n\n"); 

          }while(tartaruga!=fim ||lebre!=fim);
          
          if(tartaruga==fim&&lebre==fim)
               printf("Empate");
               else
               if(tartaruga==fim)
                   printf("Tartaruga");
                   else
                      printf("Lebre");
    
   }
     int  movimento_tartaruga(int opcao){
          if(opcao>=1&&opcao<=5)
               return 3; 
          if(opcao>=6&&opcao<=7)
               return -5;
          if(opcao>=8&&opcao<=10)
               return 1;  
     }   
     int  movimento_lebre(int opcao){
          if(opcao>=1&&opcao<=2)
               return 0; 
          if(opcao>=3&&opcao<=4)
               return 9;
          if(opcao==5)
               return -12; 
          if(opcao>=6&&opcao<=8)
               return 1; 
          if(opcao>=9&&opcao<=10)
               return -2;           
     }

Link para o comentário
Compartilhar em outros sites

Participe da discussão

Você pode postar agora e se registrar depois. Se você já tem uma conta, acesse agora para postar com sua conta.

Visitante
Responder esta pergunta...

×   Você colou conteúdo com formatação.   Remover formatação

  Apenas 75 emoticons são permitidos.

×   Seu link foi incorporado automaticamente.   Exibir como um link em vez disso

×   Seu conteúdo anterior foi restaurado.   Limpar Editor

×   Você não pode colar imagens diretamente. Carregar ou inserir imagens do URL.



  • Estatísticas dos Fóruns

    • Tópicos
      152,3k
    • Posts
      652,4k
×
×
  • Criar Novo...