Ir para conteúdo

POWERED BY:

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

TTS

Conversor de Temperaturas em C

Recommended Posts

Olá, eu sou novo neste fórum e estou precisando de uma ajuda.

Recentemente, minha professora de física propôs um trabalho em grupo onde devíamos criar nossa própria escala termométrica. Eu então disse ao meu grupo que podia escrever um simples conversor para facilitar as coisas. Porém a coisa evoluiu e se tornou um conversor, também, de celcius-Fahrenheit e vice-versa. Entretanto, sou iniciante, e preciso de ajuda. aqui vai o source-code, inacabado:

#include <stdio.h>

 

int main()

{

float c;

float f;

float t;

int fim;

char result;

fim = 0;

do {

printf ("\n\n\nEntre com a op%c%co desejada: ", 135, 198);

printf ("\n1. Celcius");

printf ("\n2. Fahrenheit");

printf ("\n3. Tarresbrum");

printf ("\n3.Sobre...");

printf ("\n4.Sair\n\n");

do {

scanf("%c",&result);

} while (!isalnum((int)result));

if (result == 49)

{

printf ("\nEntre com o valor em celcius: ");

scanf ("%f", &c);

f = 0.8*c;

t = 3;

printf ("\nO valor de %5.2f graus Celcius %c \n%5.2f em graus Fahrenheit e %5.2f em Tarresbrum", c, 130, f, t);

 

}

else if (result == 50)

{

printf ("duh2");

}

else if (result == 51)

{

printf ("duh3");

}

else if (result == 52)

{

fim++;

}

else

printf ("Nada de letras ou numeros fora da lista de opcoes!!!");

 

} while (fim == 0);

return 0;

}

* Pode-se ver que eu não acabei o source, onde é necessário fazer algum cálculo eu escrevi "duhx", exceto na situação 1 (na verdade, depois de feita a situação um, é só mudar os dados.

*Torresbrum é o nome de nossa escala.

*Ok, Ok, eu sei que o source-code está bagunçado, podia ter feito os caso em funções separadas, etc, etc...

 

Os problemas são os seguintes:

1. Caso o usuário digite alguma palavra na hora de escolher o que fazer, o programa vai executar a linha "printf ("Nada de letras ou numeros fora da lista de opcoes!!!");" x número de vezes, onde x é o número de letras que a possui a palavra que o "inteligente" digitou. Este problema é mais por questão de estilo.

2. O programa exibe ponto-e-vírgula mesmo em números matematicamente inteiros (não de tipo inteiro) ex.: 130.00. Este problema também é mais por questão de estilo. Tentei usar if (f - floor(f) > 0), mas o compilador me retornava uma mensagem de erro.

3. O programa exibe ponto ao invés de vírgula. Sei que tenho que usar algo relacionado com a locale.h, mas não sei o quê. Problema de resolução um pouco mais grave.

Agradeço pela ajuda desde já,

 

TTS

Compartilhar este post


Link para o post
Compartilhar em outros sites

seria algo mais ou menos assim:

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

celcius()
{
	float c, f, t;
	printf("Valor em Celcius: ");
	scanf("%f",&c);
	f = 0.8 * c;
	t = 3;
	printf ("\nCelcius: %5.2f\nFahrenheit: %5.2f\nTarresbrum: %5.2f\n\n", c, f, t);
}

void menu(char opcao)
{
	printf("==== LEGENDA ====\n\n");
	printf("C - CELCIUS \n");
	printf("F - FARE \n");
	printf("T - TARRES \n");
	printf("S - SAIR \n");
	
	printf("Escolha sua opcao no MENU: ");
	do{
	scanf("%c",&opcao);
	fflush(stdin);
		switch(opcao)
		{
			case 'C':
				celcius();
				break;
			case 'F':
				printf("caso farenheit");
				break;
			case 'T':
				printf("caso tarres");
				break;
			case 'S':
				break;
			default:
				printf("Escolha sua opcao no MENU: ");
		}
	}while(opcao != 'S');
}

main(void)
{
	char opcao;
	menu(opcao);
}

Compartilhar este post


Link para o post
Compartilhar em outros sites

Puxa, valeu mesmo groove!!!! Além de resolver os problemas, o código ficou muito mais legível!!! Só uma coisa, o ponto ainda separa as casas decimais, como no padrão americano. Existiria alguma funão para mudar para vírgula, como no padrão brasileiro?

Compartilhar este post


Link para o post
Compartilhar em outros sites

olha, não sei qual função é =((

dei uma procurada, mas não achei nda "/

Compartilhar este post


Link para o post
Compartilhar em outros sites

Bom, vou deixar assim mesmo, creio eu que não vai fazer diferença para a professora. Novamente, muito obrigado!!!

Compartilhar este post


Link para o post
Compartilhar em outros sites

só uma coisa velho, ali na conversão:

 

f = 0.8 * c

o correto é:

f = 33.8 * c

Compartilhar este post


Link para o post
Compartilhar em outros sites

Ah é!!!

Sobre a conversão ponto-vírgula, achei duas funções: Uma que lê vírgulas no lugar de pontos na hora do usuário entrar os dados

float lerFloat()

{

int iLido2=0,iCont,iValorTeste;

float fLido1=0,fSomar=0;

 

fflush(stdin);

scanf("%f,%d",&fLido1,&iLido2);

if(iLido2!=0)

{

for(iCont=1;iCont<=15;iCont++)

{

iValorTeste=pow(10,iCont);

if(iLido2<=iValorTeste)

{

fSomar=(iLido2/(pow(10,iCont)));

break;

}

}// fim do for que vai testando por o que dividir

}

//printf("\n%d Dividir por %d resulta %f",iLido2,iValorTeste,fSomar);

//printf("\n%f",fLido1+fSomar);

return (fLido1+fSomar);

} // fim da função

Só uma coisa, essa função não é minha, é do Heltonritter, e ela foi postada no fórum do ScriptBrasil.

 

e Achei outra função que seta o separador decimal de acordo com a sua região.

#include <locale.h>

setlocale (LC_NUMERIC, "");

Compartilhar este post


Link para o post
Compartilhar em outros sites

ahh está quase lá então, tente fazer assim:

setlocale(LC_NUMERIC, "pt_BR");

Compartilhar este post


Link para o post
Compartilhar em outros sites

×

Informação importante

Ao usar o fórum, você concorda com nossos Termos e condições.