elhacker.net cabecera Bienvenido(a), Visitante. Por favor Ingresar o Registrarse
¿Perdiste tu email de activación?.

 

 


Tema destacado: Como proteger una cartera - billetera de Bitcoin


+  Foro de elhacker.net
|-+  Programación
| |-+  Programación C/C++ (Moderadores: Eternal Idol, Littlehorse, K-YreX)
| | |-+  portafolium set my name for the example yes I from colombia
0 Usuarios y 1 Visitante están viendo este tema.
Páginas: 1 [2] 3 Ir Abajo Respuesta Imprimir
Autor Tema: portafolium set my name for the example yes I from colombia  (Leído 11,744 veces)
mr.blood

Desconectado Desconectado

Mensajes: 150


Ver Perfil
Re: simulacion con matriz bidimensional de 10x10
« Respuesta #10 en: 24 Mayo 2013, 10:37 am »

Leí:
la matriz debe contener 100 numeros positivos entre 1 y 100
Pero no ví:
Construir un programa que genere una matriz 10x10 esta debe ingresar numeros entre 1 y 1000 positivos aleatoriamente sin repetir numero (hasta aqui ya construi el programa)dentro de la matriz la pelota debe recorrer la matriz de la siguiente forma:

El segundo código que planteas ronda los 0.012s (máximo los 0.015s). Si haces las pruebas en el mismo PC la gráfica será la misma para todos los códigos, para bien o para mal.

Quitando los cout y los printf mi código anda sobre los 0.002s y el tuyo sobre los 0.006s ;).

Esta tarde intentaré arreglarlo para que funcione con más cifras ;).

Sa1uDoS


En línea

leosansan


Desconectado Desconectado

Mensajes: 1.314


Ver Perfil
Re: simulacion con matriz bidimensional de 10x10
« Respuesta #11 en: 24 Mayo 2013, 10:49 am »


Leí:Pero no ví:...................................................
Esta tarde intentaré arreglarlo para que funcione con más cifras ;).

Quedo a la espera de noticias, reconozco que para lo que querías, generar aleatorios entre 0 y 100 la idea es buena  ;-) ;-), pero al tener que elegir entre 0 y mil la cosa cambia. ¿Probastes el código como el tuyo pero con el do-while?. porque si comparastes con el post dode tomo los números de 0 a 1000 es lógico que el tiempo sea superior, ha de realizar comparaciones no siendo así en el que usa la clase vector. .....Esto de estar sin compilador un par de días me tiene hablado solo  :P

Saluditos!. .... ..




« Última modificación: 24 Mayo 2013, 15:37 pm por leosansan » En línea

leosansan


Desconectado Desconectado

Mensajes: 1.314


Ver Perfil
Re: simulacion con matriz bidimensional de 10x10
« Respuesta #12 en: 25 Mayo 2013, 22:08 pm »

.............................................................................................
Quitando los cout y los printf mi código anda sobre los 0.002s y el tuyo sobre los 0.006s ;).

Esta tarde intentaré arreglarlo para que funcione con más cifras;).


Tienes un "maquinón" para que te den esas cifras, o bien yo dejo de tener abiertas a la vez treinta páginas, mínimo, música y cuatro o cinco programas a la vez. ::)

Me picó la curiosidad e hice una comparativa de tiempos sin impresión, del puro y duro cálculo. Y estos son los resultados:

* Con tu código del if y matriz de 10x10 tomando sólo 100:



* Con el do-while del mío:



* Con la función de CCross:



* Con la función de CCross pero declarada como inline:



* Con mi do-while pero tomando aleatorios entre 1000:




Aquí me paro para un pequeño comentario.

La verdad es que la igualdad entre tu if y mi do-while es un resultado esperado pero lo que me sorprendió fue que con la función de CCross se obtenga un valor similar, teniendo en cuenta que hace uso de una llamada a la función para cada uno de los 100 valores aleatorios que se necesitan, Y más aún que con la función inline se obtenga el mismo valor que ella, ya que se presupone que al declararla como tal sustituye, si el compilador lo considera, las llamadas a la función por código dando como resultado un .exe mayor a costa de ganar en velocidad. ¿Qué ha pasado para que los valores obtenidos con el código con función, tanto con inline como sin ella, salgan tan igualados a los presumiblemente "más eficientes" códigos del if y del do-while'?.

Creo que la respuesta está aquí:



Se observa que los eficientes códigos if y do-while tienen tamaño considerablemente más pequeños que los códigos con función, es decir  "creo" que ha sustituido las llamadas a la función en el código "aún en el caso de no declararla como inline", con lo que compensa tamaño con velocidad !!!!.

Supongo que el aburrimiento y la curiosidad por saber qué pasa me han llevado a todo lo anterior.
:laugh:

Y para que no se diga, a continuación un ligero avance del problema que le propusieron a hxcbps y que ha originado todo este rollo. Pero antes "una imagen coloreada"de la salida del código que viene después:



Código
  1. /*generar una matriz de 10x10 con números
  2. no repetidos entre 1 y 10000 indicando
  3. el minimo y .............*/
  4.  
  5. #include <stdio.h>
  6. #include <stdlib.h>
  7. #include <time.h>
  8. #include <windows.h>
  9.  
  10. int color (int n);
  11.  
  12. int main()
  13. {
  14.        srand(time(NULL));
  15. int n,matriz[10][10]={0}, i=rand()%9+1, j=0, x, y,minimo=10001,i_min=0,j_min=0;
  16. /***************  CALCULO  ***********/
  17. do{
  18.  
  19. x=rand()%10;
  20. y=rand()%10;
  21. if(matriz[x][y]==0 ){
  22.            matriz[x][y]=i;
  23.            if (i<minimo)
  24.            {
  25.                minimo=i;
  26.                i_min=x;
  27.                j_min=y;
  28.            }
  29.          i+=rand()%18+1;
  30.            j++;
  31.        }
  32. }while (j<100);
  33. /***************  IMPRESION CON COLOR  ***********/
  34. for(i=0;i<10;i++)
  35. {
  36.        putchar('\n');
  37. for(j=0;j<10;j++)
  38.        {
  39.            if (i==i_min && j==j_min)
  40.                n=228;
  41.            else
  42.                n=113;
  43.            color (n);
  44.            printf(" %i ", matriz[i][j]);
  45.            color (7);
  46.            printf("\t");
  47.        }
  48. }
  49.    color (96);
  50.    printf("\n\nminimo = %d en la posicion ",minimo);
  51.    color (228);
  52.    printf(" (%d,%d) \n",i_min+1,j_min+1);
  53.    color (7);
  54.    return 0;
  55. }
  56. int color (int n)
  57. {
  58.        SetConsoleTextAttribute(GetStdHandle (STD_OUTPUT_HANDLE), n );
  59. }
  60.  

En este código "ya" se rellena la matriz de 10x10 con aleatorios entre 1 y 1000, así como se calcula el mínimo y su posición para que el amigo hxcbps pueda continuar con el resto de la tarea que me trae sin cuidado. En realidad lo que me ha resultado interesante es el cómo rellenar la dichosa matriz con números del 1 al 1000. Si alquien encuentra un método alternativo mejor, please comunicarlo pero tener en cuenta que lo he hecho sin realizar ninguna comparación.

Saluditos!. .... ..


« Última modificación: 27 Mayo 2013, 20:54 pm por leosansan » En línea

mr.blood

Desconectado Desconectado

Mensajes: 150


Ver Perfil
Re: simulacion con matriz bidimensional de 10x10
« Respuesta #13 en: 25 Mayo 2013, 23:19 pm »

Maquinón? Uso archlinux con LXDE sobre un Acer TravelMate 291. (Pentium M a 1.4Ghz)

Las pruebas de tiempos se hacen siempre sin nada más ejecutándose ;).

Sa1uDoS
En línea

leosansan


Desconectado Desconectado

Mensajes: 1.314


Ver Perfil
Re: simulacion con matriz bidimensional de 10x10
« Respuesta #14 en: 26 Mayo 2013, 00:51 am »

Maquinón? Uso archlinux con LXDE sobre un Acer TravelMate 291. (Pentium M a 1.4Ghz)

Las pruebas de tiempos se hacen siempre sin nada más ejecutándose ;).

Sa1uDoS

 ;-) ;-) ;-)

Lo siento pero soy una persona altamente HiperActiva, si no estoy en diez cosas a la vez me aburroo ...... ;) ;) ;)

Por cierto, ¿te gusto la solución para elegir 100 entre 1000 aleatoriamente y sin comparar?
;)

Un fuerte Saludo! .... ..
En línea

hxcbps

Desconectado Desconectado

Mensajes: 4


Ver Perfil
dfgfdfggdf
« Respuesta #15 en: 26 Mayo 2013, 01:59 am »

fdgfgfgdfgdfg
« Última modificación: 30 Mayo 2013, 19:41 pm por hxcbps » En línea

leosansan


Desconectado Desconectado

Mensajes: 1.314


Ver Perfil
Re: simulacion con matriz bidimensional de 10x10
« Respuesta #16 en: 26 Mayo 2013, 10:15 am »


ammm hay otra cosa leosansan no se porque me jenerra error en la funcion color(n); me dice en mi compilador dev c++
42 C:\Users\BPS\Desktop\matriz1.cpp `color' undeclared (first use this function)

y el otro error es
56 C:\Users\BPS\Desktop\matriz1.cpp `int color(int)' used prior to declaration


Dichosa manía de usar Dev-C++,¡ pásate a Code::Blocks!.

El error es porque hay que incluir justo después de los include la declaración de la función, esta línea en concreto:


Código
  1. int color (int n);

Saluditos!. ... ..


« Última modificación: 1 Junio 2013, 22:51 pm por leosansan » En línea

mr.blood

Desconectado Desconectado

Mensajes: 150


Ver Perfil
Re: simulacion con matriz bidimensional de 10x10
« Respuesta #17 en: 26 Mayo 2013, 11:25 am »

La idea es interesante, pero hay números que pueden salir repetidos. Donde haces i+=rand()%19; puede salir 0 i+=0 es i y se repetiría un número. Mi código no necesita IF's pero esos if le ahorran muchas iteraciones.

Acabo de reducir más el código. En tiempo van parecidos, tarda aprox. 1 s (a veces se va a 2 s) en llenar una matriz de 1000*1000.

Código
  1. #include <stdio.h>
  2. #include <stdlib.h>
  3. #include <string.h>
  4. #include <time.h>
  5.  
  6. #define MAX_X 10
  7.  
  8. #define MAX_Y 10
  9.  
  10. int main()
  11. {
  12. srand(time(NULL));
  13. int matriz[MAX_X][MAX_Y], i, j, x, y, k;
  14.  
  15. memset(matriz, -1, sizeof(int)*(MAX_X*MAX_Y));
  16.  
  17. for(i=0;i<(MAX_X*MAX_Y);)
  18. {
  19. x=rand()%MAX_X;
  20. y=rand()%MAX_Y;
  21. if(matriz[x][y]==-1)
  22. {
  23. matriz[x][y]=i;
  24. i++;
  25. }
  26. else
  27. {
  28. for(k=-1;k<=1;k++)
  29. {
  30. for(j=-1;j<=1;j++)
  31. {
  32. if(matriz[x+k][y+j]==-1 && (x+k>=0 && x+k<MAX_X) && (y+j>=0 && y+j<MAX_Y))
  33. {
  34. matriz[x+k][y+j]=i;
  35. i++;
  36. }
  37. }
  38. }
  39. }
  40.  
  41. }
  42.  
  43. //~ for(i=0;i<MAX_X;i++)
  44. //~ {
  45. //~ putchar('\n');
  46. //~ for(j=0;j<MAX_Y;j++)
  47. //~ printf("%i\t", matriz[i][j]);
  48. //~ }
  49.  
  50. return 0;
  51. }
  52.  



EDITO:

Código:
[mrblood@ACER Codigos]$ time ./numeros

real 0m1.020s
user 0m0.987s
sys 0m0.010s
[mrblood@ACER Codigos]$ time ./numeros

real 0m0.996s
user 0m0.957s
sys 0m0.010s
[mrblood@ACER Codigos]$ time ./numeros

real 0m0.904s
user 0m0.877s
sys 0m0.003s
[mrblood@ACER Codigos]$ time ./numeros

real 0m0.892s
user 0m0.860s
sys 0m0.007s

Sa1uDoS
« Última modificación: 26 Mayo 2013, 11:28 am por mr.blood » En línea

leosansan


Desconectado Desconectado

Mensajes: 1.314


Ver Perfil
Re: simulacion con matriz bidimensional de 10x10
« Respuesta #18 en: 26 Mayo 2013, 12:12 pm »

La idea es interesante, pero hay números que pueden salir repetidos. Donde haces i+=rand()%19; puede salir 0 i+=0 es i y se repetiría un número. Mi código no necesita IF's pero esos if le ahorran muchas iteraciones.

Gracias por la observación, se me fue ese gazapo que rectifico con

Código
  1. i+=rand()%18+1;

Me reconocerás que el trozo de mi código que hace el cálculo de los elementos de la matriz:

Código
  1. do{
  2.  
  3. x=rand()%10;
  4. y=rand()%10;
  5. if(matriz[x][y]==0 ){
  6.            matriz[x][y]=i;
  7.          i+=rand()%18+1;
  8.            j++;
  9.        }
  10. }while (j<100);

es cuando menos más "cortito" o fácil que el tuyo,al menos a simple vista y no entro ya en la eficiencia:

Código
  1. for(i=0;i<(MAX_X*MAX_Y);)
  2. {
  3. x=rand()%MAX_X;
  4. y=rand()%MAX_Y;
  5. if(matriz[x][y]==-1)
  6. {
  7. matriz[x][y]=i;
  8. i++;
  9. }
  10. else
  11. {
  12. for(k=-1;k<=1;k++)
  13. {
  14. for(j=-1;j<=1;j++)
  15. {
  16. if(matriz[x+k][y+j]==-1 && (x+k>=0 && x+k<MAX_X) && (y+j>=0 && y+j<MAX_Y))
  17. {
  18. matriz[x+k][y+j]=i;
  19. i++;
  20. }
  21. }
  22. }
  23. }
  24.  
  25. }
  26.  


así me aseguro siempre un incremento de al menos uno y me mantengo entre mil.


No me he fijado bien pero la salida del código que acabas de poner sólo da números entre 1 y 100 en lugar de entre 1 y 1000. Una salida de muestra del código que acabas de poner:

Código
  1. 77      78      74      35      75      65      50      44      60      85
  2.  
  3. 49      79      76      47      71      66      15      41      61      94
  4.  
  5. 80      81      5       45      43      46      62      63      64      88
  6.  
  7. 27      28      29      16      19      20      21      72      73      17
  8.  
  9. 30      6       7       8       22      0       23      83      33      84
  10.  
  11. 31      9       2       10      24      25      26      14      95      96
  12.  
  13. 42      11      12      13      39      40      52      4       34      18
  14.  
  15. 82      36      37      38      51      67      53      3       54      86
  16.  
  17. 98      97      89      32      70      68      55      56      1       87
  18.  
  19. 93      99      90      48      91      69      57      58      59      92
  20.  
  21. Process returned 0 (0x0)   execution time : 0.023 s
  22. Press any key to continue.

Por cierto, ya me dirás que "oscuros motivos"   ;)  te llevan a usar:

Código
  1. memset(matriz, -1, sizeof(int)*(MAX_X*MAX_Y));
  2.  

para inicializar la matriz, en lugar de usar:

Código
  1. int n,matriz[10][10]={0};

Conste que todo esto lo he tomado como un simple ejercicio de ingenio, sin piques ni maldades de por medio. ;-) ;-) ;-)

¡Un fuerte saludo mr.blood! .... ...
« Última modificación: 26 Mayo 2013, 20:17 pm por leosansan » En línea

mr.blood

Desconectado Desconectado

Mensajes: 150


Ver Perfil
Re: simulacion con matriz bidimensional de 10x10
« Respuesta #19 en: 26 Mayo 2013, 15:30 pm »

leosansan planteamos distintos problemas, yo sigo con llenar una matriz con todos los números sin que se repitan.

El código puede resumirse en (dentro del for):
Código
  1. x=rand()%MAX_X;
  2. y=rand()%MAX_Y;
  3. if(matriz[x][y]==-1)
  4. {
  5. matriz[x][y]=i;
  6. i++;
  7. }
  8.  



Tu alternativa para llenar de 0 a 1000 una matriz de 10x10 es muy ingeniosa, como ya dije mi código no hace eso ;).

Tranquilo que no lo tomo a mal, creo que la competencia es lo que nos hace mejorar, si nos conformamos con lo que sabemos o somos, no llegaremos jamás a ser los primeros!.

Sa1uDoS
En línea

Páginas: 1 [2] 3 Ir Arriba Respuesta Imprimir 

Ir a:  

Mensajes similares
Asunto Iniciado por Respuestas Vistas Último mensaje
Oferta de trabajo (Colombia)
Diseño Gráfico
[.:: NauJFracT ::.] 2 2,167 Último mensaje 25 Agosto 2006, 07:16 am
por [.:: NauJFracT ::.]
Para Colombia
Dudas Generales
Delt_hack 2 3,220 Último mensaje 13 Agosto 2010, 17:01 pm
por Delt_hack
BD de Colombia con http://emailpremiumcolombia.wix.com/masivo ES UNA ESTAFA
Bases de Datos
Graphixx 2 2,777 Último mensaje 1 Noviembre 2013, 08:11 am
por #!drvy
trabajar colombia
Foro Libre
blackboss2016 4 2,188 Último mensaje 20 Abril 2016, 00:06 am
por blackboss2016
Los internautas reaccionan al ‘No’ del plebiscito por la paz en Colombia
Noticias
wolfbcn 0 1,302 Último mensaje 3 Octubre 2016, 02:13 am
por wolfbcn
WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines