¡Advertencia!
Este tema no ha tenido respuestas en más de un mes. Recuerda que si deseas añadir una nueva debes cumplir con las normas de la web.
Buenas

Necesito ayuda con este código: Obtener la cantidad y suma de los números pares menores o iguales a 1000 en C
Bien, la cantidad de números pares entre 0 y 1000 lo hice con una división de 1000/2; mi problema esta en que el programa empieza a sumar desde 40 (no se por que) y el resultado que me da la suma de los pares es 250540
cuando debería ser 249500, y suma la esta realizando asi, de esta manera: (Disculpen la cantidad de errores :(, estoy empzando)



Aqui esta el code: (Disculpen la cantidad de errores, estoy empezando)

#include <stdio.h>
int main ()

{
int pares;
int sump, i = 0;
pares = 1000/2;
printf ("La cantidad de numeros pares menores o iguales que 1000 es %d
", pares);

for (i = 1; i <= 1000; i++)
{

if (i%2==0){
sump=sump+i;
}
printf ("
La suma de los numeros pares es %d", sump);
}

}

Saludos
Está bien. Es decir, he compilado el código tal cual lo has pegado aquí y está bien, en el sentido de que se obtiene el resultado esperado que es 250500 (no es 249500 ya que eso sería si contáramos del 0 al 999) y el bucle está bien para lo que quieres calcular, aunque se puede simplificar mucho más y así ahorrar costes:



Si te da mal resultado es que por alguna razón te está empezando a contar desde 40 (si te das cuenta te da el resultado correcto sumando 40); tal vez sea por no haber inicializado a 0 antes la variable sump que has declarado y que veo que utilizas para sumar el valor total de los números pares. Si intentas sacar el valor de una variable no inicializada previamente puede darte un valor no esperado por contener lo que se suele decir "basurilla".

Por cierto, para que no te salga repetido lo de "La suma de los numeros pares es tal número", saca el segundo printf del bucle. Te quedará mejor.




#include <stdio.h>
int main ()
{
	int nums = 1000, sump = 0, i; 
	
	printf ("La cantidad de numeros pares menores o iguales que %d es %d\n", nums, nums/2);	
	
	 for (i = 1; i <= 1000; i++)
	 {
		 if (i%2==0)
		 {
			 sump+=i;
		 }
		 
	 }
	 printf ("La suma de los numeros pares es %d\n", sump);
	 
	 return 0;
}

Perro viejo de Habbo y de HabboStium. Y lo mismo en la vida real, pero sin el "perro".

Está bien. Es decir, he compilado el código tal cual lo has pegado aquí y está bien, en el sentido de que se obtiene el resultado esperado que es 250500 (no es 249500 ya que eso sería si contáramos del 0 al 999) y el bucle está bien para lo que quieres calcular, aunque se puede simplificar mucho más y así ahorrar costes:



Si te da mal resultado es que por alguna razón te está empezando a contar desde 40 (si te das cuenta te da el resultado correcto sumando 40); tal vez sea por no haber inicializado a 0 antes la variable sump que has declarado y que veo que utilizas para sumar el valor total de los números pares. Si intentas sacar el valor de una variable no inicializada previamente puede darte un valor no esperado por contener lo que se suele decir "basurilla".

Por cierto, para que no te salga repetido lo de "La suma de los numeros pares es tal número", saca el segundo printf del bucle. Te quedará mejor.




#include <stdio.h>
int main ()
{
	int nums = 1000, sump = 0, i; 
	
	printf ("La cantidad de numeros pares menores o iguales que %d es %d
", nums, nums/2);	
	
	 for (i = 1; i <= 1000; i++)
	 {
		 if (i%2==0)
		 {
			 sump+=i;
		 }
		 
	 }
	 printf ("La suma de los numeros pares es %d
", sump);
	 
	 return 0;
}



Muchísimas gracias de verdad, asigne 0 a sump y corrió bien, también saque el printf del bucle y si, queda mejor. Gracias de nuevo.

Excusa mi ignorancia; he leído acerca del "return 0;" pero de verdad que no termino de entender su función real, qué es lo que hace exactamente esa sentencia? regresar que?

Gracias de nuevo, saludos

Muchísimas gracias de verdad, asigne 0 a sump y corrió bien, también saque el printf del bucle y si, queda mejor. Gracias de nuevo.

Excusa mi ignorancia; he leído acerca del "return 0;" pero de verdad que no termino de entender su función real, qué es lo que hace exactamente esa sentencia? regresar que?

Gracias de nuevo, saludos

Es por convenio, ya que hay algunos compiladores de C (o de otros lenguajes de programación) que exigen al programador que si la función principal es de tipo entero (int), este tiene que devolver como toda función al final, un valor del tipo que le corresponda. En caso de que main sea de tipo vacío (void), no habría necesidad de incluir esa línea al final del programa.

¿Para qué sirve? Cuando tú ejecutas un programa, este siempre devolverá un código de salida numérico de tipo entero (de 8 bits sin signo) cuando finalice, es una forma de comunicar al sistema en qué estado ha finalizado el programa.

Ese código de salida es por tanto el valor entero que tiene que devolver la función main por return al final de la función. Si te fijas en los dos pantallazos que te he puesto antes, al final de la ejecución el depurador me dice que el programa ha finalizado con el código: 0, porque en el programa he escrito que siempre lo haga al final de su ejecución ya que en principio este programa no tendrá errores.



Si devuelve el valor 0 significa que el programa se ha ejecutado correctamente sin errores ni interrupciones. En caso de que el programa devuelva un valor distinto de cero, significa que ha habido algún error durante su ejecución. Generalmente se utiliza el 1 para indicar que ha sucedido un error durante la ejecución. Hay algunos códigos que el sistema o el shell ya tiene reservados para otros casos específicos, por ejemplo el 130 si el programa ha sido interrumpido manualmente (con Ctrl+C o Ctrl+Inter en Windows), el 127 si la orden introducida en el shell no existe, el número 126 si el comando introducido no es ejecutable, y algunos más que ahora mismo no recuerdo de cabeza.

Se puede ver desde la consola del sistema que este valor se almacena en una variable etiquetada como $? en bash (Unix, GNU/Linux, etc), mientras que en Windows se almacena en la variable %errorlevel%


Perro viejo de Habbo y de HabboStium. Y lo mismo en la vida real, pero sin el "perro".


Muchísimas gracias de verdad, asigne 0 a sump y corrió bien, también saque el printf del bucle y si, queda mejor. Gracias de nuevo.

Excusa mi ignorancia; he leído acerca del "return 0;" pero de verdad que no termino de entender su función real, qué es lo que hace exactamente esa sentencia? regresar que?

Gracias de nuevo, saludos

Es por convenio, ya que hay algunos compiladores de C (o de otros lenguajes de programación) que exigen al programador que si la función principal es de tipo entero (int), este tiene que devolver como toda función al final, un valor del tipo que le corresponda. En caso de que main sea de tipo vacío (void), no habría necesidad de incluir esa línea al final del programa.

¿Para qué sirve? Cuando tú ejecutas un programa, este siempre devolverá un código de salida numérico de tipo entero (de 8 bits sin signo) cuando finalice, es una forma de comunicar al sistema en qué estado ha finalizado el programa.

Ese código de salida es por tanto el valor entero que tiene que devolver la función main por return al final de la función. Si te fijas en los dos pantallazos que te he puesto antes, al final de la ejecución el depurador me dice que el programa ha finalizado con el código: 0, porque en el programa he escrito que siempre lo haga al final de su ejecución ya que en principio este programa no tendrá errores.



Si devuelve el valor 0 significa que el programa se ha ejecutado correctamente sin errores ni interrupciones. En caso de que el programa devuelva un valor distinto de cero, significa que ha habido algún error durante su ejecución. Generalmente se utiliza el 1 para indicar que ha sucedido un error durante la ejecución. Hay algunos códigos que el sistema o el shell ya tiene reservados para otros casos específicos, por ejemplo el 130 si el programa ha sido interrumpido manualmente (con Ctrl+C o Ctrl+Inter en Windows), el 127 si la orden introducida en el shell no existe, el número 126 si el comando introducido no es ejecutable, y algunos más que ahora mismo no recuerdo de cabeza.

Se puede ver desde la consola del sistema que este valor se almacena en una variable etiquetada como $? en bash (Unix, GNU/Linux, etc), mientras que en Windows se almacena en la variable %errorlevel%




Ya que ahora si entiendo el return, tremenda explicación
Muchas gracias por todo!