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

omar mendoza omar.p9 en gmail.com
Sab Ene 12 14:48:35 CET 2013


Hola, con respecto a la comparación de la string

Qué es mejor?

if (que == "cm")
    algo

o

if (que.compare("cm") == 0)
     algo

Yo uso la segunda, de hecho no sabía que se podía hacer de la manera que lo
hace Oscar
Saludos




El 11 de enero de 2013 20:12, Davidson, Steven <srd4121 en njit.edu> escribió:

> 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
>
>
> _______________________________________________
> 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
>



-- 
Omar Jonathan Mendoza Bernal
"Las cicatrices nos recuerdan que el pasado fue real" Dr. Lecter en Dragón
Rojo
------------ próxima parte ------------
Se ha borrado un adjunto en formato HTML...
URL: <http://listas.conclase.net/pipermail/cconclase_listas.conclase.net/attachments/20130112/db7964ad/attachment.html>


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