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

 

 


Tema destacado: Tutorial básico de Quickjs


  Mostrar Temas
Páginas: [1]
1  Programación / Programación C/C++ / como se puede mejorar este programa si alguien me puede ayudar en: 14 Enero 2016, 00:12 am
es de funciones hash  tengo que mostrar el contenido pro al mostrarlo lo qeu ocurre es que me sae el dato elmiminado la funcion se llama mostrar     y si me pueden explicar para que sirve   if (registros[cont].codigo==codigo)
         if (registros[cont].vazio==1) {
            registros[cont].vazio=0;
            printf("\neliminado correctamente \n");
            break;
}
el programa completo es el siguiente:
y si alguien me pudiera explicar si esta bien implementarlo asi  o si tengo que cambiar algo con eso de los  "errores" se los agradeceria mucho  
 
#include<string.h>
#include<conio.h>
#include<stdio.h>
#include <ctype.h>
#include <cstdlib>
struct agenda {   // defino una estructura  llamada agenda
       int codigo;
       char nombre[10];
       char apellido[10];
       int telefono;
       int vazio;
} registros[10];
// funciones a utilizar
int ingresar(int codigo, int pos);
void consultar();
int verifica_pos();
void zerar();
int verifica_cod(int cod);
int  excluir();
void mostrar();



main() {
zerar();  // no entiendo para que sirve esta funcion  bien
int op=0,retorno,codaux,posicao;
while(op!=5){
   printf("\n\n\t\t\t\t** AGENDA ** \n1 - Ingresar\n2 - Buscar\n3 - Borrar\n4 - mostrar todo  \n\nOpcion:  ");
   scanf("%d",&op);
   fflush(stdin);
   switch(op) {
       case 1: {                
            posicao=verifica_pos();
            if (posicao!=-1) {
            printf("\nIngresar codigo\n");
            scanf("%d",&codaux);
         fflush(stdin);
               retorno=verifica_cod(codaux);
               if (retorno==1)
                  ingresar(codaux,posicao);
               if(retorno ==0)
               printf(" intenta de nuevo ");
            }
            else
              printf("\n La agenda ya esta llena\n");
       break;
       }
       case 2: {              
            consultar();
       break;
       }
       case 3: {
         excluir();
       break;
       }
       case 4: {
            mostrar();
         break;
        
       }
       case 5:
         {
            printf("presione una tecla para salir");
            break;
            }
       default:
{
      printf ("esa opcion no existe");
      break;
}      
   }
}

}
void mostrar( )
{
   
//aqui tengo que mostrar todo pero sin el dato eliminado ya que me muestras todo  seria con registros[pos].vazio== 1 pero   no se como muy bien


         int cont;
            cont=0;
            while (cont<10) {
         printf ("\n \t ----------------");
         printf ("\n \t posisicon %d",cont);
       printf (" \n \t codigo %d",registros[cont].codigo);
       fflush(stdin);
       printf ("\n\t nombre  %s",registros[cont].nombre);
       fflush(stdin);
       printf (" \n \t apellido %s",registros[cont].apellido );
       fflush(stdin);
   cont++;
}
      }
int suma =0;
int ingresar(int codigo, int pos) {
if(pos>10)
{
   printf("todo esta lleno");
}
else
{      
registros[pos].codigo=codigo;
   int  val_atomic=0;
             int val_atomic2=0;   
               int x,y;
bool estado2 =false ;
bool estado=false ;            
          do{
             if (estado== false )
             {
                printf ("\n Nombre");
             scanf ("%s",&registros[pos].nombre);  // utilizo scanf  ya que no se utyilizar muy bienel gets creo que hice lo correcto
             } else
             {
               if (val_atomic == 1)
               {
                  printf ("\n nombre correcto no es necesario modificar ") ;   
                x=1;
   
                  }      
             }
             if (estado2 == false )
             {
             printf ("\n Apellido ") ;
       scanf (" %s", & registros[pos].apellido) ;   
             }
             else
             {
                  if (val_atomic2 == 1)
               {      
                printf( "\n apellido correcto no es necesaeio modificar") ;   
             y=1;
                
         }
             }        
                char  *str =registros[pos].nombre;  // se supone que paso  lo que esta enla estrctura   d de nombre   a un puntero  
               char *str2=registros [pos].apellido;
int i=0;
   while (str  )  // no entiendo bien pero se supone que un puntero es un array  pero  no se como funciona el while aqui
  {
     if (strlen(registros[pos].nombre) >10) // digo que si cadena es mayor a 10 entonces    que no se pueda exceder del tamaño del array
   {
      printf ("\n lo siento demasiadas letras ") ;
      printf ("\n el nombre %s", registros[pos].nombre) ;
      fflush(stdin) ;
          printf (    "      tiene %d letras ",  strlen(registros[pos].nombre)) ; // imprimo el numero de letras contenidas
      break;
   }
      if (isalpha(str )!= NULL   )   // verifico si es  o no un tipo de dato alfabetico
       {
      printf ("\n  bien ");
       estado=true ;
       break;
       }else
       {
          printf ("\n el nombre es incorrecto nada de caracteres o numeros raros \n " ) ;
            registros[pos].vazio=0;  // aqui se supone que si lo que ingreso fue incorrecto  le digo  que   me lo eliimine de la estructura
          estado=false;
          break;
       }
       i++;
  }
  i=0;
  while (str2)
  {   
     if (strlen(registros[pos].apellido) >10)
   {
      printf ("\n lo siento demasiadas letras ") ;
      printf ("\n el apellido %s", registros[pos].apellido) ;
      fflush(stdin) ;
          printf (    "     tiene %d letras ",  strlen(registros[pos].apellido)) ;
      break;
   }
       if (isalpha (str2)!= NULL)
       {
         printf ("\n  bien ");
       estado2 =true ;
       break;   
       }   
    else
    {
    printf ("\n apellido es incorrecto   nada de numeros o caractes raros \n");
      registros[pos].vazio=0;
    estado2=false;
    break;
    }
    i++;
  }
}while (estado !=true  ||  estado2!=true ) ;   
   suma =x+y;
    registros[pos].vazio=1;  // aqui valido y digo que se le pase el valor para poder ser rgistrado
printf("\nEl registro a sido realizado\n\n");
  return suma ;
}

}
void consultar() {
int cont=0, codigo;
printf("\nIngresa el codigo\n");
scanf("%d",&codigo);
while(cont<=10) {
    if (registros[cont].codigo==codigo) { // igualo el codigo con el codigo de la estructura
       if (registros[cont].vazio==1) {   // se supone que   verifico si  en determinada posicion  vazio vale uno   y si es  asi que me lo imprima
          printf("\nNombre: %s",registros[cont].nombre);
          printf("\nApelldio %s",registros[cont].apellido);
          break;
       }
    }
    cont++;
    if (cont>10)  // si es mayor a diez significa que no lo encontro
       printf("\nCodigo no encontrado\n");
}
}
int verifica_pos() {
int cont=0;
while (cont<=10) {
      if (registros[cont].vazio==0)
         return(cont);
      cont++;
}
return(-1);  /// retorno  -1 para comprobar que  no este lleno
}
void zerar() {
int cont;
for (cont=0;cont<=10;cont++)
    registros[cont].vazio=0;  // no entiendo muy bien
}
int verifica_cod(int codigo) {
int cont=0;
while (cont<=10) {
   if (registros[cont].codigo==codigo)  // comparo el codigo   y si es el mismo   que me imprima que no se puede tener el mismo codigo
   {
       printf ("lo siento no puedes tener el mismo codigo ");
     return(0);
      }
   cont++;
}
return(1);  // retorno 1 para decirle que pueda continuar  si es que no es el mismo
}

int excluir() {
int codigo, cont=0;
printf("\nIngresa el codigo para ser eliminado\n");
scanf("%d",&codigo);
while (cont<=10) {
      if (registros[cont].codigo==codigo)  // compara como arriba
         if (registros[cont].vazio==1) {    // verifico  que  el valor de la estrctura de determinada posicion  sea iguala  uno para eliminarlo con la linea sigueinte
            registros[cont].vazio=0;
            printf("\neliminado correctamente \n");
            break;
         }
      cont++;
      if (cont>10)
         printf("\nCodigo nao encontrado\n");
}
return codigo;
}

2  Programación / Programación C/C++ / tengo un problema conestructuras con arreglos !!!! en: 11 Diciembre 2015, 22:35 pm
lo que pasa es que tengo que hacer un programa que me imprima  un numero un nombre y otro numero las veces que el usuario desee  lo estoy haciendo con estructura peor no me sale y  no se cual es mi error se supone que todo esta bien este es mi codigo  el programa se debe de detenr hasta que el usuario ponga en los datos ingrados un 0 en cada dato   
ESPERO QUE ME AYUDEN !!!!

#include<conio.h>
#include<stdio.h>
#include <stdlib.h>



struct matrix_x{   
   int kick;
   int kick2;
   char nombre[10];
   struct  matrix_x *psiguiente;
};
struct matrix_x *pprimero;
  struct  matrix_x *pultimo;
 
 
  int i=0;
 
 void insertar (int dato ,char nombre[   ] ,int codigo)
  {
   
      struct  matrix_x * paux  ;
   paux=(struct matrix_x*)malloc(sizeof (struct  matrix_x));   
if (paux==NULL)
      {
         
      printf("error en la memoria ");
         }
      else
      {
   
         paux->kick  =dato;
         paux->kick2 = codigo;
      paux->nombre=nombre;
   paux->psiguiente =NULL;
if (pprimero==NULL)
{
   pprimero=paux;
        pultimo=paux;
   
}
else
{
   
   pultimo->psiguiente =paux;
   pultimo=paux;
}
         }
      
         i++;
      }
      
      
      void mostrar ()
      {
         
         
         struct matrix_x *aux;
         aux=(struct matrix_x*)malloc(sizeof (struct  matrix_x));   
         aux=pprimero;
         int i=0;
         while (aux!=NULL){

         printf ("\n dato___%d       codigo___%d  ",aux->kick,aux->kick2);
              fflush(stdin);
            printf ("\n  nombre %s    ",aux->nombre);
               fflush(stdin);
            aux=aux->psiguiente;
i++;      
         }
         }
      
      int main()
      {
         
         int cx=0;
         int dato,codigo;
   char  nombre[10];
         printf ("introduzca cero para ocntinuar\n ");
         while(dato!=0 && codigo!=0 && nombre!=0)
         {
         
            fflush(stdin);
            printf ("dame dato_%d____",cx);
      scanf ("%d",&dato);
                     printf ("dame codigo_%d___",cx);
      scanf ("%d",&codigo );
               printf ("dame nombre _%d___",cx);
               fflush(stdin);
         scanf ("%s",&nombre[cx] );
            insertar(dato,nombre,codigo);
         cx=cx+1;
            }
         mostrar();
         printf ("haz salido del programa");
         
         
      }
Páginas: [1]
WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines