Autor Tema: Se puede realizar operaciones con decimales en pics?  (Leído 5664 veces)

0 Usuarios y 1 Visitante están viendo este tema.

Desconectado andyta

  • PIC10
  • *
  • Mensajes: 28
Se puede realizar operaciones con decimales en pics?
« en: 08 de Junio de 2010, 10:38:07 »
Hola a todos! Tengo problemas con un programa que estoy haciendo.
Quiero hacer una calculadora usando un LCD y un teclado 3x3. Estoy usando la libreria math.h. Ya tengo programadas la suma, resta y multiplicacion pero tengo un problema con la division y el logaritmo. ¿Como puedo declarar las variable que guardan el resultado? ya que el quiero que tengan por lo menos 2 decimales.  Estaba usando un double y float, pero siguiendo la simulacion paso a paso puedo ver que las variables no almacenan el resultado, pero con un int si lo hacen. El problema de usar un int es que me entrega el resultado sin decimales. Estoy algo confundida.
Ademas tendria que msotrar el resultado el el LCD, la libreria que tendo de Lcd usa ASCII ¿Como podria mostrar el resultado en el LDC?

Desconectado Cryn

  • Colaborador
  • DsPIC33
  • *****
  • Mensajes: 4169
Re: Se puede realizar operaciones con decimales en pics?
« Respuesta #1 en: 08 de Junio de 2010, 10:58:31 »
Hola andyta,

Por tus anteriores posts supongo que sigues con CCS, y si no me equivoco para cualquier compilador C para pic usar decimales es válido, declarando tu variable como float

Que librería de lcd estas usando?

acá un ejemplo:

Código: C#
  1. #define pi 3.141592
  2. float resultado;
  3. int r;
  4.  
  5. r=5;
  6. resultado=pi*r*r;
  7. printf(lcd_putc,"\farea=%g",resultado);
  8. //printf(lcd_putc,"\farea=%f",resultado); //tambien de esta manera funciona

En el LCD se verá: area=78.5398

Si quieres mostrar solo 2 decimales y 3enteros haces:
printf(lcd_putc,"\farea=%3.2f",resultado);

En el LCD se verá: area=78.53

Y existe casi cualquier combinación en cantidades de enteros y decimales.

Si la instrucción resultado=pi*r*r; no te da el valor adecuado, tendrías que hacer un casting:
resultado=pi*(float)r*(float)r;
« Última modificación: 08 de Junio de 2010, 13:30:07 por Cryn »
.

Desconectado andyta

  • PIC10
  • *
  • Mensajes: 28
Re: Se puede realizar operaciones con decimales en pics?
« Respuesta #2 en: 08 de Junio de 2010, 13:15:26 »
gracias! No savia que tan util es el printnf, no tienes un poco mas de informacion de como usar el printnf? Y como usar un casting?

Desconectado Cryn

  • Colaborador
  • DsPIC33
  • *****
  • Mensajes: 4169
Re: Se puede realizar operaciones con decimales en pics?
« Respuesta #3 en: 08 de Junio de 2010, 13:27:45 »
Perdón, no es printnf es printf. Ya lo corregí en el código y aumenté también como se vería en el LCD.

Más información del printf lo encuentras en la web, en el manual de referencia de CCS, o en cualquier manual para lenguaje C.

No creo que necesites más información del casting, ya que sirve para "hacer compatibles" las operaciones entre variables o contantes de diferentes tipos entre si.

Como en este caso, la variable r es byte (entera de 8bits), pero la constante pi es float, por tanto quizá sea necesario convertir nuestra variable r a float, digo quizá porque a veces no es necesario el casting, como te dije dependiendo a si tu dato obtenido no es el que esperas.

Una cosa más que se me olvidó aconsejarte es que si usarás proteus para hacer una simulación, quizá no te pueda visualizar las variables float, si no me equivoco hay que hacer alguito para que te muestre, ese alguito lo tienes que buscar por el foro.

saludos.
« Última modificación: 08 de Junio de 2010, 13:31:26 por Cryn »
.

Desconectado andyta

  • PIC10
  • *
  • Mensajes: 28
Re: Se puede realizar operaciones con decimales en pics?
« Respuesta #4 en: 11 de Junio de 2010, 12:36:20 »
Muchas gracias! ya pude solucionar mi problema!!!


 

anything