Salve galera,
Meu professor lançou um trabalho que consiste no retorno de extremos de um gráfico, de acordo com a diferença entre pontos inserida pelo usuário.
Os critérios são os seguintes:
1. Sempre manter o primeiro e o último valor da lista;
2. Dado o valor de R, se dois ou mais itens consecutivos da lista estão a uma distância menor ou igual a R, devem ser retirados da lista.
E deu alguns exemplos de entrada e saída de valores, vou colocar dois aqui:
-
PARA R=2:
[color=green]ENTRADA { -5; -15; 4; 2; 14; -1; 10; 8; 11; -22 }[/color]
[color=blue]SAÍDA { -5; -15; 14; -1; 11; -22 }[/color] -
PARA R=3:
[color=green]ENTRADA { 20; 11; 15; -2; 18; 9; 13; 6; 17; -2; 19; 16; 17; 12; 25; 23 }[/color]
[color=blue]SAÍDA { 20; 11; 15; -2; 18; 6; 17; -2; 19; 12; 25; 23 }[/color]
Cheguei até o seguinte código:
//importa a classe JOptionPane
import javax.swing.JOptionPane;
//início do programa
public class Main
{ public static void main (String[] Args)
{
//pergunta ao usuário a quantidade de pontos do gráfico (para iniciar o vetor)
int tam = Integer.parseInt(JOptionPane.showInputDialog("Digite a quantidade de pontos do gráfico. (Valor inteiro maior e do que 3)"));
//condição para perguntar novamente caso o usuário peça uma quantidade de pontos menor ou igual a 3
while (tam < 3)
{
tam = Integer.parseInt(JOptionPane.showInputDialog("Digite a quantidade de pontos do gráfico. (Valor inteiro e maior do que 3)"));
}
// inicia o vetor do gráfico e o vetor de resultados
double grafico [] = new double [tam + 2];
double resultado [] = new double [tam];
//pergunta ao usuário cada ponto do gráfico para povoar o vetor
int cont = 0;
while (cont < tam)
{
grafico [cont] = Double.parseDouble(JOptionPane.showInputDialog("Digite o " + (cont + 1) + "° número do gráfico."));
cont++;
}
//pergunta ao usuário o valor de R
double R = Double.parseDouble(JOptionPane.showInputDialog("Digite o valor de R"));
//condição para eliminar os números de acordo com o que o exercício pede e povoar o vetor de respostas
cont = 1;
int aux = 1;
//tamRes = variável para descobrir quantas posições válidas o vetor resposta irá ter (inicia em dois pq a primeira e última posição mantém sempre a mesma, portanto não entram na condição abaixo)
int tamRes = 2;
while (cont < (tam - 1))
{ //compara a posição atual do vetor grafico menos a próxima e identifica se é maior do que o R dado
//Math.abs() = método para retornar o módulo do resultado. Exemplo: |-2| = |2| = 2
if (Math.abs(grafico [cont] - grafico [cont+1]) > R)
{
//caso a condição acima seja verdadeira o vetor resultado recebe a posição atual do vetor grafico, portanto, o número não é excluído da resposta
resultado [aux] = grafico [cont];
aux++;
tamRes++;
} else
{
//caso a condição acima seja falsa ele pula o número atual e o próximo número do gráfico, excluindo-os da resposta
cont++;
}
//adiciona 1 ao contador
cont++;
}
//a primeira e última posição mantém sempre a mesma
resultado [0] = grafico [0];
resultado [aux] = grafico [tam - 1];
//prepara a resposta para exibir ao usuário
String result = "";
cont = 0;
while (cont < tamRes)
{
result += " | " + resultado [cont];
cont++;
}
//exibe a resposta ao usuário
JOptionPane.showMessageDialog(null, result);
//fim do programa
System.exit(0);
}
}
Ele dá certo para o exemplo 1, mas para o exemplo 2 tem algo que dá errado e que eu não consegui identificar no código, poderiam me ajudar?
Dica: Para ficar mais fácil de visualizar os exemplos, coloquem no excel e criem gráficos da entrada e saída de valores.
Muito Obrigado!