Ir para conteúdo

POWERED BY:

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

Sakatsu

[Resolvido] C , ciclo while

Recommended Posts

boas, preciso desenvolver um programa que faça com que o utilizador digite o nº de quilometros percorridos por uma viatura(1) e o nº de litros, calcular os km/l, e pedir para a viatura 2, assim sucessivamente durante um numero indeterminado de viaturas, até o utilizador digitar -1 para quilometros, exemplo:

 

Digite os quilometros percorridos pela viatura 1(-1 para terminar): 100

Digite a quantidade de combustivel gasto pela viatura 1: 6

Km/litro= 16,6

 

Digite os quilometros percorridos pela viatura 2(-1 para terminar): 100

Digite a quantidade de combustivel gasto pela viatura 2: 6

Km/litro= 16,6

 

Digite os quilometros percorridos pela viatura 3(-1 para terminar): -1

Tem 2 viaturas. A media de km/litro é: XXX

 

eu tenho este codigo:

 

#include <stdlib.h>
#include <stdio.h>


int main(void)
{
 int viatura = 1;
 float km;
 float kml;
 float l;
 float media;

 while (km != -1)
 {

printf( "Introduza os km percorridos pela viatura %d (-1 para terminar): ", viatura);
scanf( "%f", &km );

printf("Introduza a quantidade de combustivel consumido pela viatura %d: ", viatura);
scanf( "%f", &l );

kml = ( km / l );

printf("Km/litro = %f\n", kml);

viatura++;

}


media = (kml / viatura);

printf("Tem %d viatura. A media de Km/litro eh %f \n", viatura, media);

 system("PAUSE");
 return 0;
}

 

Mas da errado, quando introduzo -1, ele faz +1 ciclo.

PS: eu sei que calculo da media esta errado ainda.

 

Aguardo a resposta de alguem que possa ajudar,

cumpz

Compartilhar este post


Link para o post
Compartilhar em outros sites

Acredito que seja por você ter declarado a variável km como float, e a condição para parar o loop seja um número inteiro '-' posso estar errado, pois sou iniciante em programação.

 

De qualquer modo, o resultado estaria errado, pois você precisa acumular os valores para tirar a sua média. Veja aqui:

kml = ( km / l );

Você não está acumulando. Cada hora que for executado o loop, a variável kml receberá um valor diferente. O correto é:

kml = kml + (km / l);

Caso não tenha entendido, pode perguntar.

 

Você também atribuiu 1 à variável viatura. Suponhamos que o usuario digite de cara -1, o programa iria mostrar "1 viatura, media 0.0", não tem lógica né!? :)

Inicie com 0, e no printf coloque um viatura+1 (apenas para mostrar na mensagem 1ª viatura).

 

 

Veja, fiz um código baseado no seu:

#include <stdlib.h>
#include <stdio.h>

int viatura, km;
float kml, lit, media;

main()
{

 viatura = 0;
 media = 0;

 do
  {
   system("CLS");

   printf("Digite a quantidade de KM percorridos pela %i viatura, ou, digite -1 para finalizar o programa:\n", viatura+1);
   scanf("%i", &km);

    if(km != -1)
     {
      printf("Digite a quantidade de combustivel consumido pela %i viatura:\n", viatura+1);
      scanf("%f", &lit);

      kml = kml + (km / lit); //você precisa acumular os valores para tirar sua media;
      viatura++; //conta somente se o numero de kms for diferente de -1;
     } 

  } while(km != -1); //irá repetir isso até que o numero seja diferente de -1 

  media = kml / viatura; //tira a media

  printf("Tem %i viatura(s). A media de Km/litro e %3.2f \n", viatura, media);
  system("PAUSE");
}

Compartilhar este post


Link para o post
Compartilhar em outros sites

×

Informação importante

Ao usar o fórum, você concorda com nossos Termos e condições.