Ir ao conteúdo
  • Cadastre-se

C++ conversor de temperatura em c++


Posts recomendados

A questão é: "Crie um conversor de temperatura que converta a entrada para outras duas saídas equivalentes. Trabalhe com Kelvin, Celsius e Fahrenheit.

O que eu consegui foi só de Celsius para kelvin e fahrenheit:

#include "stdio.h"
int main()
{
  float C,F, K;  
  printf("Escreva a temperatura em graus celsius: ");//conversao de celsius pra kelvin e fahrenheit
  scanf("%f",&C);
  F = C * 1.8 + 32;//calculo para fahrenheit
  K = C + 273.15;//calculo para kelvin
  printf("\nDe celsius pra Fahrenheit = %.2f \n", F);
  printf("\nDe celsius pra Kelvin = %.2f \n", K);
}



Como fica o código para o usuário escolher qual conversão deseja fazer? (C pra F, F pra C, C pra K, K pra C, K pra F, F pra K)
Obs: não aprendi switch case, somente while e do-while.

  • Curtir 1
Link para o comentário
Compartilhar em outros sites

 

Se a entrada tem por exemplo esse formato: N Símbolo  

Você só precisa de uma letra (CK, F) depois do escalar N para toma a decisão certa.

 

21 horas atrás, Hugo Picello disse:

Crie um conversor de temperatura que converta a entrada para outras duas saídas equivalentes. Trabalhe com Kelvin, Celsius e Fahrenheit.

 

Entendo exatamente que essa é a questão, o usuário não escolhe, o programa faz conversões de acordo com a escala de entrada.

Se é C o programa entrega

F

Não vai usar Switch então ao menos use If-else. 

  • Curtir 2
Link para o comentário
Compartilhar em outros sites

@Hugo Picello       você postou no tópico de  c++  ,  então nessa linguagem os comandos são outros  ,  e as conversões que faltam , são a mesma coisa  ,  basta colocar o fator de conversão ,   e seu código poderia ser assim   :

#include <conio.h>
#include <cstdlib>
#include <iostream>
#include <cstring>
#include <ctype.h>
typedef enum{A,B,U} op;  
using namespace std;
int main(){
    float C,F, K;
    int flag=0,m[3];
    char op='z';
    do{
        do{
            op='z';
            system("cls");
            cout<<" C - Convete de Celsius   Para Fahrenhit e Kelvin"<<endl;
            cout<<" F - Convete de Fahrenhit Para Celsius   e Kelvin"<<endl;
            cout<<" K - Convete de Kelvin    Para Celsius   e Fahrenhit"<<endl;
            op=(char)getch();
            op = toupper(op);
            if(op !='C' && op !='F' && op !='K' )flag=1;
        }while( flag );
        cout<<endl;
        if(op == 'C'){
            cout<<"Escreva a temperatura em graus celsius: ";//conversao de celsius pra kelvin e fahrenheit
            cin>>C;
            F = C * 1.8 + 32; //calculo para fahrenheit
            K = C + 273.15;   //calculo para kelvin
            cout<<"\nDe celsius pra Fahrenheit -= "<<F<<endl;
            cout<<"De celsius pra Kelvin -----= "<<K<<endl;
       }
        else
            if(op == 'F'){
                cout<<"Escreva a temperatura em graus fahrenhit: ";//conversao de celsius pra kelvin e fahrenheit
                cin>>F;
                C = (F-32) / 1.8;          //calculo para fahrenheit
                K = (F+459.67) * (5/9);    //calculo para kelvin
                cout<<"\nDe Fahrenheit pra celsius -= "<<C<<endl;
                cout<<"De Fahrenhit pra Kelvin -----= "<<K<<endl;
            }
            else{
                if(op == 'K'){
                    cout<<"Escreva a temperatura em graus Kelvin: ";//conversao de celsius pra kelvin e fahrenheit
                    cin>>K;
                    F = (K-273.15) * 1.8 + 32;     //calculo para fahrenheit
                    C =  K-273.15;                 //calculo para kelvin
                    cout<<"\nDe kelvin pra Fahrenheit -= "<<F<<endl;
                    cout<<"De Kelvin pra Celsius -----= "<<C<<endl;
                }
            }
        cout<<"outra Temperatura S/N ";
    }while( toupper((char)getch()) != 'N' );
    cout<<endl<<endl;
    return 0;
}

 

  • Curtir 1
  • Amei 1
Link para o comentário
Compartilhar em outros sites

  • Membro VIP
8 horas atrás, devair1010 disse:

você postou no tópico de C++, então nessa linguagem os comandos são outros

 

@devair1010, você está utilizando vários "comando" do C. Vide:

 

8 horas atrás, devair1010 disse:

#include <stdio.h>
#include <conio.h>
#include <stdlib.h>
#include <ctype.h>

 

Creio que, caso necessário, deveria substituir por equivalentes em C++. 

 

 

 

Sobre:

8 horas atrás, devair1010 disse:

typedef enum{A,B,U} op;

 

Eu também não entendi. Como funciona essa estrutura?

 

  • Curtir 1
Link para o comentário
Compartilhar em outros sites

@Jorge Curvelo     testando usar o comando goto ,  e não consegui ,  pois em alguns compiladores ele não funciona  ,  e na hora de postar não deletei , apenas teste .

@Simon Viegas    editei para retirar os comandos da linguagem c , mas não encontrei os referentes em c++ .

Link para o comentário
Compartilhar em outros sites

3 horas atrás, devair1010 disse:

testando usar o comando goto ,  e não consegui ,  pois em alguns compiladores ele não funciona  ,  e na hora de postar não deletei , apenas teste


em que compilador isso não funciona? E que tem a ver com esse enum?

adicionado 9 minutos depois

Recomendo fazer o que se espera de um programa assim:

  • ler os parâmetros e aceitar casos como
    135F
    12.5 C
    340K
    F 345
    C34.3
    345 K
    C23.3

     e tratar de acordo. Em resumo, a unidade original pode ser um sufixo ou prefixo e estar ou não colada à temperatura. Pode ser K C ou F e talvez em minúscula. Não é nada demais. São só 3 casos.
     

  • Aceite eventuais parâmetros na linha de comando. Assim fica mais ágil e útil. Se o seu programa se chama cvt por exemplo, aceite
     

            cvt 22.3C

    por exemplo. É o que se espera de um programa desses. Imagine se um comando CD por exemplo ficasse perguntando "Para qual diretório deseja ir?" ... Seria igualmente chato.

17 horas atrás, Hugo Picello disse:

Obs: não aprendi switch case, somente while e do-while

 

Tem que esperar alguém te ensinar mas sabe que tais comandos existem? E não pode abrir o livro e ver como é? Ou é proibido de usar algo até o mestre liberar? 

 

Afinal vai escrever isso em C ou C++?

 

 

  • Curtir 2
Link para o comentário
Compartilhar em outros sites

@arfneto Conheço que o comando existe, porém o mestre não deixa usar pois ele não ensinou.. e é em c++

adicionado 2 minutos depois

@Mauro Britivaldo Perguntei ao professor e ele me disse que o usuário digita o valor e escolhe em qual temperatura é, aí sim depois converter..(ex: usuário coloca x F aí converte pra K ou C, usuário coloca x C aí converte pra F ou K e por aí vai..)

adicionado 5 minutos depois

@devair1010 o código seria isso mesmo, executando dá o que realmente está pedindo.. valeu pela ajuda, vou pegar como base e mandar pro c++

  • Curtir 1
  • Haha 1
Link para o comentário
Compartilhar em outros sites

image.png.d9dc00f15b19202de8855a13f5c6797d.png

 

Acho que seria mais comum usar um programa assim. Le e converte e mostra. Perguntar um outro valor é meio chato de usar, certo? E na linha de comando é o mais comum desde que ela existe.

 

Em C++ é mais fácil, eu acho.

 

@devair1010 @Hugo Picello

 

image.png.bdbd75c6917f7b88798f1dac04d0a5a8.png

 

Cuidado com essa expressão: 5/9 dá zero e vai anular o produto...

  • Curtir 1
  • Obrigado 1
Link para o comentário
Compartilhar em outros sites

2 horas atrás, Hugo Picello disse:

Perguntei ao professor e ele me disse que o usuário digita o valor e escolhe em qual temperatura é, aí sim depois converter..(ex: usuário coloca x F aí converte pra K ou C, usuário coloca x C aí converte pra F ou K e por aí vai..)

Muda pouca coisa ou quase nada.

 

Acho que na verdade o usuário está com isso escolhendo ver somente 1 por vez.

e o professor tem sempre razão (até acabar a aula)!

😆

  • Curtir 2
Link para o comentário
Compartilhar em outros sites

9 horas atrás, devair1010 disse:

editei para retirar os comandos da linguagem c , mas não encontrei os referentes em c++

 

Se fala dos necessários para definir os valores, eis um caso em C++

 

Exemplo:

    string  comando;
    char    unidade = 0;
    double  numero = 0;

Em comando você tem o que foi digitado, a linha toda que você leu por exemplo via

    cin >> comando;

E você quer avaliar o char unidade como sendo KFC ---  :D o frango! Kentucky Fried Chicken!  ok foi pobre --- 'K',  'F'ou 'C' e o numero como sendo o número digitado, que pode ter sinal e ponto decimal. E se o cara só digitar o número você quer assumir o padrão como C já que é o normal no BR. O simples.


Declare por exemplo:

    string  unidades = "cCfFkK";

Para ajudar. Essas são as unidades e você já pode usar o índice no vetor e não precisa de conversões chatas. Veja o código.

 

Esse trecho de código tem as chamadas que procura, e no final vai ter unidade e numero separadinhos para colocar em sua fórmula, e

Citação

   com chamadas às funções mais próximas em C++ às que você havia usado em C

        int pos = comando.find_first_of(unidades, 0);
        if (pos >= 0)
        {
            string letra = comando.substr(pos, 1);
            int pl = unidades.find_first_of(letra);
            if (pl > 3)
                unidade = 'K';
            else
                if (pl > 1)
                    unidade = 'F';
                else
                    unidade = 'C';
            // tem a letra: agora o numero
            if (pos == 0)
                numero = atof( (comando.substr(1, string::npos)).c_str());
            else
                numero = atof( (comando.substr(0, pos)).c_str() );
        }
        else
        {
            unidade = 'C';
            numero = atof(comando.c_str());
        };  // if

Esse trecho funciona para a letra antes do valor, a letra depois do valor, com espaço ou sem espaço entre a letra e o valor. E ainda assume C se o cara digitar só o valor. Ou seja, o esperado.

 

Exemplos
 

image.png.f27d72a25fe9bce9c4f6c362a4fcbed6.png

 

Se quer tratar a linha de comando, que é bem melhor, e depois de ter escrito esse pedaço, mais 3 linhas

    if (argc > 1)
    {   // vieram letra e numero separados?
        comando.assign(argv[1]);
        if (argc > 2) comando.append(argv[2]);
    }
    else

Porque funciona?

 

Se tem mais de um argumento o cara digitou

123.3 C
  
 ou 
  
F123.4 
  
 ou -123K
  
  por exemplo

Se digitou a letra separada tem 3 argumentos. Se digitou grudado antes ou depois tem só dois. Claro, o primeiro argumento sempre é o nome do programa, desde os '70.

 

E comando era a variável que a gente tinha declarado antes.

  • assign() copia uma string tipo C para uma string --- char* para string
  • append() acrescenta uma string tipo C a uma string

E então vai juntar em comando seja lá o que veio. E como antes já funcionava basta não ler comando de novo...

Assim sendo se o programa for CVT.EXE pode usar
 

image.png.946321cceef9af1d18a6331b9bbee29f.png

  

E é muito melhor de usar porque já responde na hora e aceita o valor antes ou depois ou grudado ou não. E se não digitar nada ele entra no loop normal, naquele else...
 

image.png.be709f5862dd860a3ee991b08bce7875.png

 

Foi o que eu quiz dizer inicialmente.

 

Espero que ajude

 

image.png

image.png

  • Curtir 1
  • Obrigado 2
Link para o comentário
Compartilhar em outros sites

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...