ayuda problema de logica en C

#1
:cowverine: ola amigos bakunos acudo a ustedes con un problema de logica ya que me puse a pensar y no encuentro mi error ojala me puedan ayudar.... lo que pasa es que ando comparando cuando un numero es entero o no. cuando pongo 9 hago 2 operaciones con este numero
1 es 9+1/2=5 y la otra es 9/2=4.5 en tonces 5 y 4.5 los comparo para ver cual es el entero y cual no. mi problema es cuando pongo 10 hago las mismas operaciones pero no me imprime bien cual es entero y cual no y en el primer caso si.

alguien puede ayudarme?
aki les dejo el codigo de mi programa

#include <stdio.h>
#include <stdlib.h>
using namespace std;
main()
{
int num,aux3,aux4;
float aux,aux2;
system("cls");
printf("ingrese un numero ");
scanf("%d",&num);

aux=num;
aux=(aux+1)/2;//caso 1
printf("%.1f\n",aux);

aux3=(int)aux;//convierte de flotante a entero para sacar modulo

aux2=num;
aux2=(aux2/2);//caso 2
printf("%.1f\n",aux2);

aux4=(int)aux2;//convierte de flotante a entero para sacar modulo


if (((aux3%2)==1) || ((aux4%2)==1))
{
printf("\nel 1er numero es entero\n");
}
if (((aux4%2)==0) || ((aux3%2)==0))
{
printf("\nel 2do numero es decimal\n");
}

system("pause");
}
 

GeorgeSouthy

Bovino adolescente
#2
Antes que nada, verifica que valores te da después de cast ya que tu dices que:

4.5 (float)->4.5 (Int)

Es la primera incoherencia que vi en tu programa, sobre lo modulos, estas poniendo las condiciones con un ||, esto se traduce a una Disyunción Lógica, y se va a cumplir mientras uno de los valores de un restante del modulo igual a 1, es decir:

6/2= 2(3)+0 ...(1) donde 6=(5+1) y
5/2=2(2)+1 ...(2)

segun el algoritmo de Euclides, (2) lo cumpliria y (1) no, ya que lo divide completamente.

Pero la funcion OR da verdadero a las 2 proposiciones ya que uno da verdadero y el otro de falso y segun la tabla de verdad de la Disyunción da verdadero, en otras palabras siempre va a cumplir el primer if (condicional) y tienes el mismo error en el segundo condicional.

Para Resolver esto, pon un:

if ((aux3%2)==1){}
else{}

No se bien a que te refieres con "El Primer número es entero" y que tratas de comparar, escribeme si no te entendi, pero si los dejas así va a entrar en los 2 condicionales y te va a dar las 2 salidas, con lo que te digo, o se cumple uno o se cumple el otro, espero no hacerte bolas, saludos
 

Howeko

Bovino adolescente
#3
Hola amigo asunto arreglado creo ke ya hace lo ke kieres ke haga



#include <stdio.h>
#include <stdlib.h>
using namespace std;
main()
{
int num,aux3,aux4, aux;
float aux2;
system("cls");
printf("ingrese un numero ");
scanf("%d",&num);


aux=(num+1)/2;//caso 1
printf("%d\n",aux);

aux3=(int)aux;//convierte de flotante a entero para sacar modulo

aux2=num;
aux2=(aux2/2);//caso 2
printf("%.1f\n",aux2);

aux4=(int)aux2;//convierte de flotante a entero para sacar modulo


if (((aux3%2)==1) || ((aux4%2)==1))
{
printf("\nel 1er numero es entero\n");
}
if (((aux4%2)==0) || ((aux3%2)==0))
{
printf("\nel 2do numero es decimal\n");
}

system("pause");
}


:vientos: Checalo men
 
Arriba