int main(int argc, char** argv) {
int dim; // Esta variable almacena la dimensión de la matriz. Puede 3<=dim<=25
int f; // para indicar la fila de la matriz
int c; // para indicar la columna de la matriz.
int i; // va a ser mi contador
cout<<"Ingrese el valor de la matriz: ";
cin>> dim;
cout<< endl;
if (dim <= 25 && dim >=3 && dim%2=1){ // Condiciones pedidas por el enunciado: Matriz impar, 3 <= dim <= 25
int cuad[dim][dim]; // Creamos una matriz de la dimensión indicada
c= dim/2; // empezamos desde la columna central de la matriz, en la primer fila.
// cuad[c][f]=1;
while ( i<=dim*dim){
//Esto determina la cantidad de números que tenemos que colocar, en una matriz de 3x3, seran 9 número, en una de 4x4, seran 16, etc.
//El contador i, determinará el valor de cada registro de la matriz.
if (f<0) f=dim-1; // Esto es para que cuando llegamos a la fila superior, empecemos a cargar los datos desde la fila n-1 (ultima fila)
if (c==dim) {c==0;} // Cuando llegamos al extremo derecho, ultima columna, (dado por la dimensión de la matriz) empezaremos a cargar las columnas superiores, desde la fila 0
if (cuad[c][f]>=1 && cuad[c][f]<=dim*dim){ // Cuando llegamos a una celda, que tiene un valor, nos posicionamos en la celda debajo a la que cargamos anteriormente.
f=f+2;
c=c-1;
if((c>=dim)) {c=c-dim;}
if(f<0) {f=dim-1;}
cuad[c][f]=i;
}
else { cuad[c][f]=i;}
--c; ++f;
i++;
}
for (int i=0; i<dim; i++){
for (int j=0; j<dim; j++){
cout<<cuad[i][j]<< " ";
}
cout<<endl;
}
}
return 0;
}
¡Buenas! Antes que nada atención a la identación y el formato del texto, un código bien identado hace que la gente te quiera más (?).
Si bien no estoy seguro de la lógica, en una vista rápida te puedo decir que:
11: Tenés un 'dim%2=1', supongo que será ==.
En ningún momento les das un valor inicial a
i y a
f entonces te salteas todo el
while y te vas directo al
for que recorre la matriz para mostrar los valores.
Cualquier cosa, avisá. Supongo que vas a tener que hacer un par de correcciones más.