Nombre: MENU CON PUNTEROS
Descripción:
hacer un menu que permita dado un vector: ordenar, insertar, eliminar y buscar, y que sea repetitivo hasta pulsar la opcion salir CON ASIGNACION DINAMICA
URL: http://www.mygnet.net/codigos/cplusplus/punteros/menu_con_punteros.1697
Código Fuente:
#include<stdio.h>
#include<stdlib.h>
#define tam 20
void main ()
{
int opcion,*v,n,i,j,aux,pos,nbus,npos,li,ls,m,numero;
int menu () ;
printf("1. Buscarn");
printf("2. Ordenarn");
printf("3. Insertarn");
printf("4. Eliminarn");
printf("5. Salirn");
while (opcion!=5)
{
printf("nn Elije una opcion:");
scanf("%i", &opcion);
switch (opcion)
{
case 1:
// Introducir vector
printf ("¿Cuantos numeros quieres introducir?n");
scanf("%i",&n);
v=((int*)malloc(n*sizeof(int)));
if(v==NULL)
{
printf("ERROR:MEMORIA INSUFICIENTE");
exit(-1);
}
for (i=0;i<n;i++)
scanf ("%i",v+i);
//ordenar vector
for(i=0;i<n-1;i++)
{
for(j=i+1;j<n;j++)
{
if (*(v+i)>*(v+j))
{
aux=*(v+i);
*(v+i)=*(v+j);
*(v+j)=aux;
}}}
for(i=0;i<n;i++)
printf("%i",*(v+i));
printf ("n¿Que numero quieres buscar?");
scanf ("%i",&nbus);
li=0;
ls=n;
m= (li+ls)/2; // ----> formula para calcular la media
while (li<=ls)
{
if (*(v+m)<nbus)
li=m+1;
else
{
if (*(v+m)>nbus)
ls=m-1;
else
{
printf("n El numero %i, esta en la posicion %i",nbus,m+1);
break;
}
}
m=(li+ls)/2;
}
if (li>ls)
printf("n No se ha encontrado el numero %i",nbus);
break;
case 2:
printf ("Cuantos numeros quieres introducir:n");
scanf ("%i",&n);
v=((int*)malloc(n*sizeof(int)));
if(v==NULL)
{
printf("ERROR:MEMORIA INSUFICIENTE");
exit(-1);
}
for (i=0;i<n;i++)
scanf ("%i",v+i);
for (i=0;i<=n-1;i++)
{
for (j=i+1;j<n;j++)
{
if (*(v+i)>*(v+j))
{
aux=*(v+i);
*(v+i)=*(v+j);
*(v+j)=aux;
}}}
for (i=0;i<n;i++)
printf ("n%i",*(v+i));
break;
case 3:
printf ("Introduce cuantos numeros quieres:n");
scanf ("%i",&n);
v=((int*)malloc(n*sizeof(int)));
if(v==NULL)
{
printf("ERROR:MEMORIA INSUFICIENTE");
exit(-1);
}
for (i=0;i<=n-1;i++)
{
scanf ("%i",v+i);
}
printf ("En que posicion quieres insertar el numero:n");
scanf ("%i",&pos);
printf ("Numero que vas a introducir:n");
scanf ("%i",&numero);
for (i=n;i>=pos+1;i--)
*(v+i)=*(v+i-1);
*(v+pos)=numero;
for (i=0;i<=n;i++)
printf ("%i",*(v+i));
break;
case 4:
printf ("Introduce cuantos numeros quieres:n");
scanf ("%i",&n);
v=((int*)malloc(n*sizeof(int)));
if(v==NULL)
{
printf("ERROR:MEMORIA INSUFICIENTE");
exit(-1);
}
for (i=0;i<=n-1;i++)
{
scanf ("%i", v+i);
}
printf ("Que posicion quieres quitar:n");
scanf ("%i",&pos);
for(i=pos-1;i<=n-1;i++)
*(v+i)=*(v+i+1);
for (i=0;i<n-1;i++)
printf ("%i",*(v+i));
break;
case 5:
printf ("nFin del Programa");
break;
default:
printf ("opcion incorrecta");
}}}