<div dir="ltr"><div><div>Yo cambiaría la condición de salida.<br></div>En lugar de litros = -1 lo dejaria con litros = 0<br></div>Así evitaría la división por cero en kilometros / litro<br><br><div class="gmail_extra"><br>
<br><div class="gmail_quote">El 8 de junio de 2014, 4:51,  <span dir="ltr"><<a href="mailto:cconclase-request@listas.conclase.net" target="_blank">cconclase-request@listas.conclase.net</a>></span> escribió:<br><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">
Envíe los mensajes para la lista Cconclase a<br>
        <a href="mailto:cconclase@listas.conclase.net">cconclase@listas.conclase.net</a><br>
<br>
Para subscribirse o anular su subscripción a través de la WEB<br>
        <a href="http://listas.conclase.net/mailman/listinfo/cconclase_listas.conclase.net" target="_blank">http://listas.conclase.net/mailman/listinfo/cconclase_listas.conclase.net</a><br>
<br>
<br>
O por correo electrónico, enviando un mensaje con el texto "help" en<br>
el asunto (subject) o en el cuerpo a:<br>
        <a href="mailto:cconclase-request@listas.conclase.net">cconclase-request@listas.conclase.net</a><br>
<br>
Puede contactar con el responsable de la lista escribiendo a:<br>
        <a href="mailto:cconclase-owner@listas.conclase.net">cconclase-owner@listas.conclase.net</a><br>
<br>
Si responde a algún contenido de este mensaje, por favor, edite la<br>
linea del asunto (subject) para que el texto sea mas especifico que:<br>
"Re: Contents of Cconclase digest...". Además, por favor, incluya en<br>
la respuesta sólo aquellas partes del mensaje a las que está<br>
respondiendo.<br>
<br>
<br>
Asuntos del día:<br>
<br>
   1. Duda con while y número centinela. (Sebastián)<br>
   2. Re: Duda con while y número centinela. (Julio Cesar)<br>
   3. Re: Duda con while y número centinela. (Sebastian Oldani)<br>
   4. Re: Duda con while y número centinela. (Yolmer Rosales)<br>
<br>
<br>
----------------------------------------------------------------------<br>
<br>
Message: 1<br>
Date: Sat, 07 Jun 2014 17:44:52 -0300<br>
From: Sebastián <<a href="mailto:toledanosebastian@gmail.com">toledanosebastian@gmail.com</a>><br>
To: <a href="mailto:cconclase@listas.conclase.net">cconclase@listas.conclase.net</a><br>
Subject: [C con Clase] Duda con while y número centinela.<br>
Message-ID: <1402173892.4257.29.camel@kroatoanh><br>
Content-Type: text/plain; charset="utf-8"<br>
<br>
Buenas tardes a todos. Recientemente me interese por la programación<br>
orientada a objetos y sabiamente me recomendaron comenzar con lenguaje<br>
C. Descubrí que me apasiona este tipo de lenguaje.<br>
Necesito ayuda con el siguiente ejercicio:<br>
<br>
código en C:<br>
 #include <stdio.h><br>
<br>
/*<br>
 * El objetivo es obtener el promedio de n kilometros por litro de<br>
combustible para cada tanque.<br>
 * El promedio general de n kilometros por litro, obtenido de todos los<br>
tanques y salir.<br>
*/<br>
<br>
int main(){<br>
<br>
   float prom_T, prom_G, litros, total_litros=0;<br>
   int kilometros, total_kilometros=0, contador=0, tanque=0;<br>
<br>
   while(litros != -1){<br>
      contador = ++tanque;<br>
      printf("TANQUE %d: Ingrese los litros consumidos(ó -1): ",<br>
contador);<br>
      scanf("%f", &litros);<br>
<br>
         if(litros == -1){<br>
            prom_G = total_kilometros / total_litros;<br>
            printf("\n\nEl promedio gral. de K/L es: %.1f Kilometros",<br>
prom_G);<br>
            return 0;<br>
         }<br>
<br>
      printf("..........Ingrese los kilometros recorridos: ");<br>
      scanf("%d", &kilometros);<br>
      prom_T = (float) kilometros / litros;<br>
      printf("..........Los kilometros/litro para este tanque fueron:<br>
%.1f Kilometros\n\n", prom_T);<br>
      total_litros = (float)total_litros + litros;<br>
      total_kilometros = total_kilometros + kilometros;<br>
<br>
   }<br>
<br>
return 0;<br>
<br>
}<br>
<br>
El programa hace lo que se le pide, para hacerlo me basé en algunos de<br>
los recursos aprendidos hasta el momento del mencionado ejercicio, es<br>
decir: el uso de la instrucción while, el uso del número centinela y el<br>
uso de la biblioteca estándar <stdio.h>. El problema es que para que<br>
funcione me vi obligado a anidar la función if dentro de while y<br>
escribir return 0 al final de if. De otro modo, cada vez que ingresaba<br>
el número centinela, el progrma me pedía ingresar los kilómetros<br>
recorridos y recién entonces mostraba el promedio general (resultado<br>
incorrecto) y salía. Sospecho que la solución que encontré es una<br>
aberración al lenguaje, un mal uso de las funciones while, if y return<br>
0. Esta duda me mantiene bloqueado y hasta que no la despeje, no debo<br>
continuar.<br>
<br>
                El ejercicio es el 3:17. Ejercicio 17 del capítulo 3 del<br>
                manual "Como programar en C/C++" por H. M. Deitel y P.<br>
                J. Deitel.<br>
<br>
<br>
<br>
------------ próxima parte ------------<br>
Se ha borrado un adjunto en formato HTML...<br>
URL: <<a href="http://listas.conclase.net/pipermail/cconclase_listas.conclase.net/attachments/20140607/e9943a51/attachment-0001.html" target="_blank">http://listas.conclase.net/pipermail/cconclase_listas.conclase.net/attachments/20140607/e9943a51/attachment-0001.html</a>><br>

<br>
------------------------------<br>
<br>
Message: 2<br>
Date: Sat, 7 Jun 2014 21:47:25 -0500<br>
From: Julio Cesar <<a href="mailto:ggeatom@gmail.com">ggeatom@gmail.com</a>><br>
To: "Lista de correo sobre C y C++" <<a href="mailto:cconclase@listas.conclase.net">cconclase@listas.conclase.net</a>><br>
Subject: Re: [C con Clase] Duda con while y número centinela.<br>
Message-ID:<br>
        <CACp34Wp3tqAUuRDRPpPpxmDac1ZXNFicz=<a href="mailto:STbsZbBVoW_XUOeQ@mail.gmail.com">STbsZbBVoW_XUOeQ@mail.gmail.com</a>><br>
Content-Type: text/plain; charset="utf-8"<br>
<br>
Muy buenas tardes Sebastián, revisando tu código no encuentro nada extraño,<br>
lo que pasa es que quizas hay un detalle que no contemplaste, pues cuando<br>
te pide los litros y tu le tecleas -1, si el centinela no existiera<br>
entonces ejecutaria las demas sentencias calculando en este caso el<br>
promedio en listros de este tanque, y el resto de almacenamientos que<br>
realizas, y vendria terminando hasta el siguiente ciclo, es decir sin ese<br>
centinela ejecutas un ciclo de más, es por eso que tambien los resultados<br>
no salen bien cuando lo quitas.<br>
<br>
Lo que te aconsejo para que te quede mas claro, es que tomes un ejemplo con<br>
2 tanques y despues termines con -1, pero lo realices a mano y sentencia a<br>
sentencia como lo hace la computadora, así te quedaria mas claro.<br>
<br>
Espero me haberme explicado bien, saludos.<br>
<br>
Julio Cesar.<br>
<br>
<br>
<br>
<br>
El 7 de junio de 2014, 15:44, Sebastián <<a href="mailto:toledanosebastian@gmail.com">toledanosebastian@gmail.com</a>><br>
escribió:<br>
<br>
>  Buenas tardes a todos. Recientemente me interese por la programación<br>
> orientada a objetos y sabiamente me recomendaron comenzar con lenguaje C.<br>
> Descubrí que me apasiona este tipo de lenguaje.<br>
> Necesito ayuda con el siguiente ejercicio:<br>
><br>
> código en C:<br>
> #include <stdio.h><br>
><br>
> /*<br>
> * El objetivo es obtener el promedio de n kilometros por litro de<br>
> combustible para cada tanque.<br>
> * El promedio general de n kilometros por litro, obtenido de todos los<br>
> tanques y salir.<br>
> */<br>
><br>
> int main(){<br>
><br>
>    float prom_T, prom_G, litros, total_litros=0;<br>
>    int kilometros, total_kilometros=0, contador=0, tanque=0;<br>
><br>
>    while(litros != -1){<br>
>       contador = ++tanque;<br>
>       printf("TANQUE %d: Ingrese los litros consumidos(ó -1): ", contador);<br>
>       scanf("%f", &litros);<br>
><br>
>          if(litros == -1){<br>
>             prom_G = total_kilometros / total_litros;<br>
>             printf("\n\nEl promedio gral. de K/L es: %.1f Kilometros",<br>
> prom_G);<br>
>             return 0;<br>
>          }<br>
><br>
>       printf("..........Ingrese los kilometros recorridos: ");<br>
>       scanf("%d", &kilometros);<br>
>       prom_T = (float) kilometros / litros;<br>
>       printf("..........Los kilometros/litro para este tanque fueron: %.1f<br>
> Kilometros\n\n", prom_T);<br>
>       total_litros = (float)total_litros + litros;<br>
>       total_kilometros = total_kilometros + kilometros;<br>
><br>
>    }<br>
><br>
> return 0;<br>
><br>
> }<br>
><br>
> El programa hace lo que se le pide, para hacerlo me basé en algunos de los<br>
> recursos aprendidos hasta el momento del mencionado ejercicio, es decir: el<br>
> uso de la instrucción while, el uso del número centinela y el uso de la<br>
> biblioteca estándar <stdio.h>. El problema es que para que funcione me vi<br>
> obligado a anidar la función if dentro de while y escribir return 0 al<br>
> final de if. De otro modo, cada vez que ingresaba el número centinela, el<br>
> progrma me pedía ingresar los kilómetros recorridos y recién entonces<br>
> mostraba el promedio general (resultado incorrecto) y salía. Sospecho que<br>
> la solución que encontré es una aberración al lenguaje, un mal uso de las<br>
> funciones while, if y return 0. Esta duda me mantiene bloqueado y hasta que<br>
> no la despeje, no debo continuar.<br>
><br>
>  El ejercicio es el 3:17. Ejercicio 17 del capítulo 3 del manual "Como<br>
> programar en C/C++" por H. M. Deitel y P. J. Deitel.<br>
><br>
><br>
><br>
><br>
> _______________________________________________<br>
> Lista de correo Cconclase <a href="mailto:Cconclase@listas.conclase.net">Cconclase@listas.conclase.net</a><br>
> <a href="http://listas.conclase.net/mailman/listinfo/cconclase_listas.conclase.net" target="_blank">http://listas.conclase.net/mailman/listinfo/cconclase_listas.conclase.net</a><br>
> Bajas: <a href="http://listas.conclase.net/index.php?gid=2&mnu=FAQ" target="_blank">http://listas.conclase.net/index.php?gid=2&mnu=FAQ</a><br>
><br>
------------ próxima parte ------------<br>
Se ha borrado un adjunto en formato HTML...<br>
URL: <<a href="http://listas.conclase.net/pipermail/cconclase_listas.conclase.net/attachments/20140607/91ec4874/attachment.html" target="_blank">http://listas.conclase.net/pipermail/cconclase_listas.conclase.net/attachments/20140607/91ec4874/attachment.html</a>><br>

<br>
------------------------------<br>
<br>
Message: 3<br>
Date: Sat, 07 Jun 2014 20:39:59 -0300<br>
From: Sebastian Oldani <<a href="mailto:sebastianoldani@gmail.com">sebastianoldani@gmail.com</a>><br>
To: Lista de correo sobre C y C++ <<a href="mailto:cconclase@listas.conclase.net">cconclase@listas.conclase.net</a>><br>
Subject: Re: [C con Clase] Duda con while y número centinela.<br>
Message-ID: <<a href="mailto:5393A2CF.4020009@gmail.com">5393A2CF.4020009@gmail.com</a>><br>
Content-Type: text/plain; charset=UTF-8; format=flowed<br>
<br>
jaja, no lo veo como una aberración del lenguaje.<br>
pero si queres tener un solo return podes reemplazar el "return 0;" que<br>
esta adentro del if, por un "continue;" que hace lo que esperas que haga.<br>
<br>
Para que lo tomes con calma te dejo esta frase:<br>
?Si compila está bien, si echa a andar es perfecto.?<br>
[Original: If it compiles, it is good, if it boots up it is perfect.]<br>
?Linus Torvalds<br>
<br>
Suerte.<br>
<br>
El 07/06/14 17:44, Sebastián escribió:<br>
> Buenas tardes a todos. Recientemente me interese por la programación<br>
> orientada a objetos y sabiamente me recomendaron comenzar con lenguaje<br>
> C. Descubrí que me apasiona este tipo de lenguaje.<br>
> Necesito ayuda con el siguiente ejercicio:<br>
><br>
> código en C:<br>
> #include <stdio.h><br>
><br>
> /*<br>
> * El objetivo es obtener el promedio de n kilometros por litro de<br>
> combustible para cada tanque.<br>
> * El promedio general de n kilometros por litro, obtenido de todos los<br>
> tanques y salir.<br>
> */<br>
><br>
> int main(){<br>
><br>
>     float prom_T, prom_G, litros, total_litros=0;<br>
>     int kilometros, total_kilometros=0, contador=0, tanque=0;<br>
><br>
>     while(litros != -1){<br>
>        contador = ++tanque;<br>
>        printf("TANQUE %d: Ingrese los litros consumidos(ó -1): ", contador);<br>
>        scanf("%f", &litros);<br>
><br>
>           if(litros == -1){<br>
>              prom_G = total_kilometros / total_litros;<br>
>              printf("\n\nEl promedio gral. de K/L es: %.1f Kilometros",<br>
> prom_G);<br>
>              return 0;<br>
>           }<br>
><br>
>        printf("..........Ingrese los kilometros recorridos: ");<br>
>        scanf("%d", &kilometros);<br>
>        prom_T = (float) kilometros / litros;<br>
>        printf("..........Los kilometros/litro para este tanque fueron:<br>
> %.1f Kilometros\n\n", prom_T);<br>
>        total_litros = (float)total_litros + litros;<br>
>        total_kilometros = total_kilometros + kilometros;<br>
><br>
>     }<br>
><br>
> return 0;<br>
><br>
> }<br>
><br>
> El programa hace lo que se le pide, para hacerlo me basé en algunos de<br>
> los recursos aprendidos hasta el momento del mencionado ejercicio, es<br>
> decir: el uso de la instrucción while, el uso del número centinela y el<br>
> uso de la biblioteca estándar <stdio.h>. El problema es que para que<br>
> funcione me vi obligado a anidar la función if dentro de while y<br>
> escribir return 0 al final de if. De otro modo, cada vez que ingresaba<br>
> el número centinela, el progrma me pedía ingresar los kilómetros<br>
> recorridos y recién entonces mostraba el promedio general (resultado<br>
> incorrecto) y salía. Sospecho que la solución que encontré es una<br>
> aberración al lenguaje, un mal uso de las funciones while, if y return<br>
> 0. Esta duda me mantiene bloqueado y hasta que no la despeje, no debo<br>
> continuar.<br>
><br>
>         El ejercicio es el 3:17. Ejercicio 17 del capítulo 3 del manual<br>
>         "Como programar en C/C++" por H. M. Deitel y P. J. Deitel.<br>
><br>
><br>
><br>
><br>
> _______________________________________________<br>
> Lista de correo Cconclase <a href="mailto:Cconclase@listas.conclase.net">Cconclase@listas.conclase.net</a><br>
> <a href="http://listas.conclase.net/mailman/listinfo/cconclase_listas.conclase.net" target="_blank">http://listas.conclase.net/mailman/listinfo/cconclase_listas.conclase.net</a><br>
> Bajas: <a href="http://listas.conclase.net/index.php?gid=2&mnu=FAQ" target="_blank">http://listas.conclase.net/index.php?gid=2&mnu=FAQ</a><br>
><br>
<br>
<br>
<br>
<br>
------------------------------<br>
<br>
Message: 4<br>
Date: Sat, 7 Jun 2014 21:51:05 -0430<br>
From: Yolmer Rosales <<a href="mailto:yolmer.rosales@gmail.com">yolmer.rosales@gmail.com</a>><br>
To: "Lista de correo sobre C y C++" <<a href="mailto:cconclase@listas.conclase.net">cconclase@listas.conclase.net</a>><br>
Subject: Re: [C con Clase] Duda con while y número centinela.<br>
Message-ID:<br>
        <<a href="mailto:CAGTFLE-OEQGiTT2O6BCLMj_0Lww3bOWKtDHiih9z-DyaDKmJdQ@mail.gmail.com">CAGTFLE-OEQGiTT2O6BCLMj_0Lww3bOWKtDHiih9z-DyaDKmJdQ@mail.gmail.com</a>><br>
Content-Type: text/plain; charset="utf-8"<br>
<br>
El 7 de junio de 2014, 16:14, Sebastián <<a href="mailto:toledanosebastian@gmail.com">toledanosebastian@gmail.com</a>><br>
escribió:<br>
<br>
>  Buenas tardes a todos. Recientemente me interese por la programación<br>
> orientada a objetos y sabiamente me recomendaron comenzar con lenguaje C.<br>
> Descubrí que me apasiona este tipo de lenguaje.<br>
><br>
<br>
Hola bienvenido<br>
No es correcto C no es orientado a objetos debería ser C++ este código que<br>
muestras es programación estructurada no POO<br>
<br>
No veo nada malo en tu programa lo importante es que resolviste el problema<br>
tu mismo y cualquier mejora te la dará la experiencia, y la curiosidad que<br>
demuestras. Mientras tanto permíteme felicitarte.<br>
<br>
Necesito ayuda con el siguiente ejercicio:<br>
><br>
> código en C:<br>
> #include <stdio.h><br>
><br>
> /*<br>
> * El objetivo es obtener el promedio de n kilometros por litro de<br>
> combustible para cada tanque.<br>
> * El promedio general de n kilometros por litro, obtenido de todos los<br>
> tanques y salir.<br>
> */<br>
><br>
> int main(){<br>
><br>
>    float prom_T, prom_G, litros, total_litros=0;<br>
>    int kilometros, total_kilometros=0, contador=0, tanque=0;<br>
><br>
>    while(litros != -1){<br>
>       contador = ++tanque;<br>
>       printf("TANQUE %d: Ingrese los litros consumidos(ó -1): ", contador);<br>
>       scanf("%f", &litros);<br>
><br>
<br>
No soy experto pero el uso del if creo que es inevitable porque lees dos<br>
veces del teclado dentro del while y tienes que parar inmediatamente<br>
aunque yo lo hubiese hecho un poco diferente tal vez un break y esto fuera<br>
del bucle<br>
<br>
><br>
<br>
><br>
>          if(litros == -1){<br>
>             prom_G = total_kilometros / total_litros;<br>
>             printf("\n\nEl promedio gral. de K/L es: %.1f Kilometros",<br>
> prom_G);<br>
>             return 0;<br>
>          }<br>
><br>
><br>
o tal vez un if aquí para no leer más del teclado si se introdujo la bandera<br>
             if(litros >=0){<br>
<br>
      printf("..........Ingrese los kilometros recorridos: ");<br>
>       scanf("%d", &kilometros);<br>
>       prom_T = (float) kilometros / litros;<br>
>       printf("..........Los kilometros/litro para este tanque fueron: %.1f<br>
> Kilometros\n\n", prom_T);<br>
>       total_litros = (float)total_litros + litros;<br>
>       total_kilometros = total_kilometros + kilometros;<br>
><br>
                  }<br>
<br>
><br>
><br>
<br>
<br>
>    }<br>
><br>
> return 0;<br>
><br>
> }<br>
><br>
> El programa hace lo que se le pide, para hacerlo me basé en algunos de los<br>
> recursos aprendidos hasta el momento del mencionado ejercicio, es decir: el<br>
> uso de la instrucción while, el uso del número centinela y el uso de la<br>
> biblioteca estándar <stdio.h>. El problema es que para que funcione me vi<br>
> obligado a anidar la función if dentro de while y escribir return 0 al<br>
> final de if. De otro modo, cada vez que ingresaba el número centinela, el<br>
> progrma me pedía ingresar los kilómetros recorridos y recién entonces<br>
> mostraba el promedio general (resultado incorrecto) y salía. Sospecho que<br>
> la solución que encontré es una aberración al lenguaje, un mal uso de las<br>
> funciones while, if y return 0. Esta duda me mantiene bloqueado y hasta que<br>
> no la despeje, no debo continuar.<br>
><br>
>  El ejercicio es el 3:17. Ejercicio 17 del capítulo 3 del manual "Como<br>
> programar en C/C++" por H. M. Deitel y P. J. Deitel.<br>
><br>
><br>
Sólo continúa adelante y métete más en C++<br>
<br>
><br>
><br>
><br>
------------ próxima parte ------------<br>
Se ha borrado un adjunto en formato HTML...<br>
URL: <<a href="http://listas.conclase.net/pipermail/cconclase_listas.conclase.net/attachments/20140607/4a3d69c4/attachment.html" target="_blank">http://listas.conclase.net/pipermail/cconclase_listas.conclase.net/attachments/20140607/4a3d69c4/attachment.html</a>><br>

<br>
------------------------------<br>
<br>
Subject: Pié de página del digest<br>
<br>
_______________________________________________<br>
Cconclase mailing list<br>
<a href="mailto:Cconclase@listas.conclase.net">Cconclase@listas.conclase.net</a><br>
<a href="http://listas.conclase.net/mailman/listinfo/cconclase_listas.conclase.net" target="_blank">http://listas.conclase.net/mailman/listinfo/cconclase_listas.conclase.net</a><br>
<br>
<br>
------------------------------<br>
<br>
Fin de Resumen de Cconclase, Vol 97, Envío 6<br>
********************************************<br>
</blockquote></div><br></div></div>