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

 

 


Tema destacado: Trabajando con las ramas de git (tercera parte)


+  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,619 veces)
leosansan


Desconectado Desconectado

Mensajes: 1.314


Ver Perfil
Re: simulacion con matriz bidimensional de 10x10
« Respuesta #20 en: 31 Mayo 2013, 09:52 am »

error.

El que abrió el tema le cambio el nombre así que decidí continuar la tarea abriendo otro tema con el nombre inicial actualizado simulacion con matriz bidimensional de 10x10 II

Saluditos!. ... ..



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

rir3760


Desconectado Desconectado

Mensajes: 1.639


Ver Perfil
Re: portafolium set my name for the example yes I from colombia
« Respuesta #21 en: 31 Mayo 2013, 18:14 pm »

Y para que esta aportación no se quede en unas meras disculpas, propongo el método alternativo de generar los números por comparación con los previamente introducidos, sería para sustituir por lo que hay "encima" de estas palabras:

Código
  1. for( i = 0; i < 100; i++){
  2.   numeros[i]=rand() % 1000+1;
  3.   for( j = i-1; j >=0 ; j--){
  4.      if(numeros[i] == numeros[j]){
  5.         i--;
  6.         break;
  7.      }
  8.   }
  9. }

Aunque seguro que se puede mejorar, la verdad no me termina de convencer el for con el if y el i-- con break
Se pueden evitar ambos cambiando el bucle interno y condicionando el incremento del contador. En C seria mas o menos así:
Código
  1. #define NUM_ELEM  1000
  2.  
  3. /* ... */
  4.  
  5. int num[NUM_ELEM];
  6. int i;
  7. int j;
  8.  
  9. /* ... */
  10.  
  11. i = 0;
  12. while (i < NUM_ELEM){
  13.   num[i] = rand() % (NUM_ELEM + 1);
  14.  
  15.   for (j = 0; j < i && num[j] != num[i]; j++)
  16.      ;
  17.  
  18.   if (i == j)
  19.      i++;
  20. }

----

Dejo una alternativa que me parece que es más eficaz. (No recorre toda la matriz para comprobar si existe o no el valor).

Como necesitas tener todos los números del 0-99 es mejor aleatorizar la posición que el valor (Creo). ;)

Código
  1. #include <stdio.h>
  2. #include <stdlib.h>
  3. #include <string.h>
  4. #include <time.h>
  5.  
  6. int main()
  7. {
  8. srand(time(NULL));
  9. int matriz[10][10], i, j, x, y;
  10.  
  11. memset(matriz, 0, sizeof(int)*100);
  12.  
  13. for(i=0;i<100;i++)
  14. {
  15. x=rand()%10;
  16. y=rand()%10;
  17. if(matriz[x][y]==0)
  18. {
  19. matriz[x][y]=i;
  20. }
  21. else
  22. {
  23. i--;
  24. continue;
  25. }
El problema es: en lugar de preocuparnos por repeticiones en los valores ahora nos preocupamos por repeticiones en las posiciones. Para el caso es lo mismo en el sentido de no evitar la verificación por repetidos.

----

Lamentablemente no tengo compilador en este momento y no puedo comparar, pero creo que siguiendo lo que planteaste de obtener aleatorios de 0 a 100, aunque recuerda que en realidad era "entre" 0 y 10000, el siguiente código podría ser de eficiencia/velocidad semejante.:
Código
  1. // ...
  2.  
  3. for (i = 0; i < 10; i++, k++){
  4.   for (j = 0; j < 10; j++, k++){
  5.      m[i][j] = n[k];
  6.      cout << m[i][j] << "\t";
  7.   }
  8.  
  9.   k--;
  10.   cout << endl;
  11. }
No es necesaria una variable para calcular la posición del array "n", en su lugar puedes calcular esta en base a los contadores de fila y columna:
Código
  1. // ...
  2.  
  3. for (i = 0; i < 10; i++){
  4.   for (j = 0; j < 10; j++){
  5.      m[i][j] = n[i * 10 + j];
  6.      cout << m[i][j] << "\t";
  7.   }
  8.  
  9.   cout << endl;
  10. }

Un saludo


En línea

C retains the basic philosophy that programmers know what they are doing; it only requires that they state their intentions explicitly.
--
Kernighan & Ritchie, The C programming language
amchacon


Desconectado Desconectado

Mensajes: 1.211



Ver Perfil
Re: simulacion con matriz bidimensional de 10x10
« Respuesta #22 en: 31 Mayo 2013, 20:29 pm »

Me picó la curiosidad e hice una comparativa de tiempos sin impresión, del puro y duro cálculo. Y estos son los resultados:
Hay una cosa muy importante ahí: Las flags de optimización

Normalmente suele haber una buena diferencia de tiempos si le metes un -O, -O2. A veces también puede pasar que le metas -O3 y te tarde hasta más... Estuve haciendo pruebas con un programa de fuerza bruta y me di cuenta que el mejor flag es el -O2.

También miré los códigos ensambladores, el compilador hace mucha optimización por su cuenta y a veces diferentes códigos genera salidas idénticas:

Código
  1. while(true);

Se traduce:

Código
  1. L43:
  2. jmp L43

Ahora lo cambiamos a esto:

Código
  1. bool cosa = true;
  2.  
  3. while(cosa);

Se traduce:

Código
  1. L43:
  2. jmp L43

¿Irónico no?
En línea

Por favor, no me manden MP con dudas. Usen el foro, gracias.

¡Visita mi programa estrella!

Rar File Missing: Esteganografía en un Rar
leosansan


Desconectado Desconectado

Mensajes: 1.314


Ver Perfil
Re: portafolium set my name for the example yes I from colombia
« Respuesta #23 en: 1 Junio 2013, 23:18 pm »

Se pueden evitar ambos cambiando el bucle interno y condicionando el incremento del contador. En C seria mas o menos así:
Código
  1. #define NUM_ELEM  1000
  2.  
  3. /* ... */
  4.  
  5. int num[NUM_ELEM];
  6. int i;
  7. int j;
  8.  
  9. /* ... */
  10.  
  11. i = 0;
  12. while (i < NUM_ELEM){
  13.   num[i] = rand() % (NUM_ELEM + 1);
  14.  
  15.   for (j = 0; j < i && num[j] != num[i]; j++)
  16.      ;
  17.  
  18.   if (i == j)
  19.      i++;
  20. }


Tengo que estar a la fuerza de acuerdo contigo, faltaría más. Pero en realidad estas haciendo lo mismo expresado de otra manera, sustituyes un for por un while y aprovechas el segundo for para meter en él la condición. Vamos, más cortito pero más de lo mismo.

El problema es: en lugar de preocuparnos por repeticiones en los valores ahora nos preocupamos por repeticiones en las posiciones. Para el caso es lo mismo en el sentido de no evitar la verificación por repetidos.

Sin duda vuelvo a estar de acuerdo contigo. Pero, cuando menos es curiosa/original la forma de obtener los elementos de la matriz sin repetir y aunque hace una comparación para ver si está o no repetido, sólo hace uso de un for y un else en lugar de mis dos for o tus dos bucles  while-for. Al César lo que es del César, me gustó la "elegancia/originalidad" de mr.blood de obtener los elmentos de la matriz, más inclusive que tu método. Claro que todo es cuestión de gustos.

No es necesaria una variable para calcular la posición del array "n", en su lugar puedes calcular esta en base a los contadores de fila y columna:

Ya, se me escapó el detallit0 y mira que lo he aplicado ya varias veces. Son las miserias de contestar rapidito en el foro, me recuerda las partidas rápidas de ajedrez donde después de terminarlas te das cuenta de las tonterías que has cometido por culpa de ir contra reloj. Hago propósito de enmienda y tomarme más tiempo en contestar. Aunque pensándolo mejor, eso haría perder cierto encanto a la participación en el foro, al menos para mi punto de vista.

Como siempre, gracias por tus aportaciones/puntos de vista, siempre en la misma línea y me refiero al nivelazo que tienes /aportas al foro.

Un fuerte abrazo amigo rir, espero no te tomes a mal mis poquísimas y levísimas discrepancias.


« Última modificación: 1 Junio 2013, 23:19 pm por leosansan » 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,136 Último mensaje 25 Agosto 2006, 07:16 am
por [.:: NauJFracT ::.]
Para Colombia
Dudas Generales
Delt_hack 2 3,180 Ú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,740 Último mensaje 1 Noviembre 2013, 08:11 am
por #!drvy
trabajar colombia
Foro Libre
blackboss2016 4 2,161 Ú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,274 Último mensaje 3 Octubre 2016, 02:13 am
por wolfbcn
WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines