Jump to content

Dúvida exercicio função ping pong


zmar
 Share

Recommended Posts

void Ping(int i)
{
switch(i)
{
case 1:
case 2:
case 3: while(i--)
{
printf("\n%d", --i);
}
break;
case 25: Pong(3);
break;
default: printf("\nJá Passei em C");
Pong(123);
}
}

void Pong(int x)
{
int j = 0;
switch(x)
{
case 1:
case 2: Ping(x);
case 3: j = 5;
j++;
return;
default: printf("\nOla");
return;
}
printf("\nVou Sair");
}

Alguém me pode explicar o outpout de pong(2) e pong(1), eu sei as respostas não sei é como é que se chegou lá

Edited by thoga31
Tags code + GeSHi
Link to comment
Share on other sites

Pong(2) = 0

Pong(1) = Runtime error. Vamos analisar porquê:

Tanto Pong(2) como Pong(1) farão Ping(x). Daqui, entramos em Ping, e quer seja 1, 2 ou 3, temos aquele ciclo while. Para Ping(2), a condição é analisada, e sendo diferente de zero entra no ciclo. Pelo caminho foi decrementado em duas unidades (nota que tens i-- na condição e --i no printf).

No entanto, para Ping(1), vais decrementar 2 unidades, e vais ter -1. A condição não se cumpre (deverá ser while(0) para sair), pelo que volta a decrementar, ficando em -3. E assim até ao infinito, uma vez que não vais voltar nunca mais a ter 0.

Conclusão: o runtime error deve-se à existência de um ciclo infinito.

Knowledge is free!

Link to comment
Share on other sites

Olá, sou iniciante em C e estou a fazer um curso superior na área.

Meu professor passou-me alguns exercícios referentes a função Ping e Pong já citada no forum.

Bom não sei como faço para criar um projeto em DEV C++ para chamar e testar as alternativas que ele me passou.

Creio que estou a fazer algo incorreto ou então o código está incompleto da maneira que estou gerando no DEV. Abaixo está como fiz e está a apresentar erros que não sei a que se referem. Questões do professor: Qual a saída para a chamada Pong(3); Qual a saída para a chamada Ping(-4); Qual a saída para a chamada Ping(24);

Desde já agradeço.

Eis como montei o código:

#include <stdio.h>
#include <string.h>

void Ping (int i)
{
           switch (i)
           {
                       case 1:
                       case 2:
                       case 3: while (i--)
                                              printf("\n%d", --i);
                                  break;
                       case 25: Pong(3);
                                     break;
                       default: printf("\nJá Passei em C");
                                  Pong(123);

           }

}
void Pong (int x)
{
           int j=0;
           switch (x)
           {
                       case 1:
                       case 2: Ping(x);
                       case 3: j =5;
                                  j++;
                                  return;
                       default: printf("Olá");
                                  return;
           }
           printf("Vou Sair");
}


int main()
{
 Pong(3)
}
Edited by thoga31
Tags code + GeSHi
Link to comment
Share on other sites

o único "erro" que estou a ver no código é a falta de valor de retorno da função "main".

se bem que parece faltar um break para o caso "2" na função Pong, mas isso não dá erro.

um outro ponto que dá mensagem de aviso (e não de erro) é a existência da função printf no final da função Pong, algo que nunca irá ser executada pois todos os casos anteriores já executaram a chamada do return.

sem saber quais as mensagens que te são apresentadas, é muito comlicado ajudar.

no que toca à perguntas do professor, é teu trabalho saber/conseguir responder a elas.

IRC : sim, é algo que ainda existe >> #p@p
Link to comment
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now
 Share

×
×
  • Create New...

Important Information

By using this site you accept our Terms of Use and Privacy Policy. We have placed cookies on your device to help make this website better. You can adjust your cookie settings, otherwise we'll assume you're okay to continue.