[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