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ú

Temas - 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
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");
         
         
      }