Menú

Mostrar Mensajes

Esta sección te permite ver todos los mensajes escritos por este usuario. Ten en cuenta que sólo puedes ver los mensajes escritos en zonas a las que tienes acceso en este momento.

Mostrar Mensajes Menú

Mensajes - matrixsystem

#1
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
 :D vaya gracias me has ayudado con mi problema te lo agradezco ya decia yo jjaja si apenas empiezo pero esta bien que buen que es que bueno  personas que saben mas que yo muchas gracias
#3
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");
         
         
      }