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

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

Pergunta

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 preço;

}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].preço; ///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].preço);
               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].preço);
           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 para o comentário
Compartilhar em outros sites

2 respostass a esta questão

Posts Recomendados

  • 0
Em 14/12/2021 em 11:13, britivaldo disse:

O algoritmo de ordenação me parece não ser o Quick. Então, em outro programa, escreva o algoritmo de ordenação quick sort conforme enunciado, teste-o e depois que comprovar que ordena, importe-o para o programa do exercício.

esse dia foi tenso para até hoje não esqueço dessa derrota 

Link para o comentário
Compartilhar em outros sites

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...