Mandar um cafézinho para o programador:


Me ajude a transformar café em código!
Mostrando postagens com marcador Calculadora. Mostrar todas as postagens
Mostrando postagens com marcador 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