elhacker.net cabecera Bienvenido(a), Visitante. Por favor Ingresar o Registrarse
¿Perdiste tu email de activación?.

 

 


Tema destacado: Sigue las noticias más importantes de seguridad informática en el Twitter! de elhacker.NET


+  Foro de elhacker.net
|-+  Programación
| |-+  Programación C/C++ (Moderadores: Eternal Idol, Littlehorse, K-YreX)
| | |-+  duda ejercicio, empezando con C
0 Usuarios y 1 Visitante están viendo este tema.
Páginas: [1] Ir Abajo Respuesta Imprimir
Autor Tema: duda ejercicio, empezando con C  (Leído 3,066 veces)
++c

Desconectado Desconectado

Mensajes: 29


Ver Perfil
duda ejercicio, empezando con C
« en: 28 Abril 2014, 21:47 pm »

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.

Código:

#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 Desconectado

Mensajes: 455



Ver Perfil
Re: duda ejercicio, empezando con C
« Respuesta #1 en: 28 Abril 2014, 21:59 pm »

si lo que quieres es detenerlo por completo pon un return 0; en vez de break; :D


En línea

leosansan


Desconectado Desconectado

Mensajes: 1.314


Ver Perfil
Re: duda ejercicio, empezando con C
« Respuesta #2 en: 29 Abril 2014, 00:28 am »


Algo como esto:
Código
  1. .................
  2. }while(x!=9999);
  3.    if (contador!=1)
  4.      printf("\n\nEl promedio total es: %f",promedio);
  5.    return 0;
  6. }


¡¡¡¡ Saluditos! ..... !!!!


En línea

rir3760


Desconectado Desconectado

Mensajes: 1.639


Ver Perfil
Re: duda ejercicio, empezando con C
« Respuesta #3 en: 29 Abril 2014, 02:06 am »

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:
Código
  1. #include <stdio.h>
  2.  
  3. int main(void)
  4. {
  5.   int contador = 0, suma = 0, x;
  6.  
  7.   while (1){
  8.      printf("Dame un numero, introduce 9999 para salir: ");
  9.      fflush(stdout);
  10.      if (scanf("%d",&x) != 1 || x == 9999)
  11.         break;
  12.      else {
  13.         suma += x;
  14.         contador++;
  15.      }
  16.   }
  17.  
  18.   /*
  19.    ** Si el numero de valores (contador) es diferente de cero:
  20.    **    Calcular el promedio e imprimirlo en la salida estandar
  21.    */
  22.  
  23.   return 0;
  24. }

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 Desconectado

Mensajes: 29


Ver Perfil
Re: duda ejercicio, empezando con C
« Respuesta #4 en: 1 Mayo 2014, 00:23 am »

Hola,

muchas gracias por contestar a vangodp, leosansan y a rir3760.

Unas dudas:

- Para el código de leosansan:

                      
Código
  1. if (contador!=1)

No entiendo bien el porque, ¿no sería contador !=0 para que realizara el promedio?

- Para el código de rir3760

          
Código:
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

Código:
#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 Desconectado

Mensajes: 455



Ver Perfil
Re: duda ejercicio, empezando con C
« Respuesta #5 en: 1 Mayo 2014, 00:45 am »

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 Desconectado

Mensajes: 1.314


Ver Perfil
Re: duda ejercicio, empezando con C
« Respuesta #6 en: 1 Mayo 2014, 00:55 am »


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 Desconectado

Mensajes: 29


Ver Perfil
Re: duda ejercicio, empezando con C
« Respuesta #7 en: 1 Mayo 2014, 14:10 pm »

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  ;D

Saludos!!
En línea

vangodp


Desconectado Desconectado

Mensajes: 455



Ver Perfil
Re: duda ejercicio, empezando con C
« Respuesta #8 en: 1 Mayo 2014, 16:06 pm »

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

Páginas: [1] Ir Arriba Respuesta Imprimir 

Ir a:  

Mensajes similares
Asunto Iniciado por Respuestas Vistas Último mensaje
SOLUCIONADO ;Duda empezando con winsock « 1 2 »
Programación Visual Basic
Littl3 15 6,252 Último mensaje 6 Marzo 2008, 17:49 pm
por Littl3
Duda en ejercicio++
Ejercicios
Lamarkus 1 3,282 Último mensaje 1 Diciembre 2010, 17:31 pm
por [L]ord [R]NA
Empezando en C/C++ primera duda
Programación C/C++
devKL 8 3,027 Último mensaje 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,122 Último mensaje 19 Marzo 2014, 23:07 pm
por leosansan
Duda: empezando con los exploits
Bugs y Exploits
onfyah7 2 3,151 Último mensaje 12 Febrero 2015, 03:40 am
por onfyah7
WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines