Ir ao conteúdo
  • Cadastre-se

Exercicio Struct - Insert Sort


Posts recomendados

Boa tarde, sou iniciante em programação.

Estou batendo cabeça a um bom tempo já, adaptei a Insert Sort para receber o nome do usuario(string)  e  ordenar.

Não entendi como  imprimir o  texto corretamente , qual  variavel da struct.

Quero Imprimir na tela o Nome ordenado é a questão.

Agradeço desde já.

 

 

#include<stdlib.h>
#include<stdio.h>
#include<string.h>
struct cliente
{
    int codigo;
    char nome[100];
    int cpf;
    
};
// Ordenação Inserção
void ordenarPorInsercao(struct cliente lista[], int tamanho) { 
    int i, j;
    struct cliente aux ;   
    for (i = 1; i < tamanho; i++)   {
       j = i;
       strcpy(aux.nome , lista[j].nome);                  
       while (j > 0 && (strcmp(aux.nome , lista[j-1].nome)< 0)) {                                              
               strcpy(lista[j].nome , lista[j-1].nome);
               
                j --;
       }      
      strcpy( lista[j].nome, aux.nome);             
    }
  
}
main()
{
    int opcao;
    int cont;
    
    opcao = 0;
    cont = 0;
     
     printf("Escolha o Tipo de Ordenacão: \n");
     printf("1--> Ordenar Insert Sort .......\n");
   
     scanf("%d", &opcao);
   
    switch (opcao){
    case 1:{
    
    
    struct cliente aux[50];      
    int  i;
 
       for (i = 0 ; i < 3; i++){
         
         printf("\nDigite o Nome da pessoa:");    
         setbuf(stdin, NULL);   
         gets ();      
           
         printf ("------------------------------\n");
         
        
      }    
      int c ;
      for (c = 0; c < 3; c++){
           
         
         printf("\n Ordenando Codigo em Ordem crescente: %s ", );
           
         
           printf ("\n------------------------------\n");
        
        break;
    }
    }
}
}
      

 

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

Espero que isso lhe ajude :)

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

#define TAM 3 // Constante simbólica para controle de tamanhos para uso

struct cliente
{
	
	int codigo;
	char nome[101];
	int cpf;
	
	// Struct contendo os informações do cliente
	
};

typedef struct cliente Cliente; //Define 'struct cliente' como somente 'Cliente'

void ordenacao(Cliente** clin) //	Função para ordenação
{
	
	int i, j;
	Cliente* eleito; // Ponteiro que armazena uma poisção temporariamente
	
	//	Aqui está a ISERTION SORT, você já deve saber como ele funciona
	
	//	Só que aqui ele está ordenando em ordem alfabética, usando a STRCMP para
	//	comparar a ordem das strings.
	
		// Ela retorna 0 se iguais
		// Retorna 1 ou -1 se diferentes, olhe melhor depois esse caso!
	
	//	Usei esse metodo, por que é bem mais simples de passar para uma função e
	//	editar efetivamente a ordem!
	
	for(i = 1; i < TAM; i++)
	{
		
		eleito = clin[i];
		j = i - 1;
		
		while(j >= 0 && strcmp(clin[j]->nome, eleito->nome) > 0)
		{
			
			clin[j+1] = clin[j];
			j--;
			
		}
		
		clin[j+1] = eleito;
		
	}
	
}

int main(void)
{
	
	int i; // Variável de controle dos laços
	
	Cliente** clin = (Cliente**) malloc(TAM*sizeof(Cliente*));
		for(i = 0; i < TAM; i++)
			clin[i] = (Cliente*) malloc(sizeof(Cliente));	
		
	//	Criei um vetor de ponteiros do tipo CLIENTES**, que aponta para um
	//	ponteiro do tipo CLIENTE*, que aponta para uma 'struct cliente', que é uma
	//	posição do nosso vetor que tem TAM posições!
	
	//	Assim, você pode usar a notação simples de posição: nome_do_vetor[indice_do_vetor];
	
	
	// Neste código eu tirei a parte do Switch para ficar melhor de entender!
	
	for(i = 0; i < TAM; i++)
	{
		
		printf("\n\tCliente %d\n\n", i+1);
		printf("\tDigite o codigo: "); scanf(" %d", &clin[i]->codigo);
		printf("\tDigite o nome: "); scanf(" %100[^\n]s", clin[i]->nome);
		printf("\tDigite CPF: "); scanf(" %d", &clin[i]->cpf);
		
		//	Prefira o'scanf(" %100[^\n]s", ABC)' assim, a função GETS permite invasão de memória!
		
		fflush(stdin); // Não use essa função (use outras, ou crie uma), foi apenas uma amostra
		
	}
	
	//	O FOR acima é para fazer a leitura dos dados dos clientes
	
	ordenacao(clin); // Chamada da funçã que ordenará o seu vetor dinamico
	
	printf("\n\t||  CLIENTES  ||\n");
	for(i = 0; i < TAM; i++)
	{
		
		printf("\n\tNome: %s", clin[i]->nome);
		printf("\n\tCPF: %d", clin[i]->cpf);
		printf("\n\tCodigo: %d\n", clin[i]->codigo);
		
	}
	
	// O FOR acima imprime seu vetor
	
	return 0;	
}

 

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

Visitante
Este tópico está impedido de receber novas respostas.

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!