Programa en C para Gestionar un Vector: Insertar, Eliminar, Modificar y Ordenar
Programa en C para la gestión de un vector
A continuación se presenta un programa en lenguaje C que permite gestionar un vector de enteros mediante un menú interactivo con las operaciones de insertar, eliminar, modificar y mostrar elementos. Tras cada operación, el vector se mantiene ordenado de forma ascendente.
Código fuente
#include <stdio.h>
#include <conio.h>
#include <windows.h>
#define MAX 5
int ingresar();
void insertar(int elemento, int vector[], int posicion);
int eliminar(int elim, int vector[], int posicion);
void modificar(int modif, int vector[], int posicion);
void mostrar(int vector[], int posicion, int disponible);
void ordenar(int vector[], int posicion);
int menu();
int main() {
int vector[MAX], disponible, posicion = 0;
int opc;
do {
disponible = MAX - posicion;
opc = menu();
switch (opc) {
case 1:
printf("\nDISPONIBLE = %d\n", disponible);
if (disponible > 0) {
insertar(ingresar(), vector, posicion);
posicion++;
ordenar(vector, posicion);
} else {
printf("\nNO HAY ESPACIO\n");
}
disponible = MAX - posicion;
printf("\nDISPONIBLE = %d\n", disponible);
mostrar(vector, posicion, disponible);
break;
case 2:
printf("\nDISPONIBLE = %d\n", disponible);
if (disponible != MAX) {
posicion = eliminar(ingresar(), vector, posicion);
ordenar(vector, posicion);
} else {
printf("\nEl vector está vacío, no puede eliminar");
}
disponible = MAX - posicion;
printf("\nDISPONIBLE = %d\n", disponible);
mostrar(vector, posicion, disponible);
break;
case 3:
if (disponible != MAX) {
modificar(ingresar(), vector, posicion);
ordenar(vector, posicion);
} else {
printf("El vector está vacío\n");
}
disponible = MAX - posicion;
printf("\nDISPONIBLE = %d\n", disponible);
mostrar(vector, posicion, disponible);
break;
case 4:
system("cls");
printf("\nDISPONIBLE = %d\n", disponible);
mostrar(vector, posicion, disponible);
break;
}
getch();
} while (opc != 0);
return 0;
}
int menu() {
int opc;
do {
printf("\t\tMENÚ");
printf("\n1. Insertar");
printf("\n2. Eliminar");
printf("\n3. Modificar");
printf("\n4. Mostrar elementos");
printf("\n0. Salir");
printf("\nDigite opción: ");
scanf("%d", &opc);
} while (opc < 0 || opc > 4);
return opc;
}
void mostrar(int vector[], int posicion, int disponible) {
int i;
if (disponible != MAX) {
printf("\nMostrando vector:\n\n\t");
for (i = 0; i < posicion; i++) {
printf("| %2d ", vector[i]);
}
printf("|");
} else {
printf("\nVECTOR VACÍO");
}
}
int ingresar() {
int elemento;
printf("Ingrese elemento: ");
scanf("%d", &elemento);
return elemento;
}
void insertar(int elemento, int vector[], int posicion) {
vector[posicion] = elemento;
}
int eliminar(int elim, int vector[], int posicion) {
int posElim, i;
posElim = -1;
for (i = 0; i < posicion; i++) {
if (vector[i] == elim) {
posElim = i;
}
}
if (posElim > -1) {
printf("\nElemento encontrado en posición: %d", posElim);
for (i = posElim; i < posicion - 1; i++) {
printf("\nEliminando %d posición %d", vector[i], i);
vector[i] = vector[i + 1];
}
posicion--;
} else {
printf("\nElemento no encontrado");
}
return posicion;
}
void modificar(int modif, int vector[], int posicion) {
int posMod, i, reemplazo;
posMod = -1;
for (i = 0; i < posicion; i++) {
if (vector[i] == modif) {
posMod = i;
}
}
if (posMod > -1) {
printf("Ingrese valor de reemplazo: ");
scanf("%d", &reemplazo);
vector[posMod] = reemplazo;
printf("Valor reemplazado exitosamente\n");
} else {
printf("El valor buscado no se encuentra\n");
}
}
void ordenar(int recibido[MAX], int posicion) {
int i, j, aux;
for (i = 0; i < posicion - 1; i++) {
for (j = i + 1; j < posicion; j++) {
if (recibido[i] > recibido[j]) {
aux = recibido[i];
recibido[i] = recibido[j];
recibido[j] = aux;
}
}
}
}Correcciones realizadas
- Se corrigieron los separadores de los bucles for: la coma (
,) se reemplazó por punto y coma (;), ya que la versión original no compilaba correctamente la condición de parada. - En
eliminar(), el desplazamiento de elementos comienza ahora en la posición encontrada (posElim) y se detiene enposicion - 1, evitando leer fuera del rango válido. - Se corrigieron tildes y ortografía en los mensajes mostrados al usuario (por ejemplo, "vacío", "posición", "opción", "MENÚ").
- Se añadieron espacios y sangrías para mejorar la legibilidad del código.
Conceptos clave
El programa utiliza un vector estático de tamaño MAX (5 elementos), el ordenamiento por burbuja (bubble sort) para mantener los datos ordenados y un menú iterativo controlado mediante do-while y switch. Las funciones system("cls"), getch() y la librería windows.h son específicas de entornos Windows.