Ir ao conteúdo

C Acumular valores em uma variável


Ir à solução Resolvido por arfneto,

Posts recomendados

Postado

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;
}

 

  • Solução
Postado
	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

Postado

@arfneto eu alterei o código, porém assim como antes, o programa não calcula a velocidade média.

Saída do terminal: Velocidade média: -nan km/h.

Postado
2 minutos atrás, José Yakamura disse:

@arfneto eu alterei o código, porém assim como antes, o programa não calcula a velocidade média.

Saída do terminal: Velocidade média: -nan km/h.

 

?

 

E porque não postou o código? Como vamos saber o que alterou?

Postado

@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;
}

 

Postado

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?

Postado

@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;
}

 

Postado

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

Postado

@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;
}

 

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!