Código simples [RESOLVIDO]

1. Código simples [RESOLVIDO]

Antonio Gilmar
GilmarSlack

(usa Debian)

Enviado em 24/02/2018 - 16:02h

Boa tarde pessoal!
Sou iniciante em C++, gostaria de saber se tem como criar funções de operações mais simples, tem?

#include <iostream>

using namespace std;

void adicao();

int main(void){
char escolha;

system("clear");

cout << "\nO que voc&#7869; deseja fazer?\n";
cout << "\n[1] Somar\n[2] Diminuir\n";
cout << "[3] Multiplicar\n[4] Dividir\n\n>: ";
cin >> escolha;

switch(escolha){
case '1':
adicao();
}
}

void adicao(){
char escolha;
int n1,n2,n3,n4,n5,soma;

system("clear");

cout << "\nQuer fazer a soma com quantos números?\n\n";
cout << "2 números\n3 números\n4 números\n5 números\n\n>: ";
cin >> escolha;

switch(escolha){
case '2':
system("clear");

cout << "Digite o primeiro número: ";
cin >> n1;
cout << "Digite o segundo número: ";
cin >> n2;
soma=n1+n2;
cout << "\n\nTOTAL = " << soma << "\n" << endl;
break;
case '3':
system("clear");

cout << "Digite o primeiro número: ";
cin >> n1;
cout << "Digite o segundo número: ";
cin >> n2;
cout << "Digite o terçeiro número: ";
cin >> n3;
soma=n1+n2+n3;
cout << "\n\nTOTAL = " << soma << "\n" << endl;
break;
case '4':
system("clear");

cout << "Digite o primeiro número: ";
cin >> n1;
cout << "Digite o segundo número: ";
cin >> n2;
cout << "Digite o terçeiro número: ";
cin >> n3;
cout << "Digite o quarto número: ";
cin >> n4;
soma=n1+n2+n3+n4;
cout << "\n\nTOTAL = " << soma << "\n" << endl;
break;
case '5':
system("clear");

cout << "Digite o primeiro número: ";
cin >> n1;
cout << "Digite o segundo número: ";
cin >> n2;
cout << "Digite o terçeiro número: ";
cin >> n3;
cout << "Digite o quarto número: ";
cin >> n4;
cout << "Digite o quinto número: ";
cin >> n5;
soma=n1+n2+n3+n4+n5;
cout << "\n\nTOTAL = " << soma << "\n" << endl;
break;
}
}



  


2. MELHOR RESPOSTA

Hugo Cerqueira
hrcerq

(usa Outra)

Enviado em 24/02/2018 - 23:32h

Olá novamente.

A princípio, vejo duas possibilidades de melhoria no seu código.

("A princípio" porque você alega ser iniciante e portanto ainda deve estar trabalhando com o básico, mas posteriormente vai achar novas melhorias para seu código, usando fatoração e possivelmente ponteiros de função, além dos tratamentos de exceção. Mas a princípio vamos manter as coisas em um nível mais básico pra facilitar o entendimento.)

# Melhoria 1

Você conhece os tipos enumerados? Se não conhece, sugiro ler sobre aqui:

http://www.cplusplus.com/doc/tutorial/other_data_types/ (seção "Enumerated types (enum)")

Depois de ler a seção citada acima, você deve imaginar porque comentei sobre esse tipo: você pode criar um tipo pré-definido para suas operações matemáticas, como no exemplo a seguir:

typedef enum {
soma=1,
sub,
mult,
divi
} operacao;


Atenção: este trecho não deve constar na função main e sim anteriormente a ela, ok? Em um caso real, isto ficaria em um arquivo de cabeçalho separado, mas vamos ignorar por enquanto.

Dito isto, veja que o tipo operacao foi criado, com quatro possibilidades de valor (1,2,3 e 4) representando as operações soma, subtração, multiplicação e divisão, respectivamente. Feito isso, você pode criar um menu na função main, que vai perguntar a operação desejada ao usuário:

operacao op;

cout << "Início do programa\n";
cout << "Escolha a operação:\n"
<< soma << ": soma\n"
<< sub << ": subtração\n"
<< mult << ": multiplicação\n"
<< divi << ": divisão\n"
<< "\n> ";
int escolha;
cin >> escolha;
op = (operacao) escolha; // Conversão explícita é necessária


Observe que onde deveria estar o número está o nome do tipo enumerado, assim eu garanto que o número certo aparecerá, caso resolva mudar os códigos das operações no futuro. Veja também que uma conversão explícita é necessária na última linha. O tipo operacao não é sintaticamente idêntico ao tipo inteiro, portanto eu devo explicitamente dizer que vou guardar um valor compatível.

# Melhoria 2

Além de saber qual a operação deve ser feita, você precisa saber também quantos operandos o usuário quer. Usar um switch pra isso, além de não ser prático, é limitador, pois o usuário não pode escolher um valor que não esteja previsto no switch. Então eu proponho outra forma de capturar essa informação.

Primeiramente, pergunte ao usuário quantos operandos ele quer usar, armazenando o valor em uma variável do tipo inteiro:

int nOperandos;
cout << "Quantos operandos? ";
cin >> nOperandos;


Em seguida, defina duas variáveis: o valor total da operação (resultado final) e uma variável para armazenar valores informados pelo usuário de forma iterativa.

float total = 0;
float proximo;


Atenção: É importante que o total seja inicializado para 0, já que será depois somado a outros valores e queremos garantir que seu valor inicial seja efetivamente 0.

A maneira como essas variáveis serão manipuladas depende da operação escolhida. Aí entra a próxima etapa (o switch):

switch (op) {
case soma:
// Seção referente a soma
break;
case sub:
cout << "Subtração";
// Seção referente a subtração
break;
case mult:
cout << "Multiplicação";
// Seção referente a multiplicação
break;
case divi:
cout << "Divisão";
// Seção referente a divisão
break;
default:
cout << "Operação inválida";
}


Adapte o bloco switch para cada função (coloquei o exemplo da soma):

case soma:
cout << "Soma:\n";

for (int i=0; i<nOperandos; i++)
{
cout << "Valor a somar: ";
cin >> proximo;
total += proximo;
}
cout << "Total: " << total;
break;


Veja que dessa forma, o usuário pode escolher quantos operandos quer usar, e então o laço for vai pedir ao usuário por um valor novo pela quantidade de operandos que foi definida. Se o usuário escolhe 3 operandos, 3 valores serão pedidos e então somados ao total. No final o valor total é exibido.

Você pode definir um mecanismo similar para a multiplicação que, assim como a soma, tem a propriedade comutativa. Já as operações de subtração e divisão são influenciadas pela ordem dos fatores, então precisarão de algumas pequenas adaptações. Vou deixar isso a seu encargo, já que não está no escopo da sua pergunta.

Sinto pela resposta longa, mas uma meia explicação pode ser pior do que nenhuma explicação.

---

Atenciosamente,
Hugo Cerqueira

3. Re: Código simples [RESOLVIDO]

Antonio Gilmar
GilmarSlack

(usa Debian)

Enviado em 25/02/2018 - 16:14h

Extremamente incrível a sua ajuda!
Muito obrigado novamente!!!






Patrocínio

Site hospedado pelo provedor RedeHost.
Linux banner

Destaques

Artigos

Dicas

Tópicos

Top 10 do mês

Scripts