• Viernes 15 de Noviembre de 2024, 14:00

Autor Tema:  Violación de Segmento  (Leído 2352 veces)

Erick_420

  • Nuevo Miembro
  • *
  • Mensajes: 3
    • Ver Perfil
Violación de Segmento
« en: Domingo 17 de Septiembre de 2017, 21:49 »
0
Hola a todos
El motivo del post es solicitar su ayuda.
Soy nuevo programando desde linux, programando en general.
Al realizar un programa que acomoda N números de forma ascendente (menor a menor), al ejecutarlo aparece Violación del segmento.
No puedo resolverlo.
Si alguien puede ayudar, se lo agradezco
Incluyo código en c


#include<stdio.h>
int main()
{
   int i,j,n,a[n],aux;
   printf("\tPrograma que acomoda n números de menor a mayorr\n\n");
   printf("Introduce cuantos números\t ");
      scanf("%d",&n);
   for (i=1;i<=n;i++)
   {
      printf("\nIntroduce un número\t");
         scanf("%d",&a[ i ]);
   }
   for (i=2;i<=n;i++)
   {
      for(j=n;j<=i;j--)
      {
         if(a[j]<a[j-1])
         {
            aux=a[j];
            a[j]=a[j-1];
            a[j-1]=aux;
         }
      }
   }
   for(i=1;i<=n;i++)
   {
      printf(" %d",a[  i ]);
   }
   return 0;
}

chenech

  • Miembro activo
  • **
  • Mensajes: 96
    • Ver Perfil
Re:Violación de Segmento
« Respuesta #1 en: Lunes 18 de Septiembre de 2017, 19:05 »
0
Hola, creo que en la definición del array a[n] no puedes poner n ya que no tiene ningún valor, tendrías que poner por ejemplo 10 y luego no permitir que se introduzca un valor máximo de 10 para evitar la violación. O bien definir a[n] después de aceptar n para poder darle un valor

Erick_420

  • Nuevo Miembro
  • *
  • Mensajes: 3
    • Ver Perfil
Re:Violación de Segmento
« Respuesta #2 en: Miércoles 20 de Septiembre de 2017, 23:14 »
0
Gracias por responder.
El error de hecho ya lo solucioné y es precisamente en esa parte que mencionas
El arreglo de a[n] es posible, sólo que primero debes introducir n antes de declarar a[n]
ese era mi error, declaré a[n] antes de conocer el valor de n
Pero ya está solucionado.

Erick_420

  • Nuevo Miembro
  • *
  • Mensajes: 3
    • Ver Perfil
Re:Violación de Segmento
« Respuesta #3 en: Miércoles 20 de Septiembre de 2017, 23:17 »
0
El código ya corregido esta aquí.



#include<stdio.h>
int main()
{
   int i,j,n,aux;
   printf("\n\t\tPrograma que acomoda n números de menor a mayorr\n\n");
   printf("\n\tIntroduce cuantos números\t ");
      scanf("%d",&n);
   int a[n];
   for (i=1;i<=n;i++)
   {
      printf("\n\tIntroduce un número\t");
         scanf("%d",&a);
   }
   for (i=2;i<=n;i++)
   {
      for(j=n;j>=i;j--)
      {
         if(a[j]>a[j-1])
         {
            aux=a[j];
            a[j]=a[j-1];
            a[j-1]=aux;
         }
      }
   }
   printf("\n\tLos números son:\n\t\t");
   for(i=1;i<=n;i++)
   {
      printf(" %d",a);
   }
   printf("\n");
   return 0;
}