Foro de elhacker.net

Programación => Programación C/C++ => Mensaje iniciado por: creiko en 25 Mayo 2016, 07:12 am



Título: matriz 5*5 no me da error pero no compila
Publicado por: creiko en 25 Mayo 2016, 07:12 am
Buenas lo que tengo que hacer es una matriz de 5* 5 = 65 por todas su columnas , filas y diagonales

tengo este codigo de 3*3= 15 por todo lado, le cambio a  5 *5 =65 pero no me corre ya lo revise linea por linea y no logro verlo si me pueden ayudar lo agradeceria


Codigo 3 * 3 =15
Código
  1. #include<stdio.h>
  2. #include<conio.h>
  3. #include<stdlib.h>
  4. #include<time.h>
  5.  
  6. main()
  7. {
  8. int s1,s2,s3,s4,s5,s6,s7,s8,m[3][3],i,j,a,num1,num2,num3,num4,num5,num6,num7,num8,num9;
  9. srand (time(NULL));
  10. do
  11. {
  12. a=0;
  13. num1=0;
  14. num2=0;
  15. num3=0;
  16. num4=0;
  17. num5=0;
  18. num6=0;
  19. num7=0;
  20. num8=0;
  21. num9=0;
  22. s1=0;
  23. s2=0;
  24. s3=0;
  25. s4=0;
  26. s5=0;
  27. s6=0;
  28. s7=0;
  29. s8=0;
  30. for(i=0;i<=2;i++)
  31. {
  32. for(j=0;j<=2;j++)
  33. {
  34. do
  35. {
  36. m[i][j]=rand()%9+1;
  37. }
  38. while((m[i][j]==num1) or (m[i][j]==num2) or (m[i][j]==num3) or (m[i][j]==num4) or (m[i][j]==num5) or
  39. (m[i][j]==num6) or (m[i][j]==num7) or (m[i][j]==num8));
  40. num1=m[0][0];
  41. num2=m[0][1];
  42. num3=m[0][2];
  43. num4=m[1][0];
  44. num5=m[1][1];
  45. num6=m[1][2];
  46. num7=m[2][0];
  47. num8=m[2][1];
  48. num9=m[2][2];
  49. }
  50. }
  51. s1=num1+num2+num3;
  52. s2=num4+num5+num6;
  53. s3=num7+num8+num9;
  54. s4=num1+num4+num7;
  55. s5=num2+num5+num8;
  56. s6=num3+num6+num9;
  57. s7=num1+num5+num9;
  58. s8=num2+num5+num7;
  59. //printf("%d ",m[i][j]);
  60. }
  61. while((s1!=15) or (s2!=15) or (s3!=15) or (s4!=15) or (s5!=15) or (num5!=5));
  62. for(i=0;i<3;i++)
  63. {
  64. for(j=0;j<3;j++)
  65. {
  66. printf("%d ",m[i][j]);
  67. }
  68. printf("\n");
  69. }
  70. getch();
  71. }
  72.  



Ahora dejo el codigo 5 *5 =65
ayuda en el error por favor urgente
Código
  1. #include<stdio.h>
  2. #include<conio.h>
  3. #include<stdlib.h>
  4. #include<time.h>
  5.  
  6. main()
  7. {
  8. int s1,s2,s3,s4,s5,s6,s7,s8,s9,s10,s11,s12,m[5][5],i,j,a,num1,num2,num3,num4,num5,num6,num7,num8,num9;
  9. int num10,num11,num12,num13,num14,num15,num16,num17,num18,num19,num20,num21,num22,num23,num24,num25;
  10. srand (time(NULL));
  11. do
  12. {
  13. a=0;
  14. num1=0;
  15. num2=0;
  16. num3=0;
  17. num4=0;
  18. num5=0;
  19. num6=0;
  20. num7=0;
  21. num8=0;
  22. num9=0;
  23. num10=0;
  24. num11=0;
  25. num12=0;
  26. num13=0;
  27. num14=0;
  28. num15=0;
  29. num16=0;
  30. num17=0;
  31. num18=0;
  32. num19=0;
  33. num20=0;
  34. num21=0;
  35. num22=0;
  36. num23=0;
  37. num24=0;
  38. num25=0;
  39.  
  40. s1=0;
  41. s2=0;
  42. s3=0;
  43. s4=0;
  44. s5=0;
  45. s6=0;
  46. s7=0;
  47. s8=0;
  48. s9=0;
  49. s10=0;
  50. s11=0;
  51. s12=0;
  52. for(i=0;i<=4;i++)
  53. {
  54. for(j=0;j<=4;j++)
  55. {
  56. do
  57. {
  58. m[i][j]=rand()%25+1;
  59. }
  60. while((m[i][j]==num1) or (m[i][j]==num2) or (m[i][j]==num3) or (m[i][j]==num4) or (m[i][j]==num5) or
  61. (m[i][j]==num6) or (m[i][j]==num7) or (m[i][j]==num8) or (m[i][j]==num9) or (m[i][j]==num10) or
  62. (m[i][j]==num11) or (m[i][j]==num12) or (m[i][j]==num13) or (m[i][j]==num14) or (m[i][j]==num15) or
  63. (m[i][j]==num16) or (m[i][j]==num17) or (m[i][j]==num18) or (m[i][j]==num19) or (m[i][j]==num20) or
  64. (m[i][j]==num21) or (m[i][j]==num22) or (m[i][j]==num23) or (m[i][j]==num24));
  65. num1=m[0][0];
  66. num2=m[0][1];
  67. num3=m[0][2];
  68. num4=m[0][3];
  69. num5=m[0][4];
  70. num6=m[1][0];
  71. num7=m[1][1];
  72. num8=m[1][2];
  73. num9=m[1][3];
  74. num10=m[1][4];
  75. num11=m[2][0];
  76. num12=m[2][1];
  77. num13=m[2][2];
  78. num14=m[2][3];
  79. num15=m[2][4];
  80. num16=m[3][0];
  81. num17=m[3][1];
  82. num18=m[3][2];
  83. num19=m[3][3];
  84. num20=m[3][4];
  85. num21=m[4][0];
  86. num22=m[4][1];
  87. num23=m[4][2];
  88. num24=m[4][3];
  89. num25=m[4][4];
  90. }
  91. }
  92. s1=num1+num2+num3+num4+num5;
  93. s2=num6+num7+num8+num9+num10;
  94. s3=num11+num13+num13+num14+num15;
  95. s4=num16+num17+num18+num19+num20;
  96. s5=num21+num22+num23+num24+num25;
  97.  
  98. s6=num1+num6+num11+num16+num21;
  99. s7=num2+num7+num13+num17+num22;
  100. s8=num3+num8+num13+num18+num23;
  101. s9=num4+num9+num14+num19+num24;
  102. s10=num5+num10+num15+num20+num25;
  103.  
  104. s11=num1+num7+num13+num18+num25;
  105. s12=num2+num21+num17+num13+num9;
  106. //printf("%d ",m[i][j]);
  107. }
  108. while((s1!=65) or (s2!=65) or (s3!=65) or (s4!=65) or (s5!=65) or (s6!=65) or (s7!=65) or (s8!=65) or (s9!=65) or (num13!=13));
  109. for(i=0;i<5;i++)
  110. {
  111. for(j=0;j<5;j++)
  112. {
  113. printf("%d ",m[i][j]);
  114. }
  115. printf("\n");
  116. }
  117. getch();
  118. }
  119.  
Gracias por la atencion


Título: Re: matriz 5*5 no me da error pero no compila
Publicado por: JavierScars en 25 Mayo 2016, 14:35 pm
A simple vista en la parte del for esta el error (creo) estas utilizando componentes del array que no están definidos si te dar cuenta estas con el for cambiándole el valor 25 veces a cada componente del array... El for sólo debería englobar al do while para darle valores al array... Luego si lo deberías poder usar.

Lo otro que te recomiendo es meter esos números en un array y usar más for, así quedaría más legible el código.

Saludos


Título: Re: matriz 5*5 no me da error pero no compila
Publicado por: creiko en 25 Mayo 2016, 14:54 pm
podrias ayudarme en esa parte te lo agradeceria


Título: Re: matriz 5*5 no me da error pero no compila
Publicado por: LaiaxanIV en 25 Mayo 2016, 22:06 pm
Que tiene que hacer el código exactamente?
A ver si te podemos ayudar a rellenar esa matriz que no parece que se llene correctamente.


Título: Re: matriz 5*5 no me da error pero no compila
Publicado por: creiko en 25 Mayo 2016, 23:19 pm
bueno

la matriz va 5*5
con números desde el 1 a 25  sin repetirse que debe dar como resultado 65 en sus columnas , filas y diagonales.

como en el ejemplo del 3*3 que va dese 1 a 9 ( el numero 5 se mantiene en el centro, los demás números al rededor se rotan sin repetirse y dan como resultado 15) corre el programa que dejo ahí arriba y lo veras.



lo que quiero en ves quede 15 debe dar 65
5*5 va desde 1 a 25 ( el numero 13 se debe mantener en el centro, los demas numeros al rededor cambian de posicion sin repetirse y deben dar como resultado 65)


hice los mismo que en e 3*3
cambie a 5*5 y ice tal cual esta en el código anterior no me arroja ningun error pero no me compila


Título: Re: matriz 5*5 no me da error pero no compila
Publicado por: BloodSharp en 26 Mayo 2016, 00:50 am
El código no lo entendí para nada lo que se suponga que haga... pero a simple vista se ven el mismo error en varios while... Reemplaza todos los or por ||


B#


Título: Re: matriz 5*5 no me da error pero no compila
Publicado por: tincopasan en 26 Mayo 2016, 01:09 am
este es un ejercicio muy viejo de resolución de matrices, nunca lo hubiese hecho como el tuyo y me da fiaca leer todo el código pero aporto uno recontraconocido:

Código
  1. #include <stdio.h>
  2.    #include <stdlib.h>
  3.    #define CUANTOS 5
  4.    int main(int argc, char *argv[])
  5.    {
  6.        int Matriz[CUANTOS][CUANTOS];
  7.        int contador=0;
  8.        int x=0;
  9.        int y=0;
  10.        int vx=0;
  11.        int vy=0;
  12.        int limite=CUANTOS*CUANTOS;
  13.        int limitex = CUANTOS - 1;
  14.        int limitey = CUANTOS - 1;
  15.        for( x=0 ; x<CUANTOS ; x++)
  16.        {
  17.           for( y=0 ; y<CUANTOS ; y++ )
  18.             {
  19.                  Matriz[x][y] = 0;
  20.            }
  21.        }
  22.        x = CUANTOS / 2;
  23.        y = 0;
  24.        for(contador=1;contador<=limite;contador++)
  25.        {
  26.            Matriz[y][x] = contador;
  27.            vx = x;
  28.            vy = y;
  29.            x++;
  30.            if( x > limitex ) x = 0;
  31.            y--;
  32.            if( y < 0 ) y = limitey;
  33.            if (Matriz[y][x]>0)
  34.            {
  35.                x = vx ;
  36.                y = vy +1 ;
  37.            }
  38.        }
  39.        printf("\n Matriz 5x5 \n");
  40.        for( x=0 ; x<CUANTOS ; x++)
  41.        {
  42.             for( y=0 ; y<CUANTOS ; y++ )
  43.             {
  44.                  printf("|%5d|",Matriz[x][y]);
  45.             }
  46.             printf("\n");
  47.        }
  48.        system("PAUSE");
  49.      return 0;
  50.    }
  51.  
  52.  

supongo que es eso lo que buscas.


Título: Re: matriz 5*5 no me da error pero no compila
Publicado por: creiko en 26 Mayo 2016, 07:29 am
ese codigo lo tengo pero no me sirve
revisa el primer codigo 3*3
y veras las formas que quiero
pero en 5*5 amigo


Título: Re: matriz 5*5 no me da error pero no compila
Publicado por: MAFUS en 26 Mayo 2016, 18:14 pm
Generar un cuadrado mágico de 5x5 llenándolo de números aleatorios puede llevarte mucho tiempo... mucho.
De todas formas tienes unos cuántos fallos en el cálculo de las sx y de los numx
Tu dices
Código
  1. s3=num11+num13+num13+num14+num15;
sumas dos veces el num13 y debe ser
Código
  1. s3=num11+num12+num13+num14+num15;
En s9, s11 y s12 vuelves a tener sendos errores.

Después la condición while del primer do termina con m[j]==num24) cuándo tienes 25 números.
La condición while del último do solo miras la condición hasta s9, te quedan demás condiciones hasta s12.

De todas formas, una fuerza bruta para resolver el cuadrado puede llevar muchísimo tiempo.


Título: Re: matriz 5*5 no me da error pero no compila
Publicado por: HardForo en 26 Mayo 2016, 21:41 pm
Puede llevar mucho tiempo, excepto se use metaprogramación  :xD

Aqui (http://hardforo.com/thread-476-post-1324.html) puedes ver como se hace exactamente este mismo programa mediante un generador de código en C++


Título: Re: matriz 5*5 no me da error pero no compila
Publicado por: HardForo en 26 Mayo 2016, 23:21 pm
Acabo de corregir un pequeño error en el generador de código.

Salu2


Título: Re: matriz 5*5 no me da error pero no compila
Publicado por: creiko en 29 Mayo 2016, 00:04 am
Dime cual o manda foto de donde es el error