En este programa se puede relizar las operaciones de leer,mostrar,ordenar y eliminar un vector dinamico, ademas de las operaciones insertar y eliminar elementos del vector dinamico.
Bueno al realizar este programa tengo una dificultad para el insertar y eliminar dinamicamente , me parecio interesante realizar esto , porque lo logico seria utilizar pilas y colas , pero en fin espero que me puedan apoyar que le falta a mi algoritmo para que no se cuelgue .
ATTE : ANTON RAMIREZ , LEONARDO VLADIMIR (ALUMNO UNI)
Código:
[list]
[li][ftp][/ftp][tt][color=blue]using namespace std;
int Menu();
void Linea();
void LeerVector(int **X, int *dimX);
void MostrarVector(int *X, int dimX);
void InsertarxPosic(int **X, int *dimX, int Pos);
void InsertarxValor(int **X, int *dimX, int Val);
void EliminarxPosic(int **X, int *dimX, int Pos);
void EliminarxValor(int **X, int *dimX, int Val);
void Redimensionar_Aumentar(int *X, int *dimX);
void Redimensionar_Disminuir(int *X, int *dimX);
void Redimensionar1(int *X, int *dimX);
void Redimensionar2(int *X, int *dimX);
int main()
{
int *A, na, posic, valor, Opcion;
A = NULL;
do{
Opcion = Menu();
switch(Opcion)
{
case 1 : system("cls"); Linea();
cout<<"\t\tRUTINA DE CREACION\n"; Linea();
printf("\n");
LeerVector(&A, &na);
break;
case 2 : system("cls"); Linea();
cout<<"\t RUTINA DE VIZUALIZACION\n"; Linea();
printf("\n");
MostrarVector(A, na);
printf("\n\n"); system("pause");
break;
case 3 : system("cls"); Linea();
cout<<"\t RUTINA INSERTA POR POSICION\n"; Linea();
printf("\n");
MostrarVector(A, na);
if(A!=NULL){
cout<<"\n\nIngrese la POSICION => ";
cin>>posic;
posic = posic-1;
InsertarxPosic(&A, &na, posic);
}
printf("\n\n"); system("pause");
break;
case 4 : system("cls"); Linea();
cout<<"\t RUTINA ELIMINA POR POSICION\n"; Linea();
printf("\n");
MostrarVector(A, na);
if(A!=NULL){
cout<<"\n\nIngrese la POSICION => ";
cin>>posic;
posic = posic-1;
EliminarxPosic(&A, &na, posic);
}
printf("\n\n"); system("pause");
break;
case 5 : system("cls"); Linea();
cout<<"\t RUTINA INSERTA POR VALOR\n"; Linea();
printf("\n");
MostrarVector(A, na);
if(A!=NULL){
cout<<"\n\nIngrese el VALOR => ";
cin>>valor;
InsertarxValor(&A, &na, valor);
}
printf("\n\n"); system("pause");
break;
case 6 : system("cls"); Linea();
cout<<"\t RUTINA ELIMINA POR VALOR\n"; Linea();
printf("\n");
MostrarVector(A, na);
if(A!=NULL){
cout<<"\n\nIngrese el VALOR => ";
cin>>valor;
EliminarxValor(&A, &na, valor);
}
printf("\n\n"); system("pause");
break;
case 0 :
free(A);
A=NULL;
exit(1);
}
}while(Opcion);
printf("\n");
system("PAUSE");
return(0);
}
int Menu()
{
int op;
do{
system("cls");
printf("\n\t OPERACIONES CON VECTORES DINAMICOS \n\n");
printf("\t1. Crear \n");
printf("\t2. Mostrar \n");
printf("\t3. Insertar por Posicion \n");
printf("\t4. Eliminar por Posicion \n");
printf("\t5. Insertar por Valor \n");
printf("\t6. Eliminar por Valor \n");
printf("\t0. SALIR \n\n");
printf("\tDigite su opcion => ");
scanf("%d",&op);
}while(op<0 || op>7);
return(op);
}
void LeerVector(int **X, int *dimX)
{
int N, i, val;
printf("Ingrese dimension del vector : ");
scanf("%d", &N);
*X=(int*)malloc(N*sizeof(int));
if(*X == NULL)
{
printf("Error: No hay memoria suficiente...\n");
system("pause");
exit(1);
}
else
{
printf("\nIngrese los datos del vector ...\n\n");
for(i=0;i<N;i++)
{
printf("X[%d] = ", i + 1);
scanf("%d", *X+i);
}
*dimX=N;
}
}
void MostrarVector(int *X, int dimX)
{
if(X==NULL){
printf("El vector esta VACIO ...");
}
else{
printf("\nVECTOR [%d] = ", dimX);
for(int i=0;i<dimX;i++)
{
printf("%4d", *(X+i));
}
}
}
void InsertarxPosic(int **X, int *dimX, int Pos)
{
int val;
if(*X == NULL){
printf("\nEl vector esta VACIO ...\n\n");
}
else{
if(Pos<*dimX && Pos>=0){
Redimensionar_Aumentar(*X, dimX); //Redimensionar1(*X, dimX);
for(int i=*dimX; i>Pos; i--){
*(*X+i) = *(*X+(i-1));
}
printf("\n...Valor a Insertar -> "); scanf("%d", &val);
*(*X+Pos) = val;
MostrarVector(*X, *dimX);
}
else{
printf("\nError: Posicion fuera de rango ...\n");
}
}
}
void InsertarxValor(int **X, int *dimX, int Val)
{
int i, Hallado, Pos;
i=0; Hallado=0;
if(*X == NULL){
printf("\nEl vector esta VACIO ...\n\n");
}
else{
while(i<*dimX && !Hallado){
if(*(*X+i)==Val){
Hallado = 1;
Pos = i;
}
i = i+1;
}
}
if(Hallado){
InsertarxPosic(&*X, dimX, Pos);
}
else{
printf("\nError: Valor no encontrado ...\n");
}
}
void EliminarxPosic(int **X, int *dimX, int Pos)
{
if(*X == NULL){
printf("\nEl vector esta VACIO ...\n\n");
}
else{
if(Pos<*dimX && Pos>=0){
for(int i=Pos; i<*dimX; i++){
*(*X+i) = *(*X+(i+1));
}
Redimensionar_Disminuir(*X, dimX); //Redimensionar2(*X, dimX);
MostrarVector(*X, *dimX);
}
else{
printf("\nError: Posicion fuera de rango ...\n");
}
}
}
void EliminarxValor(int **X, int *dimX, int Val)
{
int i, Hallado, Pos;
i=0; Hallado=0;
if(*X == NULL){
printf("\nEl vector esta VACIO ...\n\n");
}
else{
while(i<*dimX && !Hallado){
if(*(*X+i)==Val){
Hallado = 1;
Pos = i;
}
i = i+1;
}
}
if(Hallado){
EliminarxPosic(&*X, dimX, Pos);
}
else{
printf("\nError: Valor no encontrado ...\n");
}
}
void Redimensionar1(int *X, int *dimX)
{
X = (int *)realloc(X,(*dimX+1)*sizeof(int));
*dimX=*dimX+1;
}
void Redimensionar2(int *X, int *dimX)
{
X = (int *)realloc(X,(*dimX-1)*sizeof(int));
*dimX=*dimX-1;
}
void Redimensionar_Aumentar(int *X, int *dimX)
{
int *A;
int n=*dimX;
n = n+1;
A = (int *)malloc(n*sizeof(int));
for(int i=0; i<n-1;){
*(A+i) = *(X+i);
i = i+1;
}
*dimX = n;
X = A;
}
void Redimensionar_Disminuir(int *X, int *dimX)
{
int *A;
int n=*dimX;
n = n-1;
A = (int *)malloc(n*sizeof(int));
for(int i=0; i<n;){
*(A+i) = *(X+i);
i = i+1;
}
*dimX = n;
X = A;
}
void Linea()
{
printf("\t==================================\n");
}[/color][/tt][/li]
[li][/li]
[/list]