Ir ao conteúdo

C Como calcular o maior e menor em c


Ir à solução Resolvido por devair1010,

Posts recomendados

Postado

Cara eu segui a lógica de todos aqui, mas continua não dando certo aqui.

 

#include <iostream>
#include <string.h>
#include <locale>

int main(){
    setlocale(LC_ALL,"portuguese");
    float n1,maior = 0,menor;
    int cont;
    menor = n1;
    maior = n1;
    for (cont=1; cont<=5; cont++){
        
        printf("Digite %iº número: ",cont);
        scanf("%f",&n1);
         
        
        if (n1 > maior) 
        maior = n1;
        if (n1 < menor) 
        menor = n1;
        
        
        
    }
        
    printf("O maior número é: %g.\nO menor número é: %g.",maior,menor);
}

 

  • Amei 1
  • Solução
Postado

@Vini Naraki     dependendo de Qual Compilador você esteja usando , na linguagem C não pode ter essa biblioteca

#include <iostream>

e no código precisa inicializar as variáveis , pois ali você armazenou em maior e em menor , o valor da variável n1 ,  mas nesse ponto do programa essa variável  tem um valor desconhecido ,  pois ela não foi inicializada antes  com nenhum valor ,  e então é lógico que com certeza ela tem um valor , mas ali ainda não se sabe qual é , e outra coisa é que como você usou a biblioteca locale , na hora de digitar os números com casas decimais precisa ser com vírgula como separador , e assim se digitar ponto , vai dar um bug , e você pode contornar isso e usar tanto ponto como vírgula , se ao invés de scanf usar fgets , que pega apenas string's ,  e depois converter para float com a função atof ,     e seu código com algumas modificações poderia ser assim  :

///#include <iostream>              /// biblioteca do c++
#include <string.h>
#include <locale.h>
int main()
{
  setlocale(LC_ALL,"portuguese");
  float n1 = 0,maior = 0,menor = 0; /// inicializar as variaveis
  int cont;
  menor = n1;                       /// valor de n1 era desconhecido
  maior = n1;                       /// valor de n1 era desconhecido
  printf("Digite Valores Com Virgula para casas decimais\n");
  for (cont=0; cont<5; cont++)      /// Loop geralmente  comeca em zero
  {
    printf("Digite %iº número: ",cont);
    scanf("%f",&n1);
    if(cont == 0)
    {
      maior = n1;                   /// inicializa maior e menor com o primeiro valor digitado só
      menor = n1;
    }
    if (n1 > maior)
      maior = n1;                   /// maior pega sempre o maior valor
    if (n1 < menor)
      menor = n1;                   /// menor recebe sempre o menor valor
  }
                                    /// com apenas um printf fica mais rápido
  printf("\n\nO maior número é: %g.\n\
          \r\bO menor número é: %g.\n\n\n",
          maior,menor);
  return 0;
}

 

  • Obrigado 1
Postado

Olá, tudo bem?

 

14 horas atrás, Vini Naraki disse:

Cara eu segui a lógica de todos aqui, mas continua não dando certo aqui.

Há solução também nos fundamentos: qual é o máximo e o mínimo valor de representação numa variável|objeto de int.

Veja

image.png.23b14b3a751c88128b0c1365a9bfe6ac.png

Fonte: opengroup

Logo

..snip..
int main(){
    ..snip...
    menor = INT_MAX;
    maior = INT_MIN;
    ..snip..
    printf("O maior número é: %g.\nO menor número é: %g.",maior,menor);
}

Não é uma solução lógica porque os limites não são entradas e estão invertidos nos respectivos objetos (menor: máximo, maior: mínimo), porém essa é outra maneira para garantir que o primeiro valor de entrada será simultaneamente o maior e menor inicial.

🙂 

  • Obrigado 2
Postado

@devair1010 estou usando o DevC++, ele parece aceitar ela sim e estou programando em C++. Cara fiz tudo como está no seu mais por alguma razão obscura o valor menor não aparece o do maior funciona normal. 

 

#include <iostream>
#include <string.h>
#include <locale>

int main(){
    setlocale(LC_ALL,"portuguese");
    float n1 = 0,maior = 0,menor = 0;
    int cont;
    
    for (cont=1; cont<=5; cont++){
        
        printf("Digite %iº número: ",cont);
        scanf("%f",&n1);
         
        if (cont == 0){
        
        maior = n1; 
        menor = n1;
    }
        if (n1 > maior) 
        maior = n1;
        if (n1 < menor) 
        menor = n1;
        
        
        
    }
        
    printf("O maior número é: %g.",maior);
    printf("\nO menor número é: %g.",menor);
    
    return 0;
}

@mauro_b Essa dai eu se quer consegui implementar no meu, mas obrigado. 

@devair1010 olha só agr deu certo, o problema era que estava faltando o if do contador muito obrigado.

  • Curtir 1
Postado
4 horas atrás, Vini Naraki disse:

Essa dai eu se quer consegui implementar no meu, mas obrigado. 

E não! Mas, não há nada sofisticado ou sequer inédito!

Veja

8 horas atrás, mauro_b disse:
    menor = INT_MAX;
    maior = INT_MIN;

seria|foi|é uma adaptação que usei para casos de variáveis int

22 horas atrás, Vini Naraki disse:
    menor = n1;
    maior = n1;

Logo

#include"stdio.h" /* scanf printf */
#include"float.h" /* FLT_MAX FLT_MIN */
int main(void){
  float n1,maior,menor;
  int cont;
  menor = FLT_MAX;
  maior = FLT_MIN;
  for(cont=1; cont<=5; cont++) {

    printf("Digite %iº número: ",cont);
    scanf("%f",&n1);

    if(n1>maior)
      maior = n1;
    if(n1<menor)
      menor = n1;
  }
  printf("O maior número é: %g.\nO menor número é: %g.",maior,menor);
}

* No seu caso, tuas variáveis são de float e  os macros são FLT_MAX, FLT_MIN

Resultado

image.png.c566162c115746ad2bfdbdedb2c170e2.png

🙂

  • Obrigado 1
  • Amei 1
Postado

   c@Vini Narakis     sim ,        mas o que quero dizer  eh   que essa forma de escrever o Loop  ,  apesar de não estar errada  ,  não eh comum e nem desejavel ,  pois caso precisar controlar a entrada de dados em vetores ,  vai perder uma das posições dele , que eh a posicao zero   [0]   ,   ou fazer malabarismos para contornar isso   ,    alem de que esse sinal de menor_ou_igual   "<="  fica estranho  na  leitura   ,    e entao por que não faz como a maioria já faz desde ah muitos tempos   ?   ,   e coloca  o loop comecando em zero  .

Crie uma conta ou entre para comentar

Você precisa ser um usuário para fazer um comentário

Criar uma conta

Crie uma nova conta em nossa comunidade. É fácil!

Crie uma nova conta

Entrar

Já tem uma conta? Faça o login.

Entrar agora

Sobre o Clube do Hardware

No ar desde 1996, o Clube do Hardware é uma das maiores, mais antigas e mais respeitadas comunidades sobre tecnologia do Brasil. Leia mais

Direitos autorais

Não permitimos a cópia ou reprodução do conteúdo do nosso site, fórum, newsletters e redes sociais, mesmo citando-se a fonte. Leia mais

×
×
  • Criar novo...