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

Yolmer Rosales yolmer.rosales en gmail.com
Dom Jun 8 04:21:05 CEST 2014


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>


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