askazy Posted March 25, 2014 Report Share Posted March 25, 2014 Bom estou fazendo uma lista da faculdade, e tenho esse exercício para fazer. Dado "n" números, encontre os 3 maiores, fiz da seguinte maneira. #include <stdio.h> int main (){ float num,um=0,dois=0,tres=0; int i,n; scanf ("%d",&n); for (i=1;i<=n;i++){ scanf ("%f",&num); if (num >= um){ dois=um; tres=dois; um=num; } else{ if (num>=dois){ tres=dois; dois=num; } else if (num >= tres) tres=num; } } printf ("%.2f %.2f %.2f\n",um,dois,tres); return 0; } Não sei se esse seria a melhor maneira de fazer, mas foi a que encontrei, se alguém souber outra solução mais prática. Minha maior dúvida é se em uma prova eu tivesse que achar por exemplo os 10 maiores de uma sequência de "n" números, teria que usar vetor ou tem um modo alternativo? Link to comment Share on other sites More sharing options...
HappyHippyHippo Posted March 25, 2014 Report Share Posted March 25, 2014 (edited) se em uma prova eu tivesse que achar por exemplo os 10 maiores de uma sequência de "n" números, teria que usar vetor ou tem um modo alternativo? obviamente terias de arranjar outra solução, seja com arrays ou outra estrutura qualquer. no entanto, esse tipo de código está ainda fora dos teus conhecimentos #include <stdio.h> #include <stdlib.h> #define BUFFER_SIZE 256 int compare(const void * a, const void * b) { return *(double *)b - *(double *)a; } int main(void) { char buffer[bUFFER_SIZE] = {0}; double * numbers = NULL; size_t i = 0, n = 0, m = 0; // ciclo de leitura do número de valores a serem inseridos do { // mensagem de pedido ao utilizador printf("Insira o numero total de valores a considerar (min: 3) : "); // forcar a apresentação da mensagem fflush(stdout); // ler do teclado para um buffer e ler o valor do buffer se sucesso if (fgets(buffer, BUFFER_SIZE, stdin)) sscanf(buffer, "%lu", &n); // forçar que o número lido seja pelo menos 3 } while (n < 3); // reservar memória para guardar os números if ((numbers = malloc(sizeof(double) * n)) == NULL) { // apresentar erro e sair fprintf(stderr, "Erro de alocacao de memoria"); return -1; } // ciclo de leitura do número de maiores valores inseridos do { // mensagem de pedido ao utilizador printf("Insira o numero de maiores valores inseridos a apresentar (min: 1, max: %lu) : ", n); // forcar a apresentação da mensagem fflush(stdout); // ler do teclado para um buffer e ler o valor do buffer se sucesso if (fgets(buffer, BUFFER_SIZE, stdin)) sscanf(buffer, "%lu", &m); // forçar que o número lido seja pelo menos 1 e menor que o número de valores existentes } while (m < 1 || m > n); // ler os valores for (i = 0; i < n; ++i) { // mensagem de pedido ao utilizador printf("Insira o valor (%lu) : ", i); // forcar a apresentação da mensagem fflush(stdout); // ler do teclado para um buffer e ler o valor do buffer se sucesso if (fgets(buffer, BUFFER_SIZE, stdin)) sscanf(buffer, "%lf", &numbers[i]); } // ordenar os valores qsort(numbers, n, sizeof(double), compare); // ciclo de apresentação dos maiores 'm' valores for (i = 0; i < m; ++i) printf("%lf ", numbers[i]); printf("\n"); // libertar a memória alocada free(numbers); return 0; } Edited March 25, 2014 by HappyHippyHippo IRC : sim, é algo que ainda existe >> #p@p Portugol Plus Link to comment Share on other sites More sharing options...
askazy Posted March 25, 2014 Author Report Share Posted March 25, 2014 ah não isso ai vai muito além do conteúdo da disciplina. Link to comment Share on other sites More sharing options...
Recommended Posts
Create an account or sign in to comment
You need to be a member in order to leave a comment
Create an account
Sign up for a new account in our community. It's easy!
Register a new accountSign in
Already have an account? Sign in here.
Sign In Now