lucas costa da cruz Posted December 14, 2021 Posted December 14, 2021 boa noite fiz esse exercício e não tenho certeza se está de acordo com o enunciado pode me ajudar por favor Faça um programa em C que leia do teclado informações de 10 carros. Os dados a serem lidos são: marca, ano e preço. • Crie quatro funções que façam o seguinte: 1ª) Ordenação crescente do vetor pelo campo ano (ordenação Quick); 2ª) Retorne um valor float, que será a média geral do preço dos carros (somar os preços de todos os carros / total de carros); 3ª) Busca binária pelo campo ano, que deverá ser passado por parâmetro. Caso seja encontrado, a função deverá retornar um valor inteiro, que será a posição do vetor que se encontra este carro, caso não exista, a função deverá retornar um valor inteiro igual a -1. • Crie um vetor com 10 posições de struct. • Os campos do struct serão: marca, ano e preço. • Preencha o vetor. • O parâmetro a ser passado para as três funções deverão ser por referência (use o *) e por valor. • Chame a função de ordenação. • Exiba o vetor ordenado. • Chame as outras duas funções exibindo a média dos preços dos carros e a posição do vetor onde está armazenado o carro fabricado em um ano específico, ou o valor -1, caso não encontre. #include<stdio.h> #include<stdlib.h> #include <locale.h> #define N 10 typedef struct carro { char marca[50]; int ano; float preco; }Carro; /////funçoes do ordençao////////// int dividir(Carro vetor[],int esq,int dir) { int cont=esq; Carro aux; for(int i=esq+1; i < dir+1;i++) { if (vetor[i].ano < vetor[esq].ano) { cont++; aux=vetor[i]; vetor[i] = vetor[cont]; vetor[cont]= aux; } } aux = vetor[esq]; vetor[esq]=vetor[cont]; vetor[cont]=aux; return cont; } //////funçao de ordenação void quick(Carro *vetor,int esq,int dir) { int pos; if(esq < dir) { pos=dividir(vetor,esq,dir); quick(vetor,esq,pos-1); quick(vetor,pos+1,dir); } } ///////faz uma pesquisa binaria int Busca_Binaria(Carro *vetor,int ano,int inicio,int fim) { int meio; if(inicio<=fim) { meio=(inicio+fim)/2; if(ano==vetor[meio].ano)return meio; else { if(ano < vetor[meio].ano) return Busca_Binaria(vetor,ano,inicio,meio-1); else return Busca_Binaria(vetor,ano,meio+1,fim); } } return -1; } //////calcula media ////// float MediaPreco(Carro *vetor,int tam) { float soma=0; for(int i=0;i < tam;i++) { soma+=vetor[i].preco; ///soma o preço de todos os veiculos } return soma/N; ////retorna o total dividido pelo numero de veiculos } ////////lista os veiculos da lista/////// void Listar_Veiculos(Carro *vetor,int tam) { for(int i=0;i < tam;i++) { printf("%dº Veiculo:\n",i+1); printf(".........................\n"); printf("marca: %s\n",vetor[i].marca); printf("ano: %d\n",vetor[i].ano); printf("preço: R$%.2f\n",vetor[i].preco); printf(".........................\n\n\n"); } } void main() { setlocale(LC_ALL, "portuguese"); Carro Carros[N]; int busca_ano; char decisao; int Retorno_funcao;////irá receber o retorno da funçao de pesquisa printf("cadastre %d veiculos\n\n",N); for(int i =0;i<N;i++) { printf("digite a marca do %dº carro:\n",i+1); scanf("%s",Carros[i].marca); system("cls"); printf("digite o ano do %dº carro:\n",i+1); scanf("%d",&Carros[i].ano); system("cls"); printf("digite o valor do %dº carro:\n",i+1); scanf("%f",&Carros[i].preco); system("cls"); } quick(Carros,0,N-1); Listar_Veiculos(Carros,N); printf("a média dos preços dos veiculos é de R$%.2f\n\n\n",MediaPreco(Carros,N)); printf("\deseja pesquizar um veiculo? digite'S'para 'Sim'\n"); scanf("%s",&decisao); if (decisao=='s'||decisao=='S') { printf("digite o ano do veiculo\n"); scanf("%d",&busca_ano); Retorno_funcao = Busca_Binaria(Carros,busca_ano,0,N); if (Retorno_funcao ==-1) printf("veiculo não encontrado\n\n"); else printf("veiculo encontrado na posiçao %d\n\n",Retorno_funcao); } }
Administrators Fernando Mercês Posted December 14, 2021 Administrators Posted December 14, 2021 Opa, tá funcinando o programa? Se não, qual requisito que não tá sendo entendido? Em outras palavras, em qual requisito você precisa de ajuda? ? Abraço!
Recommended Posts
Archived
This topic is now archived and is closed to further replies.