Mandar um cafézinho para o programador:


Me ajude a transformar café em código!
Mostrando postagens com marcador Como fazer uma calculadora. Mostrar todas as postagens
Mostrando postagens com marcador Como fazer uma calculadora. Mostrar todas as postagens

Protótipo de Função - Como programar uma calculadora completa em C++

Neste tutorial de nosso curso de C++, vamos aprender como criar uma calculadora completa em C++, bem como entender o que são e para que servem os protótipos de funções.

Programando uma Calculadora em C++

Vamos agora programar uma calculadora, bem funcional e útil, usando os conhecimentos que aprendemos de C++:


As funções sum(), sub(), mult() e divis() fazem as operações de soma, subtração, multiplicação e divisão, respectivamente. Todas recebem dois dados, do tipo float, e retornam um resultado em float também.

Exceto pela função divis(), pois ela precisa testar se o denominador é diferente de 0.
Se for, retorna a divisão corretamente.
Se não for, retorna uma mensagem dizendo que não é possível dividir por 0, que é o correto a se fazer.

A função menu() é a responsável por mostrar as possíveis operações matemáticas que ele pode fazer.
O usuário digita um valor como opção.

Se essa opção for 0, o programa sai do looping DO WHILE da menu() e se encerra o programa.
Se digitar de qualquer outro número, pedimos os dois valores que ele vai querer calcular a operação e em seguida vai pro SWITCH, onde selecionamos a operação corretamente.

Passamos os números digitados pelo usuário pra respectiva função, ela retorna o resultado e o exibimos.

Por fim, o menu de opções é exibido novamente, para caso o usuário queira fazer outro cálculo.
Veja como fica nosso código:
#include <iostream>
using namespace std;

float sum(float a, float b)
{
    return a+b;
}

float sub(float a, float b)
{
    return a-b;
}

float mult(float a, float b)
{
    return a*b;
}

float divis(float a, float b)
{
    if(b!=0)
        return a/b;
    else
        cout<<"Não pode dividir por 0\n";
}

void menu()
{
    int op;
    float a, b;
    do{
        cout<<"0. Sair\n";
        cout<<"1. Somar\n";
        cout<<"2. Subtrair\n";
        cout<<"3. Multiplicar\n";
        cout<<"4. Dividir\n";
        cin >> op;

        if(op){
            cout<<"\nPrimeiro numero: ";
            cin >> a;

            cout<<"Segundo numero: ";
            cin >> b;

            switch(op){
                case 1:
                    cout<<"Soma: " << sum(a,b) << endl;
                    break;
                case 2:
                    cout<<"Diferença: " << sub(a,b) << endl;
                    break;
                case 3:
                    cout<<"Produto: " << mult(a,b) << endl;
                    break;
                case 4:
                    if(b)
                        cout<<"Divisão: " << divis(a,b) << endl;
                    else
                        divis(a,b);
                    break;
                default:
                    cout<<"Opção inválida\n";
            }
        }else
            cout<<"Saindo...\n";
        cout<<endl;
    }while(op);
}

int main()
{
    menu();
    return 0;
}
Na função main() nós simplesmente invocamos a função responsável por exibir o menu.
E só.

Veja, usamos funções, operações matemáticas, IF e ELSE, SWITCH e DO WHILE.
Basicamente, todo conhecimento que estudamos até aqui, em nosso curso de C++.

Agora faça um exercício.

Protótipos de funções em C++

Pegue a função main(), recorte ela do código e cole lá em cima, antes das funções das operações matemáticas. Agora rode seu código.

Deve dar algum erro do tipo 'sum() was not declared', dizendo que a função sum() não foi declarada.
Isso ocorre pois o compilador lê o código de cima pra baixo.

Quando ele entra na menu() e esta invoca a sum(), ele não sabe o que fazer, pois esta função ainda não foi declarada, ela está abaixo da menu(). Por isso, o correto é declarar primeiro as funções de operações matemáticas, e só depois invocar elas na menu().

Agora imagine num programa mais complexo e bem maior, como isso ficaria complicado.
Teríamos que ter cuidado com o que declarar antes de que, e o código antes da função principal main() ficaria gigantesco.

A solução pra isso é, lá em cima, declarar apenas os protótipos das funções.
O protótipo nada mais é que o cabeçalho da função, com os tipos de dados que recebe e o return correto, seguido de ponto-e-vírgula, sem o par de chaves e o código da função.

Veja agora como fica o código de nossa calculadora, usando os protótipos:
#include <iostream>
using namespace std;

void menu();
float sum(float a, float b);
float sub(float a, float b);
float mult(float a, float b);
float divis(float a, float b);

int main()
{
    menu();
    return 0;
}

void menu()
{
    int op;
    float a, b;
    do{
        cout<<"0. Sair\n";
        cout<<"1. Somar\n";
        cout<<"2. Subtrair\n";
        cout<<"3. Multiplicar\n";
        cout<<"4. Dividir\n";
        cin >> op;

        if(op){
            cout<<"\nPrimeiro numero: ";
            cin >> a;

            cout<<"Segundo numero: ";
            cin >> b;

            switch(op){
                case 1:
                    cout<<"Soma: " << sum(a,b) << endl;
                    break;
                case 2:
                    cout<<"Diferença: " << sub(a,b) << endl;
                    break;
                case 3:
                    cout<<"Produto: " << mult(a,b) << endl;
                    break;
                case 4:
                    if(b)
                        cout<<"Divisão: " << divis(a,b) << endl;
                    else
                        divis(a,b);
                    break;
                default:
                    cout<<"Opção inválida\n";
            }
        }else
            cout<<"Saindo...\n";
        cout<<endl;
    }while(op);
}

float sum(float a, float b)
{
    return a+b;
}

float sub(float a, float b)
{
    return a-b;
}

float mult(float a, float b)
{
    return a*b;
}

float divis(float a, float b)
{
    if(b!=0)
        return a/b;
    else
        cout<<"Não pode dividir por 0\n";
}
Bem mais bonito e organizado, não acha?
Aliás, o compilador só precisa saber o returno, o nome da função, quantos e que tipos de parâmetros a função tem, precisa nem do nome deles, você pode declarar assim também:
void menu();
float sum(float, float);
float sub(float, float);
float mult(float, float);
float divis(float, float);
Recomendamos sempre usar protótipos de funções, deixa seu código mais organizado e menos suscetível a erros e problemas

Calculadora Simples em C++: Como Programar

Para finalizar com chave de ouro nossa seção de Introdução ao C++, vamos fazer um programinha bem simples, mas bastante útil e interessante: uma calculadora.

Antes de ver o código, tente resolver.
Ela deve receber dois números do usuário, e exibir as operações de:
  • Soma
  • Subtração
  • Multiplicação
  • Divisão do primeiro pelo segundo
  • Resto da divisão do primeiro pelo segundo
  • Porcentagem do primeiro em relação ao segundo
  • Média aritmética


Seu programa deve ficar + - assim, veja:

Como programar uma calculadora em C++

Tente aí!

Como fazer uma calculadora em C++

Veja como ficou nosso código:
#include <iostream>
using namespace std;

int main()
{
    float num1, num2;

    //Recebendo os dadps
    cout << "Primeiro numero: ";
    cin >> num1;

    cout << "Segundo numero: ";
    cin >> num2;

    //Exibindo as operações
    cout << "Soma         : " << num1 + num2 << endl;
    cout << "Subtracao    : " << num1 - num2 << endl;
    cout << "Multiplicacao: " << num1 * num2 << endl;
    cout << "Divisao      : " << num1 / num2 << endl;
    cout << "Modulo       : " << (int)num1 % (int)num2 << endl;
    cout << "Porcentagem  : " << 100.0*(num1/num2) << endl;
    cout << "Media        : " << (num1 + num2)/2 << endl;


    return 0;
}
O seu, como ficou? Diferente?
Posta aí nos comentários!

Veja que a única coisa diferente foi o trecho:
(int) num1 % (int)num2

Isso se chama casting, ou seja, como o operador de módulo (resto da divisão) só tem sentido com valores inteiro e nossas variáveis são do tipo float, nós colocamos (int) antes das variáveis para dizer ao C++ que queremos tratar aquelas variáveis, naquele momento, como inteiros.

Ajude o C++ Progressivo

Que tal apoiar e fazer crescer o ensino da programação no Brasil ?

Ajudar nosso país a crescer e se desenvolver cada vez mais, tecnologicamente?

Clica abaixo pra saber mais!

Apoiar o Projeto Progressivo