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

 

 


Tema destacado: Recuerda que debes registrarte en el foro para poder participar (preguntar y responder)


+  Foro de elhacker.net
|-+  Programación
| |-+  Programación C/C++ (Moderadores: Eternal Idol, Littlehorse, K-YreX)
| | |-+  Vectores Dinamicos
0 Usuarios y 1 Visitante están viendo este tema.
Páginas: [1] Ir Abajo Respuesta Imprimir
Autor Tema: Vectores Dinamicos  (Leído 4,587 veces)
ANTÓN RAMIREZ

Desconectado Desconectado

Mensajes: 10


Ver Perfil
Vectores Dinamicos
« en: 14 Diciembre 2010, 20:50 pm »

Los vectores dinamicos tiene las mismas propiedades que los vectores estaticos lo que varia  es la creación en la cual las dimensiones del mismo son ingresadas en tiempo de ejecucion. Una vez asignadas estas dimensiones ya no se pueden modificar.
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]


« Última modificación: 7 Enero 2011, 17:08 pm por ANTÓN RAMIREZ » En línea

Páginas: [1] Ir Arriba Respuesta Imprimir 

Ir a:  

Mensajes similares
Asunto Iniciado por Respuestas Vistas Último mensaje
Fondos dinamicos
GNU/Linux
Fox_Neo 3 3,136 Último mensaje 27 Mayo 2010, 23:14 pm
por Fox_Neo
Vectores dinamicos
Programación C/C++
latinoalfredo 6 3,503 Último mensaje 30 Octubre 2012, 22:57 pm
por latinoalfredo
Fondos dinámicos
GNU/Linux
Fox_Neo 2 1,924 Último mensaje 6 Febrero 2013, 00:08 am
por Fox_Neo
Ayuda Vectores Dinámicos
Programación C/C++
windic 3 2,187 Último mensaje 8 Octubre 2014, 22:02 pm
por ivancea96
Consulta de un noob sobre vectores dinamicos para char
Programación C/C++
Akumadie 2 1,940 Último mensaje 23 Noviembre 2016, 03:08 am
por Akumadie
WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines