Autor
|
Tema: duda ejercicio, empezando con C (Leído 3,380 veces)
|
++c
Desconectado
Mensajes: 29
|
Hola que tal, acabo de empezar a programar en C y he realizado el siguiente ejercicio: Programa que calcula e imprima el promedio de varios enteros. Suponga que el último valor que lee la instrucción scanf es el valor 9999. #include <stdio.h>
int main(){ int contador=1,suma=0,x; float promedio=0.0;
do{
printf("\nDame un numero, introduce 9999 para salir: "); scanf("%d",&x); if(x==9999){ break; } else{
suma=suma+x; promedio=(float)suma/contador; contador++;
}
} while(x!=9999); printf("\n\nEl promedio total es: %f",promedio); return 0; }
Me gustaría conocer como romper adecuadamente el programa si el primer dígito es 9999 sin mostrar el mensaje " El promedio total es 0.0 " Cualquier indicación para programar más eficientemente se lo agradecería. Muchas gracias
|
|
|
En línea
|
|
|
|
vangodp
Desconectado
Mensajes: 455
|
si lo que quieres es detenerlo por completo pon un return 0; en vez de break;
|
|
|
En línea
|
|
|
|
leosansan
Desconectado
Mensajes: 1.314
|
Algo como esto:................. }while(x!=9999); if (contador!=1) printf("\n\nEl promedio total es: %f",promedio); return 0; }
¡¡¡¡ Saluditos! ..... !!!!
|
|
|
En línea
|
|
|
|
rir3760
Desconectado
Mensajes: 1.639
|
Me gustaría conocer como romper adecuadamente el programa si el primer dígito es 9999 sin mostrar el mensaje " El promedio total es 0.0 "
Cualquier indicación para programar más eficientemente se lo agradecería. No tienes porque calcular el promedio en cada iteración del bucle, en su lugar debes calcularlo después de este y la condición de salida "x != 9999" nunca se alcanza (si el valor introducido es 9999 el bucle termina antes con la sentencia "break;"). Ademas la variable "contador" no refleja el numero de valores introducidos: si el primero es el valor de salida 9999 su valor es uno (el inicial) cuando debería ser cero. Por ultimo la variable "promedio" no es necesaria ya que lo unico que haces con el promedio es imprimirlo. Si realizamos los cambios (mas algunos otros menores) el programa termina asi: #include <stdio.h> int main(void) { int contador = 0, suma = 0, x; while (1){ printf("Dame un numero, introduce 9999 para salir: "); if (scanf("%d",&x ) != 1 || x == 9999) break; else { suma += x; contador++; } } /* ** Si el numero de valores (contador) es diferente de cero: ** Calcular el promedio e imprimirlo en la salida estandar */ return 0; }
Un saludo
|
|
|
En línea
|
C retains the basic philosophy that programmers know what they are doing; it only requires that they state their intentions explicitly. -- Kernighan & Ritchie, The C programming language
|
|
|
++c
Desconectado
Mensajes: 29
|
Hola, muchas gracias por contestar a vangodp, leosansan y a rir3760. Unas dudas: - Para el código de leosansan: if (contador!=1)
No entiendo bien el porque, ¿no sería contador !=0 para que realizara el promedio? - Para el código de rir3760 if (scanf("%d",&x) != 1 || x == 9999) No entiendo !=1, si se refiere a comparar el valor del while con la lectura por teclado... Se me pasaba dejo el código entero con la modificación aplicada de rir3760 #include <stdio.h>
int main(void) { int contador = 0, suma = 0, x;
while (1){ printf("Dame un numero, introduce 9999 para salir: "); fflush(stdout); if (scanf("%d",&x) != 1 || x == 9999) break; else { suma += x; contador++; } } if(contador!=0){ printf("\nEl promedio de la operacion es: %f", (float)suma/contador); } return 0; }
Muchas gracias, he aprendido varios puntos muy interesantes y la facilidad y soltura de programación que mostráis. Saludos!!
|
|
« Última modificación: 1 Mayo 2014, 15:53 pm por simorg »
|
En línea
|
|
|
|
vangodp
Desconectado
Mensajes: 455
|
si le pasas el entero correctamente la funcion scanf() te devuelve 1 asi que si scanf() no es 1 el bucle scaput XDDD o sea esto:if (scanf("%d",&x) != 1 || x == 9999)
quiere decir: el bucle se rompe si scanf no es 1 o si x es igual a 9999 =D
prueba esto XDD
int n1; int n = scanf ( "%d", &n1 ); printf("%d", n);
si le pasar un int te va imprimir 1 pero si le intanteas pasar una letra te va devolver 0, magia del scanf XDD
saludos!!
|
|
|
En línea
|
|
|
|
leosansan
Desconectado
Mensajes: 1.314
|
Pero que tenga en cuenta que si le pasa "12as" va a tomar como valor válido "12".
Habría que plamtear una validación de enteros más amplia.¡¡¡¡ Saluditos! ..... !!!!
|
|
|
En línea
|
|
|
|
++c
Desconectado
Mensajes: 29
|
Espléndido!! Que pasada conocer estos detalles de estas funciones, supongo que más adelante conoceré el poder de printf y scanf más a fondo, pero me alegro de ver un ejemplo tan práctico para adelantar y afianzar mejor conocimientos. Gracias vangodp por colocarme ese ejemplo y a leosansan por indagar cuando me corresponda una validación de enteros como comentas más amplia Saludos!!
|
|
|
En línea
|
|
|
|
vangodp
Desconectado
Mensajes: 455
|
Tu piensas que muchas de las funciones pueden retornar valores para simplemente hacer comprobaciones. Lo mejor es que las conozcas bien a todas las funciones que sueles utilizar Esta es una muy buena pagina para eso. http://www.cplusplus.com/reference/Y esta no se queda atrás http://en.cppreference.com/w/esta ultima la puedes poner en español en la parte de abajo de la pagina XD Suerte
|
|
|
En línea
|
|
|
|
|
Mensajes similares |
|
Asunto |
Iniciado por |
Respuestas |
Vistas |
Último mensaje |
|
|
SOLUCIONADO ;Duda empezando con winsock
« 1 2 »
Programación Visual Basic
|
Littl3
|
15
|
6,686
|
6 Marzo 2008, 17:49 pm
por Littl3
|
|
|
Duda en ejercicio++
Ejercicios
|
Lamarkus
|
1
|
3,471
|
1 Diciembre 2010, 17:31 pm
por [L]ord [R]NA
|
|
|
Empezando en C/C++ primera duda
Programación C/C++
|
devKL
|
8
|
3,304
|
11 Noviembre 2011, 03:44 am
por devKL
|
|
|
buenas, estoy empezando en programacion en c++ y me pusieron un ejercicio
Programación C/C++
|
syncblack
|
2
|
2,315
|
19 Marzo 2014, 23:07 pm
por leosansan
|
|
|
Duda: empezando con los exploits
Bugs y Exploits
|
onfyah7
|
2
|
3,320
|
12 Febrero 2015, 03:40 am
por onfyah7
|
|