matriz espiral

Bahamut
20 de Abril del 2005
hola... pongo este post para ver si alguien sabe como se hace la matriz espiral (o envolvente) y la matriz desenvolvente yo tengo la espiral pero no me muestra el ultimo numero osea el centro del espiral ... entonces a ver si alguien la tiene o me ayuda a saber que le falta a mi codigo este es:

#include <conio.h>
#include <stdio.h>
#include <iostream.h>
void main ( )
{ int C[20][20],A,B,a,b,r,num,opc,i,j,k,l;
int S[20][20],e,d,f,M,N,t,u,v,w;
do
{ clrscr ( );
cout << "1. Matriz Envolvente o Espiral "<<endl;
cout << "2. Matriz Desenvolvente "<<endl;
cout << "3. salir "<<endl;
cout << "DIGITE OPCION: ";
cin >>opc;
switch (opc)
{ case 1: cout <<"dimension ";
cin >>num;
B=1; A=num; r=1;
while (r<(num*num))
{ for (i=B;i<=A-1;i++)
C[i][B]=r++;
for (j=B;j<=A-1;j++)
C[A][j]=r++;
for (k=A;k>=B+1;k--)
C[k][A]=r++;
for (l=A;l>=B+1;l--)
C[B][l]=r++;
B++;A--;
C[3][3]=r;

}
cout<<"la matriz envolvente es "<<endl;
for (a=1;a<=num;a++)
{ for (b=1;b<=num;b++)
printf ("%4d",C[b][a]);
printf ("n");
}
break;
/* case 2: cout <<"dimension ";
cin >> num;
f=(num+1)/2;
C[f][f]=1;
N=f-1;
M=f+1;
r=2;
while (r<(num*num))
{ for (t=b+1;t<=M;t++)
C[t][N]=r++;
for (u=N+1;u<=M;u++)
C[M][u]=r++;
for (v=M-1;v>=N;v--)
C[v][M]=r++;
for (w=M-1;w>=N;w--)
C[N][w]=r++;
N--; M++;
}
cout <<"la matriz desenvolvente es "<<endl;
for (e=1;e<=num;e++)
{ for (d=1;d<=num;d++)
printf ("%4d",C[e][d]);
printf("n");
}
break;*/
}
getch ( );
}
while (opc!=3);
}

si alguien sabe que le debo arreglar al case 1 le agradezco...

el case 2 esta en comentario ya que es supuestamente la desenvolvente pero no me da ... pido que si alguien la tiene y me hace el favor la ponga como respuesta o me diga que le debo hacer a mi codigo para que este funcione... gracias...

Noel Solw
20 de Abril del 2005
A continuacion, un programa que genera una matriz de numeros en espiral :


// program espiral.
// rellenar una matriz NxN en espiral.
// 8/4/2005
// written in Borland CPP ver 4.5

#include <conio.h>
#include <iostream.h>
#include <iomanip.h>
#include <stdlib.h>

#define N 5

void Show(int a[][N])
{
for(int i = 0; i < N; i++)
{
for(int j = 0; j < N; j++)
cout << setw(5) << a[i][j];
cout << endl;
}
cout << endl;
} // SHOW

void Process()
{
int a[N][N],i,j,k = 1;
for(int delta = 1; delta < N/2 + 1; delta++)
{
i = j = delta - 1;
for(;j < N-delta;j++)
a[i][j] = k++;
for(;i < N-delta;i++)
a[i][j] = k++;
for(;j >= delta;j--)
a[i][j] = k++;
for(;i >= delta;i--)
a[i][j] = k++;
}
if(N%2)
a[N/2][N/2] = k;
Show(a);
} // PROCESS

int main()
{
Process();
cout << "end of program - good bye ! ! !n";
return 0;
} // MAIN


Bahamut
20 de Abril del 2005
socio gracias por eso pero que pena decirle esto es que me gustaria saber porque el mio no sirve le agradezco si por ese codigo pero no me podria ayudar a mirar mi codigo gracias de nuevo