[C con Clase] Duda con while y número centinela.

Julio Cesar ggeatom en gmail.com
Dom Jun 8 04:47:25 CEST 2014


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>


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