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

anonymous.mx anonymous.mx en gmail.com
Mie Sep 22 21:07:13 CEST 2010


Hola MuGliDaRk,

Modifiqué un codigo enviado anteriormente para hacer lo comentado en 4
pasos.

#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 con valores que contengan 3 decimales.
    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/21 anonymous.mx <anonymous.mx en gmail.com>

> 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 con valores que contengan 3 decimales.
> 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.
>
> Ejemplo:
>   # Aleat New Aleat Operacion realizada
>      No.01 161.855 42 042= redondear(161.855*0.260) No.02 73.949 19 019=
> redondear(73.949*0.260) No.03 15.814 4 004= redondear(15.814*0.260) No.04
> 28.350 7 007= redondear(28.35*0.260) No.05 105.447 27 027=
> redondear(105.447*0.260) No.06 126.852 33 033= redondear(126.852*0.260)
> No.07 113.734 30 030= redondear(113.734*0.260) No.08 31.948 8 008=
> redondear(31.948*0.260) No.09 126.060 33 033= redondear(126.06*0.260)
> No.10 110.066 29 029= redondear(110.066*0.260) No.11 177.311 46 046=
> redondear(177.311*0.260) No.12 50.574 13 013= redondear(50.574*0.260)
> No.13 25.202 7 007= redondear(25.202*0.260) No.14 163.395 42 042=
> redondear(163.395*0.260) No.15 172.220 45 045= redondear(172.22*0.260)
> No.16 71.573 19 019= redondear(71.573*0.260) No.17 49.154 13 013=
> redondear(49.154*0.260) No.18 98.523 26 026= redondear(98.523*0.260) No.19
> 136.967 36 036= redondear(136.967*0.260) No.20 86.608 21 021= 500 -
> suma(479)
>
>
> Saludos desde Villahermosa, 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/20100922/e2c5120c/attachment.html>


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