/
Inicio :: Foros

 F.A.Q.F.A.Q.                  Conéctese para revisar sus mensajesConéctese para revisar sus mensajes   

Ayuda con este codigo en C

 
      Índice del Foro elrincondelc.com -> C/C++ en General
Ver tema anterior :: Ver siguiente tema  
AutorMensaje
gulostale



Registrado: 17 Feb 2014
Mensajes: 2

MensajePublicado: 17/02/2014 8:37 pm
Título: Ayuda con este codigo en C

por ahi en la web me encontre este codigo y tengo un proyecto pendiente que esta muy parecido, sin embargo no puedo terminar de entenderlo y falla al compilarlo

alguien podria decirme que esta fallando y si no es mucho pedir algun curos o que me explique a que se refiere con esto:

Código:
 switch(opc)
  {
    case '1':
    if(a==0)
     {
       n=insertar(&raiz);
       inser_direc(raiz,n);
       met_shell(raiz,n);
       met_burbuja(raiz,n);
       quick_sort(raiz,n);
       busqueda_bin(raiz,n);
       met_conca(raiz,n);
      selec_direc(raiz,n);
       monticulo1(raiz,n);
       muestra(raiz,n);
       met_divi(raiz,n);
  printf("\nDESEA OTRO(S/N):");
  res=toupper(getch());
 }while(res!='N');
 return 0;
}// fin del main

int insertar(struct alu **reg){
  struct alu *aux;
  int n,i;

no entiendo que intento la persona con ese case, segun yo esta todo mal....xD


el codigo completo es este:

Código:
#include<stdio.h>
#include<conio.h>
#include<malloc.h>
#include<ctype.h>

struct alu
{
 char nom[30];
 int sem;
 long nc;
};
struct limites
{
 int in[2];
 struct limites *sig;
};

int insertar(struct alu **reg);
void inser_direc(struct alu *reg,int n);
void met_shell(struct alu *reg,int n);
void met_burbuja(struct alu *reg,int n);
void met_conca(struct alu *reg,int n);
void concatena(struct alu *reg,int ii1,int if1,int ii2,int if2,int n);
void selec_direc(struct alu *reg,int n);
void monticulo1(struct alu *reg,int n);
void monticulo2(struct alu *reg,int n);
void muestra(struct alu *reg,int n);
void quick_sort(struct alu *vec,int n);
int div_restaura(struct alu *v,int li,int ls,struct alu piv);
struct limites *push(struct limites *pila,int l1,int l2);
int *pop(struct limites **pila);
void busqueda_bin(struct alu *reg,int n);
void met_divi(struct alu *reg,int n);
int prim(int n);

void main()
{ struct alu *raiz;
  int n;//=0, opc=0, a=0, b1=0;
  char res;
 do{
  clrscr();
  /*/printf("\t       **********MENU CON METODOS DE ORDENACION**********\n");
  printf("\n1.ALTA DE DATOS");            printf("        7.MONTICULO");
  printf("\n2.MUESTRA DE DATOS");                printf("\t\t    8.QUICK SORT");
  printf("\n3.INVIERTE DATOS");                  printf("\t\t    9.METODO DE DIVISION");
  printf("\n4.ORDENACION DIRECTA");              printf("\t\t   10.BUSQUEDA BINARIA");
  printf("\n5.ORDENACION POR MEDIO DE SHELL");   printf("       11.ORDENACION DIRECTA");
  printf("\n6.ORDENACION POR MEDIO DE BURBUJA"); printf("       12.SALIR");
  scanf("%d",&opc);
  switch(opc)
  {
    case '1':
    if(a==0)
     {
  /*/
  n=insertar(&raiz);
  inser_direc(raiz,n);
  met_shell(raiz,n);
  met_burbuja(raiz,n);
  quick_sort(raiz,n);
  busqueda_bin(raiz,n);
  met_conca(raiz,n);
  selec_direc(raiz,n);
  monticulo1(raiz,n);
  muestra(raiz,n);
  met_divi(raiz,n);
  printf("\nDESEA OTRO(S/N):");
  res=toupper(getch());
 }while(res!='N');
}// fin del main

int insertar(struct alu **reg)
{ struct alu *aux;
  int n,i;
  printf("\nCUANTOS ELEMENTOS DESEA INSERTAR:");
  scanf("%d",&n);
  aux=(struct alu *)malloc(n*sizeof(struct alu));
  if(aux!=NULL)
  { for(i=0;i<n;i++)
    {
      printf("\nNUMERO DE CONTROL :");
      scanf("%ld",&aux[i].nc);
      printf("\nNOMBRE :");
      fflush(stdin);
      gets(aux[i].nom);
      printf("\nSEMESTRE :");
      scanf("%d",&aux[i].sem);

    }
    *reg=aux;
  }// fin del if
  else
    printf("\nNO HAY MEMORIA SUFICIENTE");
 return n;
}// fin de la funcion

void muestra(struct alu *reg,int n)
{ int i=0;
  clrscr();
  printf("\nLOS DATOS SON: \n");
  for(i=0;i<n;i++)
  {
    printf("\nNUMERO DE CONTROL: %ld ",reg[i].nc);
    printf("\nNOMBRE: %s ",reg[i].nom);
    printf("\nSEMESTRE: %d ",reg[i].sem);

    getch();
  }
}//fin de la funcion

void inser_direc(struct alu *reg,int n)
{ int i,j;
  struct alu aux;
  for(i=1;i<=n-1;i++)
  { j=i-1;
    while( (j>=0) && (reg[j].nc > reg[j+1].nc) )
    { aux=reg[j];
      reg[j]=reg[j+1];
      reg[j+1]=aux;
      j--;
    }
  }// del for
}// fin de la funcion

void met_shell(struct alu *reg,int n)
{  int paso,i,j;
   struct alu aux;
   paso=n/2;
   n=n-1;
   while(paso>0)
   {
    for(i=paso;i<=n;i++)
     { j=i-paso;
       while( (j>=0) && ( (reg[j].nc) > (reg[j+paso].nc) ) )
       { aux=reg[j];
    reg[j]=reg[j+paso];
    reg[j+paso]=aux;
    j=j-paso;
       }//del while
     }// del for
   paso=paso/2;
   }// del while externo
}// fin de la funcion

void met_burbuja(struct alu *reg,int n)
{ int i,j;
  struct alu aux;
  for(i=1;i<=n-1;i++)
  { for(j=1;j<=n-i;j++)
    { if( (reg[j-1].nc) > (reg[j].nc) )
   {
     aux=reg[j];
     reg[j]=reg[j-1];
     reg[j-1]=aux;
   }
    }//del for interno
  }//del for externo
}//fin de la funcion

void met_conca(struct alu *reg,int n)
{
 int ie=0,tam,ii;
  tam=1;
  while(tam<n)
  {
   ii=0;
    do{
      concatena(reg,tam*(2*ii),(tam*((2*ii)+1))-1,tam*((2*ii)+1),(tam*((2*ii)+2))-1,n);
      ii++;
     }while( (tam*((2*ii)+1) < n) && (tam*((2*ii)+1) <=(tam*((2*ii)+2))-1 )   );
    ie++;
    tam=tam*2;
  }// fin del while
}// fin de la funcion

void concatena(struct alu *reg,int ii1,int if1,int ii2,int if2,int n)
{ int k=0,i=ii1,j=ii2;
  struct alu *aux;
  aux=(struct alu *)malloc(n*sizeof(struct alu));
  if(aux!=NULL)
  {
   while(i<=if1)
    {  while( ( (j<n) && (j<=if2) )&& ((reg[j].nc) < (reg[i].nc) ) )
   { aux[k]=reg[j];
     j++;
     k++;
   }// del if ext
       aux[k]=reg[i];
       k++;
       i++;
    }// del while externo
    j=0;
    i=ii1;
     while(j<k)
      {   reg[i]=aux[j];
   j++;
   i++;
      }// del while
   free(aux);
   }// del if aux !=NULL
   else
   {
     printf("\nNO HAY MEMORIA");
   }
}// fin de la funcion

void selec_direc(struct alu *reg,int n)
{ int j,i=0;
  struct alu aux;
  while(i<n)
  { for(j=i+1;j<n;j++)
    { if(reg[i].nc > reg[j].nc)
      { aux=reg[i];
   reg[i]=reg[j];
   reg[j]=aux;
      }//fin del if
    }// fin del for
    i++;
  }// fin del while
}// fin de la funcion

void monticulo1(struct alu *reg,int n)
{ int i=n-1;
  struct alu aux;
  monticulo2(reg,n);
  while(i>=0)
  { aux=reg[0];
    reg[0]=reg[i];
    reg[i]=aux;
    monticulo2(reg,i);
    i--;
  }
}// fin de la funcion

void monticulo2(struct alu *reg,int n)
{ struct alu aux;
  int j,k=1,sigue;
  while(k<n)
  { j=k; sigue=1;
    while( (j>0) && (sigue==1) )
    { if( (j%2 != 0) && (reg[j].nc > reg[j/2].nc) )
      { aux=reg[j];
   reg[j]=reg[j/2];
   reg[j/2]=aux;
   j=j/2;
      }// fin del if
      else
      { if( (j%2 ==0) && (reg[j].nc > reg[j/2 -1].nc ) )
   { aux=reg[j];
     reg[j]=reg[j/2 -1];
     reg[j/2 -1]=aux;
     j=j/2 -1;
   }
   else
    sigue=0;
      }// fin del else externo
    }// fin del while j>0 ...
    k++;
  }// fin del while
}// fin de la funcion

void quick_sort(struct alu *vec,int n)
{ int ip,*lim,li=0,ls=n-1,izq;
  struct limites *pila;
  struct alu pivote;
  pila=NULL;
  do{
      izq=1;
      while(izq==1 )
      { pivote=vec[li];
   ip=div_restaura(vec,li,ls,pivote);
   if( ip+1 >=li &&  ip+1 <= ls  )
      pila=push(pila,ip+1,ls);
   if( (ip-1 >=li) && ( ip-1 <= ls)  )
   { izq=1;
     ls=ip-1;
   }// del if
   else
    izq=0;
      }// del while
      lim=pop(&pila);
      li=*(lim+0);
      ls=*(lim+1);
  }while( li!=-1 && ls!=-1 );
}// fin de la funcion

int div_restaura(struct alu *v,int li,int ls,struct alu piv)
{ int k=0,j=0,iz=0,de=0,i,l;
 struct alu *izq,*der;
  if(li < ls)
   {
     der=(struct alu *)malloc(ls*sizeof(struct alu));
     izq=(struct alu *)malloc(ls*sizeof(struct alu));
    if( (izq!=NULL) && (der!=NULL) )
    {
     for(i=li;i<ls;i++)
      {if( piv.nc > v[i+1].nc )
   { izq[j]=v[i+1];
     j++;
     iz=1;
   }
   else
   { der[k]=v[i+1];
     k++;
     de=1;
   }
       }// del for

      if( (iz==1) && (de==1) )
       { v[li+j]=piv;
    k=0; l=0;
    for(i=li;i<li+j;i++)
     { v[i]=izq[l];
       l++;
     }
    for(i=li+(j+1);i<=ls;i++)
      { v[i]=der[k];
        k++;
      }
       }
      else
       { if( (iz==1) && (de==0) )
    { v[li+j]=piv;  l=0;
      for(i=li;i<(li+j);i++)
       { v[i]=izq[l];
         l++;
       }
    }
    else
    if( (iz==0) && (de==1) )
    { v[li]=piv;
      k=0;
      for(i=li+1;i<=ls;i++)
      {  v[i]=der[k];
        k++;
       }
        free(izq);
        free(der);
      return li;
    }
       }
     free(izq);
     free(der);
    }// del if izq!=NULL
    else
      printf("\nNO HAY MEMORIA");
   }// del if li != ls
   else
    return li;
 return (li+j) ;
}// fin de la funcion


struct limites *push(struct limites *pila,int l1,int l2)
{ struct limites *aux;
 aux=(struct limites *)malloc(sizeof(struct limites));
 if(aux!=NULL)
 {  (*aux).in[0]=l1;
    (*aux).in[1]=l2;
    (*aux).sig=pila;
    pila=aux;
 }// del if
 return pila;
}// fin de la funcion


int *pop(struct limites **pila)
{ struct limites *aux;
  int limit[2];
 if( (*pila)!=NULL )
{ aux=(*pila);
  (*pila)=(*(*pila)).sig;
  limit[0]=(*aux).in[0];
  limit[1]=(*aux).in[1];
  free(aux);
}
else
  {  limit[0]=-1;
     limit[1]=-1;
   }
  return limit;
}// fin de la funcion

void busqueda_bin(struct alu *reg,int n)
{ int li=0,ls=n-1,medio;
  long clave;
  printf("\nPROPORCIONE EL NUMERO DE CONTROL A BUSCAR: ");
  scanf("%ld",&clave);
  do{
   medio=(li+ls)/2;
   if (clave > reg[medio].nc )
    li=medio+1;
   else
    ls=medio-1;
  }while( (reg[medio].nc!=clave)&& (li<=ls) );
  if(reg[medio].nc==clave)
  {  printf("\nNUMERO DE CONTROL: %ld ",reg[medio].nc);
     printf("\nNOMBRE: %s ",reg[medio].nom);
     printf("\nSEMESTRE: %d ",reg[medio].sem);

  }
  else
   printf("\nEL ELEMENTO NO EXISTE");
  getch();
}//fin de la funcion

void met_divi(struct alu *reg,int n)
{ struct alu *aux;
  int m,i,div;
  long k;
  m=n;
  do{
     m=prim(m);
  }while(n/m > 0.8);
  aux=(struct alu *)malloc(m*sizeof(struct alu));
  if(aux!=NULL)
  { for(i=0;i<m;i++)
     aux[i].nc=0; i=0;
    while(i<n)
    { k=reg[i].nc;
      div= k % m;
      if(aux[div].nc==0)
    aux[div]=reg[i];
      else
       printf("\nCOLISION EN LA POSICION %d ",div);
      i++;
     }

  }// fin del if
  else
    printf("\nNO HAY MEMORIA SUFICIENTE");
}// fin de la funcion

int prim(int m)
{ int i,modulo,ban=0;
  do
  { i=2;
    m++;
    do{
      modulo=m%i;
      i++;
    }while( (i<m)&& (modulo!=0) );
    if(modulo==0)
     ban=0;
    else
     ban=1;
  }while( ban!=1 );
 return m;
}// fin de la funcion


Observe que tiene comentado varias partes del codigo intente implementarlas por mi cuenta pero el resultado fue un Fail

Gracias!
Volver arriba
      Índice del Foro elrincondelc.com -> C/C++ en General
Página 1 de 1Todas las horas están en GMT - 8 Horas

 
No puede crear mensajes
No puede responder temas
No puede editar sus mensajes
No puede borrar sus mensajes
No puede votar en encuestas

(c) ElRincondelC.com

Un proyecto de UrlanHeat.com