Programando uma Calculadora em C++
Vamos agora programar uma calculadora, bem funcional e útil, usando os conhecimentos que aprendemos de C++:- Básico (operações matemáticas)
- Teste condicional (IF e ELSE)
- Laços e loopings (DO WHILE)
- Funções
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
O compilador gcc não aceita "return" dentro de if-else. Dá mensagem "control reaches end of non-void function [Wreturn-type]".
ResponderExcluirO meu compilador gcc não aceita "return" dentro de if-else. Dá a mensagem de erro "control reaches end of non-void function [Wreturn type]"
ResponderExcluiruse o compilador g++ do clang
Excluir