Ayuda en C (no C++)

#1
Necesito ayuda en un codigo que si compila, pero no se ejecuta, el codigo se "supone" que declara un arreglo n x m y e imprime en el cuadro inferior izquierdo, el producto de (n*m) , luego en el de arriba (n*m)-1 y asi susesivamente (en forma de espiral), hasta llegar al centro

NECSITO AYUDA PARA VER QUIEN SABE CUAL ES MI ERROR O SI SABEN OTRA FORMA DE IMPLEMENTARLO

GRACIAS

Código:

#include <stdio.h>
#include <stdlib.h>
#define ren 3
#define col 3
int main(){

int lim_supr,lim_inf,lim_derecho,lim_izq,a,b,c,d,e,f,m=1,r,i,j,n;

int x[ren][col];
lim_supr=0; lim_inf=ren;lim_derecho=col;lim_izq=0;

r=ren*col;

while(r>0){



for(i=ren-m,j=0;i>=lim_supr;i--){
x[j]=r;
r--;


}


for(a=0,b=col;b<lim_derecho;b++){
x[a]=r;
r--;

}



for(c=1,d=lim_derecho;c<lim_inf;c++){
x[c][d]=r;
r--;

}




for(e=lim_inf,f=lim_derecho-m;f<lim_izq;f--){
x[e][f]=r;
r--;

}lim_supr++;
j++;
lim_derecho--;
a++;
lim_inf--;
lim_izq++;
m++;

}


for(i=0;i<ren;i++){
system("PAUSE");
for(j=0;j<col;j++){

printf("%d",x[j]);

}
printf("\n");
}
system("PAUSE");

return 0;

}
 

Zephyros

Bovino de la familia
#2
Lo compilé con GCC sin problemas, pero al ejecutarlo, me aparece el mensaje de error:

Código:
Segmentation fault
Lee esto:

Código:
http://en.wikipedia.org/wiki/Segmentation_fault
Aunque desconozco si es el mismo error en tu caso.
 
#3
Tu algoritmo es un poco extraño, pero te marca error por que estas leyendo memoria que no te corresponde, tus limites derecho e inferior los declaraste igual que el ancho y alto de la matriz, pero recuerda que la matriz comienza en 0, es decir, solo puedes leer de 0 al 2 y el tres ya no corresponde a la memora que reservaste, además que en uno de tus for se cicla tu programa, no necesitas tantas variables, puede reutilizar “i” y “j” en los for.

Ya corregido quedaría así:

#include <stdio.h>
#include <stdlib.h>
#define ren 3
#define col 3
int main()
{
int lim_supr,lim_inf,lim_derecho,lim_izq,r,i,j;
int x[ren][col];

lim_supr=0; lim_inf=ren-1;lim_derecho=col-1;lim_izq=0;

r=ren*col;

while( r > 0)
{
for(i = lim_inf , j=lim_izq ; i >= lim_supr;i--)
{
x[j] = r;
r--;
}

lim_izq++;

for(i = lim_supr , j=lim_izq ; j <= lim_derecho;j++)
{
x[j] = r;
r--;
}
lim_supr++;

for(i = lim_supr , j=lim_derecho ; i <= lim_inf; i++)
{
x[j] = r;
r--;
}
lim_derecho--;

for(i = lim_inf , j=lim_derecho ; j >= lim_izq;j--)
{
x[j] = r;
r--;
}
lim_inf--;
}

for(i=0;i<ren;i++)
{
for(j=0;j<col;j++)
{
printf("%d ",x[j]);
}
printf("\n");
}
system("PAUSE");

return 0;
}

Lo probé una matriz de 10x10 y si funciono
 
Arriba