Informática, perguntado por millenab, 11 meses atrás

Há dois cangurus sobre um eixo-x, prontos para saltar na direção positiva (isto é, em direção ao infinito positivo). O primeiro canguru começa na posição x1 e se move a uma velocidade de v1 metros por salto. A segunda canguru começa na posição x2 e se move a uma velocidade de v2 metros por salto. Tendo em conta os locais de partida e taxas de movimentação para cada canguru, você pode determinar se eles nunca vão pousar no mesmo local, ao mesmo tempo?
Entrada: Uma única linha de quatro inteiros separados por espaços que denota os respectivos valores de x1, v1, x2, e v2.
0<=x1 , x2<=10000
1<=v1 , v2<=10000
Saída: imprimir SIM se eles podem pousar no mesmo local, ao mesmo tempo; caso contrário, imprima NAO.
Observações: Os dois cangurus devem pousar no mesmo local depois de fazer o mesmo número de saltos.

EXEMPLO1

Entrada: 0 3 4 2
Saída: SIM

Explicação: 1. 0 -> 3 -> 6 -> 9 ->12
2. 4 -> 6 ->8 -> 10 ->12
Depois de 4 pulos eles se encontraram.

EXEMPLO 2

Entrada: 0 2 5 3
Saída: NAO

Explicação: O segundo canguru tem uma localização inicial, que está à frente (mais a direita) da localização inicial do primeiro canguru (ou seja, x2 > x1). Porque o segundo canguru se move a um ritmo mais rápido (o que significa v2 > v1) e já está à frente do primeiro canguru, o primeiro canguru nunca será capaz de alcançá-lo. Assim, imprima não.

Soluções para a tarefa

Respondido por KuroeJin
1
#include<stdio.h>
#include<stdlib.h>

int resposta(int canguru, cangurus[][2], int aux);
int posicao(int aux);
int velocidade(int aux);
void chegarounao(canguru[][2]);

int main(){
 int cangurus[2][2];
 resposta(2 ,cangurus, 0);
 system("pause");
 return 0;}

int resposta(int canguru, int dados[][2] int aux){
 if(aux<canguru){
  dados[aux][0]=posicao(aux);
  dados[aux][1]=velocidade(aux);
  return resposta(canguru, dados, aux+1); }
 printf("\nO um canguru eh capaz de alcancar o outro?\n");
 chegarounao(dados);
 return 0;}

int posição(int aux){
 int pos;
 printf("Insira a posicao inicial do canguru %d: ", aux+1);
 scanf("%d", &pos);
 if((pos<0)&&(pos>10000)){
  printf("Posicao invalida!\n\n");
  return posicao(aux);}
 return pos; }

int velocidade(int aux){
 int vel;
 printf("Insira a velocidade de salto do canguru %d: ", aux+1);
 scanf("%d", &vel);
 if((vel<1)&&(vel>10000)){
  printf("Velocidade invalida!\n\n");
  return velocidade(aux); }
 return vel;}

void chegarounao(int canguru[][2]){
  if((canguru[0][0]<canguru[1][0])){
   if((canguru[0][1]<=canguru[1][1])) printf("Nao\n\n");
   else printf("Sim\n\n");  }
  else{
   if((canguru[0][0]>canguru[1][0])){
    if((canguru[0][1]>=canguru[1][1])) printf("Nao\n\n");
    else printf("Sim\n\n"); }
   else printf("Sim\n\n"); } }

KuroeJin: a função(abaixo da main) int posição(int aux){...}, ficaria: int posicao(int aux){}.(mantenha o que tem entre {})
KuroeJin: e nos "if" nas funçoes int posicao e int velocidade troque o &&(e) pelo ||(ou).
KuroeJin: Se não der o resultado esperado, avise-me! E se continuares a ter dúvidas disponibilizei o código com alguns comentários(não sei se serão úteis kkkk) acesse o link https://drive.google.com/open?id=0B1wK2ZICM20CRUgyNlFYcXVKd2c . Espero ter ajudado-te!
millenab: quando eu vo compilar e executar o programa da erro, fala que não e compativel com o computador
millenab: erro 216
millenab: suspeito que seja um virus do tipo trojan
KuroeJin: sério? eu testei aqui e funcionou direito. então fazes o seguinte, se o erro persistir, copia o código a mão.
millenab: acho que o problema não esta no código, está no computador, vou testar em outro computador e ve se da certo! ok, obrigada!
millenab: como faço esse programa no VISUALG?
KuroeJin: eu não sei, já que eu nunca utilizei esse programa.
Perguntas interessantes