Ir ao conteúdo

Posts recomendados

Postado

Boa tarde,estou a fazer um exercício em que preciso de ordenar apenas os nomes do seguinte programa:

#include<stdio.h>
#include<conio.h>
#include<stdlib.h>
#include<locale.h>
#include<string.h>
#include<unistd.h>
int j,i,Q=2;
typedef struct agenda{
    char Nome [20];
    char Email[40];
    char observacoes[500];
    typedef struct endereco{
        char Rua[20];
        int  Numero;
        char Complemento[20];
        char Bairro[20];
        char Cep[20];
        char Cidade[20];
        char Estado[20];
        char Pais[20];    
    };
    struct endereco Endereco;
    typedef struct telefone{
        char DDD[10];
        char NumeroTelefone[9];
    };
    struct telefone Telefone;
    typedef struct aniversario{
        int Dia;
        int Mes;
        int Anos;
    };
    struct aniversario Aniversario;
};
struct agenda Agenda[100];
void Inserir()
{
    char sair;
    do{
        for(i=0;i<Q;i++)
        {

            printf("Quandos dados quer introduzir:");
            scanf("%d",&Q);
            system("CLS");
            printf("Dados da %d pessoa:\n",i+1);
            printf("\tNome:");
            fflush(stdin);
            gets(Agenda.Nome);
            printf("\tEmail:");
            fflush(stdin);
            gets(Agenda.Email);
            printf("\tEndereço:\n");
            printf("\t\tRua:");
            fflush(stdin);
            gets(Agenda.Endereco.Rua);
            printf("\t\tNúmero:");
            scanf("%d",&Agenda.Endereco.Numero);
            printf("\t\tComplemento:");
            fflush(stdin);
            gets(Agenda.Endereco.Complemento);
            printf("\t\tBairro:");
            fflush(stdin);
            gets(Agenda.Endereco.Bairro);
            printf("\t\tCep:");
            fflush(stdin);
            gets(Agenda.Endereco.Cep);
            printf("\t\tCidade:");
            fflush(stdin);
            gets(Agenda.Endereco.Cidade);
            printf("\t\tEstado:");
            fflush(stdin);
            gets(Agenda.Endereco.Estado);
            printf("\t\tPais:");
            fflush(stdin);
            gets(Agenda.Endereco.Pais);
            printf("\tTelefone:\n");
            printf("\t\tDDD:");
            fflush(stdin);
            gets(Agenda.Telefone.DDD);
            printf("\t\tNumeto de Telefone:");
            fflush(stdin);
            gets(Agenda.Telefone.NumeroTelefone);
            printf("\tAniversario:\n");
            printf("\t\tDia:");
            scanf("%d",&Agenda.Aniversario.Dia);
            printf("\t\tMês:");
            scanf("%d",&Agenda.Aniversario.Mes);
            printf("\t\tAnos:");
            scanf("%d",&Agenda.Aniversario.Anos);
            printf("Observações:");
            fflush(stdin);
            gets(Agenda.observacoes);
        }
        printf("\nPressione 0 para sair");
        sair=getch();
    }while(sair!='0');
    system("cls");
}
void Ordenar()
{
    int p;
    char NomeO[100][20];
    char sair,aux;
    do{
        for(i=0;i<Q;i++)
        {
            for(j=0;j<20;j++)
            {
                NomeO[j]=NomeO[j];
            }
        }
        for(i=0; i<Q; i++) 
        {
            for(p=0; p<Q; p++) 
                {
                    if(strcmp(NomeO,NomeO)<0)
                    {
                        for(j=0;j<20;j++)
                        {
                            strcpy(aux,NomeO[j]);
                            strcpy(NomeO[j],NomeO[p][j]);
                            strcpy(NomeO[p][j],aux);
                        }
                    }
                }
        }
        printf("Nomes ordenados:\n");
        for(i=0; i<Q; i++)
        {
            for(j=0;j<20;j++)
            {
                printf("%c",NomeO[j]);
            }
            printf("\n");
        }
        printf("\nPressione 0 para sair");
        sair=getch();
    }while(sair!='0');
    system("cls");
}
int main()
{
    setlocale(LC_ALL,"");
    int op;
    do{
        printf("1.Inserir\n2.Ordenar\n");
        printf("Opção:");
        scanf("%d",&op);
        else if(op==1)
        {
            system("CLS");
            Inserir();
        }
        else if(op==2)
        {
            system("CLS");
            Ordenar();
        }
    }while(op!=0);
}

mas estou a ter uns problemas com o comando strcpy e não sei porque, se alguém me puder ajudar agradeço.

  • Curtir 1
Postado

Eis um pedaço do código

#include <stdio.h>
#include <stdlib.h>
#include <string.h>

struct dados {
	char Nome[20];
	char Email[40];
	char observacoes[500];
	struct endereco {
		char Rua[20];
		char Numero[10];
		char Complemento[20];
		char Bairro[20];
		char Cep[20];
		char Cidade[20];
		char Estado[20];
		char Pais[20];
	} endereco;
	struct telefone {
		char DDD[10];
		char NumeroTelefone[9];
	} telefone;
	struct aniversario {
		int Dia;
		int Mes;
		int Anos;
	} aniversario;
};
typedef struct dados dados;

/* árvore binária com os dados da agenda */
struct agenda {
	struct dados nota;
	struct agenda *maior;
	struct agenda *menor;
};

typedef struct agenda agenda;

/* fim da declaração da árvora binária */

int busca(struct agenda **Raiz, char nome[]) {
	if (*Raiz == NULL) {
		return 0; // não achou
	}
	int compara = strcmp(((*Raiz)->nota.Nome), nome);
	if (compara == 0) { // achou !
		return 1;
	} else if (compara < 0) {
		return (busca(&(*Raiz)->maior, nome));
	} else {
		return (busca(&(*Raiz)->menor, nome));
	}
}
void insercao(struct agenda **Raiz, char nome[]) {
	if (*Raiz == NULL) {
		*Raiz = (agenda *)malloc(sizeof(agenda));
		(*Raiz)->maior = NULL;
		(*Raiz)->maior = NULL;
		strcpy((*Raiz)->nota.Nome, nome);
	} else {
		int compara = strcmp(((*Raiz)->nota.Nome), nome);
		if (compara < 0) {
			insercao(&(*Raiz)->maior, nome);
		} else {
			insercao(&(*Raiz)->menor, nome);
		}
	}
}

void insere_nota(struct agenda **Raiz, struct dados *mais_um) {
	if (*Raiz == NULL) {
		*Raiz = (agenda *)malloc(sizeof(agenda));
		(*Raiz)->maior = NULL;
		(*Raiz)->maior = NULL;
		/* strcpy( (*Raiz)->nota.Nome ,  nome) ;*/
		(*Raiz)->nota = (*mais_um);
	} else {
		int compara = strcmp(((*Raiz)->nota.Nome), (*mais_um).Nome);
		if (compara < 0) {
			insere_nota(&(*Raiz)->maior, mais_um);
		} else {
			insere_nota(&(*Raiz)->menor, mais_um);
		}
	}
}

void exibe_asc(agenda **Raiz) {
	if (*Raiz == NULL) {
		return;
	}
	exibe_asc(&(*Raiz)->menor);
	printf("Nome : %s\nEmail: %s \n\n", (*Raiz)->nota.Nome, (*Raiz)->nota.Email);
	exibe_asc(&(*Raiz)->maior);
}

void exibe_desc(agenda **Raiz) {
	if (*Raiz == NULL) {
		return;
	}
	exibe_desc(&(*Raiz)->maior);
	printf("Nome: %s\nEmai: %s \n\n", (*Raiz)->nota.Nome, (*Raiz)->nota.Email);
	exibe_desc(&(*Raiz)->menor);
}
void mostra(struct dados *entrada) {
	printf("Dados da pessoa:\n");
	printf("\tNome: %s\n",(*entrada).Nome);
	printf("\tEmail:%s\n",(*entrada).Email);
	printf("\tEndereço:\n");
	printf("\t\tRua:%s\n",(*entrada).endereco.Rua);
	printf("\t\tNúmero:%s",(*entrada).endereco.Numero);
	printf("\t\tComplemento:%s",(*entrada).endereco.Complemento);
	printf("\t\tBairro:%s",(*entrada).endereco.Bairro);
	printf("\t\tCep: %s",(*entrada).endereco.Cep);
	printf("\t\tCidade: %s",(*entrada).endereco.Cidade);
	printf("\t\tEstado: %s",(*entrada).endereco.Estado);
	printf("\t\tPais: %s",(*entrada).endereco.Pais);
	printf("\tTelefone:\n");
	printf("\t\tDDD: %s",(*entrada).telefone.DDD);
	printf("\t\tNumeto de Telefone: %s",(*entrada).telefone.NumeroTelefone);
	printf("\tAniversario:\n");
	printf("\t\tDia: %d", &(*entrada).aniversario.Dia);
	printf("\t\tMês: %d", &(*entrada).aniversario.Mes);
	printf("\t\tAnos: %d\n", &(*entrada).aniversario.Anos);
	printf("Observações: %s\n\nA",(*entrada).observacoes);
}

/* função para obter dados do teclado */
void pega_dados(struct dados *entrada) {
	printf("Dados da pessoa:\n");
	printf("\tNome:");
	fflush(stdin);
	gets((*entrada).Nome);
	printf("\tEmail:");
	fflush(stdin);
	gets((*entrada).Email);
	printf("\tEndereço:\n");
	printf("\t\tRua:");
	fflush(stdin);
	gets((*entrada).endereco.Rua);
	printf("\t\tNúmero:");
	fflush(stdin);
	gets((*entrada).endereco.Numero);
	printf("\t\tComplemento:");
	fflush(stdin);
	gets((*entrada).endereco.Complemento);
	printf("\t\tBairro:");
	fflush(stdin);
	gets((*entrada).endereco.Bairro);
	printf("\t\tCep:");
	fflush(stdin);
	gets((*entrada).endereco.Cep);
	printf("\t\tCidade:");
	fflush(stdin);
	gets((*entrada).endereco.Cidade);
	printf("\t\tEstado:");
	fflush(stdin);
	gets((*entrada).endereco.Estado);
	printf("\t\tPais:");
	fflush(stdin);
	gets((*entrada).endereco.Pais);
	printf("\tTelefone:\n");
	printf("\t\tDDD:");
	fflush(stdin);
	gets((*entrada).telefone.DDD);
	printf("\t\tNumeto de Telefone:");
	fflush(stdin);
	gets((*entrada).telefone.NumeroTelefone);
	printf("\tAniversario:\n");
	printf("\t\tDia:");
	scanf("%d", &(*entrada).aniversario.Dia);
	printf("\t\tMês:");
	scanf("%d", &(*entrada).aniversario.Mes);
	printf("\t\tAnos:");
	scanf("%d", &(*entrada).aniversario.Anos);
	printf("Observações:");
	fflush(stdin);
	gets((*entrada).observacoes);

}

int main(void) {
	struct agenda *minha_agenda;
	minha_agenda = NULL;
	struct dados um_cara;
	strcpy(um_cara.Nome, "Criatura");
	strcpy(um_cara.Email, "[email protected]");
	mostra(&um_cara);
	insere_nota(&minha_agenda, &um_cara);
	mostra(&um_cara);
	
	pega_dados(&um_cara);
	insere_nota(&minha_agenda, &um_cara);

	insercao(&minha_agenda, "Joao");
	insercao(&minha_agenda, "Lara");
	insercao(&minha_agenda, "Eduardo");
	insercao(&minha_agenda, "Ana");
	insercao(&minha_agenda, "Joaquim");
	insercao(&minha_agenda, "Bernardo");
	insercao(&minha_agenda, "Diego");

	exibe_asc(&minha_agenda);
	printf("Buscando Ana...\n%d\n", busca(&minha_agenda, "Ana"));
	printf("Buscando Chica..\n%d\n", busca(&minha_agenda, "Chica"));
	printf("Buscando Criatura..\n%d\n", busca(&minha_agenda, "Criatura"));

	return 0;
}

Ainda não está pronto, mas usei uma boa parte do que você definiu. As structs (simplifiquei uns detalhes), a rotina de obtenção de dados.

 

adicionado 26 minutos depois

Pode experimentar rodá-lo aqui

https://repl.it/@bokomoko/Insercao-em-arvore-binaria-1

 

Crie uma conta ou entre para comentar

Você precisa ser um usuário para fazer um comentário

Criar uma conta

Crie uma nova conta em nossa comunidade. É fácil!

Crie uma nova conta

Entrar

Já tem uma conta? Faça o login.

Entrar agora

Sobre o Clube do Hardware

No ar desde 1996, o Clube do Hardware é uma das maiores, mais antigas e mais respeitadas comunidades sobre tecnologia do Brasil. Leia mais

Direitos autorais

Não permitimos a cópia ou reprodução do conteúdo do nosso site, fórum, newsletters e redes sociais, mesmo citando-se a fonte. Leia mais

×
×
  • Criar novo...

LANÇAMENTO!

eletronica2025-popup.jpg


CLIQUE AQUI E BAIXE AGORA MESMO!