• Revista PROGRAMAR: Já está disponível a edição #53 da revista programar. Faz já o download aqui!

suzy

o minimo nao da, pq??

9 mensagens neste tópico

Faça um algoritmo que leia um número indeterminado de números, que representam a

idade de um conjunto de indivíduos. O último dado, que não entrará nos cálculos, contém

o valor de idade negativa. Calcular e imprimir a idade máxima, mínima e média deste

grupo de indivíduos.

#include<stdio.h>
main()
{
int soma=0,total=0,media,maximo=0,minimo=0, numero,al=1;


   while (numero!=0)
      {
       printf(" introduza a idade da pessoa %d\n",al);
       scanf(" %d",&numero);
       al++;
       total=total+1;
       soma=soma+numero;
        
         if(maximo<numero)
           {
           maximo=numero;
           }
         else
         if(minimo>numero)
           {
           minimo=numero;
           }
           
       }
       
media=(soma/total);
printf(" A idade maxima e %d\n",maximo);
printf(" A idade minima e %d\n", minimo);
printf(" a media das idade é %d\n", media);

fflush(stdin);
getchar();
}

o minimo nao me da mto correcto, imagiem que coloco uma sequencia assim 2 4 5 6 7 8  8 0 , ele vai me dizer que o minimo

e 0!! mas nao quero que me diga 0 mas sim 2!! aonde modifico?? :nono1:

if(minimo>numero && numero!=0) ainda fiz isto mas nao da:(

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

É claro que dá zero porque tal como diz o enunciado o último valor deve ser negativo. O número 0 não é negativo.

Onde tens while (numero!=0) não será while (numero>=0) ?

Para além do mais tens de pôr uma condição que faça com que o último número não entre nas contas.

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

:-[ a condição do while foi distracção minha , como nao conto o ultimo numero? o ultimo numero, isto é qd o ciclo para é negativo  :hmm:, ele atraves do ciclo deveria fazer isto?? não? nao contar o ultimo??

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

#include<stdio.h>
main()
{
int soma=0,total=0,media,maximo=0,minimo=0, numero,al=1;

  
   printf(" introduza a idade da pessoa %d\n",al);
   scanf(" %d",&numero);
   if(numero<0) {
      printf("numero negativo")
   } else {
   while (numero>=0)
      {
       al++;
       total=total+1;
       soma=soma+numero;
        
         if(maximo<numero)
           {
           maximo=numero;
           }
         else
         if(minimo>numero)
           {
           minimo=numero;
           }
        
       printf(" introduza a idade da pessoa %d\n",al);
       scanf(" %d",&numero);   
       }
       
media=(soma/total);
printf(" A idade maxima e %d\n",maximo);
printf(" A idade minima e %d\n", minimo);
printf(" a media das idade é %d\n", media);
}
fflush(stdin);
getchar();
}

Podes fazer qualquer coisa deste género. Se o primeiro numero lido ja for negativo sai do programa. Depois ao ler o número no fim do ciclo o while verifica imediatamente. PS: Não testado! :P

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Claro que o mínimo dá zero. Tu estás a inicializar o mínimo a zero, logo no

         if(minimo>numero)
           {
           minimo=numero;
           }

o mínimo nunca vai ser alterado, pois qualquer que seja o número, zero nunca é maior.

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Quando calculas o máximo, igualar a 0 funciona bem (desde que não ajam números negativos), para o mínimo já não dá tão bem (não dá lol). O que podes fazer é antes do while fazer um scanf e se o número que lês aí for > 0 (igualas o minimo a esse valor). Assim o minimo ao incio é igual ao primeiro valor. O if que tens no while agora funciona.

2 pormenores são:

Quando fazes os printfs devias tê-los dentro de um if para o caso do primeiro valor ser logo negativo.

O al e o total são variáveis incrementadas do mesmo modo, simplesmente o al é sempre maior por 1, tenho a certeza que te safas só com uma dessas variáveis :P

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

para calculares o mínimo podes inicializar a variável com o valor 'INT_MAX' (uma macro disponível na biblioteca 'limits.h').

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Eu testei assim e deu:

#include<stdio.h>
main()
{
int soma=0,total=0,media,maximo=0,minimo=0, numero,al=1;

  
   printf(" introduza a idade da pessoa %d\n",al);
   scanf(" %d",&numero);
   if(numero<0) {
      printf("numero negativo");
   } else {
   minimo=numero;
   maximo=numero;
   while (numero>=0)
      {
       al++;
       total=total+1;
       soma=soma+numero;
        
         if(maximo<numero)
           {
           maximo=numero;
           }
         else
         if(minimo>numero)
           {
           minimo=numero;
           }
        
       printf(" introduza a idade da pessoa %d\n",al);
       scanf(" %d",&numero);   
       }
       
media=(soma/total);
printf(" A idade maxima e %d\n",maximo);
printf(" A idade minima e %d\n", minimo);
printf(" a media das idade é %d\n", media);
}
fflush(stdin);
getchar();
}

Só tive de adicional duas linhas para inicializar o mínimo e o máximo. Quanto ao mínimo dar 0 acho que não ha problema nenhum, alguem que tenha 2 meses de vida arredonda para 0 anos... :P:)

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Crie uma conta ou ligue-se para comentar

Só membros podem comentar

Criar nova conta

Registe para ter uma conta na nossa comunidade. É fácil!


Registar nova conta

Entra

Já tem conta? Inicie sessão aqui.


Entrar Agora