Lógica for

6 respostas
D

Olá,

Pessoal estou com problemas para fazer um trabalho, preciso de ajuda na lógica de um dos exercicios, tenho que fazer o seguinte:

…Um dado importante que os pesquisadores desejam descobrir é como se
comporta a média da temperatura, considerada em intervalos de uma dada duração (uma
hora, meia hora, oito horas, etc.). Por exemplo, para a seqüência de medições 8, 20, 30,
50, 40, 20, -10, e intervalos de quatro minutos, as médias são respectivamente
108/4=27, 140/4=35, 140/4=35 e 100/4=25.

…sua primeira tarefa é escrever um
programa que, conhecidos a sequência de temperaturas medidas pelo sensor, e o
tamanho do intervalo desejado, informe qual a maior e qual a menor temperatura média
observadas, considerando o tamanho do intervalo dado.

…A entrada é composta de um conjunto de teste. Deverá ser perguntado
inicialmente o nome de identificação do conjunto de testes e um número inteiro e
positivo N, que indica o número total de medições de temperatura de uma sequência
obtida pelo sensor. Em seguida o um número M que indica o tamanho dos intervalos,
em minutos, em que as médias devem ser calculadas. Após isto, deverão ser obtidos os
Ns valores de medição de temperatura.

Saída
Para o conjunto de teste da entrada seu programa deve produzir duas linhas. A
primeira linha identifica o conjunto de teste, no formato ?Teste <>?, onde
<> é o nome informado. A segunda linha deve conter dois números X e Y,
separados por ao menos um espaço em branco, representando respectivamente os
valores da menor e da maior média de temperatura, conforme determinado pelo seu
programa.

Restrições
0 <N <=1000
-200 <=Temperatura <=200

estou com dificuldade na lógica do for que vai percorrer o vetor para calcular a media das temperaturas de acordo com o intervalo dado pelo usuário, o exercicio já esta assim:

public class Questão_2 {
	public static void main(String[] args) {

		//Onde N é numero total de medições e M indica o tamanho dos intervalos de medição.
		int N, M;
		double medicoes [], mediaMaior = 0, mediaMenor = 0;
		String identificacao;

		identificacao = InOut.leString("Digite a identificação do teste:");
		do{
		N = InOut.leInt("Digite o numero total de medições:");
		}while(N<0||N>=1000);
		do{
		M = InOut.leInt("Digite o intervalo das medições em minutos");
		}while(M<=0);
		medicoes = new double [N];

		for(int i = 0; i < medicoes.length; i++ ){
			medicoes[i] = InOut.leInt("Digite a medição "+(i+1));
						
			
		}
		mediaMaior = mediaMaior/M;
		mediaMenor = mediaMenor/M;
		System.out.println(identificacao+"  "+mediaMaior+" "+mediaMenor);
	}

}

Alguem pode me ajudar?

6 Respostas

D

up

D

Alguem sabe?

marcelo.bellissimo

Pelo que entendi, cada medição está com um intervalo de um minuto para a próxima, ou seja, se você executar 10 medições, pode tirar a média entre intervalos de 1 á 10 minutos…

Você vai precisar perguntar o intervalo (este deve ser sempre menor que o numero total de medições, lógicamente), e iterar sobre as suas medições usando esse intervalo… exemplo:

  • Tenho 10 medições, N=10 (indices 0,1,2, … ,9)

  • Peço médias para intervalos de 2 minutos, I=2 (I > 0 sempre, não há como tirar média de 0 valores, e a média de 1 valor é ele mesmo)

  • Logo devo percorrer o vetor somando os valores de 2 em 2 (I=2), a partir do indice 0, até o tamanho do vetor-2 ( N-I=8 ) :
    (0+1 -> 1+2 -> 2+3 -> 3+4 -> … -> 8+9)

Vou tentar escrever um código pra te ajudar, mas a idéia é basicamente essa… com esses valores você já consegue fazer tudo o que precisa fazer…

D

Ok, Marcelo

Vc já me deu uma boa ideia de como começar, agradeço se vc poder escrever um codigo com valores ficticios pra poder visualizar a ideia. Estou começando a aprender e ainda tenho muitas dificuldades.

Muito Obrigado.

marcelo.bellissimo
public class Teste {
	
	public Teste(){
		// 10 medicoes
		double[] medicoes = {4,6,8,5,3,2,5,6,9,2};
		//aqui vc captura o seu intervalo pela tela
		int intervalo = 2;		
		// apenas pra representar o numero de medicoes
		int N = medicoes.length;
		// variaveis para armazenar as medias
		double mediaMaior=0;
		double mediaMenor=0;
		// for pra iterar sobre as medicoes
		for (int i = 0; i <= N - intervalo; i++){
			double soma = 0;
			// for pra somar os 'n' valores do intervalo estipulado
			for (int j = i; j < i+intervalo; j++){
				soma = soma + medicoes[j];
			}
			double media = soma / intervalo;
			System.out.println("Soma: " + soma + "/ Media: " + media);
			// esse trecho serve apenas pra inicializar as variaveis:
			if(i == 0){
				mediaMaior = media;
				mediaMenor = media;
			}else{
				// verificar variaveis
				if (media > mediaMaior) mediaMaior = media;
				if (media < mediaMenor) mediaMenor = media;
			}
		}
		System.out.println("Media maior: " + mediaMaior);
		System.out.println("Media menor: " + mediaMenor);
	}

	public static void main(String[] args) {
		new Teste();
	}

}

Mais ou menos isso... qualquer duvida, grita aí...

D

Marcelo,

Ajudou muito o seu codigo, desculpe a demora para responder é que só agora terminei o trabalho me baseando no código que vc postou, havia mais algumas coisas a incluir que eu não postei para o trabalho não ser resolvido totalmente por quem me ajudasse no forum, afinal eu tenho que aprender ne :smiley: , e depois de muito esforço consegui terminar.

Muito Obrigado pela ajuda e atenção.

:smiley:

Criado 26 de maio de 2010
Ultima resposta 7 de jun. de 2010
Respostas 6
Participantes 2