Hola!

Registrándote como bakuno podrás publicar, compartir y comunicarte en privado con otros bakuos :D

Regístrame ya!

Ayuda en C (no C++)

Darking@zack

Becerro
Desde
2 Sep 2008
Mensajes
38
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;

}
 
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.
 
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
 
Volver
Arriba