Ir para conteúdo
Fórum Script Brasil
  • 0

Dúvida com calculadora em c++


Pedro Siqueira

Pergunta

E ai pessoal tudo bem? Estou fazendo uma simples calculadora em c++ utilizando code::blocks. Sou iniciante em c++ e preciso de ajuda. O código abaixo compila e roda como deveria mas quero fazer algumas melhorias e não sei como.

O que eu quero aprimorar:

1. Quando eu pergunto pro usuário para ele digitar um número, como faço para que se ele digitar um caractere o programa mostra uma mensagem de erro e pede para ele digitar o número novamente?

2. Uma opção para que no final do programa ao invés de rodar ele de novo automaticamente apareça uma opção para ele escolher se quer ou não continuar no programa.

Preciso apenas que alguém me diga como fazer para que eu possa implementar no meu código. Se alguém tiver alguma sugestão também será bem aceita.

**Lembrando que é apenas uma calculadora básica.

Obrigado.

/*

 ******************************************
 * Software: (Calculadora Básica)         *
 * Data: 29/12/2012                       *
 * Autor: Pedro Vinicius Siqueira         *
 * E-mail: pedro.v.siqueira@gmail.com     *
 * Versão: 0.1                            *
 ******************************************

*/
#include <iostream>
using namespace std;
double soma(double x,double y){
    cout<<"Vamos fazer a soma" << endl;
    cout<<"O valor da soma = ";
    return (x+y);
}
double sub(double x,double y){
    cout<<"Vamos fazer a subtracao"<< endl;
    cout<<"O valor da subtracao = ";
    return (x-y);
}
double mult(double x,double y){
    cout<<"Vamos fazer a multiplicacao"<< endl;
    cout<<"O valor da multiplicacao = ";
    return (x*y);
}
double div(double x,double y){
    cout<<"Vamos fazer a divisao"<< endl;
    cout<<"O valor da divisao = ";
    return (x/y);
}
int main(){
    int operacao;
    double a,b;
    bool done=false;
    while (done==false){
    cout<<"\nCalculadora basica em c++. Digite dois numeros e pressione enter."<< endl;
    cin>>a>>b;
    cout<<"Digite o tipo de operacao. \n 1. Soma\n 2. Subtracao\n 3. Multiplicacao\n 4. Divisao" <<endl;
    cin>>operacao;
    switch(operacao){
    case 1:
        cout<<soma(a,b);
        break;
    case 2:
        cout<<sub(a,b);
        break;
    case 3:
        cout<<mult(a,b);
        break;
    case 4:
        cout<<div(a,b);
        break;
    default:
        cout<<"Numero invalido!";
        break;
    }
    }
return 0;
}

Link para o comentário
Compartilhar em outros sites

3 respostass a esta questão

Posts Recomendados

  • 0

Ao invés de você armazenar o valor lido do usuário em um inteiro, você deve armazená-lo em uma string, pois somente assim sera possível distinguir quando o usuário digitar um decimal ou outro símbolo qualquer.Após ler a string será necessário algum processamento adicional.Abaixo esta o código que implementa a sua calculadora, eu acrescentei a opção de sair do programa também.

#include <iostream>

using namespace std;

int convertStringToInt(const char *string)
{
    int len = strlen(string);
    
    // Aceita somente digitos decimais
    // 48 codigo ascii do caractere 0
    // 57 codigo ascci do caractere 9

    for(int i = 0; i < len; i++)
        if(!(string[i] >= 48 && string[i] <= 57)) return -1;

    return atoi(string);
}

int main()
{
    for(;;)
    {
        char v1[100];
        char v2[100];
        int r1;
        int r2;
        int operacao;

        cout << "\nCalculadora basica em c++. Digite dois numeros e pressione enter." << endl << endl;

        cin >> v1;
        r1 = convertStringToInt(v1);
        if(r1 == -1)
        {
            cout << "Entrada invalida." << endl;
            continue;
        }
        
        cin >> v2;
        r2 = convertStringToInt(v2);
        if(r2 == -1)
        {
            cout << "Entrada invalida." << endl;
            continue;
        }

        cout << "\nDigite o tipo de operacao. \n 1. Soma\n 2. Subtracao\n 3. Multiplicacao\n 4. Divisao" << endl << endl;
        cin >> operacao;
        switch(operacao)
        {
        case 1:
            cout << "\nVamos fazer a soma" << endl;
            cout << "O valor da soma = " << r1 + r2 << endl;
            break;
        case 2:
            cout << "\nVamos fazer a subtracao" << endl;
            cout << "O valor da subtracao = " << r1 - r2 << endl;
            break;
        case 3:
            cout << "\nVamos fazer a multiplicacao" << endl;
            cout << "O valor da multiplicacao = " << r1 * r2 << endl;
            break;
        case 4:
            cout << "\nVamos fazer a divisao" << endl;
            cout << "O valor da divisao = " << r1 / r2 << endl;
            break;
        default:
            cout << "\nNumero invalido!" << endl;
            break;
        }

        char op;

        cout << "\nTecle S para encerrar :";
        cin >> op;
        if(op != 'S' && op != 's')
        {
            system("cls");
        }
        else return 0;
    }
}

Link para o comentário
Compartilhar em outros sites

  • 0

Eae Pedro!

Antes de tudo, é necessário saber que para fazer melhores manipulações e conseguir distinguir uma letra de um número, nada melhor que a biblioteca CTYPE. Através dela é possível diferenciar um número de um simbolo ou de uma letra, além de varias modificações interessantes para sua calculadora.

Enfim, vamos lá...

Respondendo a 1: Use um filtro, uma boa alternativa é usar o "isdigit" (Faz parte da biblioteca CTYPE). O "isdigit" irá te mostrar se o valor passado pelo usuário é um número.

if (isdigit (VARIAVEL))
{
< SE A VARIAVEL NÃO FOR UM NÚMERO, EXECUTA UM BLOCO DE COMANDOS >
}
else
< SE FOR UM NÚMERO, EXECUTA OUTRO BLOCO DE COMANDOS >
Quanto ao digitar o número novamente, use um laço, o WHILE por exemplo. Respondendo a 2: O Jeito mais simples de se fazer:
#include <iostream>
using namespace std;

int main (void)
{
  string opcao;

  cout << "DIGITE 'Q' PARA SAIR: \a";
  cin >> opcao;

  if (opcao == "Q" || opcao == "q" )
  {
    exit(0);
   }
    else
    continue;
    return 0;
    }

Espero ter ajudado! :)

Link para o comentário
Compartilhar em outros sites

  • 0

Aqui está o programa, totalmente funcional, checando se o que foi digitado está certo e com um loop no final. Qualquer dúvida é só perguntar.

/*
******************************************
* Software: (Calculadora Básica)         *
* Data: 29/12/2012                       *
* Autor: Pedro Vinicius Siqueira         *
* E-mail: pedro.v.siqueira@gmail.com     *
* Versão: 0.1                            *
******************************************

*/
#include <iostream>
using namespace std;
double soma(double x,double y){
    cout<<"\nVamos fazer a soma" << endl;
    cout<<"\nO valor da soma = ";
    return (x+y);
}
double sub(double x,double y){
    cout<<"\nVamos fazer a subtracao"<< endl;
    cout<<"\nO valor da subtracao = ";
    return (x-y);
}
double mult(double x,double y){
    cout<<"\nVamos fazer a multiplicacao"<< endl;
    cout<<"\nO valor da multiplicacao = ";
    return (x*y);
}
double div(double x,double y){
    cout<<"\nVamos fazer a divisao"<< endl;
    cout<<"\nO valor da divisao = ";
    return (x/y);
}
int main(){

    setlocale(LC_ALL, "Portuguese");

    int operacao = 0;
    double a,b = 0;
    bool done=false;
    char Variavel_Controle = '';
    while (done==false){
    cout<<"\nCalculadora basica em c++. Digite dois numeros e pressione enter."<< endl;
    if (! (cin >> a >> b))
    {
        cin.clear();
        cin.sync();
        cout << "Invalido. Digite um numero." << endl;
        cin >> a >> b;
    }
    cout<<"\nDigite o tipo de operacao. \n 1. Soma\n 2. Subtracao\n 3. Multiplicacao\n 4. Divisao" <<endl;
    if (! (cin >> operacao))
    {
       cin.clear();
       cin.sync();
      cout << "\nInvalido. Digite um numero." << endl;
      cin >> operacao;
    }
    switch(operacao){
    case 1:
        cout<<soma(a,b);
        break;
    case 2:
        cout<<sub(a,b);
        break;
    case 3:
        cout<<mult(a,b);
        break;
    case 4:
        cout<<div(a,b);
        break;
    default:
        cout<<"\nNumero invalido!";
        cin >> operacao;
        break;
    }
      cout << "\nVocê deseja usar o programa denovo? (S/N)" << endl;
      cin >> Variavel_Controle;
      if (Variavel_Controle == 'S' || Variavel_Controle == 's')
      {

      }
      else
      {
          cout << "\nAdeus!" << endl;
          done = true;
          cin.get();
      }
    }
return 0;
}

Att.,

Pedro

Link para o comentário
Compartilhar em outros sites

Participe da discussão

Você pode postar agora e se registrar depois. Se você já tem uma conta, acesse agora para postar com sua conta.

Visitante
Responder esta pergunta...

×   Você colou conteúdo com formatação.   Remover formatação

  Apenas 75 emoticons são permitidos.

×   Seu link foi incorporado automaticamente.   Exibir como um link em vez disso

×   Seu conteúdo anterior foi restaurado.   Limpar Editor

×   Você não pode colar imagens diretamente. Carregar ou inserir imagens do URL.



  • Estatísticas dos Fóruns

    • Tópicos
      152,3k
    • Posts
      652,3k
×
×
  • Criar Novo...