Título: intercalar elemento en vector
Publicado por: m@o_614 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 #include <stdio.h> #include <stdlib.h> #define MAX 20 /* 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. */ int main() { int n,i,j,v[MAX],aux,x; printf("Dame longitud del vector\n"); for(i=0;i<n;i++) { printf("Imprimir elemento %d\n",i ); } for(j=0;j<n;j++) { for(i=0;i<n;i++) { if(v[i+1]>v[i]) { aux=v[i+1]; v[i+1]=v[i]; v[i]=aux; } } } for(i=0;i<n;i++) { } printf("Dame elemento a intercalar\n"); for(i=0;i<=n;i++)//Aqui le estoy creando una posicion mas al arreglo { if(x > v[i]) { for(j=n;j>v[i];j--) { v[j]=v[j-1];/*Aqui recorro los elementos para insertar el elemento x*/ } } } return 0; }
me falta todavia la parte en la que se inserta el elemento x en la posicion correcta sin desordenar el vector gracias
Título: Re: intercalar elemento en vector
Publicado por: ecfisa en 16 Agosto 2012, 05:19 am
Hola. #include <stdio.h> #include <stdlib.h> int main(int argc, char* argv[]) { int *vec, n_elem, elem, i, j; randomize(); /* cantidad de elementos */ printf("Cantidad de enteros?: "); /* dimensionar arreglo */ vec = (int*)malloc((n_elem +1)*sizeof(int)); /* ingreso aleatorio (0-99) */ for(i = 0; i < n_elem ; i ++) vec [i ] = rand()%100; /* buble */ for(i=0; i < n_elem; i++) for(j=0; j < n_elem; j++) if (vec[i] < vec[j]) { vec[i] ^= vec[j]; vec[j] ^= vec[i]; vec[i] ^= vec[j]; } /* mostrar arreglo ordenado */ printf("\nArreglo ordenado: "); for(i =0; i < n_elem ; i ++) printf("%3d",vec [i ]); /* pedir elemento a insertar */ printf("\nNumero a insertar: "); /* insertar elemento */ i = 0; while (elem > vec[i] && i < n_elem) i++; for(j = n_elem+1; j > i; j--) vec[j] = vec[j-1]; vec[i] = elem; /* mostrar arreglo con elemento insertado */ for(i =0; i < n_elem +1; i ++) printf("%3d",vec [i ]); return 0; }
Saludos.
Título: Re: intercalar elemento en vector
Publicado por: xiruko en 16 Agosto 2012, 05:38 am
/* buble */ for(i=0; i < n_elem; i++) for(j=0; j < n_elem; j++) if (vec[i] < vec[j]) { vec[i] ^= vec[j]; vec[j] ^= vec[i]; vec[i] ^= vec[j]; }
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!
Título: Re: intercalar elemento en vector
Publicado por: ecfisa 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.
Título: Re: intercalar elemento en vector
Publicado por: xiruko en 16 Agosto 2012, 19:47 pm
vaya es verdad, me olvide del objetivo del programa y no cai... :laugh:
un saludo!
Título: Re: intercalar elemento en vector
Publicado por: m@o_614 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
#include <stdio.h> #include <stdlib.h> #define MAX 20 /* 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. */ int main() { int n,i,j,v[MAX],aux,x; printf("Dame longitud del vector\n"); for(i=0;i<n;i++) { printf("Imprimir elemento %d\n",i ); } for(j=0;j<n;j++) { for(i=0;i<n;i++) { if(v[i+1]>v[i] && i+1!=n) { aux=v[i+1]; v[i+1]=v[i]; v[i]=aux; } } } for(i=0;i<n;i++) { } printf("Dame elemento a intercalar"); for(i=0;i<=n;i++) { if(x > v[i]) { for(j=n;j>i;j--) { v[j]=v[j-1]; } } } v[i]=x; for(i=0;i<=n;i++) return 0; }
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
Título: Re: intercalar elemento en vector
Publicado por: ecfisa en 20 Agosto 2012, 23:29 pm
Hola m@o_614. #include <stdio.h> #include <stdlib.h> #define MAX 21 int main() { int n, i, j, v[MAX], x, aux; /* PEDIR CANTIDAD DE ELEMENTOS */ printf("Dame longitud del vector(maximo 20) :"); /* PEDIR LOS ELEMENTOS */ for(i = 0; i < n; i++) { } /* ORDENAR EL ARREGLO */ for(i=0; i < n; i++) for(j=0; j < n; j++) if (v[i] < v[j]) { aux = v[i]; v[i] = v[j]; v[j] = aux; } /* MOSTRAR ARREGLO ORDENADO */ for(i =0; i <n ; i ++) printf("%d\n",v [i ]); /* PEDIR ELEMENTO A INSERTAR */ printf("Dame elemento a intercalar :"); /* INSERTAR EL ELEMENTO */ i = 0; while (x > v[i] && i <= n) i++; for(j = n+1; j > i; j--) v[j] = v[j-1]; v[i] = x; /* MOSTRAR ARREGLO CON ELEMENTO INSERTADO EN POSICION */ for(i =0; i <=n ; i ++) printf("%d\n",v [i ]); return 0; }
Saludos.
|