Foros del Web » Programación para mayores de 30 ;) » C/C++ »

calcular la media de n números

Estas en el tema de calcular la media de n números en el foro de C/C++ en Foros del Web. Hola, estoy haciendo un programa para calcular la media de 5 números usando el bucle for, pero cuando lo compilo en vez de introducir 5 ...
  #1 (permalink)  
Antiguo 02/07/2010, 07:03
 
Fecha de Ingreso: febrero-2010
Mensajes: 258
Antigüedad: 14 años, 9 meses
Puntos: 0
calcular la media de n números

Hola, estoy haciendo un programa para calcular la media de 5 números usando el bucle for, pero cuando lo compilo en vez de introducir 5 números me pide otro más y además el resultado que me sale es incorrecto, a pesar de introducir un números más. ¿Que diferencia hay entre inicializar la i a 0 o a 1 en este caso concreto?

Código C:
Ver original
  1. #include <stdio.h>
  2. #include <stdlib.h>
  3.  
  4. int main(){
  5.           int i;
  6.           int num;
  7.           int n;
  8.           int suma = 0;
  9.           double media = 0.0;
  10.  
  11.           printf ("¿Cuantos numeros vas a sumar? ",n);
  12.           scanf ("%d", &n);
  13.  
  14.          
  15.           for(i=1; i<=n; i++){
  16.              scanf("%d\n", &num);
  17.              suma = suma + num;
  18.           }
  19.           media = suma / (double)n;
  20.           printf("La media es %lf\n", media);
  21. }
  #2 (permalink)  
Antiguo 02/07/2010, 09:06
 
Fecha de Ingreso: marzo-2009
Ubicación: Santa Marta
Mensajes: 73
Antigüedad: 15 años, 8 meses
Puntos: 2
Respuesta: calcular la media de n números

Pues como sabras el ciclo for realiza n interacciones dependiendo de la condicion que se imponga en el.

luego debe haber una variable controladora del ciclo como vemso a continuacino

Código:
for(i = 0; i < 5; i++){}
la diferencia en inicializar la i en 0 o en 1 se presenta en el la expresion condicional ya que si el signo de comparacion es < o <= tendras diferentes resultados.

en el siguiente ejemplo veremos esa diferencia.

Código:
int i = 0;
int b = 0;
for(i = 0; i < 5; i++){
printf("%d ", b);
b++;
}
la salida del codigo anterior sera: 0 1 2 3 4

ahora si cambiamos el condicional

Código:
int i = 0;
int b = 0;
for(i = 0; i <= 5; i++){
printf("%d ", b);
b++;
}
la salida del codigo anterior sera: 0 1 2 3 4 5

entonces la inicializacion de i dependera de la necesidad que tengas al momento de programar.

pues con respecto a tu codigo

Código:
#include <stdio.h>
#include <stdlib.h>
*
int main(){
* * * * * int i = 0;
* * * * * int num = 0;
* * * * * int n = 0;
* * * * * int suma = 0;
* * * * * double media = 0.0;
*
* * * * * printf ("¿Cuantos numeros vas a sumar? ",n);
* * * * * scanf ("%d", &n);
*
* * * * * 
* * * * * for(i=1; i<=n; i++){
* * * * * * *scanf("%d\n", &num);
* * * * * * *suma = suma + num; 
* * * * * }
* * * * * media = suma / n;
//El casting me pareceria innecesario. pero mi experiencia con c es muy poca
* * * * * printf("La media es %lf\n", media); 
return 0;
}
no veo ningun tipo de problema aca.. podria ser el compilador..
espero haber sido claro
  #3 (permalink)  
Antiguo 02/07/2010, 09:54
 
Fecha de Ingreso: enero-2008
Mensajes: 229
Antigüedad: 16 años, 10 meses
Puntos: 1
Respuesta: calcular la media de n números

for(i=1; i<=n; i++){
scanf("%d\n", &num);
suma = suma + num;
}
puedes mejorar tu codigo de la siguiente forma
for(i=0; ++i<=n;)
{
scanf("%d\n", &num);
suma = suma + num;
}

el tema de por es mas eficiente la forma que te propongo tiene relacion directa de como es que traduce tu codigo el compilador. Pero lo que si puedo decir es que utilices la forma ++var ante la forma var++, es mas rapida la primera.

algo importante que tienes que tomar en cuenta es que los arreglos sus indices van de 0....n-1, donde n el tamaño del arreglo. asi si tu tienes un arreglo de 5 elementos sus posiciones serían 0...4, por lo que te recomiendo salvo que sea muy necesario hacerlo de esta forma

for(i = -1; ++i<n;)
{
..
..
}
o mas tradicional
for(i = 0; i<n; ++i)
{
...
...
}

Nota la forma que te propongo se asemeja mucho a forma de funcionar de un while
  #4 (permalink)  
Antiguo 02/07/2010, 10:49
 
Fecha de Ingreso: febrero-2010
Mensajes: 258
Antigüedad: 14 años, 9 meses
Puntos: 0
Respuesta: calcular la media de n números

Mi idea es calcular la media de 5 números sin utilizar vectores, pero no entiendo por qué de la forma que lo he hecho no me sale. ¿Cómo la harías vosotros?, estoy hecha un lío. Las explicaciones que me habéis dado me han confundido todavía más. Gracias.
  #5 (permalink)  
Antiguo 02/07/2010, 11:56
 
Fecha de Ingreso: febrero-2010
Mensajes: 258
Antigüedad: 14 años, 9 meses
Puntos: 0
Respuesta: calcular la media de n números

Me deja introducir los 5 números, pero el resultado no es el correcto ¿por qué?

Código C:
Ver original
  1. #include <stdio.h>
  2. #include <stdlib.h>
  3.  
  4.  
  5.  
  6. int main(){
  7.           int i;
  8.           int n;
  9.           int num;
  10.           int suma = 0;
  11.           double media = 0;
  12.            
  13.           printf("¿Cuantos números quieres introducir? ",n);
  14.           scanf("%d\n", &n);
  15.  
  16.           for(i=1; i<n; i++){
  17.              scanf("%d\n", &num);
  18.              suma = suma + num;
  19.           }
  20.           media = suma/(double)n;
  21.           printf("La media es %lf\n",media);
  22. }

Última edición por minette1988; 02/07/2010 a las 12:07
  #6 (permalink)  
Antiguo 02/07/2010, 12:05
 
Fecha de Ingreso: febrero-2010
Mensajes: 258
Antigüedad: 14 años, 9 meses
Puntos: 0
Respuesta: calcular la media de n números

Me deja introducir los 5 números, pero el resultado no es el correcto ¿por qué?

Código C:
Ver original
  1. #include <stdio.h>
  2. #include <stdlib.h>
  3.  
  4.  
  5.  
  6. int main(){
  7.           int i;
  8.           int n;
  9.           int num;
  10.           int suma = 0;
  11.           double media = 0;
  12.            
  13.           printf("¿Cuantos números quieres introducir? ",n);
  14.           scanf("%d\n", &n);
  15.  
  16.           for(i=1; i<n; i++){
  17.              scanf("%d\n", &num);
  18.              suma = suma + num;
  19.           }
  20.           media = suma/(double)n;
  21.           printf("La media es %lf\n",media);
  22. }

Última edición por minette1988; 02/07/2010 a las 12:11 Razón: eliminar mensaje
  #7 (permalink)  
Antiguo 02/07/2010, 12:12
 
Fecha de Ingreso: febrero-2010
Mensajes: 258
Antigüedad: 14 años, 9 meses
Puntos: 0
Respuesta: calcular la media de n números

He probado de eliminar el mensaje repetido con editar, pero no funciona. ¿Cómo se hace?. Gracias.
  #8 (permalink)  
Antiguo 02/07/2010, 12:57
 
Fecha de Ingreso: enero-2008
Mensajes: 229
Antigüedad: 16 años, 10 meses
Puntos: 1
Respuesta: calcular la media de n números

en primera tu for debe debería ser asi
for(i = 1; i<=n; ++i)

o

for(i=0; i<n; ++i)

en segunda no puedes poner una variable sin tener un indicador que vas utilizar una en un pritnf, ademas tendrias k incializar n

printf("¿Cuantos números quieres introducir? ",n);
lo correcto es
printf("¿Cuantos números quieres introducir? ");
o si lo que querias eraun salto de linea
printf("¿Cuantos números quieres introducir?\n ");
en un scanf no puedes poner caracteres
scanf("%d\n", &var);
es incorrecto
deberia ser asi
scanf("%d,&var);
printf("\n");
has las modificaciones y nos cuentas como te fue
  #9 (permalink)  
Antiguo 02/07/2010, 13:27
 
Fecha de Ingreso: febrero-2010
Mensajes: 258
Antigüedad: 14 años, 9 meses
Puntos: 0
Respuesta: calcular la media de n números

¿Por qué en el for pones ++i en lugar de i++?, en el scanf que hay dentro del bucle no pongo caracteres sino números y no entiendo por qué está mal. He inicializado la n a 0 y he cambiado la i++ por ++i, pero por ejemplo si quiero introducir 2 números el compilador me deja introducir uno más. ¿Por qué pasa eso?. El resultado sigue siendo incorrecto.

Código C:
Ver original
  1. #include <stdio.h>
  2. #include <stdlib.h>
  3.  
  4. int main(){
  5.           int i;
  6.           int n=0;
  7.           int num;
  8.           int suma = 0;
  9.           double media = 0.0;
  10.            
  11.           printf("¿Cuantos números quieres introducir? ",n);
  12.           scanf("%d\n", &n);
  13.  
  14.           for(i=1; i<=n; ++i){
  15.              scanf("%d\n", &num);
  16.              suma = suma + num;
  17.           }
  18.           media = suma/(double)n;
  19.           printf("La media es %lf\n",media);
  20. }

Última edición por minette1988; 02/07/2010 a las 13:35
  #10 (permalink)  
Antiguo 02/07/2010, 14:04
 
Fecha de Ingreso: enero-2008
Mensajes: 229
Antigüedad: 16 años, 10 meses
Puntos: 1
Respuesta: calcular la media de n números

por k utilizo ++i en lugar de i++, este caso mera optimizacion. es mas rapido ++i q i++.
otra vez
printf("¿Cuantos números quieres introducir? ",n);//Esta n esta mal aqui
scanf("%d\n", &n);//este salto de línea esta mal aquí
scanf("%d\n", &num);//este salto de línea esta mal aquí
  #11 (permalink)  
Antiguo 03/07/2010, 05:30
 
Fecha de Ingreso: febrero-2010
Mensajes: 258
Antigüedad: 14 años, 9 meses
Puntos: 0
Respuesta: calcular la media de n números

Tenías razón sobraban los \n ya funciona bien. Gracias.
  #12 (permalink)  
Antiguo 03/07/2010, 13:13
 
Fecha de Ingreso: marzo-2009
Mensajes: 15
Antigüedad: 15 años, 9 meses
Puntos: 1
Respuesta: calcular la media de n números

Que yo sepa, i++ no es lo mismo que ++i.

Depende de lo que hagas, puede dar un resultado distinto. Esto lo conozco por PHP, y me imagino que no será diferente.

En el caso de PHP, te doy el ejemplo:

<?php
$test=1;
echo "Preincremento: " . (++$test); //Aquí, primero se incrementa y cuando sale el resultado, ya esta incrementado
echo "Valor final " . $test

$test = 1;
echo "Postincremento " . ($test++);
//Aquí cuando se muestra el resultado, todavía no se ha incrementado
echo "Valor final " . $test;

Saludos!
  #13 (permalink)  
Antiguo 03/07/2010, 14:43
 
Fecha de Ingreso: abril-2010
Ubicación: Rosario
Mensajes: 1.850
Antigüedad: 14 años, 8 meses
Puntos: 228
Respuesta: calcular la media de n números

El ++ a la izquierda incrementa antes de asignar, y el ++ a la derecha asigna y luego incremente.

Lo que no entiendo porque dicen que genera mejor codigo uno que el otro.
  #14 (permalink)  
Antiguo 03/07/2010, 14:50
 
Fecha de Ingreso: marzo-2009
Mensajes: 15
Antigüedad: 15 años, 9 meses
Puntos: 1
Respuesta: calcular la media de n números

Cita:
Iniciado por sam90 Ver Mensaje
El ++ a la izquierda incrementa antes de asignar, y el ++ a la derecha asigna y luego incremente.

Lo que no entiendo porque dicen que genera mejor codigo uno que el otro.
Ahí estamos ;)

Es esto de lo que me quejo (sin ofender :D)

Todavia no lo entiendo. Tendré que probarlo
  #15 (permalink)  
Antiguo 03/07/2010, 16:15
 
Fecha de Ingreso: abril-2010
Ubicación: Rosario
Mensajes: 1.850
Antigüedad: 14 años, 8 meses
Puntos: 228
Respuesta: calcular la media de n números

Ejemplo:

int a = 0;
int b;

b = a++; // b tiene el valor 0.

por otro lado:

b = ++a; // b tiene el valor 1.
  #16 (permalink)  
Antiguo 04/07/2010, 00:27
 
Fecha de Ingreso: enero-2008
Mensajes: 229
Antigüedad: 16 años, 10 meses
Puntos: 1
Respuesta: calcular la media de n números

perdon, por andar escribiendo a la carrera no me fije...
esta es la verdadera forma optimizada, la razon es sencilla, genera menos codigo en ensablador, una instruccion menos, podras pensar k es una instruccion menos una mas... pero cuando procesas grandes volumenes de datos, o lo estas haciendo para algun dispositivo movil. cualquier ahorro de recursos es bueno.

for(int cont = -1; ++cont<n;)
{
...
}

aun que si no te importa el orden en que recorras el ciclo esta es un poco mejor
for(int cont = 5; --cont>=0;)
{
printf("Numero%d", cont);
}

Etiquetas: media, calculadora
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 06:18.