Ir ao conteúdo
  • Cadastre-se

C# Onde esta o erro ?


Posts recomendados

   #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++

 

Link para o comentário
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# 

Link para o comentário
Compartilhar em outros sites

  • Membro VIP

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.

 

Link para o comentário
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

Link para o comentário
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

Link para o comentário
Compartilhar em outros sites

  • Membro VIP

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

Link para o comentário
Compartilhar em outros sites

Crie uma conta ou entre para comentar

Você precisa ser um usuário para fazer um comentário

Criar uma conta

Crie uma nova conta em nossa comunidade. É fácil!

Crie uma nova conta

Entrar

Já tem uma conta? Faça o login.

Entrar agora

Sobre o Clube do Hardware

No ar desde 1996, o Clube do Hardware é uma das maiores, mais antigas e mais respeitadas comunidades 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

×
×
  • Criar novo...