[C con Clase] Problema con numeros aleatorios para todos....

José Luis anonymous.mx en gmail.com
Vie Sep 24 19:56:11 CEST 2010


Hola MuGliDaRk,

Creo que la solución es mas sencilla.

1.- Generar los 20 numeros aleatorios con valores entre 1 y 180 y
almacenarlo en un array.
2.- Hacer la siguiente division (500 / la suma de los 20 numeros aleatorios)
llamar la variable factor
3.- Multiplicar los 19 primeros numeros por el factor  y redondear su valor
sin decimales
4.- El ultimo numero debe ser la diferencia de 500 - la suma de los primeros
19 numeros.

#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#include <time.h>
int main(int argc, char *argv[])
{

    int lista_numeros[19], c, suma;
    double factor;
    srand (time(NULL));
    suma=0;
//1.- Generar los 20 numeros aleatorios con valores entre 1 y 180 y
almacenarlo en un array.
    for( c = 0; c <=19; c++)
    {

       lista_numeros[c] = (int) rand() % 179;
       suma = suma + lista_numeros[c];
    }
//2.- Hacer la siguiente division (500 / la suma de los 20 numeros
aleatorios) llamar la variable factor
    factor = (double) (500.0 / suma);
    suma=0;
//3.- Multiplicar los 19 primeros numeros por el factor  y redondear su
valor sin decimales
    for( c = 0; c <=18; c++)
    {
       lista_numeros[c] = (int) lista_numeros[c] * factor;
       suma = suma + lista_numeros[c];
    }
//4.- El ultimo numero debe ser la diferencia de 500 - la suma de los
primeros 19 numeros.
    if ((500-suma)<=180) lista_numeros[19] = 500-suma;
    else
    {
       lista_numeros[19] = 180;
       for( c = 0; c <=18; c++)
       {
   if ((lista_numeros[c]+500-suma-180)<=180)
          {
             lista_numeros[c] = lista_numeros[c]+500-suma-180;
      break;
   }
       }
    }
   //se muestran los números
   suma=0;
   printf("---------------------------\n");
   printf("Lista de numeros aleatorios\n");
   printf("---------------------------\n");

    for ( c = 0 ; c <= 19 ; c++)

    {
       printf("%5d\n",lista_numeros[c]);
       suma=suma+lista_numeros[c];
    }
   // y la suma
   printf("---------------------------\n");
   printf("Suma de numeros aleatorios\n");
   printf("---------------------------\n");
   printf("%5d\n",suma);

   system("PAUSE");
    return EXIT_SUCCESS;
};

Saludos desde Villahermosa, Tabasco, Mexico, America, Tierra.
José Luis
2010/9/18 MuGliDaRk <muglidark en gmail.com>

> Pues bien, este problema se me ocurrio, a raiz, de una problematica, para
> llenar, varios miles de fichas con valores, aleatorios...... y con rangos
> definidos.
>
> El echo es que me parecio interesante, lanzarcelos a Uds. ya que parecia
> muy sencillo pero tenia cierto detallito, que la hacia, un buen problema.
>
> Estoy ideando otro problemita, de estos... es sin duda un buen ejercicio,
> para los que estan en entrenamiento.
>
>
> El 17 de septiembre de 2010 22:28, David <xdrtas en yahoo.es> escribió:
>
>  Hola, esta solución lo planteé yo! Un problema realmente interesante...
>> Tampoco sé quién lo sugirió pero me recordó a los problemas que me daban en
>> las clases de programación. Así que lo intenté, se aproxima bastante pero no
>> lo resuelve perfectamente ya que el último número puede pasar de 180, sin
>> embargo, ahí queda para que el que se anime lo mejore.
>>
>>
>> Un cordial saludo.
>>
>> David Lastra.
>>
>> http://xdrtas.coolpage.biz/
>> http://xdrtas.blogspot.com/
>>
>>
>>  ------------------------------
>> *De:* MuGliDaRk <muglidark en gmail.com>
>>
>> *Para:* Lista de correo sobre C y C++ <cconclase en listas.conclase.net>
>> *Enviado:* vie,17 septiembre, 2010 16:24
>>
>> *Asunto:* Re: [C con Clase] Problema con numeros aleatorios para
>> todos....
>>
>> Eh estado revisando las propuestas de todos uds.
>> *
>> Y quiero decirles, lo que mas se acerca a al enunciado del problema, es
>> esta.... lo pongo, ya que no me acuerdo, quien de uds. lo envio.
>> pero es buena esta propuesta.................... y la que mas se acerca-*
>>
>>
>> -------------------------------------------------------------------------------------------------------------------------------------------------------------------------
>> #include <iostream>
>>
>> using namespace std;
>>
>> const int LIMITE = 500;
>>
>> int main(int argc, char *argv[]) {
>>
>>     int NumAct = 0;
>>     int SumTot = 0;
>>     int SumLoc = 0;
>>     int ListNum[20];
>>     int Bucle = 1;
>>     bool Fin = false;
>>     bool flag = false;
>>
>>     while(Bucle <= 20)
>>     {
>>         SumLoc = 0;
>>
>>         if(Bucle == 20)
>>         {
>>             if(SumTot < LIMITE)
>>             {
>>                 NumAct = LIMITE - SumTot;
>>                 ListNum[Bucle-1] = NumAct;
>>                 SumTot = SumTot + NumAct;
>>                 cout << "\nEl ultimo valor debe ser: " << NumAct << endl;
>>             }
>>             else
>>             {
>>                 ListNum[Bucle-1] = 0;
>>             }
>>         }
>>         else
>>         {
>>             while(Fin == false)
>>             {
>>                 cout << "\nIntroduzca un valor entre 0 y 180: ";
>>                 cin >> NumAct;
>>                 if(NumAct < 0 || NumAct > 180)
>>                 {
>>                     cout << "\nError. Tiene que ser un valor entre 0 y
>> 180." << endl;
>>                     Fin = false;
>>                 }
>>                 else
>>                 {
>>                     SumLoc = SumTot + NumAct;
>>                     if(SumLoc > LIMITE)
>>                     {
>>                         SumLoc = LIMITE - SumTot;
>>                         cout << "\nError. El ultimo valor introducido
>> excede el limite. Numero Actual no puede ser mayor que: " << SumLoc << endl;
>>                         Fin = false;
>>                     }
>>                     else
>>                     {
>>                         Fin = true;
>>                         if(SumLoc == LIMITE && flag == false)
>>                         {
>>                             cout << "\nLa suma total ha llegado al
>> limite." << endl;
>>                             flag = true; //Para entrar sólo una vez...
>>                         }
>>                         ListNum[Bucle-1] = NumAct;
>>                         SumTot = SumTot + NumAct;
>>                     }
>>                 }
>>             }
>>             Fin = false;
>>         }
>>         Bucle += 1;
>>     }
>>
>>     cout << "\nEl resultado es: " << SumTot << endl;
>>     for(int i = 0; i < 20; i++)
>>     {
>>         cout << i+1 << " :" << ListNum[i] << endl;
>>     }
>>
>>     return 0;
>> }
>>
>>
>> -----------------------------------------------------------------------------------------------------------------------------------------------------------------------------
>>
>>
>> El 16 de septiembre de 2010 19:11, David <xdrtas en yahoo.es> escribió:
>>
>>>  Muchas gracias, fue divertido, gracias a tí por avisarme del error de
>>> los 0...
>>>
>>> Un cordial saludo.
>>>
>>>
>>> http://xdrtas.coolpage.biz/
>>> http://xdrtas.blogspot.com/
>>>
>>>
>>>  ------------------------------
>>> *De:* cristian garrido salas <misterharry147 en gmail.com>
>>> *Para:* Lista de correo sobre C y C++ <cconclase en listas.conclase.net>
>>> *Enviado:* jue,16 septiembre, 2010 18:59
>>>
>>> *Asunto:* Re: [C con Clase] Problema con numeros aleatorios para
>>> todos....
>>>
>>> excelente trabajo!! funciona de maravilla, gracias por tomarte la
>>> molestia
>>>
>>> Saludos
>>> El 15 de septiembre de 2010 01:43, David <xdrtas en yahoo.es> escribió:
>>>
>>>>  Hola de nuevo cristian garrido salas,
>>>> Ya corregí la aplicación para que cuando coloques sólo ceros al final te
>>>> ponga 500 o cualquier otro valor necesario para completar la sumatoria hasta
>>>> que sea igual a 500.
>>>> A qué dirección te lo envío? Debido a que me reclamaron que no debía
>>>> adjuntar archivos por este medio.
>>>>
>>>>
>>>> Un cordial saludo.
>>>>
>>>> David Lastra.
>>>>
>>>> http://xdrtas.coolpage.biz/
>>>> http://xdrtas.blogspot.com/
>>>>
>>>>  ------------------------------
>>>> *De:* cristian garrido salas <misterharry147 en gmail.com>
>>>> *Para:* Lista de correo sobre C y C++ <cconclase en listas.conclase.net>
>>>> *Enviado:* mié,15 septiembre, 2010 00:15
>>>> *Asunto:* Re: [C con Clase] Problema con numeros aleatorios para
>>>> todos....
>>>>
>>>>  el problema no especifíca que los números aleatorios sean generados
>>>>> por el programa o introducidos por el usuario, un usuario también puede
>>>>> introducir los números que quiera :-D
>>>>>
>>>>
>>>> jaja, es cierto xD
>>>>
>>>> y sobre el programa...
>>>> lo buscare a ver que onda, estos diagramas ayudan bastante a la hra de
>>>> plantearse la solucion a la problematica. gracias
>>>>
>>>>
>>>> _______________________________________________
>>>> 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
>>>>
>>>
>>>
>>>
>>>
>>>
>>>
>>> _______________________________________________
>>> 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
>>>
>>
>>
>>
>> --
>> Atte.
>> _______________________________
>>
>>
>> _______________________________
>>
>> *Antes de imprimir este mensaje, asegúrese de que sea necesario. Proteger
>> el medio ambiente está en nuestras manos.
>> Before you print this message, make sure it is necessary. It is in our
>> hands to protect our environment.
>> *
>>
>>
>>
>> _______________________________________________
>> 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
>>
>
>
>
> --
> Atte.
> _______________________________
>
>
> _______________________________
>
> *Antes de imprimir este mensaje, asegúrese de que sea necesario. Proteger
> el medio ambiente está en nuestras manos.
> Before you print this message, make sure it is necessary. It is in our
> hands to protect our environment.
> *
>
>
> _______________________________________________
> 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/20100924/323dd5c8/attachment.html>


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