Crea un programa que solicite al usuario un número de punto flotante. con base en este número deberá de informarle si es un número entero o una fracción. si es un número entero debe informarle si es un número primo o no. finalmente, sin importar si el número es entero o fracción debe de buscar la raíz cuadrada del número, dividiéndolo entre todos los números posibles, hasta centésimas y compararlo con el resultado. cuando el número que se divida y el resultado sean iguales o muy parecidos, quiere decir que es la raíz o un número cercano a ésta. debe desplegar los resultados de dicha búsqueda.
Respuestas
Respuesta:
Explicación:
Un número de punto flotante en IEEE-754 se compone de un bit de signo, 8 bits que son el exponente en formato de binario desplazado y los 23 bits restantes son la mantisa del número ubicándose su MSB en el primero de ellos y luego uno en cada lugar consecutivo hasta completar la expresión binaria del número.
Entonces, para determinar si un número es entero o no, alcanza con comparar la longitud de la mantisa con el valor del exponente menos 127.
Para determinar si es primo, se lo puede dividir por todos los números desde uno hasta su raíz cuadrada. Podemos aprovechar el algoritmo que nos solicitan para calcular la raíz cuadrada, luego el programa queda:
#include <stdio.h>
#include <math.h>
float fCsqrt(float num)
{//Subrutina para hallar la raíz cuadrada,
float raiz;
float div=0.0;
while ((raiz!=div)&&(raiz!=div+0.1)&&(raiz!=div-0.1)){
div+=0.1;
raiz=num/div;
}//Halla la raíz con una diferencia de hasta una décima.
return raiz;
}
int main(void)
{
float fIngreso, fRaíz;
int iExp, iBitMant, i, iDiv, iEsEntero, iEsPrimo;
printf("Ingrese un número: ");
scanf("%f",&fIngreso);
iExp=(fIngreso>>23-127)&0x7F; //Valor del exponente, además le saco el bit de signo.
i=0;
while((fIngreso>>i)&1==0)
i++;//Aquí busco el último bit distinto de cero.
iBitMant=32-1-8-i;//Cantidad de bits de la mantisa, a los 32 originales le resto el de signo, los 8 del exponente y los que tuve que desplazar hasta encontrar el último bit de la mantisa.
if(iExp>=iBitMant){
printf("Es un entero\n");
iEsEntero=1;
else
printf("No es un entero\n");
iEsEntero=0;
fRaiz=fCsqrt(fIngreso);
i=1;
iEsPrimo=1;
if(iEsEntero)//Para que sea primo tiene que ser entero
while(i<fRaiz){
fDiv=(int)fIngreso/i;//saco la parte entera del número si es entero
i++;
if((i*(int)fDiv)==(int)fIngreso) iEsPrimo=0;//Si el divisor es entero no es primo.
}
printf((iEsPrimo==1)? "El numero ingresado es primo":"El número ingresado es compuesto");
printf("La raíz cuadrada es %f\n",fRaiz);
return 0;
}