ayuda con numeros pares, pero utilizando funciones

Iniciado por razyhook, 5 Agosto 2015, 08:39 AM

0 Miembros y 1 Visitante están viendo este tema.

razyhook

buenas, en la universidad, me mandaron a hacer el programa de saber de un grupo de numero, cuales son los pares y publicarlos, pero utilizando las funciones. despues de varios intento lo logro, pero tengo un error, que me estan saliendo unos -2, intercalado del numero par.

esta es la codificación.

Código (cpp) [Seleccionar]
#include <stdio.h>
#include <stdlib.h>

int pares(int numero1)

{
int z;


if(numero1%2==0)

{
z=numero1;
}


return z;
}

int main()
{
int n1, n2, c, resultado;

do
{
printf("\n ingrese el primer numero: ");
scanf("%i", &n2);
printf("\n por favor diga el numero final: ");
scanf("%i", &n1);

if(n1<n2)
{
printf("\n opcion invalida, por favor, el numero final no puede ser mayor que el inicial");
}
}
while(n1<n2);


printf("\n los valores par son: ");

for(c=n2; c<=n1; c++)
{
printf("\n %i", pares(c));
}
}


Mod: Los códigos deben ir en etiquetas GeSHi


engel lex

procura siempre inicializar las variables porque pueden contener basura...

int z = 0;
El problema con la sociedad actualmente radica en que todos creen que tienen el derecho de tener una opinión, y que esa opinión sea validada por todos, cuando lo correcto es que todos tengan derecho a una opinión, siempre y cuando esa opinión pueda ser ignorada, cuestionada, e incluso ser sujeta a burla, particularmente cuando no tiene sentido alguno.

razyhook

#2
mira como sale:



hace el trabajo, pero ese menos 2, me esta afectando el programa :C

ya acomode la variable.

#include <stdio.h>
#include <stdlib.h>

int pares(int numero1)

{
int par;


if(numero1%2==0)

{
par=numero1;
}


return par;
}

int main()
{
int n1, n2, c, resultado;

do
{
printf("\n ingrese el primer numero: ");
scanf("%i", &n2);
printf("\n por favor diga el numero final: ");
scanf("%i", &n1);

if(n1<n2)
{
printf("\n opcion invalida, por favor, el numero final no puede ser mayor que el inicial");
}
}
while(n1<n2);


printf("\n los valores par son: ");

for(c=n2; c<=n1; c++)
{
printf("\n %i", pares(c));
}
}

engel lex

simplemente ignoraste mi ultimo mensaje -.- así seguro avanzamos rapido
El problema con la sociedad actualmente radica en que todos creen que tienen el derecho de tener una opinión, y que esa opinión sea validada por todos, cuando lo correcto es que todos tengan derecho a una opinión, siempre y cuando esa opinión pueda ser ignorada, cuestionada, e incluso ser sujeta a burla, particularmente cuando no tiene sentido alguno.

A.I.

Es indiferente que inicialice esa variable, en lugar de devolver basura devolverá un 0, que aquí también es basura. De hecho esa variable sobra. Esa función no te devuelve sólo los números pares, ni dice si un número es par o impar. Tu función debería ser una función "booleana" que devuelva si el número que le pasas  es par o no..

int Es_Par(int numero){
 
  if(numero%2==0)
   
    {
      return 1; //True
    }
 
  return 0; //False
}


Y luego adaptar la parte del main que imprime los números en función de lo que devuelva ésta.

Consejo: usa nombres descriptivos en las variables.

engel lex

Cita de: A.I. en  6 Agosto 2015, 01:26 AM
Es indiferente que inicialice esa variable, en lugar de devolver basura devolverá un 0, que aquí también es basura.


depende del compilador y los parámetros de compilación, normalmente es basura...


en resto en tal caso sería
Código (cpp) [Seleccionar]
int Es_Par(int numero){

  if(numero%2==0)

    {
      return numero; //True
    }

  return 0; //False
}
El problema con la sociedad actualmente radica en que todos creen que tienen el derecho de tener una opinión, y que esa opinión sea validada por todos, cuando lo correcto es que todos tengan derecho a una opinión, siempre y cuando esa opinión pueda ser ignorada, cuestionada, e incluso ser sujeta a burla, particularmente cuando no tiene sentido alguno.

A.I.

Cita de: engel lex en  6 Agosto 2015, 01:28 AM

depende del compilador y los parámetros de compilación, normalmente es basura...


en resto en tal caso sería
Código (cpp) [Seleccionar]
int Es_Par(int numero){

  if(numero%2==0)

    {
      return numero; //True
    }

  return 0; //False
}


No me has entendido, yo decía que inicializarla a 0 es exactamente igual que dejarla con basura en este caso. El resultado va a ser un número arbitrario que no te sirve de nada, es decir basura.

El código que tu has escrito hace exáctamente lo mismo que el que yo he escrito, devuelve false (0) si no es par, o true (cualquier número que no sea 0) si es par. Sí no modifica la parte en la que se imprimen los números, que deberían ser sólo los pares, va a imprimir 0 en los impares en lugar de basura.


razyhook

#7
ok, con respecto a lo booleano

for(c=n2; c<=n1; c++)
{
printf("\n %i", Es_Par(c));
}
}


en este codigo tiene que aver una forma, no se si remplazo el for u otro comando para que publique, mi error lo tengo es en el printf :C, bueno segun lo veo asi.. pq el publicara el valor que tenga el residuo  :/


se que es molesto, pero soy novato en esto de funciones. disculpen mi ignoracia.

engel lex

en tal caso, usa la función de A.I. y la parte de

for(c=n2; c<=n1; c++)
{
printf("\n %i", Es_Par(c));
}
}


modificala como

for(c=n2; c<=n1; c++)
{
if(Es_Par(c)==1){
printf("\n %i",c);
}
}
}
El problema con la sociedad actualmente radica en que todos creen que tienen el derecho de tener una opinión, y que esa opinión sea validada por todos, cuando lo correcto es que todos tengan derecho a una opinión, siempre y cuando esa opinión pueda ser ignorada, cuestionada, e incluso ser sujeta a burla, particularmente cuando no tiene sentido alguno.