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
      Novo algoritmo afina capacidade de previsão em sistemas caóticos
    • By Motta
      Toshiba afirma ter criado algoritmo mais rápido que supercomputadores
       
      Notícia sem a fonte original , não achei nada no site da Toshiba,
    • By Nwband
      programar um determinado programa pf
       
      Preciso de um programa em C que seja capaz de ler uma frase com ate 100 caracteres e imprimi-la, conseguir identificar quantas letras maiusculas e minusculas tem na frase e escreve-la ao contrario
    • By Auface
      Pessoal estou iniciando na programaçaoem C e tenho este trabalho para fazer.
       
      Ajudem por favor , programação em C, e não tenho a minima ideia de como fazer, o enunciado é em inglês e está, neste link, é o exercício B(building a field).
      http://maratona.ime.usp.br/hist/2018/resultados18/contest_onesided.pdf
      Por enquanto eu fiz isso, mas não tenho certeza se começo assim.eu acho também que tenho que fazer este exercício a partir de um arquivo e lendo ele, mas também n sei como fazer.
       
      #include <stdio.h> int main() {     float x1,y1,x2,y2;     printf("Ponto 1: \n");     scanf("%f %f",&x1,&y1);     printf("Pont 2: \n");     scanf("%f %f",&x2,&y2);     printf("%.4f\n",(sqrt(pow(x2-x1,2)+pow(y2-y1,2))));     return 0; }
    • By eduardobraz
      Corrigir dois erros:
       
      entrada:
      10 4
      -93 -86 49 -62 -90 -63 40 72 11 67
       
      Saída
      NAO
      6
      5
      4
      2
      1
       
      Mais com esse está assim
      NAO
      1
      3
      4
      5
       
       
      #include <stdio.h>
      int main(){
          int n, k, i, j, cont, vetor[1000], aux, po;
          while (1){
              
              scanf("%d %d", &n, &k);
              
              if(n <= 1000 && n >= 0 && k <= 1000 && k >= 0){
                  
                  break;
                  
              }
          }
          for(i = 0; i < n; i++){
              
              scanf("%d", &vetor);
              
          }
          for(i = 0; i < n; i++){
          
              if(vetor <= 0){
                  cont++;
              }
          }
          if(cont >= k){
              printf("NAO\n");
              for(i=1; i<n; i++){
                  if (vetor <= 0){
                      aux = vetor;
                      po=i;                 
                      printf("%d\n", po);
                  }
              }
          }
          else{
              printf("SIM\n");
          }
      }
×

Important Information

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