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

C# Onde esta o erro ?

Recommended Posts

   #include <iostream>
   #include <cstdlib>
   .using namespace std;
   .
   .int main (void){
   .int a,b,c, opcao;
   .cout <<"Digite o valor de A: ";
   .cin >> a;
   .cin ignore();
   .cout <<"Digite o valor de B: ";
   .cin >> b;
   .cin.ignore();
   .c=a+b;
   .cout <<"O resultado de A + B e "<<c<<"\n\n
   .\1 sim\t2.nao\n\n=>";
   .\Deseja  reiniciar o programa e realizar outro calculo?\n
   .cin >> opcao;
   .if (opcao ==1)
   .main();
   .else
   .return EXIT_success;
   .}

Alguem sab onde esta o erro ? Executo pelo Dev C++

 

Editado por Simon Viegas
Inserir tag CODE

Compartilhar este post


Link para o post
Compartilhar em outros sites

@alessandro007 Olá. Seu código corrigido:

 

#include <iostream>
#include <cstdlib>
using namespace std;

int main (void) {

   int a, b, c, opcao;

   cout <<"Digite o valor de A: ";
   cin >> a;
   cin.ignore();

   cout <<"Digite o valor de B: ";
   cin >> b;
   cin.ignore();

   c = a + b;

   cout <<"O resultado de A + B e "<< c <<"\n\n"
   "1.sim\t2.nao\n\nDeseja realizar outro calculo? => ";
   cin >> opcao;
   cin.ignore();

   cout << endl;

   if (opcao == 1)
       main();
   else
       return EXIT_SUCCESS;
}

Não entendi o por quê desses pontos q você está usando no início de cada linha (!?)

Obs: O seu código é em C++ e não C# 

Editado por giu_d
corrigir comentário
  • Curtir 1

Compartilhar este post


Link para o post
Compartilhar em outros sites

Olá.

 

Só uma observação:

3 horas atrás, giu_d disse:

   if (opcao == 1)
       main(); //aqui está invocando o próprio método (recursividade). NÃO DEVERIA!!!
   else
       return EXIT_SUCCESS;

 

 

Não é uma boa prática um método invocar o próprio método (si mesmo) para servir para "voltar"... o mais correto seria inserir uma laço de repetição, como um do/while.

 

Perceba que no C/C++, invocar um método não é apenas "fazer o código ir para determinada posição" (como um GOTO lá dos arquivos .bat), pelo contrário, está mais para "abrir uma nova instância desse método", ou seja, seria como se cada vez que fosse escolhido a posição 1, o computador "criasse uma cópia" do método main().

 

Como assim?

Ao executar o programa 10 vezes, pela opção 1, ao depois selecionar o 2, o return vai finalizar apenas o main() atual, voltará para o anterior (o main() da 9ª vez)... que vai finalizar e voltar pro anterior, que vai finalizar e voltar pro anterior... etc. Em fim... é considerável erro de lógica.

 

Quer ver?

Coloquem o final do código assim:

   if (opcao == 1)
       main();
   else
       return EXIT_SUCCESS;
       
    cout << " FECHOU MAIS UM MAIN()" << endl;  //só adicionem essa linha!
}

Agora fiquem inserindo 1 e dando ENTER varias vezes, após coloque 2 para finalizar no momento oportuno e vejam o que acontece.

 

Compartilhar este post


Link para o post
Compartilhar em outros sites

Código usando o do/while:

#include <iostream>
#include <cstdlib>
using namespace std;

int main (void) {

   int a, b, c, opcao;

   do {
       cout <<"Digite o valor de A: ";
       cin >> a;
       cin.ignore();

       cout <<"Digite o valor de B: ";
       cin >> b;
       cin.ignore();

       c = a + b;

       cout <<"O resultado de A + B e "<< c <<"\n\n"
       "1.sim\t2.nao\n\nDeseja realizar outro calculo? => ";
       cin >> opcao;
       cin.ignore();

       cout << endl;

    } while (opcao != 2);

    return EXIT_SUCCESS;
}

Qto a questão da recursividade prefiro não comentar

  • Curtir 1

Compartilhar este post


Link para o post
Compartilhar em outros sites
8 horas atrás, giu_d disse:

Qto a questão da recursividade prefiro não comentar

 

Se for para corrigir ou mesmo complementar eu agradeceria os comentários...  posso ter entendido a questão de modo errado e está replicando besteiras, rs.

  • Curtir 1

Compartilhar este post


Link para o post
Compartilhar em outros sites

@Simon Viegas Olá. A questão é q do modo como o Sr. se referiu quanto a recursividade passou uma certa impressão d q é algo q não se deve fazer. Posso estar enganado. Provavelmente esteja

A recursividade é amplamente usada na programação e até gostaria d pedir um espaço p passar dois exemplos clássicos do uso da recursividade. Normalmente esses exemplos abaixo são usados p ensinar a respeito da recursividade

Também gostaria de passar esse link:

https://pt.wikipedia.org/wiki/Recursividade_(ciência_da_computação)

Nesse link acima é explicado bem a respeito da recursividade q, resumidamente, é uma função (sub-rotina) chamar ela mesma

 

Ex 1. Cálculo do fatorial de maneira recursiva:

#include <stdio.h>
  
// Função recursiva
int fatorial(int n) {
    if (n < 2) 
        return 1;    
    else
      return n * fatorial(n - 1);    
}

int main() {

    int i;

    for (i = 1; i <= 6; i++)
        printf("Fatorial de %d: %d  ", i, fatorial(i));

    printf("\n");

    return 0;
}

Ex 2. Série de Fibonacci de maneira recursiva:

#include <stdio.h>

// função resursiva  
int fibonacci(int n) {

    if (n < 2)
        return n;
    else
        return fibonacci(n - 1) + fibonacci(n - 2);
}

int main() {

    int i;

    for (i = 1; i <= 25; i++) 
        printf("%d ", fibonacci(i));   

    printf("\n");

    return 0;
}

Mas como eu disse acima: Provavelmente foi só impressão minha essa de q o Sr. considera a recursividade como algo incorreto ou inadequado.

Só q o cuidado q é necessário ter com relação a recursividade é d evitar q o código caia em loop infinito. Ou seja, uma função chamar ela mesma infinitamente. É preciso um critério d parada, por isso é comum em funções recursivas o uso do if/else  

Passei os códigos acima e frisei a importância da recursividade pela questão do fórum aqui ter como foco principal o aprendizado. Fugi um pouco do assunto do tópico, mas não quero q ninguém entenda q recursividade seja algo q deva ser evitado. Principalmente p quem está começando a programar 

Obs: Claro q para o código referente ao tópico o uso do do/while é bem mais interessante q o uso da recursividade, quanto a isso não resta dúvidas

Editado por giu_d
corrigir comentário
  • Curtir 1

Compartilhar este post


Link para o post
Compartilhar em outros sites

Sobre:

52 minutos atrás, giu_d disse:

@Simon Viegas Olá. A questão é q do modo como o Sr. se referiu quanto a recursividade passou uma certa impressão d q é algo q não se deve fazer. Posso estar enganado. Provavelmente esteja

 

Por isso achei interessante o feedback. :D

 

 

Pois então, veja:

11 horas atrás, Simon Viegas disse:
15 horas atrás, giu_d disse:


   if (opcao == 1)
       main(); //aqui está invocando o próprio método (recursividade). NÃO DEVERIA!!!
   else
       return EXIT_SUCCESS;

 

Perceba que estou me referindo ao contexto, ou seja, está usando da recursividade em um contexto que não deveria!!! O erro não está em "existir recursividade na linguagem", mas sim em estarem usando esse recurso com o propósito errado.

 

Resumidamente seria dizer: "@alessandro007 estava utilizando da recursividade com objetivo de fazer o código repetir", e isso seria incorreto.  (na minha interpretação)

 

 

Sobre:

52 minutos atrás, giu_d disse:

Mas como eu disse acima: Provavelmente foi só impressão minha essa de q o Sr. considera a recursividade como algo incorreto ou inadequado.

 

Idem... apenas talvez me expressei mal... e você interpretou dessa forma, ou seja, estaria argumentando corretamente, mas utilizando da premissa errada. (eu não quis dizer que a recursividade é incorreta ou inadequada, apenas que é incorreta para o contexto) :)

Editado por Simon Viegas
  • Amei 1

Compartilhar este post


Link para o post
Compartilhar em outros sites

@Simon Viegas Por isso fiz esse comentário:

56 minutos atrás, giu_d disse:

Obs: Claro q para o código referente ao tópico o uso do do/while é bem mais interessante q o uso da recursividade, quanto a isso não resta dúvidas

:thumbsup:

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

×