[C con Clase] Cuidado con la división por cero

Marcelinator marcelinator en gmail.com
Dom Jun 8 17:06:59 CEST 2014


Yo cambiaría la condición de salida.
En lugar de litros = -1 lo dejaria con litros = 0
Así evitaría la división por cero en kilometros / litro



El 8 de junio de 2014, 4:51, <cconclase-request en listas.conclase.net>
escribió:

> Envíe los mensajes para la lista Cconclase a
>         cconclase en listas.conclase.net
>
> Para subscribirse o anular su subscripción a través de la WEB
>
> http://listas.conclase.net/mailman/listinfo/cconclase_listas.conclase.net
>
>
> O por correo electrónico, enviando un mensaje con el texto "help" en
> el asunto (subject) o en el cuerpo a:
>         cconclase-request en listas.conclase.net
>
> Puede contactar con el responsable de la lista escribiendo a:
>         cconclase-owner en listas.conclase.net
>
> Si responde a algún contenido de este mensaje, por favor, edite la
> linea del asunto (subject) para que el texto sea mas especifico que:
> "Re: Contents of Cconclase digest...". Además, por favor, incluya en
> la respuesta sólo aquellas partes del mensaje a las que está
> respondiendo.
>
>
> Asuntos del día:
>
>    1. Duda con while y número centinela. (Sebastián)
>    2. Re: Duda con while y número centinela. (Julio Cesar)
>    3. Re: Duda con while y número centinela. (Sebastian Oldani)
>    4. Re: Duda con while y número centinela. (Yolmer Rosales)
>
>
> ----------------------------------------------------------------------
>
> Message: 1
> Date: Sat, 07 Jun 2014 17:44:52 -0300
> From: Sebastián <toledanosebastian en gmail.com>
> To: cconclase en listas.conclase.net
> Subject: [C con Clase] Duda con while y número centinela.
> Message-ID: <1402173892.4257.29.camel en kroatoanh>
> Content-Type: text/plain; charset="utf-8"
>
> Buenas tardes a todos. Recientemente me interese por la programación
> orientada a objetos y sabiamente me recomendaron comenzar con lenguaje
> C. Descubrí que me apasiona este tipo de lenguaje.
> Necesito ayuda con el siguiente ejercicio:
>
> código en C:
>  #include <stdio.h>
>
> /*
>  * El objetivo es obtener el promedio de n kilometros por litro de
> combustible para cada tanque.
>  * El promedio general de n kilometros por litro, obtenido de todos los
> tanques y salir.
> */
>
> int main(){
>
>    float prom_T, prom_G, litros, total_litros=0;
>    int kilometros, total_kilometros=0, contador=0, tanque=0;
>
>    while(litros != -1){
>       contador = ++tanque;
>       printf("TANQUE %d: Ingrese los litros consumidos(ó -1): ",
> contador);
>       scanf("%f", &litros);
>
>          if(litros == -1){
>             prom_G = total_kilometros / total_litros;
>             printf("\n\nEl promedio gral. de K/L es: %.1f Kilometros",
> prom_G);
>             return 0;
>          }
>
>       printf("..........Ingrese los kilometros recorridos: ");
>       scanf("%d", &kilometros);
>       prom_T = (float) kilometros / litros;
>       printf("..........Los kilometros/litro para este tanque fueron:
> %.1f Kilometros\n\n", prom_T);
>       total_litros = (float)total_litros + litros;
>       total_kilometros = total_kilometros + kilometros;
>
>    }
>
> return 0;
>
> }
>
> El programa hace lo que se le pide, para hacerlo me basé en algunos de
> los recursos aprendidos hasta el momento del mencionado ejercicio, es
> decir: el uso de la instrucción while, el uso del número centinela y el
> uso de la biblioteca estándar <stdio.h>. El problema es que para que
> funcione me vi obligado a anidar la función if dentro de while y
> escribir return 0 al final de if. De otro modo, cada vez que ingresaba
> el número centinela, el progrma me pedía ingresar los kilómetros
> recorridos y recién entonces mostraba el promedio general (resultado
> incorrecto) y salía. Sospecho que la solución que encontré es una
> aberración al lenguaje, un mal uso de las funciones while, if y return
> 0. Esta duda me mantiene bloqueado y hasta que no la despeje, no debo
> continuar.
>
>                 El ejercicio es el 3:17. Ejercicio 17 del capítulo 3 del
>                 manual "Como programar en C/C++" por H. M. Deitel y P.
>                 J. Deitel.
>
>
>
> ------------ próxima parte ------------
> Se ha borrado un adjunto en formato HTML...
> URL: <
> http://listas.conclase.net/pipermail/cconclase_listas.conclase.net/attachments/20140607/e9943a51/attachment-0001.html
> >
>
> ------------------------------
>
> Message: 2
> Date: Sat, 7 Jun 2014 21:47:25 -0500
> From: Julio Cesar <ggeatom en gmail.com>
> To: "Lista de correo sobre C y C++" <cconclase en listas.conclase.net>
> Subject: Re: [C con Clase] Duda con while y número centinela.
> Message-ID:
>         <CACp34Wp3tqAUuRDRPpPpxmDac1ZXNFicz=
> STbsZbBVoW_XUOeQ en mail.gmail.com>
> Content-Type: text/plain; charset="utf-8"
>
> Muy buenas tardes Sebastián, revisando tu código no encuentro nada extraño,
> lo que pasa es que quizas hay un detalle que no contemplaste, pues cuando
> te pide los litros y tu le tecleas -1, si el centinela no existiera
> entonces ejecutaria las demas sentencias calculando en este caso el
> promedio en listros de este tanque, y el resto de almacenamientos que
> realizas, y vendria terminando hasta el siguiente ciclo, es decir sin ese
> centinela ejecutas un ciclo de más, es por eso que tambien los resultados
> no salen bien cuando lo quitas.
>
> Lo que te aconsejo para que te quede mas claro, es que tomes un ejemplo con
> 2 tanques y despues termines con -1, pero lo realices a mano y sentencia a
> sentencia como lo hace la computadora, así te quedaria mas claro.
>
> Espero me haberme explicado bien, saludos.
>
> Julio Cesar.
>
>
>
>
> El 7 de junio de 2014, 15:44, Sebastián <toledanosebastian en gmail.com>
> escribió:
>
> >  Buenas tardes a todos. Recientemente me interese por la programación
> > orientada a objetos y sabiamente me recomendaron comenzar con lenguaje C.
> > Descubrí que me apasiona este tipo de lenguaje.
> > Necesito ayuda con el siguiente ejercicio:
> >
> > código en C:
> > #include <stdio.h>
> >
> > /*
> > * El objetivo es obtener el promedio de n kilometros por litro de
> > combustible para cada tanque.
> > * El promedio general de n kilometros por litro, obtenido de todos los
> > tanques y salir.
> > */
> >
> > int main(){
> >
> >    float prom_T, prom_G, litros, total_litros=0;
> >    int kilometros, total_kilometros=0, contador=0, tanque=0;
> >
> >    while(litros != -1){
> >       contador = ++tanque;
> >       printf("TANQUE %d: Ingrese los litros consumidos(ó -1): ",
> contador);
> >       scanf("%f", &litros);
> >
> >          if(litros == -1){
> >             prom_G = total_kilometros / total_litros;
> >             printf("\n\nEl promedio gral. de K/L es: %.1f Kilometros",
> > prom_G);
> >             return 0;
> >          }
> >
> >       printf("..........Ingrese los kilometros recorridos: ");
> >       scanf("%d", &kilometros);
> >       prom_T = (float) kilometros / litros;
> >       printf("..........Los kilometros/litro para este tanque fueron:
> %.1f
> > Kilometros\n\n", prom_T);
> >       total_litros = (float)total_litros + litros;
> >       total_kilometros = total_kilometros + kilometros;
> >
> >    }
> >
> > return 0;
> >
> > }
> >
> > El programa hace lo que se le pide, para hacerlo me basé en algunos de
> los
> > recursos aprendidos hasta el momento del mencionado ejercicio, es decir:
> el
> > uso de la instrucción while, el uso del número centinela y el uso de la
> > biblioteca estándar <stdio.h>. El problema es que para que funcione me vi
> > obligado a anidar la función if dentro de while y escribir return 0 al
> > final de if. De otro modo, cada vez que ingresaba el número centinela, el
> > progrma me pedía ingresar los kilómetros recorridos y recién entonces
> > mostraba el promedio general (resultado incorrecto) y salía. Sospecho que
> > la solución que encontré es una aberración al lenguaje, un mal uso de las
> > funciones while, if y return 0. Esta duda me mantiene bloqueado y hasta
> que
> > no la despeje, no debo continuar.
> >
> >  El ejercicio es el 3:17. Ejercicio 17 del capítulo 3 del manual "Como
> > programar en C/C++" por H. M. Deitel y P. J. Deitel.
> >
> >
> >
> >
> > _______________________________________________
> > Lista de correo Cconclase Cconclase en listas.conclase.net
> >
> http://listas.conclase.net/mailman/listinfo/cconclase_listas.conclase.net
> > Bajas: http://listas.conclase.net/index.php?gid=2&mnu=FAQ
> >
> ------------ próxima parte ------------
> Se ha borrado un adjunto en formato HTML...
> URL: <
> http://listas.conclase.net/pipermail/cconclase_listas.conclase.net/attachments/20140607/91ec4874/attachment.html
> >
>
> ------------------------------
>
> Message: 3
> Date: Sat, 07 Jun 2014 20:39:59 -0300
> From: Sebastian Oldani <sebastianoldani en gmail.com>
> To: Lista de correo sobre C y C++ <cconclase en listas.conclase.net>
> Subject: Re: [C con Clase] Duda con while y número centinela.
> Message-ID: <5393A2CF.4020009 en gmail.com>
> Content-Type: text/plain; charset=UTF-8; format=flowed
>
> jaja, no lo veo como una aberración del lenguaje.
> pero si queres tener un solo return podes reemplazar el "return 0;" que
> esta adentro del if, por un "continue;" que hace lo que esperas que haga.
>
> Para que lo tomes con calma te dejo esta frase:
> ?Si compila está bien, si echa a andar es perfecto.?
> [Original: If it compiles, it is good, if it boots up it is perfect.]
> ?Linus Torvalds
>
> Suerte.
>
> El 07/06/14 17:44, Sebastián escribió:
> > Buenas tardes a todos. Recientemente me interese por la programación
> > orientada a objetos y sabiamente me recomendaron comenzar con lenguaje
> > C. Descubrí que me apasiona este tipo de lenguaje.
> > Necesito ayuda con el siguiente ejercicio:
> >
> > código en C:
> > #include <stdio.h>
> >
> > /*
> > * El objetivo es obtener el promedio de n kilometros por litro de
> > combustible para cada tanque.
> > * El promedio general de n kilometros por litro, obtenido de todos los
> > tanques y salir.
> > */
> >
> > int main(){
> >
> >     float prom_T, prom_G, litros, total_litros=0;
> >     int kilometros, total_kilometros=0, contador=0, tanque=0;
> >
> >     while(litros != -1){
> >        contador = ++tanque;
> >        printf("TANQUE %d: Ingrese los litros consumidos(ó -1): ",
> contador);
> >        scanf("%f", &litros);
> >
> >           if(litros == -1){
> >              prom_G = total_kilometros / total_litros;
> >              printf("\n\nEl promedio gral. de K/L es: %.1f Kilometros",
> > prom_G);
> >              return 0;
> >           }
> >
> >        printf("..........Ingrese los kilometros recorridos: ");
> >        scanf("%d", &kilometros);
> >        prom_T = (float) kilometros / litros;
> >        printf("..........Los kilometros/litro para este tanque fueron:
> > %.1f Kilometros\n\n", prom_T);
> >        total_litros = (float)total_litros + litros;
> >        total_kilometros = total_kilometros + kilometros;
> >
> >     }
> >
> > return 0;
> >
> > }
> >
> > El programa hace lo que se le pide, para hacerlo me basé en algunos de
> > los recursos aprendidos hasta el momento del mencionado ejercicio, es
> > decir: el uso de la instrucción while, el uso del número centinela y el
> > uso de la biblioteca estándar <stdio.h>. El problema es que para que
> > funcione me vi obligado a anidar la función if dentro de while y
> > escribir return 0 al final de if. De otro modo, cada vez que ingresaba
> > el número centinela, el progrma me pedía ingresar los kilómetros
> > recorridos y recién entonces mostraba el promedio general (resultado
> > incorrecto) y salía. Sospecho que la solución que encontré es una
> > aberración al lenguaje, un mal uso de las funciones while, if y return
> > 0. Esta duda me mantiene bloqueado y hasta que no la despeje, no debo
> > continuar.
> >
> >         El ejercicio es el 3:17. Ejercicio 17 del capítulo 3 del manual
> >         "Como programar en C/C++" por H. M. Deitel y P. J. Deitel.
> >
> >
> >
> >
> > _______________________________________________
> > Lista de correo Cconclase Cconclase en listas.conclase.net
> >
> http://listas.conclase.net/mailman/listinfo/cconclase_listas.conclase.net
> > Bajas: http://listas.conclase.net/index.php?gid=2&mnu=FAQ
> >
>
>
>
>
> ------------------------------
>
> Message: 4
> Date: Sat, 7 Jun 2014 21:51:05 -0430
> From: Yolmer Rosales <yolmer.rosales en gmail.com>
> To: "Lista de correo sobre C y C++" <cconclase en listas.conclase.net>
> Subject: Re: [C con Clase] Duda con while y número centinela.
> Message-ID:
>         <
> CAGTFLE-OEQGiTT2O6BCLMj_0Lww3bOWKtDHiih9z-DyaDKmJdQ en mail.gmail.com>
> Content-Type: text/plain; charset="utf-8"
>
> El 7 de junio de 2014, 16:14, Sebastián <toledanosebastian en gmail.com>
> escribió:
>
> >  Buenas tardes a todos. Recientemente me interese por la programación
> > orientada a objetos y sabiamente me recomendaron comenzar con lenguaje C.
> > Descubrí que me apasiona este tipo de lenguaje.
> >
>
> Hola bienvenido
> No es correcto C no es orientado a objetos debería ser C++ este código que
> muestras es programación estructurada no POO
>
> No veo nada malo en tu programa lo importante es que resolviste el problema
> tu mismo y cualquier mejora te la dará la experiencia, y la curiosidad que
> demuestras. Mientras tanto permíteme felicitarte.
>
> Necesito ayuda con el siguiente ejercicio:
> >
> > código en C:
> > #include <stdio.h>
> >
> > /*
> > * El objetivo es obtener el promedio de n kilometros por litro de
> > combustible para cada tanque.
> > * El promedio general de n kilometros por litro, obtenido de todos los
> > tanques y salir.
> > */
> >
> > int main(){
> >
> >    float prom_T, prom_G, litros, total_litros=0;
> >    int kilometros, total_kilometros=0, contador=0, tanque=0;
> >
> >    while(litros != -1){
> >       contador = ++tanque;
> >       printf("TANQUE %d: Ingrese los litros consumidos(ó -1): ",
> contador);
> >       scanf("%f", &litros);
> >
>
> No soy experto pero el uso del if creo que es inevitable porque lees dos
> veces del teclado dentro del while y tienes que parar inmediatamente
> aunque yo lo hubiese hecho un poco diferente tal vez un break y esto fuera
> del bucle
>
> >
>
> >
> >          if(litros == -1){
> >             prom_G = total_kilometros / total_litros;
> >             printf("\n\nEl promedio gral. de K/L es: %.1f Kilometros",
> > prom_G);
> >             return 0;
> >          }
> >
> >
> o tal vez un if aquí para no leer más del teclado si se introdujo la
> bandera
>              if(litros >=0){
>
>       printf("..........Ingrese los kilometros recorridos: ");
> >       scanf("%d", &kilometros);
> >       prom_T = (float) kilometros / litros;
> >       printf("..........Los kilometros/litro para este tanque fueron:
> %.1f
> > Kilometros\n\n", prom_T);
> >       total_litros = (float)total_litros + litros;
> >       total_kilometros = total_kilometros + kilometros;
> >
>                   }
>
> >
> >
>
>
> >    }
> >
> > return 0;
> >
> > }
> >
> > El programa hace lo que se le pide, para hacerlo me basé en algunos de
> los
> > recursos aprendidos hasta el momento del mencionado ejercicio, es decir:
> el
> > uso de la instrucción while, el uso del número centinela y el uso de la
> > biblioteca estándar <stdio.h>. El problema es que para que funcione me vi
> > obligado a anidar la función if dentro de while y escribir return 0 al
> > final de if. De otro modo, cada vez que ingresaba el número centinela, el
> > progrma me pedía ingresar los kilómetros recorridos y recién entonces
> > mostraba el promedio general (resultado incorrecto) y salía. Sospecho que
> > la solución que encontré es una aberración al lenguaje, un mal uso de las
> > funciones while, if y return 0. Esta duda me mantiene bloqueado y hasta
> que
> > no la despeje, no debo continuar.
> >
> >  El ejercicio es el 3:17. Ejercicio 17 del capítulo 3 del manual "Como
> > programar en C/C++" por H. M. Deitel y P. J. Deitel.
> >
> >
> Sólo continúa adelante y métete más en C++
>
> >
> >
> >
> ------------ próxima parte ------------
> Se ha borrado un adjunto en formato HTML...
> URL: <
> http://listas.conclase.net/pipermail/cconclase_listas.conclase.net/attachments/20140607/4a3d69c4/attachment.html
> >
>
> ------------------------------
>
> Subject: Pié de página del digest
>
> _______________________________________________
> Cconclase mailing list
> Cconclase en listas.conclase.net
> http://listas.conclase.net/mailman/listinfo/cconclase_listas.conclase.net
>
>
> ------------------------------
>
> Fin de Resumen de Cconclase, Vol 97, Envío 6
> ********************************************
>
------------ próxima parte ------------
Se ha borrado un adjunto en formato HTML...
URL: <http://listas.conclase.net/pipermail/cconclase_listas.conclase.net/attachments/20140608/fd03b897/attachment.html>


Más información sobre la lista de distribución Cconclase