Título: Código fuente para sumar números enteros aleatorios Publicado por: UmbraNoche en 1 Abril 2012, 19:47 pm Damas y caballeros, este es mi primer aporte. Se trata de un programa que me habían dejado en la universidad como tarea. El enunciado de la tarea dice así: Realice un programa que llene dos arreglos unidimensionales de 10 elementos con valores aleatorios enteros de 1 a 15. En cada arreglo no puede existir el mismo número repetido, pero si puede existir en el otro arreglo. Cuando termina de llenar los arreglos debe mostrar su contenido uno a la par del otro, como se muestra a continuación:
Posicion Arreglo 1 Arreglo 2 1 10 8 2 15 7 3 1 6 4 6 4 5 12 9 6 9 11 .... Luego deberá sumar los resultados en un tercer arreglo tomando el primer elemento del arreglo 1 y sumarlo con el último elemento del arreglo 2, valore que irá en la posición 1 del arreglo 3. Al finalizar la suma de los elementos debe mostrar el resultado del tercer vector como se muestra a continuación: Posicion Arreglo 3 1 21 2 24 3 5 4 12 5 19 6 17 A cada les dejo el código fuente del programa. Me gustaría que opinen, den sugerencias. Yo apenas estoy empezando en el mundo de la programación. Así que todas sus sugerencias serán bienvenidas //Suma de arreglos. #include <iostream> using std::cout; using std::endl; #include <iomanip> using std::setw; #include <cstdlib> #include <ctime> // la función main comienza la ejecución del programa int main() { // se declara los arreglos int x[ 11 ] ; int y[ 11 ] ; int z[ 11 ] ; // se declara las variables int a1 = 0; int a2 = 0; srand( time( 0 ) ); // semilla generadora de números aleatorios cout << "Posicion" << setw( 17 ) << "Arreglo 1" << setw( 17 ) << "Arreglo 2" << "\n" << endl; for ( int i = 1; i < 11; i++ ) { a1 = (1 + rand() % 15); a2 = (1 + rand() % 15); int h = 0; int p = 0; // se declara estructuras de control para evitar que los números aleatorios se repitan while (h < i) { if (a1 != x[h]) { h++; } else { a1 =(1 + rand() % 15); h = 0; } } while (p < i) { if (a2 != y[p]) { p++; } else { a2 =(1 + rand() % 15); p = 0; } } //los arreglos se les asigna las varables x = a1; y = a2; cout << setw ( 9 ) << i << setw ( 16 ) << x[ i ] << setw ( 18 ) << y[ i ] << endl; } cout << "\n La suma de los Arreglos es:\n "; int haciaAdelante = 1; int haciaAtras = 11; // se declara una estructura de control para hacer la suma de los arreglos de forma diagonal for (haciaAdelante = 0; haciaAdelante < 11; haciaAdelante++) { z [haciaAdelante] = x[haciaAdelante] + y[haciaAtras]; haciaAtras--; } cout << "\nPosicion" << setw( 17 ) << "Arreglo 3" << "\n" << endl; for ( int n = 1; n <= 10; n++ ) cout << setw ( 9 ) << n << setw ( 16 ) << z[ n ] << endl; system("PAUSE"); return 0; } //fin de la función main Título: Re: Código fuente para sumar números enteros aleatorios Publicado por: s00rk en 1 Abril 2012, 20:26 pm Oooh nice, me gusto la forma que lo haces hehee mas esta partesita:
Código
Lo que yo cambiaria es al rellenar los arreglos y checar no repetidos, lo haria de la forma siguiente: Código
Aunque pues yo lo hice de 0 a 9, y tu de 1 a 10 hehehe al parecer no usas el index 0 hehehehe Título: Re: Código fuente para sumar números enteros aleatorios Publicado por: Runex en 3 Abril 2012, 15:43 pm Aquí te posteo el code en Python, he visto el tuyo y me he animado a hacer el mio en 10 minutitos antes de volver al instituto.
Código Por cierto, que año es y que carrera estás haciendo? :) Un saludo :) Título: Re: Código fuente para sumar números enteros aleatorios Publicado por: do-while en 3 Abril 2012, 19:25 pm ¡Buenas!
Buf... Esa forma de generar numeros aleatorios distintos en un intervalo es muy farragosa. Te propongo esta otra: Código
Aunque parezca mas largo, imagina que tienes que asignar N valores aleatorios distintos en un vector de N posiciones, en este caso, una vez que hayas introducido n valores, la probabilidad de repetir alguno de los valores introducidos es de n/N, es decir, cuanto mayor sea n, mayores posibilidades tendras de repetir alguno de los numeros introducidos, por lo que vuestros bucles se pueden repetir una cantidad de veces considerablemente mas alta de la necesaria. Por ejemplo en un vector de 100 posiciones, una vez introducidos 99 numeros, 99 de cada 100 veces generareis un numero repetido. Sin embargo, con el metodo que he propuesto, quitando la inicializacion del vector que contiene el origen de los datos, siempre realizareis la misma cantidad de iteraciones, asegurandoos de que nunca se repetiran los valores. La contrapartida del metodo que he utilizado es que utiliza mas memoria al tener un vector para almacenar todos los posibles datos. Si quereis luego hago una simulacion con vuestro metodo y dejo las estadisticas para que las veais. ¡Saludos! PD: Aqui una salida de la simulacion: Código: 10 valores entre 1 y 16. Media 86.00 iteraciones Y aqui el codigo fuente que he utilizado para hacerla: Código
¡Saludos de nuevo! Título: Re: Código fuente para sumar números enteros aleatorios Publicado por: Sagrini en 3 Abril 2012, 20:54 pm Wow! Jajaja...
Código
Título: Re: Código fuente para sumar números enteros aleatorios Publicado por: do-while en 4 Abril 2012, 00:41 am ¡Buenas!
Sagrini, si prestas atencion a los post anteriores, veras que esa es la forma en la que ellos estaban generando numeros aleatorios (no la misma, pero si basada en busquedas de numeros repetidos). Si miras la tabla que he dejado, veras que es muy ineficiente y cuanto mas crece el tamaño de los datos mas ineficiente se vuelve. Cuenta tu mismo las iteraciones que esta realizando el codigo que has puesto y luego las que realiza el codigo que he indicado, y comprobaras tu mismo, que estas generando muchisimas mas de las necesarias. ¡Saludos! |