Jump to content
Fórum Script Brasil
  • 0

Dúvida com calculadora em c++


Pedro Siqueira

Question

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 to comment
Share on other sites

3 answers to this question

Recommended Posts

  • 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 to comment
Share on other 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 to comment
Share on other 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 to comment
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Answer this question...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.



  • Forum Statistics

    • Total Topics
      152.2k
    • Total Posts
      652k
×
×
  • Create New...