ayuda con la diagonal principal de una matriz para dejarla vacía

Iniciado por creiko, 1 Junio 2016, 16:20 PM

0 Miembros y 1 Visitante están viendo este tema.

creiko

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 (cpp) [Seleccionar]

#include<stdio.h>
#include<conio.h>
#include<stdlib.h>
#include<time.h>

//generar una matriz de 16x16 con números aleatorios  
//y la diagonal principal debe estar vacía o con cualquiera de los siguientes caracteres (*,/,+,-,%,&,$)

int main()
{
int i,j,a;
int m[16][16];
int w=16+1;

srand (time(NULL));
for(i=0;i<=15;i++)
{
for(j=0;j<=15;j++)
{
if(i==j)
{
m[i][j]=0;  
}
else
if(i==w-j)
{
m[i][j]=0;
}
else
{
m[i][j]=1+rand()%(9);
   }
}
}
printf("       e0  e1  e2  e3  e4  e5  e6  e7  e8  e9  e10  e11  e12  e13  e14  e15 \n");
for(i=0;i<=15;i++)
   {
    printf(" e %d",i);
    for(j=0;j<=15;j++)
    {
    printf("   %d  ",m[i][j]);
}
printf("\n\n");
   }
}

class_OpenGL

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:

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:

matriz[i][j] = caracteres[rand()%8];

Programador aficionado. Me quiero centrar en programar videojuegos. La API que uso para crearlos es OpenGL

geeke

Una posible solución
int main()
{
    int i, j, n = 16;
    char array[n][n];

    srand (time(NULL));

    for( i = 0; i < n; i++ )
        for( j = 0; j < n; j++ )
            array[i][j] = i==j ? "*/+-%&$"[rand()%7] : 1+rand()%9+'0';
    //Imprimir aqui
    return 0;
}