Ir ao conteúdo
  • Cadastre-se

C Pessoal Estou com Dificuldade na Parte de Ordenação Selection Sort & Insertion


Aldemar Mendes

Posts recomendados

A professora perdiu pra mim fazer uma Ordenação baseado em nessas duas Aplicações Insertion Sort é Selection Sort , porém conseguir fazer na agenda que ela perdiu somente no metodo bolha alguém poderia me ajuda como posso fazer para ordena Struct de uma Agenda atraves do Telefone é Nome ne ambos os metodos ?

 

eu fiz a Agenda está logo em Baixo com o Uso do Switch !

 

 

 

 

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

struct Endereco
{
    char rua[30];
    int numero;
    char comp[30];
    char bairro[30];
    int cep;
    char cidade[30];
    char estado[3];
    char pais[30];
};

struct Telefone
{
    int dd;
    int tel;
};

struct Aniversario
{
    int dd;
    int mes;
    int ano;
};

struct Pessoa
{
    char nome[30];
    char email[30];
    struct Endereco ende;
    struct Telefone fone;
    struct Aniversario data;
    char obs[50];
};

int main()
{
    struct Pessoa contatos[100];

    int opcao;/// VARIAVEL NA ESCOLHA DO MENU
    int indice=0;///VARIAVEL QUE CONTEM O VALOR DO INDICE DO VETOR
    int i,j,encontrou=0;///INDICA A QDE DE REGISTRO
    char pesq[30];///GUARDAR O NOME DA PESQUISA
    int cod;

    do
    {
        system("cls");
        printf("---###--AGENDA DE CONTATOS--###---\n");
        printf("\n 1 - Pesquisar por NOME");//será mostrado NOME, TELEFONE, EMAIL
        printf("\n 2 - Pesquisar por MES ANIVERSARIO");
        printf("\n 3 - Pesquisar por DIA e MES ANIVERSARIO");
        printf("\n 4 - Cadastrar CONTATO");
        printf("\n 5 - Excluir CONTATO");
        printf("\n 6 - LISTAR todos os contatos");
        printf("\n 7 - ORDENAR POR NOME");//
        printf("\n 8 - ORDENAR POR LISTA TELEFONICA");
        printf("\n 9 - FINALIZAR PROGRAMA");
        printf("\n ESCOLHA UMA OPCAO:");
        scanf("%d",&opcao);
        fflush(stdin);
        switch(opcao)
        {
        case 1:
            system("cls");
            printf("\n--**** PESQUISAR POR NOME ****--");
            printf("\nPESQUISAR:");
            gets(pesq);
            for(i=0; i<indice; i++)
            {
                if(strcmp(pesq,contatos.nome)==0)
                {
                    printf("\n CODIGO:%i",i);
                    printf("\n NOME:%s",contatos.nome);
                    printf("\n EMAIL:%s",contatos.email);
                    printf("\n TEL:%d %d",contatos.fone.dd,contatos.fone.tel);
                    printf("\n ANIVERSARIO DD/MM/ANO : %i/%i/%i", contatos.data.dd, contatos.data.mes, contatos.data.ano);

                    encontrou++;
                }
            }
            if (encontrou==0)
            {
                printf("\n NENHUM REGISTRO ENCONTRADO!\n\n");
            }
            printf("\n");


            system("pause");
            break;
        case 2:
            break;
        case 3:
            break;
        case 4:
            system("cls");
            printf("\n--**** CADASTRO DE CONTATO ****--");
            printf("\n CODIGO:%i\n",indice);
            printf("\n NOME:");
            gets(contatos[indice].nome);
            printf("\n EMAIL:");
            gets(contatos[indice].email);
            printf("\n TELEFONE:");
            printf("\n DD:");
            scanf("%d",&contatos[indice].fone.dd);
            printf("\n TEL:");
            scanf("%d",&contatos[indice].fone.tel);
            printf("\n ANIVERSARIO: ");
            scanf("%i/%i/%i", &contatos[indice].data.dd, &contatos[indice].data.mes, &contatos[indice].data.ano);
            indice++;
            fflush(stdin);
            break;
        case 5:
            printf("\n--###----EXCLUIR CONTATO----###--\n");
            printf("\nINFORMA O CODIGO:");
            scanf("%i",&cod);
            printf("\n NOME:%s",contatos[cod].nome);
            printf("\n EMAIL:%s",contatos[cod].email);
            printf("\n TEL:%d %d",contatos[cod].fone.dd,contatos[cod].fone.tel);
            printf("\n ANIVERSARIO: %i/%i/%i", contatos[cod].data.dd, contatos[cod].data.mes, contatos[cod].data.ano);
            printf("\nDeseja EXCLUIR CONTATO? SIM(1)/NAO(2): ");
            scanf("%i",&i);
            if(i==1)
            {
                for(i=cod; i<indice; i++)
                {
                    strcpy(contatos.nome,contatos[i+1].nome);
                    strcpy(contatos.email,contatos[i+1].email);
                    contatos.fone.dd=contatos[i+1].fone.dd;
                    contatos.fone.tel=contatos[i+1].fone.tel;
                    contatos.data.dd=contatos[i+1].data.dd;
                    contatos.data.mes=contatos[i+1].data.mes;
                    contatos.data.ano= contatos[i+1].data.ano;
                }
                indice--;
            }
            break;
        case 6:
            for(i=0; i<indice; i++)
            {
                printf("\nCODIGO: %i",i);
                printf("\n NOME:%s",contatos.nome);
                printf("\n EMAIL:%s",contatos.email);
                printf("\n TEL:%d %d",contatos.fone.dd,contatos.fone.tel);
                printf("\n ANIVERSARIO: %i/%i/%i", contatos.data.dd, contatos.data.mes, contatos.data.ano);
                printf("\n--------------------------------\n");
            }
            system("pause");
            break;
        case 7:

                system("cls");
                printf("=================================\n");
                        printf("Ordenando por nome");

                for(i = 1; i < indice; i++){
                        for(j=0; j < indice-1; j++){

                            if(strcmp(contatos[j].nome, contatos[j+1].nome)>0){
                                strcpy(pesq, contatos[j].nome);
                                strcpy(contatos[j].nome, contatos[j+1].nome);
                                strcpy(contatos[j+1].nome, pesq);

                            }
                        }

                        for(i=0; i<indice; i++){
                            printf("\n");
                            printf("NOME: = %s\n", contatos.nome);
                        }

                }


                    system("pause");

            break;


        case 8:
            system("cls");
                printf("=================================\n");
                        printf("Ordenando por Lista Telefonica");
                for(i=1; i < contatos.fone.dd; i++){
                        for(j=1; j < contatos.fone.dd-1; j++){
                            for(i=1; i < contatos.fone.tel; i++){
                                for(j=1; j < contatos.fone.tel-1; j++){


                    if(strcmp(contatos[j].fone.dd, contatos[j+1].fone.dd) > 0){
                        strcpy(pesq, contatos[j].fone.dd);
                        strcpy(contatos[j].fone.dd, contatos[j+1].fone.dd);
                        strcpy(contatos[j+1].fone.dd, pesq);

                                }

                            }
                        }
                    }
                }

            break;
        }
    }
    while(opcao!=9);


    return 0;
}

  • Curtir 1
Link para o comentário
Compartilhar em outros sites

@Aldemar Mendes       seu código estava com alguns erros ,  então ajeitei e ele  está fazendo a ordenação em ordem crescente, mas não sei que método  é Insertion Sort ou  Selection Sort  .    veja se é isso que você quer :

#include <stdio.h>
#include <conio.h>
#include <LOCALE.H>
#include <stdlib.h>
#include <string.h>
struct Endereco
{
    char rua[30];
    int numero;
    char comp[30];
    char bairro[30];
    int cep;
    char cidade[30];
    char estado[3];
    char pais[30];
};
struct Telefone
{
    int dd;
    int tel;
};
struct Aniversario
{
    int dd;
    int mes;
    int ano;
};
struct Pessoa
{
    char nome[30];
    char email[30];
    struct Endereco ende;
    struct Telefone fone;
    struct Aniversario data;
    char obs[50];
};
int main()
{
    setlocale(LC_ALL,"");
    struct Pessoa contatos[100];
    int opcao,m,d;           /// VARIAVEL NA ESCOLHA DO MENU
    int indice=1;        ///VARIAVEL QUE CONTEM O VALOR DO INDICE DO VETOR
    int i,j,encontrou=0; ///INDICA A QDE DE REGISTRO
    char pesq[30];       ///GUARDAR O NOME DA PESQUISA
    int pesq2;
    char aux[20],auy[20];
    int cod;
    do
    {
        system("cls");
        printf("---###--AGENDA DE CONTATOS--###---\n");
        printf("\n 1 - Cadastrar CONTATO");
        printf("\n 2 - LISTAR todos os contatos");
        printf("\n 3 - Excluir CONTATO");
        printf("\n 4 - Pesquisar por NOME");//será mostrado NOME, TELEFONE, EMAIL
        printf("\n 5 - Pesquisar por MES ANIVERSARIO");
        printf("\n 6 - Pesquisar por DIA e MES ANIVERSARIO");
        printf("\n 7 - ORDENAR POR NOME");//
        printf("\n 8 - ORDENAR POR LISTA TELEFONICA");
        printf("\n 9 - FINALIZAR PROGRAMA");
        printf("\n     ESCOLHA UMA OPCAO: ");
        opcao=getch()-48;
        /*scanf("%d",&opcao);*/
        fflush(stdin);
        switch(opcao)
        {
            case 1:
                system("cls");
                printf("\n--**** CADASTRO DE CONTATO ****--");
                printf("\n CODIGO: %i\n",indice);
                printf("\n NOME:");
                gets(contatos[indice].nome);
                printf(" EMAIL:");
                gets(contatos[indice].email);
                printf(" TELEFONE  DDD :");
                scanf("%d",&contatos[indice].fone.dd);
                printf(" TEL Número : ");
                scanf("%d",&contatos[indice].fone.tel);
                printf(" ANIVERSARIO: Dia ");//Mês espaço Ano");
                scanf("%d",&contatos[indice].data.dd);
                printf(" ANIVERSARIO: Mês ");
                scanf("%i",&contatos[indice].data.mes);
                printf(" ANIVERSARIO: Ano ");
                scanf("%i",&contatos[indice].data.ano);
                indice++;
                fflush(stdin);
                break;
            case 2:
                printf("\nListando Todos Contatos\n");
                for(i=1; i<indice; i++)
                {
                    printf("\nCODIGO: %i",i);
                    printf("\n NOME:%s",contatos[i].nome);
                    printf("\n EMAIL:%s",contatos[i].email);
                    printf("\n TEL:%d %d",contatos[i].fone.dd,contatos[i].fone.tel);
                    printf("\n ANIVERSARIO: %i/%i/%i", contatos[i].data.dd, contatos[i].data.mes, contatos[i].data.ano);
                   printf("\n--------------------------------\n");
                }
                if(indice==1)printf("\n       NENHUM REGISTRO ENCONTRADO!\n\n");
                system("pause");
                break;
            case 3:
                i=0;
                printf("\n--###----EXCLUIR CONTATO----###--\n");
                printf("\nINFORME O CÓDIGO : ");
                scanf("%i",&cod);
                if(cod>0){
                    printf("\n NOME:%s",contatos[cod].nome);
                    printf("\n EMAIL:%s",contatos[cod].email);
                    printf("\n TEL:%d %d",contatos[cod].fone.dd,contatos[cod].fone.tel);
                    printf("\n ANIVERSARIO: %i/%i/%i", contatos[cod].data.dd, contatos[cod].data.mes, contatos[cod].data.ano);
                    printf("\nDeseja EXCLUIR CONTATO? SIM(1)  NAO(2): ");
                    /*scanf("%i",&i);*/
                    i=getch()-48;
                }
                if(i==1)
                {
                    for(i=cod; i<indice; i++)
                    {
                        contatos[i] = contatos[i+1];
                    }
                    indice--;
                }
                break;
            case 4:
                system("cls");
                printf("\n--**** PESQUISAR POR NOME ****--");
                printf("\nPESQUISAR: ");
                gets(pesq);
                encontrou=0;
                for(i=1; i<indice; i++)
                {
                    if(strcmp(pesq,contatos[i].nome)==0)
                    {
                        printf("\n CODIGO:%i",i);
                        printf("\n NOME:%s",contatos[i].nome);
                        printf("\n EMAIL:%s",contatos[i].email);
                        printf("\n TEL:%d %d",contatos[i].fone.dd,contatos[i].fone.tel);
                        printf("\n ANIVERSARIO DD/MM/ANO : %i/", contatos[i].data.dd);
                        printf("%d/%d",contatos[i].data.mes, contatos[i].data.ano);
                        encontrou=1;
                    }
                }
                if(encontrou==0)
                {
                    printf("\n NENHUM REGISTRO ENCONTRADO!\n\n");
                }
                printf("\n");
                system("pause");
                break;
        case 5:
            printf("\nPesquisar por MES ANIVERSARIO\n");
            printf("\nPESQUISAR: ");
            scanf("%d",&m);
            encontrou=0;
            for(i=1; i<indice; i++)
            {
                if(m == contatos[i].data.mes)
                {
                    printf("\n CODIGO:%i",i);
                    printf("\n NOME:%s",contatos[i].nome);
                    printf("\n EMAIL:%s",contatos[i].email);
                    printf("\n TEL:%d %d",contatos[i].fone.dd,contatos[i].fone.tel);
                    printf("\n ANIVERSARIO DD/MM/ANO : %i/", contatos[i].data.dd);
                    printf("%d/%d",contatos[i].data.mes, contatos[i].data.ano);
                    encontrou=1;
                }
                printf("\n------------------------------------------------------\n");
            }
            if(encontrou==0)
            {
                printf("\n     REGISTRO NÃO ENCONTRADO!\n\n");
            }
            printf("\n");
            system("pause");
            break;
        case 6:
            printf("\nPesquisar por DIA e MES ANIVERSARIO\n");
            printf("\nPESQUISAR: ");
            printf("Informe O Mês ");
            scanf("%d",&m);
            printf("Informe O Dia ");
            scanf("%d",&d);
            encontrou=0;
            for(i=1; i<indice; i++)
            {
                if(m == contatos[i].data.mes && d == contatos[i].data.dd)
                {
                    printf("\n CODIGO:%i",i);
                    printf("\n NOME:%s",contatos[i].nome);
                    printf("\n EMAIL:%s",contatos[i].email);
                    printf("\n TEL:%d %d",contatos[i].fone.dd,contatos[i].fone.tel);
                    printf("\n ANIVERSARIO DD/MM/ANO : %i/", contatos[i].data.dd);
                    printf("%d/%d",contatos[i].data.mes, contatos[i].data.ano);
                    encontrou=1;
                }
                printf("\n------------------------------------------------------\n");
            }
            if(encontrou==0)
            {
                printf("\n     REGISTRO NÃO ENCONTRADO!\n\n");
            }
            printf("\n");
            system("pause");
            break;
        case 7:
            system("cls");
            printf("=================================\n");
            printf("       Ordenando por nome\n");
            for(i=1; i < indice; i++){
                for(j=i+1; j < indice; j++){
                    if(strcmp(contatos[i].nome, contatos[j].nome) == 1){
                        contatos[0] = contatos[j];
                        contatos[j] = contatos[i];
                        contatos[i] = contatos[0];
                    }
                }
                printf("\n");
                for(i=1; i<indice; i++){
                    printf("NOME: = %s\n",contatos[i].nome);
                }
            }
            system("pause");
            break;
        case 8:
            system("cls");
            printf("=================================\n");
            printf("Ordenando por Lista Telefonica");
            for(i=1; i < contatos[i].fone.tel; i++){
                for(j=i+1; j < indice; j++){
                    if(contatos[i].fone.dd > contatos[j].fone.dd){
                        contatos[0] = contatos[j];
                        contatos[j] = contatos[i];
                        contatos[i] = contatos[0];
                    }
                }
            }
            break;
        }
    }
    while(opcao != 9);
    printf("\n\n");
    return 0;
}

 

  • Obrigado 1
Link para o comentário
Compartilhar em outros sites

  • Membro VIP

Olá @Aldemar Mendes

 

Em 28/09/2017 às 16:51, Aldemar Mendes disse:

A professora perdiu pra mim fazer uma Ordenação baseado em nessas duas Aplicações Insertion Sort é Selection Sort , porém conseguir fazer na agenda que ela perdiu somente no metodo bolha alguém poderia me ajuda como posso fazer para ordena Struct de uma Agenda atraves do Telefone é Nome ne ambos os metodos ?

 

Adendo inicial: seu texto ficou um pouco confuso, mas (acho que) deu para entender. Por favor, tente usar uma escrita um pouco mais formal, ok?

 

Vamos lá!

 

Em relação ao Insert Sort e Selection Sort, eles não são «aplicações», são apenas nomes de "algoritmos de ordenação", ou seja, são apenas "técnicas"... conceitos!. São estruturas "prontas" que servem para fazer algo, de determinado modo... Existem vários métodos de ordenação... como visto aqui. Cada um com sua características... vantagens e desvantagens.

 

 

Então, a primeiro coisa que você precisa fazer é se aprofundar no tema. Estudar sobre o Insertion Sort e Selection Sort, saber como eles funcionam.

 

Podemos dizer que todos os métodos tem o mesmo princípio: "recebe um vetor desordenado, e retorna esse vetor ordenado". O que muda de um para outro é como é feito a ordenação. Se você consegue fazer com Bubble Sort, conseguirá com outro.

 

 

Sobre:

Em 28/09/2017 às 16:51, Aldemar Mendes disse:

como posso fazer para ordena Struct de uma Agenda atraves do Telefone é Nome ne ambos os metodos ?

É exatamente da mesma forma que um vetor comum. Veja, o que é ordenado é o vetor, não seus Struck, ou seja, no seu contexto, estará ordenando as "Pessoas"... especificamente o vetor contatos.

 

O Struck entra na forma que seu vetor está estruturado... Como essa estrutura tem vários campos, precisa saber qual parâmetro será usado para ordenar o vetor... no seu caso, ou por Telefone ou por Nome. Se por exemplo for por nome, usará o campo contatos[].nome, ou seja, o vetor contatos será ordenado pelo item nome dos contatos.

 

 

MINHA SUGESTÃO

Para facilitar os testes, crie um outro algoritmo mais simples. Usando um vetor de nomes e ordenando com Insert Sort ou Selection Sort. Ex.:
 

"Crie um programa que leia um vetor de 5 nomes, ordene utilizando o Insert Sort e exiba o vetor ordenado."

 

Posta o código aqui e onde está com dúvidas.   Após entender a estrutura, adapta o código ao seu programa.

 

 

 

No aguardo.

 

 

 

No aguardo.

 

 

 

 

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

Ebook grátis: Aprenda a ler resistores e capacitores!

EBOOK GRÁTIS!

CLIQUE AQUI E BAIXE AGORA MESMO!