Jump to content
Gui2000

Código de agenda em C[Resolvido]

Recommended Posts

O código é para a colocar 3 letras a partir de 3 nomes diferentes. Ou seja:
A-> Adriano
B-> Bruno
C->Carol
Com isso eu criaria uma agenda.

Problema

1-Ao eu compara o que tem dentro da letra que como não tem nada seria NULL então ele nem entra no casso que ele é igual a NULL

2- Ao receber a posição da outra struct em: aux2=aux->pontpnome, ou seja ele recebe de dentro da struct letras a posição da próxima struct que é de nomes. Ao debuggar ele insinua erro ai também.

Caso vejam mais um erro por favor me comuniquem.

 

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#define tamanho 3
typedef struct nomes vetnome;
typedef struct letras letra;
struct nomes{
char nome[30];
vetnome *pont;
};
struct letras{
char L[4];
vetnome *pontpnome;
};
void inserir (letra **let, letra tabEsp[tamanho], vetnome **ini,int qtd);
int chave(char nome[30]);
int main()
{
int qtd=0,i=0;
char nome[30], resposta[30];
letra tabEsp[tamanho];
for(i=1;i<4;i++)
{
strcpy(tabEsp.L,"NULL");
}
printf("Insira 3 nomes diferentes primeiramente: ");
while(qtd<4)
{
letra *let=(letra *)malloc(sizeof(letra));
vetnome *ini=(vetnome *)malloc(sizeof(vetnome));
let->pontpnome=NULL;
ini->pont=NULL;
inserir(&let, tabEsp, &ini, qtd);
system("pause");
system("cls");
qtd++;
}
puts("Aqui você irá colocar nomes dentro das 3 listas criadas! :)");
while(resposta!="NAO")
{
printf("Digite um nome: ");
scanf("%s", &nome);
letra *let=(letra *)malloc(sizeof(letra));
vetnome *ini=(vetnome *)malloc(sizeof(vetnome));
let=NULL;
ini=NULL;
inserir(&let, tabEsp, &ini, qtd);
printf("Você quer continuar?[Sim/Nao]");
scanf("%s", &resposta);
system("pause");
system("cls");
}
return 0;
}
int chave(char nome[30])
{
unsigned int resultado= (int)nome[0]%tamanho;
if(resultado<0)
resultado=-resultado;
return resultado;
}
void inserir (letra **Let, letra tabEsp[tamanho], vetnome **Ini, int qtd)
{
char nome[30];
puts("Digite um nome: ");
scanf("%s", &nome);
int chaveres=chave(nome);
vetnome *aux2;
aux2=Ini;
letra *aux;
aux=Let;
if(chaveres==1)
{
if(tabEsp[chaveres].L=="NULL")
{
letra *novo= (letra*) malloc(sizeof(letra));
vetnome *name=(vetnome *)malloc(sizeof(vetnome));
strcpy(novo->L,nome[0]);
strcpy(name->nome,nome);
aux=novo;
aux2=name;
aux->pontpnome=&aux2;
aux2->pont=NULL;
return ;
} else
if(tabEsp[chaveres].L!="NULL")
{
aux2=aux->pontpnome;
while(aux2!=NULL)
{
aux2=aux2->pont;
}
vetnome *name=(vetnome *)malloc(sizeof(vetnome));
strcpy(name->nome,nome);
aux2->pont=name;
name->pont=NULL;
return;
}
}
if(chaveres==2)
{
if (tabEsp[chaveres].L==NULL)
{
letra *novo=(letra *)malloc(sizeof(letra));
vetnome *name=(vetnome *)malloc(sizeof(vetnome));
strcpy(novo->L,nome[0]);
strcpy(name->nome,nome[30]);
aux=novo;
aux2=name;
aux->pontpnome=&aux2;
return;
} else if(tabEsp[chaveres].L!=NULL)
{
aux2=aux->pontpnome;
while(aux2!=NULL)
{
aux2=aux2->pont;
}
vetnome *name=(vetnome *)malloc(sizeof(vetnome));
strcpy(name->nome,nome[30]);
aux2->pont=&name;
name->pont=NULL;
return;
}
}
if(chaveres==3)
{
if (tabEsp[chaveres].L==NULL)
{
letra *novo=(letra *)malloc(sizeof(letra));
vetnome *name=(vetnome *)malloc(sizeof(vetnome));
strcpy(novo->L,nome[0]);
strcpy(name->nome,nome[30]);
aux=novo;
aux2=name;
aux->pontpnome=&aux2;
return;
} else if(tabEsp[chaveres].L!=NULL)
{
aux2=aux->pontpnome;
while(aux2!=NULL)
{
aux2=aux2->pont;
}
vetnome *name=(vetnome *)malloc(sizeof(vetnome));
strcpy(name->nome,nome);
aux2->pont=name;
name->pont=NULL;
return;
}
}
if (chaveres>3)
{
puts("Espaço não reservado!");
}
}

 

CÓDIGO RESOLVIDO

 

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#define tamanho 3
typedef struct nomes vetnome;
typedef struct letras letra;
struct nomes{
        char nome[30];
        vetnome *pont;
        };

struct letras{
        char L[4];
        vetnome *pontpnome;
        };

void inserir (letra **let, letra tabEsp[tamanho], vetnome **ini,int qtd);
int chave(char nome[30]);

int main()
{
	int qtd=1,i=0;
	char nome[30], resposta[30];

    letra tabEsp[tamanho]={NULL,NULL,NULL};

	printf("Insira 3 letras diferentes, você guardará nomes com essas iniciais depois desse processo: ");
    while(qtd<4)
	{
    	letra *let=(letra *)malloc(sizeof(letra));
    	vetnome *ini=(vetnome *)malloc(sizeof(vetnome));
    	let->pontpnome=NULL;
    	ini->pont=NULL;
    	inserir(&let, tabEsp, &ini, qtd);
    	system("pause");
    	system("cls");
    	qtd++;
	}

	puts("Aqui você irá colocar nomes dentro das 3 listas criadas! :)");

	while(resposta!="NAO")
	{
    	letra *let=(letra *)malloc(sizeof(letra));
    	vetnome *ini=(vetnome *)malloc(sizeof(vetnome));
    	let=NULL;
    	ini=NULL;
    	inserir(&let, tabEsp, &ini, qtd);
    	printf("Você quer continuar?[Sim/Nao]");
    	scanf("%s", &resposta);
		system("pause");
    	system("cls");
	}
    return 0;
    }

int chave(char nome[30])
{
	unsigned int resultado= (int)nome[0]%tamanho;

	if(resultado<0)
		resultado=-resultado;
	return resultado;
}




void inserir (letra **Let, letra tabEsp[tamanho], vetnome **Ini, int qtd)
{
    char nome[30];
    puts("Digite um nome: ");
    scanf("%s", &nome);
    int chaveres=chave(nome);
    vetnome *aux2;
    aux2=Ini;
    letra *aux;
    aux=Let;
    if(chaveres==1)
	{
		if(tabEsp[chaveres].L==NULL)
		{
			letra *novo= (letra*) malloc(sizeof(letra));
			vetnome *name=(vetnome *)malloc(sizeof(vetnome));
			strcpy(novo->L,nome[0]);
			strcpy(name->nome,nome);
			aux=novo;
			aux2=name;
			aux->pontpnome=&aux2;
			aux2->pont=NULL;
			return ;
		} else
            if(tabEsp[chaveres].L!=NULL)
            {
				aux2=aux->pontpnome;
				while(aux2!=NULL)
					{
						aux2=aux2->pont;
					}
				vetnome *name=(vetnome *)malloc(sizeof(vetnome));
				strcpy(name->nome,nome);
				aux2=name;
				aux2->pont=NULL;
				return;
			}
	}

	if(chaveres==2)
	{
		if (tabEsp[chaveres].L==NULL)
		{
			letra *novo=(letra *)malloc(sizeof(letra));
			vetnome *name=(vetnome *)malloc(sizeof(vetnome));
			strcpy(novo->L,nome[0]);
			strcpy(name->nome,nome[30]);
			aux=novo;
			aux2=name;
			aux->pontpnome=&aux2;
			return;
		} else if(tabEsp[chaveres].L!=NULL)
			{
				aux2=aux->pontpnome;
				while(aux2!=NULL)
					{
                        aux2=aux2->pont;
					}
				vetnome *name=(vetnome *)malloc(sizeof(vetnome));
				strcpy(name->nome,nome[30]);
				aux2->pont=&name;
				name->pont=NULL;
				return;
			}
	}

	if(chaveres==3)
	{
		if (tabEsp[chaveres].L==NULL)
		{
			letra *novo=(letra *)malloc(sizeof(letra));
			vetnome *name=(vetnome *)malloc(sizeof(vetnome));
			strcpy(novo->L,nome[0]);
			strcpy(name->nome,nome[30]);
			aux=novo;
			aux2=name;
			aux->pontpnome=&aux2;
			return;
		} else if(tabEsp[chaveres].L!=NULL)
			{
				aux2=aux->pontpnome;
				while(aux2!=NULL)
					{
						aux2=aux2->pont;
					}
				vetnome *name=(vetnome *)malloc(sizeof(vetnome));
				strcpy(name->nome,nome);
				aux2->pont=name;
				name->pont=NULL;
				return;
			}
	}
	if (chaveres>3)
	{
		puts("Espaço não reservado!");
	}
	}

 

Share this post


Link to post
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now

  • Similar Content

    • By Motta
      A outra cara do algoritmo
    • By christin cley
      Construir um algoritmo em C++ que preencha um matriz quadrada de tamanho 4 pelo usuário. Após o preenchimento pelo usuário, verifique na diagonal principal qual foi o maior valor digitado e exiba na tela o valor. Por fim,  exiba na tela toda matriz em forma de matriz na tela.
    • By 4ly
      O exercício propunha fazer duas funções uma para multiplicação e outra para criar uma fatorial, porém devem ser feitas usando apenas operações de soma e subtração
      bom fiz uma função para multiplicar e esta funcionando porém estou tentando utiliza-la para fazer a fatorial e o resultado sempre da zero ;-; podem me ajudar 
       
       
      algoritmo "semnome" var a,b:inteiro funcao multi(a:inteiro;b:inteiro):real var aux:real inicio se a=0 entao retorne 0 senao aux <- 0 enquanto b>0 faca aux <- aux+a b <- b-1 fimenquanto retorne aux fimse fimfuncao funcao fatorial(a:inteiro):real var fat,res:real inicio enquanto fat > 0 faca fat<-a fat <- fat - 1 res <- multi(fat,a) fimenquanto retorne res fimfuncao inicio leia(a) escreval(fatorial(a)) fimalgoritmo  
    • By andreluizsgf
      Boa noite, eu estou tentando implementar uma função que imprima uma árvore como ela deveria ser, com o pai acima e a direita do menor filho e acima e a esquerda do maior filho. 
      Já tenho duas funcões que me permitem imprimir por nível, porém estou tentando adaptá-las para a impressão correta. Exemplo:
      árvore: 5,4,3,2,1;
      Impressão:
                  5
          3             4
      1      2

      O código para o print é este:
       
      void ---ivel(node_t* raiz, int level) { if (raiz == NULL){ for(int i = 0 ; i < 3 ; i++){ printf("\t"); return;} } if (level == 1) { for (int i=0; i<altura(raiz); i++) printf("\t"); simpleprint(raiz); } else if (level > 1) { ---ivel(raiz->left, level-1); ---ivel(raiz->right, level-1); } }   void printarordem(node_t *raiz) { int h = altura(raiz); int i; for (i=1; i<=h; i++) { printf("\t"); ---ivel(raiz, i); printf("\n"); } }

      Se alguém souber como resolver este ou sugerir outra implementação, fico super agradecido! 
×

Important Information

Ao usar o fórum, você concorda com nossos Terms of Use.