Ir para conteúdo
Fórum Script Brasil
  • 0

Vetor de Struct


Vitor123

Pergunta

Boa Tarde,

Pessoal, eu venho aqui pedir uma ajudinha com esse exercício que estou fazendo, a minha dúvida se refere a função "ordena".

Preciso ordenar um vetor structs de acordo com o nome do carro, porém, não estou conseguindo trazer todos os dados do carro junto com o seu nome. Da forma como coloquei aqui estou apenas ordenando o nome, até ai tudo certo, mas sera que teria algum jeito de ordenar toda o vetor sem ficar repetindo as linhas com o strcpy??

já tentei utilizar apenas o "x" ao invés do "x.nome" porém, ele não compila.

Desde já agradeço!!!

// Exercício 7.5.cpp : Defines the entry point for the console application.
//

#include "stdafx.h"
#include "string.h"
#include "stdlib.h"
#include "ctype.h"


typedef struct{
    int dia;
    int mes;
    int ano;
} DATA;

typedef struct{
    char marca[30];
    char nome[30];
    int ano;
    double valor_venda;
    char chassis[20];
    char combustivel;
    DATA d;
} CARRO;

void ordena(CARRO []);
int busca(char [],CARRO [],int);

void main()
{
    CARRO carros[15] = {
        {"MARCA","KA",1999,1450.54,"12345",'E',{17,1,1999}},
        {"MARCA","Kombi",1999,1450.54,"54321",'G',{17,1,1999}},
        {"MARCA","Opala",1999,1450.54,"45321",'D',{17,1,1999}},
        {"MARCA","Civic",1999,1450.54,"43215",'E',{17,1,1999}},
        {"MARCA","Fusca",1999,1450.54,"45124",'G',{17,1,1999}},
        {"MARCA","Parati",1999,1450.54,"11354",'D',{17,1,1999}},
        {"MARCA","Gol",1999,1450.54,"42135",'E',{17,1,1999}},
        {"MARCA","Uno",1999,1450.54,"55114",'D',{17,1,1999}},
        {"MARCA","Golf",1999,1450.54,"33222",'G',{17,1,1999}},
        {"MARCA","Croosfox",1999,1450.54,"14521",'D',{17,1,1999}},
        {"MARCA","Chevete",1999,1450.54,"33325",'E',{17,1,1999}},
        {"MARCA","KA",1999,1450.54,"55555",'G',{17,1,1999}},
        {"MARCA","Fusca",1999,1450.54,"44512",'G',{17,1,1999}},
        {"MARCA","Uno",1999,1450.54,"22554",'D',{17,1,1999}},
        {"MARCA","Gol",1999,1450.54,"11452",'E',{17,1,1999}},
    };


    int i;
    ordena(carros);
    int m = busca("12345",carros,15); //usuario irá digitar um chassis, para encontrar o carro
    if( m != -1)    
        printf("Carro: %s",carros[m].nome); //Mostra o carro de acordo com o chassis encontrado
    

    getchar();
}

void ordena(CARRO x[])
{

    bool ordenado=true;
    char aux[30];
    int i,tam=15;

    do{
        ordenado = true;
        for(i=0; i<tam; i++)
        {
            if(stricmp(x[i].nome, x[i + 1].nome) > 0)
            {
                strcpy(aux, x[i].nome);
                strcpy(x[i].nome, x[i + 1].nome);
                strcpy(x[i + 1].nome, aux);
                ordenado=false;
            }
        }
        tam--;
    }while (ordenado==false);

    for(i=0;i<15;i++) //Mostra os carros em ordem alfabetica
    {
        printf("nome: %s",x[i].nome);
        printf("\n");
    }

}
int busca(char nome[],CARRO L[],int n)
{

    int i, f, m,compare;
    i = 0;
    f = n-1;

    while(i <= f)
    {
        m = (i+f)/2;

        compare = strcmp(nome,L[m].chassis);

        if(strcmp(nome,L[m].chassis) == 0)
            return m;
        if(strcmp(nome,L[m].chassis) < 0)
            f = m-1;
        else
            i = m+1;
    }
    return -1;
}

Link para o comentário
Compartilhar em outros sites

0 respostass a esta questão

Posts Recomendados

Até agora não há respostas para essa pergunta

Participe da discussão

Você pode postar agora e se registrar depois. Se você já tem uma conta, acesse agora para postar com sua conta.

Visitante
Responder esta pergunta...

×   Você colou conteúdo com formatação.   Remover formatação

  Apenas 75 emoticons são permitidos.

×   Seu link foi incorporado automaticamente.   Exibir como um link em vez disso

×   Seu conteúdo anterior foi restaurado.   Limpar Editor

×   Você não pode colar imagens diretamente. Carregar ou inserir imagens do URL.



  • Estatísticas dos Fóruns

    • Tópicos
      152,3k
    • Posts
      652,3k
×
×
  • Criar Novo...