elhacker.net cabecera Bienvenido(a), Visitante. Por favor Ingresar o Registrarse
¿Perdiste tu email de activación?.

 

 


Tema destacado: (TUTORIAL) Aprende a emular Sentinel Dongle By Yapis


+  Foro de elhacker.net
|-+  Programación
| |-+  Programación C/C++ (Moderadores: Eternal Idol, Littlehorse, K-YreX)
| | |-+  intercalar elemento en vector
0 Usuarios y 1 Visitante están viendo este tema.
Páginas: [1] Ir Abajo Respuesta Imprimir
Autor Tema: intercalar elemento en vector  (Leído 9,622 veces)
m@o_614


Desconectado Desconectado

Mensajes: 389


Ver Perfil
intercalar elemento en vector
« en: 15 Agosto 2012, 20:50 pm »

Saludos estoy haciendo el siguiente código que me tiene que leer un vector de longitud n ordenado ascendente y un elemento x del mismo tipo que los
elementos del vector, intercalar x en el vector v de manera que siga ordenado.
todo esto sin utilizar funciones, solo arreglos

y llevo lo siguiente pero mi problema es en la parte que me tiene que intercalar el elemento x en el vector que no se si esta bien hecha

Código
  1. #include <stdio.h>
  2. #include <stdlib.h>
  3. #define MAX 20
  4.  
  5. /* Leer un vector de longitud n ordenado ascendente y un elemento x del mismo tipo que los
  6.    elementos del vector, intercalar x en el vector v de manera que siga ordenado.
  7. */
  8.  
  9. int main()
  10. {
  11.    int n,i,j,v[MAX],aux,x;
  12.    printf("Dame longitud del vector\n");
  13.    scanf("%d",&n);
  14.    printf("Imprimir vector\n");
  15.    for(i=0;i<n;i++)
  16.    {
  17.        printf("Imprimir elemento %d\n",i);
  18.        scanf("%d",&v[i]);
  19.    }
  20.    printf("Orden ascendente\n");
  21.    for(j=0;j<n;j++)
  22.    {
  23.        for(i=0;i<n;i++)
  24.        {
  25.            if(v[i+1]>v[i])
  26.            {
  27.                aux=v[i+1];
  28.                v[i+1]=v[i];
  29.                v[i]=aux;
  30.            }
  31.        }
  32.    }
  33.    for(i=0;i<n;i++)
  34.    {
  35.        printf("%d\n",v[i]);
  36.    }
  37.    printf("Dame elemento a intercalar\n");
  38.    scanf("%d",&x);
  39.    for(i=0;i<=n;i++)//Aqui le estoy creando una posicion mas al arreglo
  40.    {
  41.        if(x > v[i])
  42.        {
  43.            for(j=n;j>v[i];j--)
  44.            {
  45.                v[j]=v[j-1];/*Aqui recorro los elementos para insertar
  46.                               el elemento x*/
  47.            }
  48.        }
  49.    }
  50.    return 0;
  51. }
  52.  
me falta todavia la parte en la que se inserta el elemento x en la posicion correcta sin desordenar el vector

gracias


En línea

ecfisa

Desconectado Desconectado

Mensajes: 114


Ver Perfil
Re: intercalar elemento en vector
« Respuesta #1 en: 16 Agosto 2012, 05:19 am »

Hola.

Código
  1. #include <stdio.h>
  2. #include <stdlib.h>
  3.  
  4. int main(int argc, char* argv[]) {
  5.  int *vec, n_elem, elem, i, j;
  6.  
  7.  randomize();
  8.  
  9.  /* cantidad de elementos */
  10.  printf("Cantidad de enteros?: ");
  11.  scanf("%d",&n_elem);
  12.  while(getchar()!='\n');
  13.  
  14.  /* dimensionar arreglo */
  15.  vec = (int*)malloc((n_elem+1)*sizeof(int));
  16.  
  17.  /* ingreso aleatorio (0-99) */
  18.  for(i = 0; i < n_elem; i++) vec[i] = rand()%100;
  19.  
  20.  /* buble  */
  21.  for(i=0; i < n_elem; i++)
  22.    for(j=0; j < n_elem; j++)
  23.      if (vec[i] < vec[j]) {
  24.        vec[i] ^= vec[j];
  25.        vec[j] ^= vec[i];
  26.        vec[i] ^= vec[j];
  27.      }
  28.  
  29.  /* mostrar arreglo ordenado */
  30.  printf("\nArreglo ordenado:   ");
  31.  for(i=0; i < n_elem; i++) printf("%3d",vec[i]);
  32.  
  33.  /* pedir elemento a insertar */
  34.  printf("\nNumero a insertar:   ");
  35.  scanf("%d", &elem);
  36.  
  37.  /* insertar elemento */
  38.  i = 0;
  39.  while (elem > vec[i] && i < n_elem) i++;
  40.  for(j = n_elem+1; j > i; j--) vec[j] = vec[j-1];
  41.  vec[i] = elem;
  42.  
  43.  /* mostrar arreglo con elemento insertado */
  44.  printf("\nArreglo final:      ");
  45.  for(i=0; i < n_elem+1; i++) printf("%3d",vec[i]);
  46.  
  47.  while(getchar()!='\n');
  48.  getchar();
  49.  
  50.  return 0;
  51. }
  52.  

Saludos.


« Última modificación: 16 Agosto 2012, 05:22 am por ecfisa » En línea

xiruko


Desconectado Desconectado

Mensajes: 438


Ver Perfil
Re: intercalar elemento en vector
« Respuesta #2 en: 16 Agosto 2012, 05:38 am »

Citar
Código
  1. /* buble  */
  2.  for(i=0; i < n_elem; i++)
  3.    for(j=0; j < n_elem; j++)
  4.      if (vec[i] < vec[j]) {
  5.        vec[i] ^= vec[j];
  6.        vec[j] ^= vec[i];
  7.        vec[i] ^= vec[j];
  8.      }

nunca habia visto esta manera de ordenar un arreglo y me la apunto :D

solo una cosa y es que diria que en un arreglo de int no hace falta reservar un espacio al final para un null. y si reservas memoria, asegurate al final de liberarla con free(vec).

un saludo!
En línea

ecfisa

Desconectado Desconectado

Mensajes: 114


Ver Perfil
Re: intercalar elemento en vector
« Respuesta #3 en: 16 Agosto 2012, 19:04 pm »

Hola xiruko.

En realidad el espacio extra reservado es para el elemento a insertar. Y tenes razón, se me escapó el free... :(
 
Saludos.
« Última modificación: 16 Agosto 2012, 19:11 pm por ecfisa » En línea

xiruko


Desconectado Desconectado

Mensajes: 438


Ver Perfil
Re: intercalar elemento en vector
« Respuesta #4 en: 16 Agosto 2012, 19:47 pm »

vaya es verdad, me olvide del objetivo del programa y no cai...  :laugh:

un saludo!
En línea

m@o_614


Desconectado Desconectado

Mensajes: 389


Ver Perfil
Re: intercalar elemento en vector
« Respuesta #5 en: 20 Agosto 2012, 21:57 pm »

gracias ecfisa le hice unas modificaciones a mi código ya que pensé que lo único que le faltaba era agregar  v=x para integrar el nuevo elemento en el vector sin desordenarlo, pero aunque no me marca errores no hace lo que le pido y no entiendo por qué, leí tu código pero me fue un poco difícil de entender porque todavia no domino el uso de apuntadores

Código
  1. #include <stdio.h>
  2. #include <stdlib.h>
  3. #define MAX 20
  4.  
  5. /* Leer un vector de longitud n ordenado ascendente y un elemento x del mismo tipo que los
  6.    elementos del vector, intercalar x en el vector v de manera que siga ordenado.
  7. */
  8.  
  9. int main()
  10. {
  11.    int n,i,j,v[MAX],aux,x;
  12.    printf("Dame longitud del vector\n");
  13.    scanf("%d",&n);
  14.    printf("Imprimir vector\n");
  15.    for(i=0;i<n;i++)
  16.    {
  17.        printf("Imprimir elemento %d\n",i);
  18.        scanf("%d",&v[i]);
  19.    }
  20.    printf("Orden ascendente\n");
  21.    for(j=0;j<n;j++)
  22.    {
  23.        for(i=0;i<n;i++)
  24.        {
  25.            if(v[i+1]>v[i] && i+1!=n)
  26.            {
  27.                aux=v[i+1];
  28.                v[i+1]=v[i];
  29.                v[i]=aux;
  30.            }
  31.        }
  32.    }
  33.    for(i=0;i<n;i++)
  34.    {
  35.        printf("%d\n",v[i]);
  36.    }
  37.    printf("Dame elemento a intercalar");
  38.    scanf("%d",&x);
  39.    for(i=0;i<=n;i++)
  40.    {
  41.        if(x > v[i])
  42.        {
  43.            for(j=n;j>i;j--)
  44.            {
  45.                v[j]=v[j-1];
  46.            }
  47.        }
  48.    }
  49.    v[i]=x;
  50.    for(i=0;i<=n;i++)
  51.        printf("%d\n",v[i]);
  52.    return 0;
  53. }
  54.  

me di cuenta que tu usas un while para ir recorriendo los elementos y dejar un espacio para el elemento nuevo, pero yo utilice el for para que me vaya recorriendo el vector uno por uno pero aun asi no funciona

gracias
« Última modificación: 20 Agosto 2012, 21:59 pm por m@o_614 » En línea

ecfisa

Desconectado Desconectado

Mensajes: 114


Ver Perfil
Re: intercalar elemento en vector
« Respuesta #6 en: 20 Agosto 2012, 23:29 pm »

Hola m@o_614.

Código
  1. #include <stdio.h>
  2. #include <stdlib.h>
  3.  
  4. #define MAX 21
  5.  
  6. int main()
  7. {
  8.  int n, i, j, v[MAX], x, aux;
  9.  
  10.  /* PEDIR CANTIDAD DE ELEMENTOS */
  11.  printf("Dame longitud del vector(maximo 20) :");
  12.  scanf("%d",&n);
  13.  printf("\n");
  14.  
  15.  /* PEDIR LOS ELEMENTOS */
  16.  for(i = 0; i < n; i++) {
  17.    printf("Elemento %d :",i+1);
  18.    scanf("%d",&v[i]);
  19.    printf("\n");
  20.  }
  21.  
  22.  /* ORDENAR EL ARREGLO */
  23.  for(i=0; i < n; i++)
  24.    for(j=0; j < n; j++)
  25.      if (v[i] < v[j]) {
  26.        aux  = v[i];
  27.        v[i] = v[j];
  28.        v[j] = aux;
  29.       }
  30.  
  31.  /* MOSTRAR ARREGLO ORDENADO */
  32.  printf("Orden ascendente\n");
  33.  for(i=0; i<n; i++) printf("%d\n",v[i]);
  34.  
  35.  /* PEDIR ELEMENTO A INSERTAR */
  36.  printf("Dame elemento a intercalar :");
  37.  scanf("%d",&x);
  38.  printf("\n");
  39.  
  40.  /* INSERTAR EL ELEMENTO  */
  41.  i = 0;
  42.  while (x > v[i] && i <= n) i++;
  43.  for(j = n+1; j > i; j--) v[j] = v[j-1];
  44.  v[i] = x;
  45.  
  46.  /* MOSTRAR ARREGLO CON ELEMENTO INSERTADO EN POSICION */
  47.  printf("Resultado\n");
  48.  for(i=0; i<=n; i++) printf("%d\n",v[i]);
  49.  
  50.  while(getchar()!='\n');
  51.  getchar();
  52.  
  53.  return 0;
  54. }
  55.  

Saludos.
En línea

Páginas: [1] Ir Arriba Respuesta Imprimir 

Ir a:  

WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines