Ir ao conteúdo

Posts recomendados

Postado

Fiz um programa onde você escolher qual escala vai ser usada e para qual ela vai ser transformada e com isso retorna a temperatura na nova escala, ex(10 graus Celsius para Fahrenheit, vai retornar 50 graus Fahrenheit junto com uma frase)

Tem alguma maneira de diminuir ou substituir esses if/if else no caso desse programa?

#include <iostream>
using namespace std;

main(){
    int temp, escala_temp, trans_temp;

    cout << "\t\t\tConverter Temperaturas" << endl;
    cout << "[1] Celsius" << endl << "[2] Fahrenheit" << endl << "[3] Kelvin" << endl;
    cout << "Escolha a escala que sera usada: ";
        cin >> escala_temp;
    system("cls");
    cout << "\t\t\tConverter Temperaturas" << endl;
    cout << "\nDigite o valor da temperatura: ";
        cin >> temp;
    system("cls");
    cout << "\t\t\tConverter Temperaturas" << endl;
    cout << "\n[1] Celsius" << endl << "[2] Fahrenheit" << endl << "[3] Kelvin" << endl;
    cout << "Escolha para qual escala quer transformar: ";
        cin >> trans_temp;
    system("cls");

    if (escala_temp == trans_temp){
        cout << "Por favor escolha escalas diferentes";
    }
    else if (escala_temp==1 && trans_temp==2){
        cout << temp << " Graus Celsius equivale a aproximadamente " << (temp*9/5)+32 << " Graus Fahrenheit" << endl;
    }
    else if (escala_temp==1 && trans_temp==3){
        cout << temp << " Graus Celsius equivale a aproximadamente " << (temp+273.15) << " Kelvin" << endl;
    }
    else if (escala_temp==2 && trans_temp==1){
        cout << temp << " Graus Fahrenheit equivale a aproximadamente " << (temp-32)*5/9 << " Graus Celsius" << endl;
    }
    else if (escala_temp==2 && trans_temp==3){
        cout << temp << " Graus Fahrenheit equivale a aproximadamente " << (temp-32)*5/9+273.15 << " Kelvin" << endl;
    }
    else if (escala_temp==3 && trans_temp==1){
        cout << temp << " Kelvin equivale a aproximadamente " << (temp-273.15) << " Graus Celsius" << endl;
    }
    else if (escala_temp==3 && trans_temp==2){
        cout << temp << " Kelvin equivale a aproximadamente " << (temp-273.15)*9/5+32 << " Graus Fahrenheit" << endl;
        }
}

 

Postado

Tem igual se usar  'switch'  que é outra estrutura de decisão, é mais rápida que as estruturas definidas por IFs com mesmo número de fluxos de controle e melhor na ocasião em que há muitos valores de resposta para uma mesma expressão, contudo essa expressão é sempre um inteiro ou se resolve em um.

 

Acredito que já viu algo sobre a estrutura switch-case. Há alternativa, usar um vetor de ponteiro de função, é logicamente como switch, porém exige saber o básico de ponteiros.

 

Por último, tem alternativa que exige o básico de loop com vetores e equação de 1o grau, é legal porque não precisa de estrutura de decisão, Ou seja 0 de IFs, o ponto fraco é ela toda, a estrutura de iteração [loop] com vetor, que se não estudou esses assuntos então sofrerá muito somente para evitar os IFs.

 

Apresentei essa última opção apenas para conhecer, no final use 'switch' que no mínimo substitui 3 dos IFs  do código.

 

  • Curtir 1
Postado

Uma sugestão pra simplificar bastante... A pessoa escolhe só a escala (sugiro os identificadores C, F e K, pra ficar intuitivo) e a temperatura e imediatamente o código já responde quanto essa temperatura equivale nas outras 2 escalas. Dá pra fazer com 2 ifs e 1 else ou então 1 switch com 3 casos.

  • Obrigado 1
Postado

Dá para resolver sem usar If se criar uma matriz para tabelar as conversões. E para especificar os índices pode usar constantes para Celcius, Fahrenheit e Kelvin com os respectivos valores de 0, 1 e 2.

 

 

float tabela[3][3] = {0};

tabela[Celcius][Fahrenheit] = valor * 9/5.0 + 32;
tabela[Celcius][Kelvin]     = valor + 273.15;
tabela[Fahrenheit][Celcius] = (valor - 32) * (9/5.0);
tabela[Fahrenheit][Kelvin]  = (valor - 32) * 9/5.0 + 273.15;
tabela[Kelvin][Fahrenheit]  = (valor - 273.15) * 9/5.0 + 32;
tabela[Kelvin][Celcius]     = valor - 273.15;

 

Aí é só passar para os índices os valores escolhidos no menu e exibir, p.ex,

cout << tabela[converter][para] << endl;

 

Se criar uma função para retornar o valor da tabela acho que fica melhor.

  • Curtir 1

Crie uma conta ou entre para comentar

Você precisa ser um usuário para fazer um comentário

Criar uma conta

Crie uma nova conta em nossa comunidade. É fácil!

Crie uma nova conta

Entrar

Já tem uma conta? Faça o login.

Entrar agora

Sobre o Clube do Hardware

No ar desde 1996, o Clube do Hardware é uma das maiores, mais antigas e mais respeitadas comunidades sobre tecnologia do Brasil. Leia mais

Direitos autorais

Não permitimos a cópia ou reprodução do conteúdo do nosso site, fórum, newsletters e redes sociais, mesmo citando-se a fonte. Leia mais

×
×
  • Criar novo...

LANÇAMENTO!

eletronica2025-popup.jpg


CLIQUE AQUI E BAIXE AGORA MESMO!