Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   C++ Builder (https://www.clubdelphi.com/foros/forumdisplay.php?f=13)
-   -   como determinar si un numero es par o impar (https://www.clubdelphi.com/foros/showthread.php?t=67206)

lmpadron 05-04-2010 20:58:37

como determinar si un numero es par o impar
 
Necesito determinar si un numero es par o impar. ?Me pueden orientar?

roman 05-04-2010 20:59:46

Usa la función Odd.

// Saludos

escafandra 06-04-2010 00:19:49

Si el bit menos significativo es 1 entonces no es par:
Código:

bool par = !(n & 0x1);
Saludos.

vinicc 06-04-2010 00:20:46

pares y nones
 
:rolleyes: Divides el número dentro de 2 y si el resultado tiene parte fraccionaria, entonces es impar, de lo contrario es par. También (en delphi) if ( x mod 2) = 0 then (es_Par)

coso 06-04-2010 19:38:25

Hola, tambien puedes usar el modulo 2

Código:

if (n%2) { cout << "impar" } else { cout << "par" }

rgstuamigo 07-04-2010 00:52:13

Cita:

Empezado por escafandra (Mensaje 359318)
Si el bit menos significativo es 1 entonces no es par:
Código:

bool par = !(n & 0x1);
Saludos.

Épale...:eek: escafandra... buen truco.
gracias por compartirlo.;).
Una anécdota
>;)
Aún recuerdo :rolleyes: aquella vez cuando estaba empezando a dar mis primeros pasos en la programación en la universidad, que a cierto catedrático se le ocurrío preguntarnos en el examen :¿Hacer una funcion que diga si un número es par pero sin usar division(div) ni residuo(mod) ni cualquier otra función propia del lenguaje? :confused:
Lo cierto es que no recuerdo si lo resolví pero con la respuesta de escafandra creo que hubiera sido mas fácil...:D ¿cómo no se me ocurrió...?:o:(:o.
Saludos...:D

Casimiro Notevi 07-04-2010 00:56:38

Cita:

Empezado por rgstuamigo (Mensaje 359531)
[..]¿Hacer una funcion que diga si un número es par pero sin usar division(div) ni residuo(mod) ni cualquier otra función propia del lenguaje? [..]

Pero, ¿dijo qué lenguaje? jejeje

rgstuamigo 07-04-2010 01:01:18

Cita:

Empezado por Casimiro Notevi (Mensaje 359532)
Pero, ¿dijo qué lenguaje? jejeje

Bueno aquella vez estabamos dando los primeros pininos en Pascal, aunque en realidad el examen era escrito y tenias que hacerlo usando Diagrama de flujo ó Pseudocódigo lo cual implica que la solucion serviría para cualquier lenguaje de programación.;):D
Saludos...:)

Ñuño Martínez 07-04-2010 09:01:32

Todos los microprocesadores tienen un indicador de paridad. Entonces podría utilizarse código máquina:

Código Delphi [-]
{ Como no sepo 8x86, utilizo Z-80 :-P }
FUNCTION Par (aValue: INTEGER): BOOLEAN;
ASM
  POP BC
  POP HL
  LD IX, 0
  LD IY, 1
  LD A, L
  OR A
  JP P, SI
  PUSH IX
  JR FIN
SI:
  PUSH IY
FIN:
  PUSH BC
END;

Bueno, más o menos...:rolleyes::D

Casimiro Notevi 07-04-2010 11:47:05

El z-80, qué recuerdos :rolleyes:

escafandra 07-04-2010 12:27:53

Cita:

Empezado por rgstuamigo (Mensaje 359531)
Épale...:eek: escafandra... buen truco.
gracias por compartirlo.;).
Una anécdota
>;)
Aún recuerdo :rolleyes: aquella vez cuando estaba empezando a dar mis primeros pasos en la programación en la universidad, que a cierto catedrático se le ocurrío preguntarnos en el examen :¿Hacer una funcion que diga si un número es par pero sin usar division(div) ni residuo(mod) ni cualquier otra función propia del lenguaje? :confused:
Lo cierto es que no recuerdo si lo resolví pero con la respuesta de escafandra creo que hubiera sido mas fácil...:D ... cómo no se me ocurrió...

Elemental, amigo, :cool:. Es como dividir por 2 pero sin hacerlo. Como preguntó tu profesor:D. En realidad son cosas que están en le mente de todos, si pensamos en binario.:)

Saludos.

Ñuño Martínez 07-04-2010 13:05:12

Cita:

Empezado por Casimiro Notevi (Mensaje 359585)
El z-80, qué recuerdos :rolleyes:

Otra forma más sencilla (sólo el ASM):
Código:

  POP BC
  POP HL
  LD IX, 0
  LD IY, 1
  RRC L
  JP C, SI
  PUSH IX
  JR FIN
SI:
  PUSH IY
FIN:
  PUSH BC

Es que acabo de recordar que el "shiftt" puede utilizar el acarreo. :cool:

roman 07-04-2010 17:10:14

¡Válgame! Ésto sí que es rizar el rizo :D

Desempolvando el poco ensamblador que alguna vez supe, creo que se puede así ¿no?

Código Delphi [-]
function par(n: integer): boolean;
asm
  and ax,1
  dec ax
end;

// Saludos

escafandra 07-04-2010 21:00:13

El ejemplo de roman es una buena adaptación al asm del concepto de que el bit menos significativo nos dirá si es par.
Código:

bool par = !(n & 0x1);
Al tratarse de C, no podemos implementar el código tal cual lo expone roman para delphi. En C los parámetros se pasan en la pila por defecto (__cdecl). Así que tendremos que forzar el paso por registro (__fastcall) que es el estado por defecto de delphi:

Código:

bool __fastcall par(int n)
{
  asm{
  and ax,1
  dec ax
  }
}

Saludos.

roman 07-04-2010 21:08:31

Cita:

Empezado por escafandra (Mensaje 359666)
El ejemplo de roman es una buena adaptación al asm del concepto de que el bit menos significativo nos dirá si es par.

Je, je. En realidad "mi" código es el mismo que el tuyo aprovechando la "trampa" de que el parámetro se pasa en ax y ahí mismo se regresa el resultado.

Lo que pasa es que cuando vi el código de Ñuño (del que no entiendo ni jota), me dije que un and no podía ser tan difícil :D

// Saludos

lmpadron 30-04-2010 19:18:46

valla amigos he estado en superviviencia en un cayo, sin pc, ventilador, movil ni nada por el estilo jejeje, ni siquiera fosforera para encender algo jejejejejejejeje, y weno que he estado casi 3 semanas y al regresar veo cuan animado ha sido este hilo, jejejej, desempolvando los viejos recuerdos jajajajaja, gracias por su ayuda ;-)

roman 30-04-2010 19:42:28

Mmm, creo que te aplica la regla 14 de la otra guía de estilo :rolleyes: :D

// Saludos

lmpadron 30-04-2010 20:08:28

Cita:

Empezado por roman (Mensaje 362412)
Mmm, creo que te aplica la regla 14 de la otra guía de estilo :rolleyes: :D

// Saludos

Si jajajajajaja y creo que en este momento tambien se me aplicaba la 16 de la otra guía de estilo jajajajajajaja, pero wneo realmente no fue algo a lo que pudiese decir que no, no se si me entienden jejejejejejeje, pero weno ya estoy de vuelta y espero poder ayudar a los demas con mi poco conocimiento jejejeje HAAAA y al menos agradeci el esfuerzo jajajajajajajajaa :D:D:D


La franja horaria es GMT +2. Ahora son las 20:55:11.

Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi