Ir ao conteúdo
  • Cadastre-se

C Acumular valores em uma variável


Visitante
Ir à solução Resolvido por arfneto,

Posts recomendados

Questão - Desenvolver um programa que leia uma sequência de pares de valores, acumule os valores e quando receber um par de zeros, imprime na saída a velocidade média em km/h, zerando os acumuladores, o programa é encerrado quando recebe um par de -1.

 

Como fazer com que 'metro' e 'seg' acumulem valores até receberem um par de 0?

 

#include <stdio.h>

int main(){
	float vm, metro, seg;
	float d=0, t=0;

	while ((metro > -1) && (seg > -1)){
		printf("Digite a distância (m) e o tempo (s): \n");
		scanf("%f %f", &metro, &seg);
		if ((metro == 0) && (seg == 0)){
			d += metro
			t += seg
			vm = (d/t) * 3.6;
			printf("Velocidade média: %.2f km/h.\n", vm);
		}
	}
	return 0;
}

 

Link para o comentário
Compartilhar em outros sites

  • Solução
	float vm, metro, seg;
	float d=0, t=0;

	while ((metro > -1) && (seg > -1)){

 

  • inicialize metro e seg
  • declare uma variável por linha
  • teste com os valores exatos que estão no enunciado
		if ((metro == 0) && (seg == 0)){
			d += metro
			t += seg
			vm = (d/t) * 3.6;
			printf("Velocidade média: %.2f km/h.\n", vm);
		}

 

Você misturou as duas condições. Quando for zero imprime, quando não for apenas acumula

Link para o comentário
Compartilhar em outros sites

@arfneto

#include <stdio.h>

int main(){
	float vm; 
	float metro=1;
	float seg=1;
	float d=0;
	float t=0;

	while ((metro > 0) && (seg > 0)){
		printf("Digite a distância (m) e o tempo (s): \n");
		scanf("%f %f", &metro, &seg);
		if ((metro == 0) && (seg == 0)){
			d += metro;
			t += seg;
			vm = (d/t) * 3.6;
			printf("Velocidade média: %.2f km/h.\n", vm);
		}
		else if ((metro == -1) && (seg == -1)){
			printf("Valor inválido.\n");
		}
	}
	return 0;
}

 

Link para o comentário
Compartilhar em outros sites

Você de fato leu o que eu disse e leu o enunciado?

 

Quando vierem dois zeros você mostra o resultado

 

Quando forem outros valores você acumula a menos que sejam -1 e -1

 

Então porque seu programa não faz isso?

 

E acumula e mostra na mesma condição, se o enunciado é claro nesse sentido: ou mostra ou acumula?

Link para o comentário
Compartilhar em outros sites

@arfneto Já corrigi, foi falta de atenção minha. Obrigado.

 

#include <stdio.h>

int main(){
	float vm; 
	float metro=1;
	float seg=1;
	float d=0;
	float t=0;

	while ((metro > 0) && (seg > 0)){
		printf("Digite a distância (m) e o tempo (s): \n");
		scanf("%f %f", &metro, &seg);
      		d += metro;
		t += seg;
		if ((metro == 0) && (seg == 0)){
			vm = (d/t) * 3.6;
			printf("Velocidade média: %.2f km/h.\n", vm);
		}
		else if ((metro == -1) && (seg == -1)){
			printf("Valor inválido.\n");
		}
	}
	return 0;
}

 

Link para o comentário
Compartilhar em outros sites

Sabe o que acontece quando o cara digita zero e zero? Seu programa soma os dois zeros. Não é muito esperto e você pode perder nota...

 

Porque não segue o enunciado e faz como eu disse? 
 

33 minutos atrás, arfneto disse:

E acumula e mostra na mesma condição, se o enunciado é claro nesse sentido: ou mostra ou acumula?

 

Pois é: você trocou por sempre acumula, às vezes mostra. 

 

Pense nisso

 

adicionado 1 minuto depois

E veja no manual que scanf() retorna um valor: use!

 

Seu programa fica muito frágil sem isso

 

adicionado 4 minutos depois

E porque chamou de "valor invalido" a simples condição de encerramento do programa?

adicionado 9 minutos depois

E você não está zerando os totais para o próximo ciclo quando mostra os resultados....

 

Deve prestar mais atenção... Muito mais atenção

Link para o comentário
Compartilhar em outros sites

@arfneto Código corrigido.

 

#include <stdio.h>

int main(){
	float vm; 
	float metro=1;
	float seg=1;
	float d=0;
	float t=0;

	while ((metro > -1) && (seg > -1)){
		printf("Digite a distância (m) e o tempo (s): \n");
		scanf("%f %f", &metro, &seg);
		d += metro;
		t += seg;
		if ((metro == 0) && (seg == 0)){
			if (t > 0){
				vm = (d/t) * 3.6;						
			}
			printf("Velocidade média: %.2f km/h.\n", vm);
			d=0;
			t=0;
		}
	}
	return 0;
}

 

Link para o comentário
Compartilhar em outros sites

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

Ebook grátis: Aprenda a ler resistores e capacitores!

EBOOK GRÁTIS!

CLIQUE AQUI E BAIXE AGORA MESMO!