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:  
mariana_____silva

C++ Programa + subprograma - função XY/(2*Y)

Recommended Posts

Olá, tentei várias vezes realizar um programa em que o enunciado é o seguinte: Uma função que permita devolver o resultado do calculo da seguinte expressão: XY/(2*Y)

É necessário a utilização de um subprograma. O programa que realizei foi o seguinte:

No programa: 

{
   printf ("Introduza os valores de X e Y\n");
   scanf ("%d%d", &x, &y);
   expressao (x,y);
   printf ("O valor da expressao = %d\n", expressao (x,y)/(2*y));
}

 

No subprograma:

int expressao (int x, int y)
{
  if (y<=0)
  {
    return (1);
  }
  else
 { 
   return (x*expressao (x, y-1));
  }
}

 

Obrigada e espero que me consigam ajudar!

Editado por Simon Viegas
Ajustes da exibição do código na tag CODE

Compartilhar este post


Link para o post
Compartilhar em outros sites

Olá @mariana_____silva.

 

A dica é simples: foque no problema, não na resposta. Apenas entenda o que se pede!

 

Vejamos o enunciado:

Em 15/02/2018 às 17:11, mariana_____silva disse:

Uma função que permita devolver o resultado do calculo da seguinte expressão: XY/(2*Y)

 

Não tem mistério. A função recebe X e Y e retorna X*Y/(2*Y). Fim. ;), ou seja, só por observar o problema em si, a resposta já veio implícita: é apenas uma expressão matemática, não tem um algoritmo por trás :).

Obs.: assim como na matemática, tem que delimitar o escopo mesmo, mas o certo seria apenas para y!=0, em vez y<=0. O que não pode é ser 0, correto? pois resultará em uma  indeterminação (pode dar o famoso "pau" no programa). Os negativos podem de boa.

 

Então, por hora esqueça o C++, tome como X=5 e Y=3. Qual o resultado da expressão? Consegue fazer essa conta?

Resp: 2,5, correto?

 

 

Como essa a expressão completa envolverá outros problemas, devido a divisão, tente fazer primeiro um mais simples, ex:

Em 15/02/2018 às 17:11, mariana_____silva disse:

Uma função que permita devolver o resultado do calculo da seguinte expressão: XY

Ou seja, a função simplesmente receberá X e Y e retornará X*Y.

 

Outra coisa... Percebe que a resposta já está na própria função, logo só precisa imprimir a função em si.. não há outra conta para fazer depois.

Algo como:

printf ("O valor da expressao = %d\n", expressao(x,y));

A expressao() já terá o X*Y como resposta. Quando for fazer a expressão completa, idem. O printf() não mudará em nada, só a conta dentro da função  (mais algumas adaptações que verás que serão necessárias)...

 

Ai posta o código aqui.

 

 

No aguardo.

Editado por Simon Viegas

Compartilhar este post


Link para o post
Compartilhar em outros sites

@Simon Viegas Obrigada pela ajuda deu muito jeito! Vou postar aqui o código que fiz!

adicionado 1 minuto depois

PROGRAMA RESOLVIDO:

Programa:

{
            printf("Introduza os valores de X e Y\n");
            scanf ("%d%d",&x,&y);
            
            if (y==0)
            {
                printf(" e impossivel\n");
            }
            
            if (y!=0)
            {
                expressao(x,y);
            
            
            printf("o valor da expressao = %d\n", expressao(x,y)/(2*y));
            
            }
        }

 

Subprograma:

int expressao(int x, int y)
{
    if (y<=0)
    {            
            return (1);  
    }
    else 
    {
        return (x* expressao(x,y-1));
    }
}

 

Editado por Simon Viegas
Inserir tag CODE

Compartilhar este post


Link para o post
Compartilhar em outros sites

Olá @mariana_____silva .

 

Em 17/02/2018 às 08:30, mariana_____silva disse:

PROGRAMA RESOLVIDO:

Pelo que vi, ainda não. Você praticamente postou o mesmo código... e está praticamente com o mesmo problema.

 

Pelo menos encontrei divergências... Vamos lá.

 

Compilei e rodei o seu código. Inseri 5 e 3 como entrada. Deu:

tela1.jpg

 

Certo. Agora vamos fazer a conta manualmente.

 

Formula: XY/(2*Y), correto?

 

Substituindo os valores, temos:

5*3/(2*3)

 

Efetuando as operações:

5*3/(2*3) =

15/(6) = 2,50

 

ou seja, deveria aparecer assim:

tela2.jpg

 

Ou sua fórmula está errada ou minha conta está errada... (ou ambos) :)

 

 

Vejamos o enunciado:

Em 15/02/2018 às 17:11, mariana_____silva disse:

[...] o enunciado é o seguinte: Uma função que permita devolver o resultado do calculo da seguinte expressão: XY/(2*Y)

 

Ou seja, a função deve retornar o RESULTADO FINAL da expressão. E o seu programa não esta fazendo isso. Como dito tem que ser assim:

Em 16/02/2018 às 17:25, Simon Viegas disse:

A função recebe X e Y e retorna X*Y/(2*Y)

 

Simples assim. Não tem conta para fazer fazer depois que o método expressao() retorna uma resposta. A função deve já retornar o resultado final!

 

 

 

 

 

RESUMINDO

Como citado:

Em 16/02/2018 às 17:25, Simon Viegas disse:

Como essa a expressão completa envolverá outros problemas, devido a divisão, tente fazer primeiro um mais simples, ex:

Em 15/02/2018 às 17:11, mariana_____silva disse:

Uma função que permita devolver o resultado do calculo da seguinte expressão: XY

 

ou seja, faça um programa que apenas retorne o resultado de X*Y. Ai posta o código aqui. Depois, desse exemplo mais simples, tenta fazer a expressão completa X*Y/(2*Y).

 

Obs. 1: por favor, poste o código completo de uma vez só. Não precisa separar.

Obs. 2: não tente fazer a versão final logo, apenas tente fazer com a expressão X*Y.

 

 

 

No aguardo.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Bom dia! Venho assistindo esse problema, até o momento com uma outro interpretação que resolvi compartilhar. Do enunciado temos

Em 15/02/2018 às 18:11, mariana_____silva disse:

 Uma função que permita devolver o resultado do calculo da seguinte expressão: XY/(2*Y)

 

Desconfiado por não ter logo de cara o sinal de multiplicação, achei que @mariana_____silva o tivesse esquecido entre as variáveis da mesma forma que digitou entre 2 e variável Y. Daí o que me ocorrerá que; Ela não esqueceu e seja mesmo entre as variáveis XY uma junção tal que para X= 21 ^ Y= 41, tem-se XY= 2141 e com isso 2*Y= 82. Para mim, isso explica o porquê da resposta inicial ter recursividade em sua solução, haja vista a simplicidade do problema com a interpretação predominante, usar de recursividade nessa rotina é baita exagero até mesmo para iniciantes.

 

Esteja certo ou errado, ainda sim essa interpretação deu mais charme a questão que deixo de subproblema a ser solucionado a partir do interesse de vocês. (exercício extra)

Editado por Mauro Britivaldo
Correção Português
  • Curtir 1

Compartilhar este post


Link para o post
Compartilhar em outros sites

Olá @Mauro Britivaldo.

 

1 hora atrás, Mauro Britivaldo disse:

Desconfiado por não ter logo de cara o sinal de multiplicação, achei que @mariana_____silva o tivesse esquecido entre as variáveis da mesma forma que digitou entre 2 e variável Y

Faz sentido para mim... "coerentemente" falando poderia ficar:

 

Assim:

X*Y/(2*Y)

Ou assim:

XY/(2Y)

Ou seja, a falta do "*" apenas no numerador gerou dúvidas...

 

 

Mas, independente da interpretação da expressão, o meu foco é na estrutura do problema, não cálculo da expressão, vejam:

 

Em 15/02/2018 às 17:11, mariana_____silva disse:

o enunciado é o seguinte: Uma função que permita devolver o resultado do calculo da seguinte expressão: XY/(2*Y)

 

O que vez depois do ":", por hora, não importa* (é importante, mas não foi meu foco)... poderia ser qualquer coisa... Então, o que estou colocando em jogo no momento é COMO RETORNAR, e não O QUE RETORNAR. O "erro" estaria evidenciado aqui:

Em 17/02/2018 às 08:30, mariana_____silva disse:

printf("o valor da expressao = %d\n", expressao(x,y)/(2*y));

 

Percebam que o método expressao() retorna um valor (não importa o quê), mas depois ainda está sendo dividido por algo (não importa que), mas é percebível que esse algo, teoricamente, faz parte da expressão em si. O que eu enfatizo é que o método deve retornar UMA REPOSTA FINAL (independente do que seja).

 

Deveria ser algo como:

printf("o valor da expressao = %d\n", expressao(x,y));

A diferença e importante entre uma coisa e outra. Pois a função precisa "devolver o resultado do calculo". E não "devolver parte do cálculo e terminar a conta depois". Entendem?

 

Devido a isto, nessa minha interpretação do problema, a sugestão continua válida:

Em 18/02/2018 às 16:18, Simon Viegas disse:

Obs. 2: não tente fazer a versão final logo [com a suposta expressão correta], apenas tente fazer com a expressão X*Y.

 

 

ADENDO:

Por que fazer apenas com "X*Y"?

 

Pois justamente não importava (não imposta ainda) o que se quer devolver, mas que deve devolver algo dessa forma, ou seja, conseguindo fazer com "X*Y", passaria para analisar o que de fato a expressão é...  ou devolveria "X*Y(2*Y)" (como supostamente achei que deveria ser); ou devolveria "XY/(2*Y), como citado @Mauro Britivaldo; ou devolveria de alguma outra forma que venha ser entendido como a correta.

 

 

***

 

@mariana_____silva, como está o andamento do algoritmo? por favor, poste o que já conseguiu fazer e onde está com dúvidas ou posta o "código final".

 

Obs.:

Em 17/02/2018 às 08:30, mariana_____silva disse:

PROGRAMA RESOLVIDO:

Como citado, particularmente entendo que ainda não está resolvido.

 

 

No aguardo.

  • Curtir 1

Compartilhar este post


Link para o post
Compartilhar em outros sites

Sim, entendi também que ela já fez a função, o que postou aqui foi um debug da mesma. E que já está satisfeita.

 

No final eu rodei o programa em um teste, só não exibiu o resultado correto para: X^Y/(2*Y) porque não colocou (2.0*Y), daí a função só retorna valores inteiros.

 

adicionado 6 minutos depois
3 horas atrás, Simon Viegas disse:

o método deve retornar UMA REPOSTA FINAL

A sim, daí eu presumi que ela colocou tudo em uma função e no lugar da mensagem um return(expressao(X,Y)/(2.0*Y)); Será que ela fez isso ???

Confesso que não dei importância para essa parte. :wiggle:

Editado por Mauro Britivaldo

Compartilhar este post


Link para o post
Compartilhar em outros sites
1 hora atrás, Mauro Britivaldo disse:

Sim, entendi também que ela já fez a função, o que postou aqui foi um debug da mesma. E que já está satisfeita.

Sobre "está satisfeita" entra outro mérito.. como citado:

 

Em 18/02/2018 às 16:18, Simon Viegas disse:

Pelo que vi, ainda não. Você praticamente postou o mesmo código... e está praticamente com o mesmo problema.

Ou seja, nesse sentido ela está pode está "apenas achando que está resolvido"... pelo que já citei: não está ^_^

 

 

 

1 hora atrás, Mauro Britivaldo disse:

No final eu rodei o programa em um teste, só não exibiu o resultado correto para: X^Y/(2*Y) porque não colocou (2.0*Y), daí a função só retorna valores inteiros.

Como sugerido anteriormente: independente de exibir um suposto resultado certo ou não, o "processamento" tem falhas, ou seja, na programação nem sempre o fins justificam os meios... mesmo que na tela fique tudo certinho... o enunciado não está sendo respeitado na questão do devolver o resultado do calculo no método.

 

 

 

2 horas atrás, Mauro Britivaldo disse:

A sim, daí eu presumi que ela colocou tudo em uma função e no lugar da mensagem um return(expressao(X,Y)/(2.0*Y)); Será que ela fez isso ???

Confesso que não dei importância para essa parte.

Não entendi exatamente essa parte... mas cai no mesmo foco...: não estamos analisando qual a expressão, mas apenas como vou dar a resposta.

 

Resumidamente deveria ficar algo assim:

int expressao (int x, int y)
{
    int resultado_da_expressao;
    resultado_da_expressao=//aqui o cálculo da expressão qualquer que seja
    return resultado_da_expressao;
}

e na hora de exibir:

printf("o valor da expressao = %d\n", expressao(x,y));

 

Para resolver isso:

- inicialmente faz com a expressão X*Y. (pois é mais simples, e pode continuar usando int);

- altera a expressão para expressão que quiser, ao passo de fazer oooutras adaptações que serão necessárias... (por isso sugeri fazer apenas com X*Y primeiro).

 

Conseguiu entender o que quero dizer? se comentei algo errado, favor citar ou se tiver dúvidas sobre algo, comenta ai...

 

Mas em fim, tudo agora depende @mariana_____silva.. saber em que ponto está para seguir em frente...

  • Haha 1

Compartilhar este post


Link para o post
Compartilhar em outros sites

 

3 horas atrás, Simon Viegas disse:

Resumidamente deveria ficar algo assim:


int expressao (int x, int y)
{
    int resultado_da_expressao;
    resultado_da_expressao=//aqui o cálculo da expressão qualquer que seja
    return resultado_da_expressao;
}

e na hora de exibir:


printf("o valor da expressao = %d\n", expressao(x,y));

 

Se tivesse postado isso desdo começo, já teria resolvido tudo, tão simplesmente isso já responde a pergunta, sem achismo, sem adivinhações e direto ao ponto lindo e perfieto.

 

 
3 horas atrás, Simon Viegas disse:

independente de exibir um suposto resultado certo ou não, o "processamento" tem falhas, ou seja, na programação nem sempre o fins justificam os meios...

Para mim esse tipo de coisa nem adianta.

Editado por Mauro Britivaldo
  • Curtir 1

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

×