como saber si es numero etero en dev c++

#1
:cowverine:eek:la amigos bakunos acudo a ustedes para ver si me pueden ayudar con un problema. necesito hacer una condicion donde identifique si es un numero entero o no t dependiendo sies entero entra en una condicion donde sacas el factorial si no es entero pasa hacer otra operacion: hasta ahora tengo esto

#include <math.h>
#include <stdio.h>
#include <cstdlib>
#include <conio.h>
#define pi 3.1415922654
#include <stdlib.h>
using namespace std;
struct psp5//ESTRUCTURA DESVIACION
{
float xi[20],temp6[20],temp7[20],temp8[20],temp9[20],terms[20];
int multi[20];
struct psp5 *sig;
struct psp5 *ant;
};
psp5 *head=NULL;
psp5 *pnodo=NULL;
psp5 *final=NULL;
float ent,seg,w,temp2,temp3,temp4,temp5,temp6,factorial=1,i,result;
int x,cant=0,dof,temp,temp10;

int alta()
{
psp5 *tmp;
tmp=head;
tmp=(struct psp5 *)malloc(sizeof(struct psp5));
system("cls");
printf("Dame el Dato de entrada X: ");
scanf("%f",&ent);
printf("Dame el Numero de segmentos: ");
scanf("%f",&seg);
printf("Dame Dof: ");
scanf("%d",&dof);
w=(ent/seg);// sacas la W
printf("w= %.4f",w);
getch();
temp=(dof+1)/2;
temp10=temp;//para q no afecte el -1
temp3=dof;//porq no salen decimales
temp2=temp3/2;
if(temp==temp)
{ printf("\nel numero %d es entero\n",temp);
temp=temp-1;
for(i=temp;i;i--)
{ factorial*=i; }
printf("\nfactorial %.2f",factorial);}
else if(temp!=temp2)
printf("\n%.2f",temp2);
printf("\nel numero %.2f es fraccion\n",temp2);

temp2=temp2-1;//resta menos 1 susesivamente hasta llegar a 0.5
temp4=temp2;
do
{
temp2--;
temp4=temp4*temp2;
}while(temp2!=0.5);
printf("\n%.4f\n",temp4);

/*temp5=temp4*sqrt(pi);//multiplicas por PI
printf("\n%.5f",temp5);*/
getch();
system("cls");
tmp->ant=NULL;
tmp->sig=NULL;
if(head==NULL)
{
head=tmp;
}
else
{
pnodo=head;
while(pnodo->sig!=NULL)//controla bucle de nodos
{
pnodo=pnodo->sig;
}
final=tmp;
pnodo->sig=tmp;
tmp->ant=pnodo;
return 0;
}
}
int menu()
{
int opc=0;
system("color F4");
while (opc!=2)
{ printf("\nSeleccione una opcion:\n1.-Alta de Numeros \n2.-salir");
scanf("%d",&opc);
if (opc==1)alta();
else if (opc==2);
}
}

int main()
{
system("title Rule the Simpson 1/3");
menu();
system ("cls");
return 0;
}


los datos de entrada son: caso 1: x=1.1 segmentos=10 dof= 9;
caso 2: X=1.1812 segmentos 10 dof=10
caso 3: x=2.750 segmento 10 dof 30

solo me fuciona con el 1er caso podrian ayudarme!!!
 

Zephyros

Bovino de la familia
#2
Veamos si consigo explicarlo claramente.

Sea x el valor ingresado. Utilizando el operador "módulo" (%), calcula el resultado de (x % 2), lo que nos implica varios resultados posibles:

1. Que el resultado sea cero. Por lo tanto el número es par y entero.
2. Que el resultado no sea cero, por lo tanto es impar, en cuyo caso habrá que verificar si el módulo (residuo):
--- Es igual a 1. Por lo tanto el número es impar y entero.
--- Es menor que 1 y mayor que cero. Por lo tanto, el número es impar y es no-entero.
(Ojo que el residuo nunca puede ser mayor que uno). Espero puedas explicar el porqué.

Lo anterior se aplica para números distintos o mayores a cero. Para números menores a cero, habrá que ajustar las condiciones para validar dichos casos.

Espero quede claro el pseudo-algoritmo, pasarlo a C++ no debe ser complicado.
 
Arriba