Ir ao conteúdo
  • Cadastre-se

C Ordenar nomes com o comando strcpy


Mpixell

Posts recomendados

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
Link para o comentário
Compartilhar em outros sites

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

 

Link para o comentário
Compartilhar em outros sites

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...

 

GRÁTIS: ebook Redes Wi-Fi – 2ª Edição

EBOOK GRÁTIS!

CLIQUE AQUI E BAIXE AGORA MESMO!