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;
}
Pergunta
Vitor123
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!!!
Link para o comentário
Compartilhar em outros sites
0 respostass a esta questão
Posts Recomendados
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.