Foro de elhacker.net

Programación => Programación C/C++ => Mensaje iniciado por: creiko en 1 Junio 2016, 16:20 pm



Título: ayuda con la diagonal principal de una matriz para dejarla vacía
Publicado por: creiko en 1 Junio 2016, 16:20 pm
no puedo hacer esta parte
la diagonal principal debe estar vacía o con caracteres especiales (*,/,+,-,%,&,$)
y lo único que puedo es llenarla de ceros


Código
  1. #include<stdio.h>
  2. #include<conio.h>
  3. #include<stdlib.h>
  4. #include<time.h>
  5.  
  6. //generar una matriz de 16x16 con números aleatorios  
  7. //y la diagonal principal debe estar vacía o con cualquiera de los siguientes caracteres (*,/,+,-,%,&,$)
  8.  
  9. int main()
  10. {
  11. int i,j,a;
  12. int m[16][16];
  13. int w=16+1;
  14.  
  15. srand (time(NULL));
  16. for(i=0;i<=15;i++)
  17. {
  18. for(j=0;j<=15;j++)
  19. {
  20. if(i==j)
  21. {
  22. m[i][j]=0;  
  23. }
  24. else
  25. if(i==w-j)
  26. {
  27. m[i][j]=0;
  28. }
  29. else
  30. {
  31. m[i][j]=1+rand()%(9);
  32.    }
  33. }
  34. }
  35. printf("       e0  e1  e2  e3  e4  e5  e6  e7  e8  e9  e10  e11  e12  e13  e14  e15 \n");
  36. for(i=0;i<=15;i++)
  37.    {
  38.     printf(" e %d",i);
  39.     for(j=0;j<=15;j++)
  40.     {
  41.     printf("   %d  ",m[i][j]);
  42. }
  43. printf("\n\n");
  44.    }
  45. }
  46.  


Título: Re: ayuda con la diagonal principal de una matriz
Publicado por: class_OpenGL en 1 Junio 2016, 17:51 pm
Sinceramente, no comprendo el problema. Primero, si quieres que la matriz tenga caracteres, ¿por qué guardas los valores en un arreglo bidimensional de enteros? ¿No sería mejor usar char m[16][16]? Entonces en la asignación podrías hacer m[ i][j] = '&' o el carácter especial que quieras.

Por otra parte, no comprendo tampoco el 'else if' del código. No entiendo su función.

Si lo que quieres hacer es que la diagonal principal tenga uno de los caracteres mencionados o el elemento esté vacío, podrías crear un arreglo de caracteres como este:

Código
  1. const char caracteres[] = {'\0', '*', '/', '+', '-', '%', '&', '$'};

y cuando vayas a asignar algo a un elemento de la diagonal, podrías generar un número aleatorio entre 0 y el número de caracteres especiales:

Código
  1. matriz[i][j] = caracteres[rand()%8];


Título: Re: ayuda con la diagonal principal de una matriz para dejarla vacía
Publicado por: geeke en 1 Junio 2016, 20:00 pm
Una posible solución
Código
  1. int main()
  2. {
  3.    int i, j, n = 16;
  4.    char array[n][n];
  5.  
  6.    srand (time(NULL));
  7.  
  8.    for( i = 0; i < n; i++ )
  9.        for( j = 0; j < n; j++ )
  10.            array[i][j] = i==j ? "*/+-%&$"[rand()%7] : 1+rand()%9+'0';
  11.    //Imprimir aqui
  12.    return 0;
  13. }