[C con Clase] Número mayor y menor en bucle While

Davidson, Steven srd4121 en njit.edu
Sab Ene 12 03:12:39 CET 2013


Hola Óscar,

2013/1/11 Oscar Aparicio Holgado <enigma-si en hotmail.com>

>   Hola que tal.
>


Veamos el código fuente.

#include "std_lib_facilities.h"
>
> int main()
> {
>     double uno, mayor, menor, suma, metros;
>     string que;
>
>     int cantidad;
>
>     cantidad = 0;
>     suma = 0;
>     mayor = 0;
>     menor = 0;
>
>

El valor inicial de 'menor' puede traer problemas para el funcionamiento
del algoritmo. Deberías elegir un valor inicial que obligue al algoritmo a
asignar un valor válido para 'menor' en la primera iteración. Podrías
elegir un número muy elevado, como por ejemplo,

menor = DBL_MAX;

esta constante se #define en <cfloat>.

    while(cin>>uno>>que)
>
>     if(que == "cm")
>     {
>         metros = uno / 100;
>         que = "m";
>         cout << metros << que << endl;
>         cantidad = cantidad + 1;
>         suma = suma + metros;
>
>

Deberías acostumbrarte a usar los operadores de incremento y de incremento
y asignación:

cantidad++;
suma += metros;

         //menor = uno
>
>         if(uno > mayor)
>         {
>             mayor = uno;
>         }
>         else if(uno >= 0 || uno < menor)
>

Esto no va a funcionar como esperas. Básicamente, cada vez que un número no
sea el mayor, pero no sea negativo, se convierte en el menor. Esto no es
lógico. Por ejemplo,

1, 5, 10, 9

Al procesar 10, tendremos:

uno <-- 10
mayor <-- 10
menor <-- 0

Cuando pasemos a recoger el valor de 9, obtendremos esto:

uno <-- 9
mayor <-- 10
menor <-- 9

Obviamente, 9 no es el menor de todos los números de la lista.


Aparte de la solución dada previamente - usando 'DBL_MAX' - sugiero dar
valores iniciales a 'mayor' y a 'menor' que sean válidos. Esto significa
que estas variables deben guardar valores que pertenezcan a la lista
introducida. Para ello, realiza una primera lectura específica para dar
valores iniciales a 'mayor' y a 'menor', al igual que para 'suma'. Esto es,

// Caso particular: iteración #1
mayor = menor = suma = uno;

// Caso general: iteración #2 al #n
while( ... )
{
  ...
}

De esta forma, no hay que dar valores iniciales que no sean válidos, y
además no malgastamos la primera iteración sumando 0 (cero) a 'suma'.


Espero que esto te ayude.

Steven
------------ próxima parte ------------
Se ha borrado un adjunto en formato HTML...
URL: <http://listas.conclase.net/pipermail/cconclase_listas.conclase.net/attachments/20130111/399e1a27/attachment.html>


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