/
Inicio :: Foros

 F.A.Q.F.A.Q.                  Conéctese para revisar sus mensajesConéctese para revisar sus mensajes   

Perdida de digitos significantes

 
      Índice del Foro elrincondelc.com -> Principiantes C/C++
Ver tema anterior :: Ver siguiente tema  
AutorMensaje
ciber5



Registrado: 11 Nov 2007
Mensajes: 2

MensajePublicado: 11/11/2007 10:11 pm
Título: Perdida de digitos significantes

Disculpen la intromisión pero necesito ayuda con este programa, y es que ya busque como corregir los errores pero aun no encuentro una respuesta que me sirva, y es que tal vez sea tan simple que no me doy cuenta yo mismo. Pero bueno el problema esta en que en las partes que estan señaladas del programa me ocacionan un warning, que no es error con el cual no se ejecute el programa, pero quisiera de todas formas eliminar esos warning, y es que lo que aparece en el compilador Borland C es el mensaje siguiente: ""Conversion may lose significant digits"". y pues busque en libros y pues no obtengo buenos resultados. Gracias por la atención.

#include <stdio.h>
#include <conio.h>
#include <stdlib.h>
#include <math.h>
#include <ctype.h>
#include <iostream.h>
typedef unsigned char uchar;
char Menu(void);
char Opciones(char op);
AND();
OR();
NOT();

main()
{
char op;
do
{
op=Menu();
Opciones(op);
}while(op!=0);
}

char Menu()
{
char c;
clrscr();
gotoxy(20,2);
printf("\"Menu\"");
printf("\n\nElija la operacion logica a realizar:");
printf("\n1 - AND");
printf("\n2 - OR");
printf("\n3 - NOT o Complemento");
printf("\nS - Para Salir");
printf("\n\n\tSeleccione una opcion: ");
c = getch(); -------------------------- /////////Warning//////////
return c;
}

char Opciones(char op)
{
switch(op)
{
case '1': AND();
break;
case '2': OR();
break;
case '3': NOT();
break;
case 'S':
case 's':
char respuesta;
clrscr();
gotoxy(18,6);
printf("Usted esta saliendo del menu...");
gotoxy(20,16);
printf("Realmente deseas salir? (s/n): ");
gotoxy(51,16);
fflush(stdin);
cscanf("%c",&respuesta);
if(toupper(respuesta)=='N')
{
break;
}
else(toupper(respuesta)=='S');
{
getche();
exit(0);
}
default:
clrscr();
gotoxy(26,10);
printf("!!!OPCION INVALIDA!!!!");
gotoxy(16,20);
printf("\"Por favor tecle una opcion que si corresponda\"");
}
getch();
return op;
}

AND()
{
clrscr();
uchar a,b,c;
int x;
printf("\n\tOperador Logico AND\n");
printf("\n\Valor de a: ");
scanf("%d",&x); a=(uchar)x;
printf("\nValor de b: ");
scanf("%d",&x); b=(uchar)x;
c=a&b;
printf("\n\tResultado: %d",(int)c);
printf("\n\n\n\t\"Presione una tecla para regresar al menu\"");
return 0;
}

OR()
{
clrscr();
uchar a,b,c;
int x;
printf("\n\tOperador Logico OR\n");
printf("\n\Valor de a: ");
scanf("%d",&x); a=(uchar)x;
printf("\nValor de b: ");
scanf("%d",&x); b=(uchar)x;
c=a|b;
printf("\n\tResultado: %d",(int)c);
printf("\n\n\n\t\"Presione una tecla para regresar al menu\"");
return 0;
}

NOT()
{
clrscr();
uchar a,c;
int x;
printf("\n\tOperador Logico NOT o Complemento\n");
printf("\n\Valor de a: ");
scanf("%d",&x); a=(uchar)x;
c=~a; -------------------------- /////////Warning//////////
printf("\n\tResultado: %d",(int)c);
printf("\n\n\n\t\"Presione una tecla para regresar al menu\"");
return 0;
}
Volver arriba
rir3760



Registrado: 01 Oct 2004
Mensajes: 3770
Ubicación: Mexico

MensajePublicado: 12/11/2007 8:17 am
Título:

Si estas trabajando en C++ los nombres correctos de los headers (usualmente archivos de inclusion) son:
Código:
#include <iostream>
#include <cstdio>
#include <cstdlib>
#include <cmath>
#include <cctype>


El primer mensaje de advertencia se debe a que el valor de retorno de la funcion getch es de tipo int y tu estas almacenando este en una variable de tipo char. Para solucionar este error basta con cambiar el tipo de la variable "c" a int.

El segundo se debe a que las operaciones a nivel de bits (and, or y xor) resultan, como minimo, en un valor de tipo int sin importar si los argumentos sean (o puedan ser) mas "pequeños" como usualmente sucede con los tipos char y short. La solucion aqui tambien es cambiar el tipo de la variable "c" de unsigned char a int

El programa tiene otras deficiencias que deberian generar mensajes de advertencia como el uso de nombres de headers obsoletos, no indicar el tipo de retorno de las funciones, etc.

Un saludo
_________________
The capacity to learn is a gift;
The ability to learn is a skill;
The willingness to learn is a choice.
--
Rebec of Ginaz
Volver arriba
ciber5



Registrado: 11 Nov 2007
Mensajes: 2

MensajePublicado: 12/11/2007 5:04 pm
Título:

Muchas gracias por la ayuda, mas clara que en los libros que encontre. Ya pude resolver esos mensajes de emergencia gracias a su ayuda. Exactamente cambiando las variables por int, se solucionaron estos warning. Disculpen que haya sido algo tan sencillo pero pues, no podia resolverlo.
Volver arriba
      Índice del Foro elrincondelc.com -> Principiantes C/C++
Página 1 de 1Todas las horas están en GMT - 8 Horas

 
No puede crear mensajes
No puede responder temas
No puede editar sus mensajes
No puede borrar sus mensajes
No puede votar en encuestas

(c) ElRincondelC.com

Un proyecto de UrlanHeat.com