Jump to content

boa noite fiz esse exercício e não tenho certeza se está de acordo com o enunciado pode me ajudar por favor  


lucas costa da cruz
 Share

Recommended Posts

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);
        }
}

Link to comment
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Reply to this topic...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

 Share

  • Recently Browsing   0 members

    • No registered users viewing this page.
×
×
  • Create New...