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",®istros[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;
}
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",®istros[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;
}
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