Ir ao conteúdo

C++ maior e menor altura


Ir à solução Resolvido por eduds08,

Posts recomendados

Postado

Olá  gente , poderiam me ajudar com esse código? estou querendo a maior e a menor altura  de 5  pessoas.

fiz ate essa parte. A altura maior fica gravada mas a menor altura fica 1 em todos os casos. Alguém sabe o que está acontecendo?

 

#include<stdio.h>
#include<stdlib.h>
int main(){
    int n;
    int maior;
    int menor;
    int contador;
    
        for (contador=0;contador<5;contador++) {
             printf("\ndigite a altura:");
             scanf("%d",&n);
     
                       if(n > maior && n  < menor){ 
                                  maior= n;
                                    menor= n;
                         }
                                        if(n<menor&&n!=0){
                                               menor=n;
                                          }
                                                      if (n>maior && n!=0){    
                                                               maior=n;    
                                                        }    
        
        }
         printf ("maior altura: %d\n",maior);
         printf ("menor altura: %d\n",menor);
    }

 

bee 3040 - A Árvore de Natal.pdf

  • Amei 1
Postado

Experimenta assim:

#include<stdio.h>
#include<stdlib.h>
int main(){
    int n;
    int maior;
    int menor;
    int contador;

	maior = 0;
	menor = 0;
	for (contador=0;contador<5;contador++) {
		printf("\ndigite a altura:");
		scanf("%d",&n);
		if (menor == 0) {
			menor = n;
			maior = n;
		}
 		if (n<menor){
 		    menor=n;
		}
		if (n>maior){    
			maior=n;    
		}
	}
	printf ("maior altura: %d\n",maior);
	printf ("menor altura: %d\n",menor);
}

 

  • Curtir 1
  • Obrigado 1
  • Amei 1
  • Solução
Postado

Primeiramente, inicialize todas as suas variáveis em 0 da seguinte maneira:

int n = 0;
int maior = 0;
int menor = 0;
int contador = 0;

Isso vai evitar problemas, pois no seu primeiro if, você está verificando se "n" é maior ou menor que as variáveis "maior" e "menor", sendo que elas não possuem nenhum valor definido.

if(n > maior && n  < menor)
{ 
	maior= n;
	menor= n;
}

Esse código aqui não faz sentido. Como é possível que uma altura "n" seja maior que a maior altura e menor que a menor altura simultaneamente?


Agora, respondendo a sua dúvida do porquê que menor não está sendo o que você quer: você precisa inicializar a variável "menor" com algum valor para você poder verificar se a idade "n" digitada é menor do que "menor".

Por exemplo, um jeito simples (mas feio) de fazer isso seria inicializar "menor" com um valor alto como 999.

Aqui está um exemplo do código completo:

#include <stdio.h>

int main() {
  int n = 0;
  int maior = 0;
  int menor = 999;
  int contador = 0;

  for (contador = 0; contador < 5; contador++) {
    printf("\ndigite a altura:");
    scanf("%d", &n);

    if (n < menor && n != 0) {
      menor = n;
    }
    if (n > maior && n != 0) {
      maior = n;
    }
  }

  printf("maior altura: %d\n", maior);
  printf("menor altura: %d\n", menor);

  return 0;
}


Note que um jeito mais elegante de fazer seria inicializar as variáveis "maior" e "menor" com o valor do primeiro "n" digitado. Dessa forma, mesmo que um usuário digitasse um valor maior do que 999, o programa não bugaria e continuaria funcionando como o planejado.

  • Curtir 2
Postado

@raphu_ Você pode fazer como comentado acima e também pode ler a primeira altura fora do loop e atribuir para as outras duas variáveis, aí é só fazer um teste simples da menor e maior, p.ex,

 

#include <stdio.h>

int main(void){
    int altura;
    int maior;
    int menor;
    
    printf("1a Altura (cm): ");
    scanf("%d", &altura);
    
    maior = altura;
    menor = altura;
    
    for(int i = 2; i <= 5; i += 1){
        printf("%da Altura (cm): ", i);
        scanf("%d", &altura);
        if(altura > maior){
            maior = altura;
        }else if(altura < menor){
            menor = altura;
        }
    }
    printf("Menor = %d\nMaior = %d\n", menor , maior);
    return 0;
}

 

  • Curtir 1
  • Obrigado 1
Postado

Para arrumar o código que passei, teria que ficar assim:

if ((menor == 0) && (maior == 0)) {
	menor = n;
	maior = n;
}

Ao invés de:

if (menor == 0) {
	menor = n;
	maior = n;
}

 

  • Curtir 2
  • 2 meses depois...
Postado

valeu pessoal pela ajuda!! esse código estava vendo exercícios e buscando como fazer e surgiu esse codigo no que tava vendo na epoca, acho que maior=n e menor=n tava querendo atribuir o valor do maior ao menor e no proximo if com a variavel n comparar os valores.

  • Curtir 2
  • 4 meses depois...
Postado

Esse exercício é um clássico, tem aquela abordagem dos maximo, mínimo e meio:

 

Por exemplo.

/*
* FÓRUM CLUBE DO HARDWARE --- CdH
* @Ansi C
* 2014
*/
typedef unsigned  altura;/* Considera-se alto\baixo sempre acima do chão. */
#include <stdio.h>/* Include the header file for input and output */
int main (){
  altura nova= -1 ,menor= -1 ,maior= 0;
  /* Sendo 0 logicamente o chão, e -1 o céu */

  printf ("Entre com 5 alturas (use a Espaço ou a Enter entre elas):\n");  
  for (unsigned idx= 1 ; idx<=5 ; ++idx) {
    printf ("%c%s",'\r',">>>");

    nova= -1; 
    int c= scanf ("%u",&nova);
    if (c!=1 || ((int)nova)<=-1) {
    /* Ou seja, uma nova é muito abaixo do céu até o chão */
      if (c==EOF) break;
      if (c!=1) getchar ();
      idx-= 1;
      } else {
      if (maior<nova) maior= nova;
      if (menor>nova) menor= nova;
      }
    }
  printf ("%s","Resultado: \n\t");
  printf ("%s%u%s","<: ",menor,"\n\t");
  printf ("%s%u%c",">: ",maior,'\n');
  return 0;
  }

 

Eu acho que é isso.

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