Faculdade Sumaré,
Trabalho de PPI - 3o Semestre,
Turma de Ciências da Computação
184_0012_141_M1_A.
Cálculo Estatístico
São Paulo, 2015
2
Faculdade Sumaré,
Trabalho de PPI - 3o Semestre,
Turma de Ciências da Computação
184_0012_141_M1_A.
Cálculo Estatístico
Andrio Lino Feijo – RA 1312413
Carlos Felix dos Santos – RA 1417022
Hugo Vinicius de Melo Silva – RA 1415321
José Eduardo de Araujo Nunes – RA 1413355
Kleber Ramos Freitas Leite – RA 1310267
São Paulo, 2015
Sumário
1. Introdução................................................................................................................................. 2
2. Objetivo .................................................................................................................................... 2
3. Justificativa ............................................................................................................................... 2
4. Resumo ..................................................................................................................................... 2
5. Integração das disciplinas ......................................................................................................... 3
6. Apêndice A – Tela da Interface do Programa ............................................................................ 3
7. Apêndice B – Código fonte do programa ................................................................................... 4
2
1. Introdução
Existem muitas coisas que somos capazes de fazer, construir belas edificações, decifrar o DNA humano, identificar matérias atomicamente minúsculas como o Bosson de Higgs, desenvolver o pensamento quântico e suas metodologias de cálculos avançados, preparar toda uma estrutura de dados conhecida por “Big Data”. Para que tudo isso seja possível, nós precisamos analisar uma quantidade substancial de dados.
Sem utilizar um método adequado, não é simples trabalhar com um volume de informações da ordem de centenas de dados. Mas para muitas análises que encontramos no dia-a-dia, trabalhamos com amostras de centenas, milhares e milhões de dados, como por exemplo, quais são os programas de TV assistidos em determinado estado ou os dados do IBGE sobre a renda de toda a população de um país.
Esse é o momento que a estatística se prova eficaz e nos ampara, pois oferece um método organizado e eficiente que permite resumir e apresentar essas informações de maneira que auxilie na compreensão e interpretação destes dados.
2. Objetivo
Colocar em prática o conteúdo trabalhado durante as aulas, tanto em programação quanto em estatística, com o objetivo de obter uma plataforma simples onde serão feitos os cálculos estatísticos a partir de determinada entrada, produzindo como resultado tabelas e gráficos dinâmicos, que podem ser utilizados para a conferência de um exercício, na resolução de um problema real ou em testes e refinamento de dados.
3. Justificativa
Os alunos e professores se beneficiarão com uma ferramenta de precisão na sala de aula, que os ajude a ganhar tempo e também a visualizar com maior detalhe e em tempo hábil as diversas resoluções de um mesmo exercício, facilitando a alteração de variáveis pré-determinadas de cálculos e aprimorando o processo ensino-aprendizagem durante as aulas, tão bem quanto auxiliando as estimativas e análises de estatísticas diversas.
4. Resumo
Buscamos nesse projeto efetuar o desenvolvimento de um software para a área de estatística que calcule as frequências: Absoluta (f), Absoluta Relativa (fr), Acumulada (F) e Acumulada Relativa (Fr) de variáveis discretas e contínuas, que produza os gráficos de barras e os polígonos de frequência, para o caso de variáveis contínuas, haverá a possibilidade de alterar a amplitude das classes (h) e o ponto inicial do agrupamento para aprimorar os resultados nesses gráficos, obtendo de forma rápida e prática a melhor visualização possível dos resultados calculados.
3
5. Integração das disciplinas
Será desenvolvida a integração das seguintes disciplinas fundamentais para a execução do projeto:
Laboratório de Programação: para produzir os algoritmos do projeto em Java; Matemática II: simplificando fórmulas e obtendo desempenho nos cálculos
matemáticos; Estrutura de Dados: cerceando o horizonte acerca das melhores práticas em
programação para que possamos compor um algoritmo simples e eficaz; Estatística: cujo conteúdo didático será a base para a realização desse projeto.
6. Apêndice A – Tela da Interface do Programa
4
7. Apêndice B – Código fonte do programa
/*
* Trabalho de PPI da Faculdade Sumaré, turma de Ciências da Computação,
3.o Semestre.
* Cálculos Estatísticos
*/
package estatistica;
import java.awt.Desktop;
import java.awt.event.MouseAdapter;
import java.awt.event.MouseEvent;
import java.awt.print.PrinterException;
import java.io.BufferedWriter;
import java.io.File;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.OutputStreamWriter;
import java.net.URL;
import java.text.DecimalFormat;
import java.text.MessageFormat;
import java.util.Vector;
import javax.swing.ButtonGroup;
import javax.swing.JCheckBox;
import javax.swing.JFileChooser;
import javax.swing.JLabel;
import javax.swing.JOptionPane;
import javax.swing.JRadioButton;
import javax.swing.JTable;
import javax.swing.filechooser.FileNameExtensionFilter;
import javax.swing.table.DefaultTableModel;
/**
*
* @author Eduardo Nunes
*/
public class JanelaPrincipal extends javax.swing.JPanel {
// Estrutura a tabela para a quantidade de classes
Double[] l = new Double[15];
Double[] L = new Double[15];
Double[] Pm = new Double[15];
int[] f = new int[15];
int[] F = new int[15];
Double[] fr = new Double[15];
Double[] Fr = new Double[15];
Double[] fx = new Double[15];
Double[] Vr = new Double[15];
int N, k, h;
Double media, mediana, variancia, desviopadrao, coeficientevar;
String moda;
boolean range = false;
DecimalFormat df = new DecimalFormat("###.##");
/**
* Creates new form JanelaPrincipal
*/
public JanelaPrincipal() {
5
initComponents();
}
private void CalcularTabela() {
LimparTabelaInterna();
// Se não tiver ROL, calcular ROL (com base nos dados brutos)
if (jTextField4.getText().length() < 1 &&
jTextArea1.getText().length() > 0) {
CalcularROL();
}
// Se tiver ROL, calcula a tabela com os dados baseados no ROL
if (jTextField4.getText().length() > 0) {
String vt[] = jTextField4.getText().split(" ");
Double dados[] = new Double[vt.length];
int teste;
for (int i=0; i<vt.length; i++) {
dados[i]=Double.parseDouble(vt[i]);
teste = (int) Math.round(dados[i]);
//verifica se são todos inteiros, se tiver casa decimal é
variável quantitativa contínua:
if (Math.abs(dados[i] - teste) != 0) {
range = true;
}
}
vt = null;
// Definições e cálculos de N, k e h.
N = dados.length; // Amostra.
k = 1; // Quantidade de classes
//h = 0; // Amplitude de classe
try {
h = Integer.parseInt(jTextField2.getText());
} catch (Exception ex) {
h = 0;
}
if (h > 0) { range = true; }
// se temp <> dados[i] entao k++
// senao temp = dados[i]
Double temp = dados[0];
if (range == false) {
//estima valor de k contando os valores únicos no rol
for (int i=0; i < dados.length; i++) {
if (Math.abs(temp - dados[i]) != 0) {
k++;
temp = dados[i];
}
if (k == 16) { // Passou do limite, tabela com
amplitude de classe.
range = true;
break;
}
}
}
// Monta a tabela de dados quantitativos discretos
if (range == false) {
int j=0;
6
for (int i=0; i<dados.length; i++) {
// Analise de dados:
if (l[j] == null) { //se o dado for nulo, adiciona
o valor
l[j] = dados[i];
f[j] = 1;
} else {
if (Math.abs(l[j] - dados[i]) == 0) { //se os dados
sao iguais:
f[j]++;
} else { //se o dado não for nulo,
adiciona o proximo valor
if (j < k-1) { // se a tabela não explodiu o
limite de k, adiciona valor
j++;
l[j] = dados[i];
f[j]++;
} else { //se a tabela explodiu o limite
do k, fazer nova tabela para dados quantitativos contínuos (com amplitude
de classe).
range = true;
break;
}
}
}
}
}
// Monta tabela com dados quantitativos contínuos (range =
true)
if (range == true) {
LimparTabelaInterna();
// Calcular k e h
int calcK = (int) Math.ceil(Math.sqrt(dados.length));
if (calcK < 6) { calcK = 5; }
int calcH = (int) Math.ceil((dados[dados.length-1] -
dados[0]) / calcK);
int menorH = (int) Math.ceil((dados[dados.length-1] -
dados[0]) / 15);
// Verifica se o menorH vai realmente dar certo (ñ estourar
a lista)
// PEGA l[0] + k*h E TEM QUE SER MENOR QUE L[dados.length-
1]
if ((dados[0] + (15*menorH)) - dados[dados.length-1] < 0.1)
{
menorH++;
}
// Tenta obter valor de h se existir na tela
try {
h = Integer.parseInt(jTextField2.getText());
if (menorH > h) {
h = menorH;
}
} catch (Exception ex) {
h = calcH;
}
k = (int) Math.ceil((dados[dados.length-1] - dados[0]) /
h);
if (k > 15) { //nao sei pq o k foi maior, então corrige k e
h.
7
k = 15;
h = (int) Math.ceil((dados[dados.length-1] - dados[0])
/ k);
}
// Montagem da tabela
int j = 0;
for (int i=0; i<dados.length; i++) {
// Analise de dados:
if (l[j] == null) { //se o dado for nulo,
adiciona o valor e calcula o
// Forçar limite inferior da primeira classe ?
if (jTable1.getValueAt(0, 0) == null) {
l[j] = Math.floor(dados[i]);
} else {
String l0[] = jTable1.getValueAt(0,
0).toString().split("-");
l[j] = Double.parseDouble(l0[0]);
}
L[j] = l[j] + h;
f[j] = 1;
} else {
if (dados[i] < L[j]) { //se o dado pertence ao
intervalo, aumenta o f:
f[j]++;
} else if (((dados[i] > L[j]) || (Math.abs(L[j] -
dados[i]) == 0)) && j == k-1) { //caso o dado seja igual o limite do
intervalo, criar nova classe.
j++;
k++;
l[j] = L[j-1];
L[j] = l[j] + h;
f[j]++;
} else { //se o dado não pertence ao
intervalo, adiciona o proximo valor de classe
i--;
j++;
l[j] = L[j-1];
L[j] = l[j] + h;
}
}
}
}
// Aqui a tabela está pronta e correta (variáveis discretas ou
variáveis contínuas)
// Calculamos agora o F, fr, Fr e Pm onde aplicável.
CalcularFfrFr();
} else {
// encontra qual coluna está preenchida, e sai na primeira que
encontrar,
// assim se a tabela inteira estiver preenchida, utiliza
geralmente a `f` como referência.
for (int i=0;i<jTable1.getColumnCount()-2; i++) {
if (!jTable1.getColumnName(i).equalsIgnoreCase("Variável"))
{
try {
jTable1.getValueAt(0,i).toString();
if (!jTable1.getValueAt(0,i).toString().isEmpty())
{
8
if (PopulaTabela(jTable1.getColumnName(i))) {
CalcularFfrFr();
}
break;
}
} catch (Exception ex) { continue; }
}
}
}
}
private void DesenharTabela() {
DefaultTableModel dtm = new DefaultTableModel(0, 0);
String header[] = new String[] { "Variável", "f", "F", "fr", "Fr",
"Pm", "f.x", "Variância" };
if (L[0] == null) {
header = new String[] { "Variável", "f", "F", "fr", "Fr",
"f.x", "Variância" };
}
dtm.setColumnIdentifiers(header);
jTable1.setModel(dtm);
// calcula sigmafx
double sigmafx=0;
for (int i = 0; i < k; i++) {
sigmafx+=fx[i];
}
if (!jTextField3.getText().equalsIgnoreCase(String.valueOf(k))) {
jTextField3.setText(String.valueOf(k)); // Classes
}
jTextField2.setText(String.valueOf(h)); // Amplitude de
classe
jTextField1.setText(String.valueOf(N)); // Amostras
jTextField8.setText(String.valueOf(df.format(sigmafx))); //
Somatória f.x
media=sigmafx/N;
jTextField5.setText(String.valueOf(df.format(media))); // Calcula a
média
CalculaMediana();
jTextField6.setText(String.valueOf(df.format(mediana))); // Calcula
a mediana
CalculaModa();
jTextField7.setText(moda); // Calcula a moda
// desenha a tabela
double sigmavar = 0.0;
for (int i = 0; i < k; i++) {
if (L[0] == null) {
Vr[i] = f[i] * Math.pow((l[i]-media),2);
sigmavar+=Vr[i];
dtm.addRow(new Object[] {
df.format(l[i]), f[i], F[i], df.format(fr[i]) + "
%", df.format(Fr[i]) + " %", df.format(fx[i]), df.format(Vr[i])
});
} else {
Vr[i] = f[i] * Math.pow((Pm[i]-media),2);
sigmavar+=Vr[i];
dtm.addRow(new Object[] {
df.format(l[i]) + "-" + df.format(L[i]), f[i],
9
F[i], df.format(fr[i]) + " %", df.format(Fr[i]) + " %", df.format(Pm[i]),
df.format(fx[i]), df.format(Vr[i])
});
}
}
variancia=sigmavar/(N-1);
desviopadrao=Math.sqrt(variancia);
coeficientevar = desviopadrao / media * 100;
jTextField9.setText(String.valueOf(df.format(variancia)));
jTextField10.setText(String.valueOf(df.format(desviopadrao)));
jTextField11.setText(String.valueOf(df.format(coeficientevar)) + "
%");
jTextField12.setText(String.valueOf(df.format(sigmavar)));
jButton13.setEnabled(true);
jButton11.setEnabled(true);
jButton5.setEnabled(true);
//jButton3.setEnabled(true); // grafico de barras
//jButton4.setEnabled(true); // grafico de poligonos
}
private void CalcularROL() {
jTextField4.setText(jTextArea1.getText().replaceAll(";", " "));
jTextField4.setText(jTextField4.getText().replaceAll("\\s+","
"));
jTextField4.setText(jTextField4.getText().replaceAll(",","."));
jTextField4.setText(jTextField4.getText().replaceFirst("^ ",
""));
String vt[] = jTextField4.getText().split(" ");
Double dados[] = new Double[vt.length];
int teste;
for (int i=0; i<vt.length; i++) {
dados[i]=Double.parseDouble(vt[i]);
teste = (int) Math.round(dados[i]);
//verifica se são todos inteiros, se tiver casa decimal é
variável quantitativa contínua:
if (Math.abs(dados[i] - teste) != 0) {
range = true;
}
}
vt = null;
// Ordena os dados
Double temp;
for (int i=0; i<dados.length-1; i++) {
if (dados[i] > dados[i+1]) {
temp = dados[i];
dados[i] = dados[i+1];
dados[i+1] = temp;
i = -1;
}
}
temp = null;
// Monta o ROL dos dados
jTextField4.setText(null);
for (int i=0; i<dados.length; i++) {
jTextField4.setText(jTextField4.getText() + dados[i] + "
");
10
}
jTextField4.setText(jTextField4.getText().replaceAll(".0 ", "
").trim());
}
private void CalcularFfrFr() {
// Calculamos agora o F, fr, Fr e Pm onde aplicável.
// k = qtde classes; N = amostra; h = amplitude classe;
// menor = dados[0]; maior = dados[dados.length];
for (int i=0;i<k;i++) {
if (i == 0) {
F[i] = f[i];
fr[i] = (double) f[i] / N * 100;
Fr[i] = fr[i];
} else {
F[i] = F[i-1] + f[i];
fr[i] = (double) f[i] / N * 100;
Fr[i] = Fr[i-1] + fr[i];
}
if (L[i] != null) {
Pm[i] = (l[i] + L[i]) / 2;
fx[i] = Pm[i] * f[i];
} else {
fx[i] = l[i] * f[i];
}
}
DesenharTabela();
}
private void CalculaMediana() {
// Encontra a mediana
// Se N for par entao é o N/2 e N/2 +1 posicao pos1+pos2 /2 que da
a mediana
// Se N for impar entao é o item da posicao N/2
// pega pela tabela F
float pos1 = (float)N/2, pos2 = pos1+1;
Double num1 = null, num2 = null;
int j=0;
for (int i=0; i<F.length; i++) {
if (l[i] == null) {
break;
}
if (pos1 <= F[i] && num1 == null) {
num1 = l[i];
j = i;
}
if (pos2 <= F[i] && num2 == null) {
num2 = l[i];
}
}
if (L[0] == null) { // Mediana para dados discretos;
if (N%2 == 0) { // N é par
mediana = (num1+num2)/2;
} else { // N é impar
mediana = num1;
}
} else { // Mediana para dados continuos:
// formula: Mediana = l[pos_do_i] + (( pos1 - F[pos_do_i -1] )
11
/ f[pos_do_i] ) * h;
if (j > 0) {
mediana = l[j] + (double) ( (double) ( pos1 - F[j-1] ) /
f[j] ) * h;
} else {
mediana = l[j] + (double) ( (double) pos1 / f[j] ) * h;
}
}
}
private void CalculaModa() {
// Encontra a moda
// moda[i][0] = o numero (l[i])
// moda[i][1] = vezes que se repete (f[i]]
// 1.o acha a maior freq abs.
// 2.o acha os outros que tem essa mesma freq abs.
// 3.o se somando todos os valores dos numeros nao passar da
amostra
// ai todos os moda[0] sao os numeros da moda.
// if (moda[0][1]*moda.lenght < N)
String strModa = "";
Double[][] modas = new Double[15][2];
int j=0;
for (int i=0; i<f.length; i++) { // Encontra o maior valor da moda
(parte 1)
if (l[i] == null) {
break;
}
if (i == 0) {
modas[0][1] = (double) f[0];
} else {
if (f[i] > modas[0][1]) {
modas[0][1] = (double) f[i];
j = i;
}
}
}
if (L[0] == null) {
for (int i=0; i<f.length; i++) { // Encontra outros valores de
i (parte2)
if (f[i] == modas[0][1]) {
modas[i][0] = (double) l[i];
modas[i][1] = (double) f[i];
}
}
float somaTotal = 0;
for (int i=0; i<15; i++) { // Soma todos os valores de moda[1]
verificando se é menor que N e já compõe a string de saida. (parte3)
if (modas[i][0] != null) {
strModa += String.valueOf(df.format(modas[i][0])) + "
";
somaTotal += modas[i][1];
}
}
if (somaTotal < N) {
moda = strModa.trim();
} else {
moda = null;
}
} else { // Moda para dados quantitativos continuos
int d1=0, d2=0;
12
if (j > 0) {
d1 = f[j] - f[j-1];
} else {
d1 = f[j];
}
if (j < f.length) {
d2 = f[j] - f[j+1];
} else {
d2 = f[j];
}
moda = df.format(l[j] + (double) (d1 / (double) (d1+d2)) * h);
// formula: Moda = l[pos_do_i] + ( d1 / (d1+d2)) * h;
}
}
private boolean PopulaTabela(String frequencia) {
int c = 0, v = 0;
for (int i=0; i<jTable1.getColumnCount(); i++) {
if (jTable1.getColumnName(i).equals(frequencia)) {
c = i;
} else if
(jTable1.getColumnName(i).equalsIgnoreCase("Variável")) {
v = i;
}
}
if (frequencia.equals("f")) {
String celula;
k = 0;
h = 0;
N = 0;
for (int i=0; i<15; i++) {
try {
celula = jTable1.getValueAt(i, v).toString();
String valor[] = celula.replace(" ", "").split("-");
if ((i>0) && (h > 0)) {
// já tem h, faz o incremento automático
l[i] = L[i-1];
L[i] = l[i] + h;
} else {
l[i] = Double.parseDouble(valor[0]);
if (valor.length == 2) {
L[i] = Double.parseDouble(valor[1]);
h = (int) Math.round(L[i] - l[i]);
}
}
celula = jTable1.getValueAt(i, c).toString();
f[i] = Integer.parseInt(celula);
k++;
N+=f[i];
} catch (Exception ex) { //Gambiarra da preguiça: só
precisa digitar a primeira linha da variavel
try {
celula = jTable1.getValueAt(i, c).toString();
if ((i>0) && (h > 0)) {
// já tem h, faz o incremento automático
l[i] = L[i-1];
L[i] = l[i] + h;
}
f[i] = Integer.parseInt(celula);
k++;
13
N+=f[i];
} catch (Exception ex2) { continue; }
}
}
} else if (frequencia.equals("F")) {
String celula;
k = 0;
h = 0;
N = 0;
for (int i=15; i>=0; i--) {
try {
if (i == 0) {
F[i] = Integer.parseInt(jTable1.getValueAt(i,
c).toString());
f[i] = F[i];
} else {
f[i] = Integer.parseInt(jTable1.getValueAt(i,
c).toString()) - Integer.parseInt(jTable1.getValueAt(i-1, c).toString());
}
k++;
N+=f[i];
} catch (Exception ex3) { continue; }
}
for (int i=0; i<15; i++) {
try {
celula = jTable1.getValueAt(i, v).toString();
String valor[] = celula.replace(" ", "").split("-");
if ((i>0) && (h > 0)) {
// já tem h, faz o incremento automático
l[i] = L[i-1];
L[i] = l[i] + h;
} else {
l[i] = Double.parseDouble(valor[0]);
if (valor.length == 2) {
L[i] = Double.parseDouble(valor[1]);
h = (int) Math.round(L[i] - l[i]);
}
}
} catch (Exception ex) { //Gambiarra da preguiça: só
precisa digitar a primeira linha da variavel
try {
celula = jTable1.getValueAt(i, c).toString();
if ((i>0) && (h > 0)) {
// já tem h, faz o incremento automático
l[i] = L[i-1];
L[i] = l[i] + h;
}
} catch (Exception ex2) { continue; }
}
}
} else if (frequencia.equals("fr")) {
if (jTextField1.getText().length() == 0) {
JOptionPane.showMessageDialog(this, "Erro: É preciso
indicar o tamanho da amostra (N) para utilizar a tabela direta na
frequência fr.", "Quantidade de amostras desconhecida",
JOptionPane.ERROR_MESSAGE);
return false;
}
String celula;
k = 0;
h = 0;
14
N = 0;
double pccheck = 0.0;
for (int i=15; i>=0; i--) {
try {
fr[i] = verifica.decimal(jTable1.getValueAt(i,
c).toString().replace("%", "").replace("\\s+", ""));
pccheck += fr[i];
f[i] = Integer.parseInt(verifica.redondo(fr[i] / 100 *
Integer.parseInt(jTextField1.getText()),0));
k++;
N+=f[i];
} catch (Exception ex3) { continue; }
}
if ((pccheck < 99) || ( pccheck > 101)) {
JOptionPane.showMessageDialog(this, "Erro: Os valores da
tabela fr não somam 100%.", "Erro nos dados", JOptionPane.ERROR_MESSAGE);
return false;
}
if (N != Integer.parseInt(jTextField1.getText())) {
JOptionPane.showMessageDialog(this, "Aviso: Inconsistência
no cálculo do total de amostras.\nValor informado: " +
jTextField1.getText() + "\nValor calculado: " + N, "Quantidade de amostras
inconsistente", JOptionPane.WARNING_MESSAGE);
}
for (int i=0; i<15; i++) {
try {
celula = jTable1.getValueAt(i, v).toString();
String valor[] = celula.replace(" ", "").split("-");
if ((i>0) && (h > 0)) {
// já tem h, faz o incremento automático
l[i] = L[i-1];
L[i] = l[i] + h;
} else {
l[i] = Double.parseDouble(valor[0]);
if (valor.length == 2) {
L[i] = Double.parseDouble(valor[1]);
h = (int) Math.round(L[i] - l[i]);
}
}
} catch (Exception ex) { //Gambiarra da preguiça: só
precisa digitar a primeira linha da variavel
try {
celula = jTable1.getValueAt(i, c).toString();
if ((i>0) && (h > 0)) {
// já tem h, faz o incremento automático
l[i] = L[i-1];
L[i] = l[i] + h;
}
} catch (Exception ex2) { continue; }
}
}
} else if (frequencia.equals("Fr")) {
if (jTextField1.getText().length() == 0) {
JOptionPane.showMessageDialog(this, "Erro: É preciso
indicar o tamanho da amostra (N) para utilizar a tabela direta na
frequência Fr.", "Quantidade de amostras desconhecida",
JOptionPane.ERROR_MESSAGE);
return false;
}
String celula;
k = 0;
15
h = 0;
N = 0;
double pccheck = 0.0;
for (int i=15; i>=0; i--) {
try {
if (i == 0) {
fr[i] = verifica.decimal(jTable1.getValueAt(i,
c).toString().replace("%", "").replace("\\s+", ""));
} else {
fr[i] = verifica.decimal(jTable1.getValueAt(i,
c).toString().replace("%", "").replace("\\s+", "")) -
verifica.decimal(jTable1.getValueAt(i-1, c).toString().replace("%",
"").replace("\\s+", ""));
}
pccheck += fr[i];
f[i] = Integer.parseInt(verifica.redondo(fr[i] / 100 *
Integer.parseInt(jTextField1.getText()),0));
k++;
N+=f[i];
} catch (Exception ex3) { continue; }
}
if ((pccheck < 99) || ( pccheck > 101)) {
JOptionPane.showMessageDialog(this, "Erro: Os valores da
tabela Fr não somam 100%.", "Erro nos dados", JOptionPane.ERROR_MESSAGE);
return false;
}
if (N != Integer.parseInt(jTextField1.getText())) {
JOptionPane.showMessageDialog(this, "Aviso: Inconsistência
no cálculo do total de amostras.\nValor informado: " +
jTextField1.getText() + "\nValor calculado: " + N, "Quantidade de amostras
inconsistente", JOptionPane.WARNING_MESSAGE);
}
for (int i=0; i<15; i++) {
try {
celula = jTable1.getValueAt(i, v).toString();
String valor[] = celula.replace(" ", "").split("-");
if ((i>0) && (h > 0)) {
// já tem h, faz o incremento automático
l[i] = L[i-1];
L[i] = l[i] + h;
} else {
l[i] = Double.parseDouble(valor[0]);
if (valor.length == 2) {
L[i] = Double.parseDouble(valor[1]);
h = (int) Math.round(L[i] - l[i]);
}
}
} catch (Exception ex) { //Gambiarra da preguiça: só
precisa digitar a primeira linha da variavel
try {
celula = jTable1.getValueAt(i, c).toString();
if ((i>0) && (h > 0)) {
// já tem h, faz o incremento automático
l[i] = L[i-1];
L[i] = l[i] + h;
}
} catch (Exception ex2) { continue; }
}
}
} else {
JOptionPane.showMessageDialog(this, "Aviso: A programação para
16
calcular com base na tabela " + frequencia.toString() + " ainda não está
concluída.", "Recurso ainda não disponível", JOptionPane.WARNING_MESSAGE);
return false;
}
return true;
}
private void LimparTabela() {
LimparTabelaInterna();
DefaultTableModel dtm = new DefaultTableModel(0, 0);
String header[] = new String[] { "Variável", "f", "F", "fr", "Fr",
"f.x", "Variância" };
dtm.setColumnIdentifiers(header);
dtm.setNumRows(15);
jTable1.setModel(dtm);
int k;
try {
k = Integer.parseInt(jTextField3.getText());
} catch (Exception ex) {
k = 15;
}
}
private void LimparTabelaInterna() {
range = false;
for (int i=0; i<15; i++) {
l[i] = null;
L[i] = null;
f[i] = 0;
F[i] = 0;
fr[i] = null;
Fr[i] = null;
Pm[i] = null;
fx[i] = null;
Vr[i] = null;
}
}
private void LimparMedias() {
this.jTextField5.setText("");
this.jTextField6.setText("");
this.jTextField7.setText("");
}
private void LimparDados() {
this.jTextArea1.setText("");
}
private void LimparROL() {
this.jTextField4.setText("");
}
private void LimparNKH() {
jTextField1.setText("");
jTextField2.setText("");
jTextField3.setText("");
}
private void LimparVariancia() {
17
jTextField9.setText("");
jTextField10.setText("");
jTextField11.setText("");
jTextField12.setText("");
}
/**
*
* This method is called from within the constructor to initialize the
form.
* WARNING: Do NOT modify this code. The content of this method is
always
* regenerated by the Form Editor.
*/
@SuppressWarnings("unchecked")
// <editor-fold defaultstate="collapsed" desc="Generated Code">
private void initComponents() {
buttonGroup1 = new javax.swing.ButtonGroup();
jScrollPane1 = new javax.swing.JScrollPane();
jTable1 = new javax.swing.JTable();
jButton1 = new javax.swing.JButton();
jScrollPane2 = new javax.swing.JScrollPane();
jTextArea1 = new javax.swing.JTextArea();
jLabel1 = new javax.swing.JLabel();
jLabel2 = new javax.swing.JLabel();
jLabel3 = new javax.swing.JLabel();
jLabel4 = new javax.swing.JLabel();
jTextField1 = new javax.swing.JTextField();
jTextField2 = new javax.swing.JTextField();
jTextField3 = new javax.swing.JTextField();
jLabel5 = new javax.swing.JLabel();
jTextField4 = new javax.swing.JTextField();
jLabel6 = new javax.swing.JLabel();
jLabel7 = new javax.swing.JLabel();
jLabel8 = new javax.swing.JLabel();
jTextField5 = new javax.swing.JTextField();
jTextField6 = new javax.swing.JTextField();
jTextField7 = new javax.swing.JTextField();
jButton2 = new javax.swing.JButton();
jButton3 = new javax.swing.JButton();
jButton4 = new javax.swing.JButton();
jLabel9 = new javax.swing.JLabel();
jLabel10 = new javax.swing.JLabel();
jTextField8 = new javax.swing.JTextField();
jLabel11 = new javax.swing.JLabel();
jLabel12 = new javax.swing.JLabel();
jLabel13 = new javax.swing.JLabel();
jTextField9 = new javax.swing.JTextField();
jTextField10 = new javax.swing.JTextField();
jTextField11 = new javax.swing.JTextField();
jButton11 = new javax.swing.JButton();
jLabel14 = new javax.swing.JLabel();
jTextField12 = new javax.swing.JTextField();
jButton13 = new javax.swing.JButton();
jButton5 = new javax.swing.JButton();
jButton6 = new javax.swing.JButton();
setMaximumSize(null);
jTable1.setModel(new javax.swing.table.DefaultTableModel(
18
new Object [][] {
{null, null, null, null, null, null, null},
{null, null, null, null, null, null, null},
{null, null, null, null, null, null, null},
{null, null, null, null, null, null, null},
{null, null, null, null, null, null, null},
{null, null, null, null, null, null, null},
{null, null, null, null, null, null, null},
{null, null, null, null, null, null, null},
{null, null, null, null, null, null, null},
{null, null, null, null, null, null, null},
{null, null, null, null, null, null, null},
{null, null, null, null, null, null, null},
{null, null, null, null, null, null, null},
{null, null, null, null, null, null, null},
{null, null, null, null, null, null, null}
},
new String [] {
"Variável", "f", "F", "fr", "Fr", "f.x", "Variância"
}
) {
Class[] types = new Class [] {
java.lang.String.class, java.lang.String.class,
java.lang.String.class, java.lang.String.class, java.lang.String.class,
java.lang.String.class, java.lang.String.class
};
boolean[] canEdit = new boolean [] {
true, true, true, true, true, false, false
};
public Class getColumnClass(int columnIndex) {
return types [columnIndex];
}
public boolean isCellEditable(int rowIndex, int columnIndex) {
return canEdit [columnIndex];
}
});
jTable1.setAutoResizeMode(javax.swing.JTable.AUTO_RESIZE_ALL_COLUMNS);
jTable1.setAutoscrolls(false);
jTable1.setDropMode(javax.swing.DropMode.ON);
jTable1.setMaximumSize(new java.awt.Dimension(525, 240));
jTable1.setMinimumSize(new java.awt.Dimension(525, 240));
jTable1.setRowHeight(17);
jTable1.setRowMargin(2);
jTable1.getTableHeader().setResizingAllowed(false);
jScrollPane1.setViewportView(jTable1);
jButton1.setText("Calcular");
jButton1.setToolTipText("<html>3 fontes ordenadas de
cálculo:<br>\n1. Baseado no ROL, quando não existir:<br>\n2. Baseado nos
Dados Brutos, quando não existir:<br>\n3. Baseado na Tabela, assumindo a
primeira coluna preenchida entre f, fr, F, Fr.</html>");
jButton1.addActionListener(new java.awt.event.ActionListener() {
public void actionPerformed(java.awt.event.ActionEvent evt) {
jButton1ActionPerformed(evt);
}
});
jTextArea1.setColumns(20);
19
jTextArea1.setFont(new java.awt.Font("Tahoma", 0, 11)); // NOI18N
jTextArea1.setRows(5);
jTextArea1.setToolTipText("<html>Separe os dados por espaço, enter
ou ponto e vírgula.<br>Para casa decimais use ponto ou vírgula.</html>");
jScrollPane2.setViewportView(jTextArea1);
jLabel1.setText("Dados brutos:");
jLabel1.setToolTipText("<html>Separe os dados por espaço, enter ou
ponto e vírgula.<br>Para casa decimais use ponto ou vírgula.</html>");
jLabel2.setText("Amostras (N):");
jLabel3.setText("Amplitude de classe (h):");
jLabel4.setText("Quantidade de classes (k):");
jLabel5.setText("ROL:");
jLabel5.setToolTipText("Dados Brutos perfeitamente ordenados.");
jTextField4.setToolTipText("Dados Brutos perfeitamente
ordenados.");
jLabel6.setText("Média:");
jLabel6.setToolTipText("Valores destoantes do conjunto podem
distorcer o resultado.");
jLabel7.setText("Mediana:");
jLabel7.setToolTipText("50% dos dados são menores e 50% dos dados
maiores que esse valor.");
jLabel8.setText("Moda:");
jLabel8.setToolTipText("Valor(es) que mais se repete(m) na
amostra.");
jTextField5.setToolTipText("Valores destoantes do conjunto podem
distorcer o resultado.");
jTextField6.setToolTipText("50% dos dados são menores e 50% dos
dados maiores que esse valor.");
jTextField7.setToolTipText("Valor(es) que mais se repete(m) na
amostra.");
jButton2.setText("Limpar");
jButton2.addActionListener(new java.awt.event.ActionListener() {
public void actionPerformed(java.awt.event.ActionEvent evt) {
jButton2ActionPerformed(evt);
}
});
jButton3.setText("Barras");
jButton3.setEnabled(false);
jButton3.addActionListener(new java.awt.event.ActionListener() {
public void actionPerformed(java.awt.event.ActionEvent evt) {
jButton3ActionPerformed(evt);
}
});
jButton4.setText("Polígono");
jButton4.setEnabled(false);
jButton4.setMaximumSize(new java.awt.Dimension(63, 23));
20
jButton4.setMinimumSize(new java.awt.Dimension(63, 23));
jButton4.addActionListener(new java.awt.event.ActionListener() {
public void actionPerformed(java.awt.event.ActionEvent evt) {
jButton4ActionPerformed(evt);
}
});
jLabel9.setFont(new java.awt.Font("Tahoma", 0, 18)); // NOI18N
jLabel9.setText("Gerar Gráficos:");
jLabel10.setText("Σ (f.x)");
jLabel11.setText("Variância:");
jLabel12.setText("Desvio Padrão:");
jLabel13.setText("<html><p align=\"right\">Coeficiente de
Variação:</p></html>");
jButton11.setText("Amplitude do desvio");
jButton11.setEnabled(false);
jButton11.addActionListener(new java.awt.event.ActionListener() {
public void actionPerformed(java.awt.event.ActionEvent evt) {
jButton11ActionPerformed(evt);
}
});
jLabel14.setText("Σ var");
jButton13.setText("Exportar tabela...");
jButton13.setToolTipText("Salvar dados em arquivo no formato
.csv");
jButton13.setEnabled(false);
jButton13.addActionListener(new java.awt.event.ActionListener() {
public void actionPerformed(java.awt.event.ActionEvent evt) {
jButton13ActionPerformed(evt);
}
});
jButton5.setText("Imprimir tabela...");
jButton5.setEnabled(false);
jButton5.addActionListener(new java.awt.event.ActionListener() {
public void actionPerformed(java.awt.event.ActionEvent evt) {
jButton5ActionPerformed(evt);
}
});
jButton6.setText("Sobre...");
jButton6.addActionListener(new java.awt.event.ActionListener() {
public void actionPerformed(java.awt.event.ActionEvent evt) {
jButton6ActionPerformed(evt);
}
});
javax.swing.GroupLayout layout = new javax.swing.GroupLayout(this);
this.setLayout(layout);
layout.setHorizontalGroup(
layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addComponent(jScrollPane1)
.addGroup(layout.createSequentialGroup()
21
.addContainerGap()
.addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEAD
ING)
.addGroup(layout.createSequentialGroup()
.addComponent(jLabel9)
.addGap(20, 20, 20)
.addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEAD
ING, false)
.addComponent(jButton3,
javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE,
Short.MAX_VALUE)
.addComponent(jButton4,
javax.swing.GroupLayout.PREFERRED_SIZE, 84,
javax.swing.GroupLayout.PREFERRED_SIZE))
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED,
javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
.addComponent(jLabel10)
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
.addComponent(jTextField8,
javax.swing.GroupLayout.PREFERRED_SIZE, 59,
javax.swing.GroupLayout.PREFERRED_SIZE)
.addGap(34, 34, 34)
.addComponent(jLabel14)
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
.addComponent(jTextField12,
javax.swing.GroupLayout.PREFERRED_SIZE, 59,
javax.swing.GroupLayout.PREFERRED_SIZE)
.addContainerGap())
.addGroup(layout.createSequentialGroup()
.addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEAD
ING)
.addComponent(jScrollPane2,
javax.swing.GroupLayout.PREFERRED_SIZE,
javax.swing.GroupLayout.DEFAULT_SIZE,
javax.swing.GroupLayout.PREFERRED_SIZE)
.addComponent(jLabel1))
.addGap(32, 32, 32)
.addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEAD
ING)
.addGroup(layout.createSequentialGroup()
.addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEAD
ING)
.addComponent(jButton1,
javax.swing.GroupLayout.PREFERRED_SIZE, 90,
javax.swing.GroupLayout.PREFERRED_SIZE)
.addComponent(jButton2,
javax.swing.GroupLayout.PREFERRED_SIZE, 90,
javax.swing.GroupLayout.PREFERRED_SIZE))
.addGap(32, 32, 32)
.addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEAD
ING)
.addComponent(jLabel2,
22
javax.swing.GroupLayout.Alignment.TRAILING)
.addComponent(jLabel3,
javax.swing.GroupLayout.Alignment.TRAILING)
.addComponent(jLabel4,
javax.swing.GroupLayout.Alignment.TRAILING))
.addGap(6, 6, 6)
.addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.CENT
ER)
.addComponent(jTextField1,
javax.swing.GroupLayout.PREFERRED_SIZE, 59,
javax.swing.GroupLayout.PREFERRED_SIZE)
.addComponent(jTextField2,
javax.swing.GroupLayout.PREFERRED_SIZE, 59,
javax.swing.GroupLayout.PREFERRED_SIZE)
.addComponent(jTextField3,
javax.swing.GroupLayout.PREFERRED_SIZE, 59,
javax.swing.GroupLayout.PREFERRED_SIZE))
.addGap(32, 32, 32)
.addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.TRAI
LING, false)
.addGroup(javax.swing.GroupLayout.Alignment.LEADING,
layout.createSequentialGroup()
.addGap(12, 12, 12)
.addComponent(jLabel6))
.addComponent(jLabel7)
.addComponent(jLabel8))
.addGap(6, 6, 6)
.addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.CENT
ER)
.addComponent(jTextField5,
javax.swing.GroupLayout.PREFERRED_SIZE, 59,
javax.swing.GroupLayout.PREFERRED_SIZE)
.addComponent(jTextField6,
javax.swing.GroupLayout.PREFERRED_SIZE, 59,
javax.swing.GroupLayout.PREFERRED_SIZE)
.addComponent(jTextField7,
javax.swing.GroupLayout.PREFERRED_SIZE, 59,
javax.swing.GroupLayout.PREFERRED_SIZE))
.addGap(32, 32, 32)
.addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.TRAI
LING)
.addComponent(jLabel11)
.addComponent(jLabel13,
javax.swing.GroupLayout.PREFERRED_SIZE, 80,
javax.swing.GroupLayout.PREFERRED_SIZE)
.addComponent(jLabel12))
.addGap(6, 6, 6)
.addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.CENT
ER)
.addComponent(jTextField11,
javax.swing.GroupLayout.PREFERRED_SIZE, 59,
javax.swing.GroupLayout.PREFERRED_SIZE)
.addComponent(jTextField9,
javax.swing.GroupLayout.PREFERRED_SIZE, 59,
javax.swing.GroupLayout.PREFERRED_SIZE)
23
.addComponent(jTextField10,
javax.swing.GroupLayout.PREFERRED_SIZE, 59,
javax.swing.GroupLayout.PREFERRED_SIZE))
.addContainerGap(30, Short.MAX_VALUE))
.addGroup(javax.swing.GroupLayout.Alignment.TRAILING,
layout.createSequentialGroup()
.addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.TRAI
LING)
.addGroup(layout.createSequentialGroup()
.addGap(0, 0, Short.MAX_VALUE)
.addComponent(jLabel5)
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
.addComponent(jTextField4,
javax.swing.GroupLayout.PREFERRED_SIZE, 554,
javax.swing.GroupLayout.PREFERRED_SIZE))
.addGroup(layout.createSequentialGroup()
.addGap(61, 61, 61)
.addComponent(jButton13)
.addGap(18, 18, 18)
.addComponent(jButton5)
.addGap(18, 18, 18)
.addComponent(jButton6)
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED,
javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
.addComponent(jButton11,
javax.swing.GroupLayout.PREFERRED_SIZE, 162,
javax.swing.GroupLayout.PREFERRED_SIZE)))
.addGap(21, 21, 21))))))
);
layout.setVerticalGroup(
layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addGroup(javax.swing.GroupLayout.Alignment.TRAILING,
layout.createSequentialGroup()
.addGap(12, 12, Short.MAX_VALUE)
.addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASE
LINE)
.addComponent(jLabel1)
.addComponent(jLabel5)
.addComponent(jTextField4,
javax.swing.GroupLayout.PREFERRED_SIZE,
javax.swing.GroupLayout.DEFAULT_SIZE,
javax.swing.GroupLayout.PREFERRED_SIZE))
.addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEAD
ING)
.addGroup(layout.createSequentialGroup()
.addGap(30, 30, 30)
.addComponent(jButton1)
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
.addComponent(jButton2))
.addGroup(layout.createSequentialGroup()
.addGap(21, 21, 21)
24
.addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.CENT
ER)
.addComponent(jTextField11,
javax.swing.GroupLayout.PREFERRED_SIZE,
javax.swing.GroupLayout.DEFAULT_SIZE,
javax.swing.GroupLayout.PREFERRED_SIZE)
.addComponent(jTextField5,
javax.swing.GroupLayout.PREFERRED_SIZE,
javax.swing.GroupLayout.DEFAULT_SIZE,
javax.swing.GroupLayout.PREFERRED_SIZE)
.addComponent(jTextField1,
javax.swing.GroupLayout.PREFERRED_SIZE,
javax.swing.GroupLayout.DEFAULT_SIZE,
javax.swing.GroupLayout.PREFERRED_SIZE))
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
.addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.CENT
ER)
.addComponent(jTextField2,
javax.swing.GroupLayout.PREFERRED_SIZE,
javax.swing.GroupLayout.DEFAULT_SIZE,
javax.swing.GroupLayout.PREFERRED_SIZE)
.addComponent(jTextField6,
javax.swing.GroupLayout.PREFERRED_SIZE,
javax.swing.GroupLayout.DEFAULT_SIZE,
javax.swing.GroupLayout.PREFERRED_SIZE)
.addComponent(jTextField9,
javax.swing.GroupLayout.PREFERRED_SIZE,
javax.swing.GroupLayout.DEFAULT_SIZE,
javax.swing.GroupLayout.PREFERRED_SIZE)
.addComponent(jLabel11))
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
.addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.CENT
ER)
.addComponent(jTextField3,
javax.swing.GroupLayout.PREFERRED_SIZE,
javax.swing.GroupLayout.DEFAULT_SIZE,
javax.swing.GroupLayout.PREFERRED_SIZE)
.addComponent(jTextField7,
javax.swing.GroupLayout.PREFERRED_SIZE,
javax.swing.GroupLayout.DEFAULT_SIZE,
javax.swing.GroupLayout.PREFERRED_SIZE)
.addComponent(jTextField10,
javax.swing.GroupLayout.PREFERRED_SIZE,
javax.swing.GroupLayout.DEFAULT_SIZE,
javax.swing.GroupLayout.PREFERRED_SIZE)
.addComponent(jLabel12)))
.addGroup(layout.createSequentialGroup()
.addGap(24, 24, 24)
.addComponent(jLabel6))
.addGroup(layout.createSequentialGroup()
.addGap(24, 24, 24)
.addComponent(jLabel2))
.addGroup(layout.createSequentialGroup()
.addGap(50, 50, 50)
.addComponent(jLabel7))
.addGroup(layout.createSequentialGroup()
25
.addGap(50, 50, 50)
.addComponent(jLabel3))
.addGroup(layout.createSequentialGroup()
.addGap(76, 76, 76)
.addComponent(jLabel8))
.addGroup(layout.createSequentialGroup()
.addGap(76, 76, 76)
.addComponent(jLabel4))
.addGroup(layout.createSequentialGroup()
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
.addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEAD
ING)
.addComponent(jScrollPane2,
javax.swing.GroupLayout.PREFERRED_SIZE, 96,
javax.swing.GroupLayout.PREFERRED_SIZE)
.addComponent(jLabel13,
javax.swing.GroupLayout.PREFERRED_SIZE, 36,
javax.swing.GroupLayout.PREFERRED_SIZE))))
.addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEAD
ING)
.addGroup(layout.createSequentialGroup()
.addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEAD
ING)
.addGroup(layout.createSequentialGroup()
.addGap(18, 18, 18)
.addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEAD
ING)
.addComponent(jButton3,
javax.swing.GroupLayout.PREFERRED_SIZE, 14,
javax.swing.GroupLayout.PREFERRED_SIZE)
.addComponent(jLabel9,
javax.swing.GroupLayout.PREFERRED_SIZE, 32,
javax.swing.GroupLayout.PREFERRED_SIZE))
.addGap(0, 0, Short.MAX_VALUE))
.addGroup(layout.createSequentialGroup()
.addGap(2, 2, 2)
.addComponent(jButton11,
javax.swing.GroupLayout.PREFERRED_SIZE, 18,
javax.swing.GroupLayout.PREFERRED_SIZE)
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED, 16,
Short.MAX_VALUE)
.addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASE
LINE)
.addComponent(jButton4,
javax.swing.GroupLayout.PREFERRED_SIZE, 14,
javax.swing.GroupLayout.PREFERRED_SIZE)
.addComponent(jTextField8,
javax.swing.GroupLayout.PREFERRED_SIZE,
javax.swing.GroupLayout.DEFAULT_SIZE,
javax.swing.GroupLayout.PREFERRED_SIZE)
.addComponent(jLabel10)
.addComponent(jLabel14)
.addComponent(jTextField12,
javax.swing.GroupLayout.PREFERRED_SIZE,
26
javax.swing.GroupLayout.DEFAULT_SIZE,
javax.swing.GroupLayout.PREFERRED_SIZE))))
.addGap(8, 8, 8))
.addGroup(javax.swing.GroupLayout.Alignment.TRAILING,
layout.createSequentialGroup()
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED,
javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
.addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASE
LINE)
.addComponent(jButton13,
javax.swing.GroupLayout.PREFERRED_SIZE, 28,
javax.swing.GroupLayout.PREFERRED_SIZE)
.addComponent(jButton5,
javax.swing.GroupLayout.PREFERRED_SIZE, 28,
javax.swing.GroupLayout.PREFERRED_SIZE)
.addComponent(jButton6,
javax.swing.GroupLayout.PREFERRED_SIZE, 28,
javax.swing.GroupLayout.PREFERRED_SIZE))
.addGap(18, 18, 18)))
.addComponent(jScrollPane1,
javax.swing.GroupLayout.PREFERRED_SIZE, 283,
javax.swing.GroupLayout.PREFERRED_SIZE))
);
jLabel3.getAccessibleContext().setAccessibleName("Amplitude de
classe (h)");
jLabel3.getAccessibleContext().setAccessibleDescription("");
jLabel12.getAccessibleContext().setAccessibleDescription("");
jLabel14.getAccessibleContext().setAccessibleName("Σ Variância");
}// </editor-fold>
private void jButton1ActionPerformed(java.awt.event.ActionEvent evt) {
CalcularTabela();
}
private void jButton2ActionPerformed(java.awt.event.ActionEvent evt) {
JCheckBox checkDados = new JCheckBox();
checkDados.setText("Dados Brutos");
checkDados.setSelected(true);
JCheckBox checkROL = new JCheckBox();
checkROL.setText("ROL");
checkROL.setSelected(true);
JCheckBox checkNKH = new JCheckBox();
checkNKH.setText("Valores N, k, h");
checkNKH.setSelected(true);
JCheckBox checkMedias = new JCheckBox();
checkMedias.setText("Médias");
checkMedias.setSelected(true);
JCheckBox checkTabela = new JCheckBox();
checkTabela.setText("Tabela");
checkTabela.setSelected(true);
if (JOptionPane.showOptionDialog(this, new Object[] { checkDados,
checkROL,checkNKH, checkMedias, checkTabela }, "Limpar dados",
JOptionPane.OK_CANCEL_OPTION, JOptionPane.QUESTION_MESSAGE, null, null,
null) == 0) {
27
if (checkDados.isSelected()) {
LimparDados();
}
if (checkROL.isSelected()) {
LimparROL();
}
if (checkNKH.isSelected()) {
LimparNKH();
}
if (checkMedias.isSelected()) {
LimparMedias();
}
if (checkTabela.isSelected()) {
LimparTabela();
jTextField8.setText(null);
}
LimparVariancia();
jButton13.setEnabled(false);
jButton11.setEnabled(false);
jButton5.setEnabled(false);
jButton4.setEnabled(false);
jButton3.setEnabled(false);
}
}
private void jButton11ActionPerformed(java.awt.event.ActionEvent evt) {
if (jTextField10.getText().equalsIgnoreCase("")) {
JOptionPane.showMessageDialog(this, "Calcule alguma coisa!",
"Erro na tabela.", JOptionPane.ERROR_MESSAGE);
} else {
if (N<30) {
JOptionPane.showMessageDialog(this, "A regra empírica da
amplitude do desvio padrão só é válida para amostras maiores que 30.",
"Amplitude do desvio padrão", JOptionPane.INFORMATION_MESSAGE);
}
JOptionPane.showMessageDialog(this,
"68% dos dados (1 desvio padrão) estão entre "
+ df.format(media + desviopadrao) + " e "
+ df.format(media - desviopadrao) + ".\n"
+ "95% dos dados (2 desvios padrão) estão entre "
+ df.format(media + 2*desviopadrao) + " e "
+ df.format(media - 2*desviopadrao) + ".\n"
+ "99,7% dos dados (3 desvios padrão) estão entre "
+ df.format(media + 3*desviopadrao) + " e "
+ df.format(media - 3*desviopadrao) + ".\n"
, "Regra empírica da amplitude do desvio padrão",
JOptionPane.PLAIN_MESSAGE);
}
}
private void jButton13ActionPerformed(java.awt.event.ActionEvent evt) {
try {
JFileChooser fileChooser = new JFileChooser();
fileChooser.setName("tabela.csv");
fileChooser.setFileFilter(new FileNameExtensionFilter("CSV
(separado por ponto-e-vírgula) (*.csv)", "csv"));
if (fileChooser.showSaveDialog(this) ==
JFileChooser.APPROVE_OPTION) {
File file = fileChooser.getSelectedFile();
if (!file.toString().endsWith(".csv")) {
28
file = new File(file.getAbsolutePath() + ".csv");
}
if (!file.exists()) {
file.createNewFile();
}
BufferedWriter bw = new BufferedWriter(new
OutputStreamWriter(new FileOutputStream(file.getAbsoluteFile()),
"8859_1"));
int colvar = 10, colfx = 10;
for (int i=0; i<15; i++) {
try {
String linha = "";
String header = "";
for (int j=0; j<jTable1.getColumnCount(); j++) {
if (i == 0) {
header += jTable1.getColumnName(j) + ";";
if
(jTable1.getColumnName(j).equalsIgnoreCase("Variância")) {
colvar = j;
} else if
(jTable1.getColumnName(j).equalsIgnoreCase("f.x")) {
colfx = j;
}
}
linha += jTable1.getValueAt(i, j).toString() +
";";
}
if (i == 0) {
bw.write(header);
}
bw.newLine();
bw.write(linha);
} catch (Exception ex) { continue; }
}
// soma de fx e variancia
String linha = "";
for (int j=0; j<jTable1.getColumnCount(); j++) {
if (j == colvar) {
linha += jTextField12.getText();
}
if (j == colfx) {
linha += jTextField8.getText();
}
linha += ";";
}
bw.newLine();
bw.write(linha);
linha = "";
for (int j=0; j<jTable1.getColumnCount() -5; j++) {
linha += ";";
}
bw.newLine();
bw.write(";;" + linha);
// media, mediana, moda
// variancia, desvio padrao, coeficiente de variacao
29
bw.newLine();
bw.write(";Média:;" + jTextField5.getText() +
";;Variância:;" + jTextField9.getText() + linha);
bw.newLine();
bw.write(";Mediana:;" + jTextField6.getText() + ";;Desvio
Padrão:;" + jTextField10.getText() + linha);
bw.newLine();
bw.write(";Moda:;" + jTextField7.getText() + ";;Coeficiente
de Variação:;" + jTextField11.getText() + linha);
bw.close();
}
} catch (IOException e) { }
}
private void jButton5ActionPerformed(java.awt.event.ActionEvent evt) {
try {
DefaultTableModel model = (DefaultTableModel)
jTable1.getModel();
// Acha as colunas onde vão as somatórias
int colvar=0,colfx=1;
for (int j=0; j<jTable1.getColumnCount(); j++) {
if (jTable1.getColumnName(j).equalsIgnoreCase("Variância"))
{
colvar = j;
} else if
(jTable1.getColumnName(j).equalsIgnoreCase("f.x")) {
colfx = j;
}
}
// Cria a linha com somatoria fx e variância
Vector linha = new Vector();
for (int i=0; i<jTable1.getColumnCount(); i++) {
if (i == colvar) {
linha.add("Σ " + jTextField12.getText());
} else if (i == colfx) {
linha.add("Σ " + jTextField8.getText());
} else {
linha.add("");
}
}
// Adiciona os valores calculados na tabela para impressão.
model.addRow(linha);
model.addRow(new Object[] { null });
model.addRow(new Object[] {
null, "Média:", jTextField5.getText(), null,
"Variância:", jTextField9.getText()
});
model.addRow(new Object[] {
null, "Mediana:", jTextField6.getText(), null,
"Desvio Padrão:", jTextField10.getText()
});
model.addRow(new Object[] {
null, "Moda:", jTextField7.getText(), null, "Coef.
Variação:", jTextField11.getText()
});
// Imprime
; jTable1.print(JTable.PrintMode.FIT_WIDTH, // FIT_WIDTH todas
30
as colunas em uma page
new MessageFormat("Tabela de Distribuição de
Frequências:"),
new MessageFormat(""));
// Remove as linhas adicionais
model.removeRow(model.getRowCount()-1);
model.removeRow(model.getRowCount()-1);
model.removeRow(model.getRowCount()-1);
model.removeRow(model.getRowCount()-1);
model.removeRow(model.getRowCount()-1);
} catch (PrinterException e) {
JOptionPane.showMessageDialog(this, e.getMessage(), "Erro na
impressão", JOptionPane.ERROR_MESSAGE);
}
}
private void jButton6ActionPerformed(java.awt.event.ActionEvent evt) {
JLabel about = new JLabel();
about.setText( "<html>Programa desenvolvido como projeto de PPI da
Faculdade Sumaré pelos"
+ "<br>alunos de Ciências da Computação do 3.o
Semestre M1 em maio/2015:<br>"
+ "<ul style=\"list-style-type:none\">"
+ "<li>José Eduardo de Araujo Nunes, RA
1413355</li>"
+ "<li>Hugo Vinicius de Melo Silva, RA
1415321</li>"
+ "<li>Kleber Ramos Freitas Leite, RA 1310267</li>"
+ "<li>Carlos Felix dos Santos, RA 1417022</li>"
+ "<li>Andrio Lino Feijo, RA 1312413</li>"
+ "</ul><br>"
+ "Agradecimentos especiais aos colaboradores:<br>"
+ "<ul style=\"list-style-type:none\">"
+ "<li>Cristiane Grala Roldão</li>"
+ "<li>Roberta Simielli ❤</li>"
+ "<li>William Martins de Souza</li>"
+ "<li>Marcos de Araujo Lopes</li>"
+ "</ul><br></html>");
JLabel url = new JLabel();
url.setText("<html>Visite-nos: <a
href='http://turma2017.orienta.com.br'>http://turma2017.orienta.com.br</a><
/html>");
url.addMouseListener(new MouseAdapter() {
public void mouseClicked(MouseEvent e)
{
try {
Desktop.getDesktop().browse(new
URL("http://turma2017.orienta.com.br").toURI());
} catch (Exception eX) { }
}
});
JOptionPane.showOptionDialog(this, new Object[] { about, url },
"Sobre o Programa", JOptionPane.DEFAULT_OPTION,
JOptionPane.INFORMATION_MESSAGE, null, null, null);
}
31
private void jButton3ActionPerformed(java.awt.event.ActionEvent evt) {
JLabel texto = new JLabel();
texto.setText("Escolha de qual frequência gerar o gráfico.");
ButtonGroup grupo = new ButtonGroup();
JRadioButton checkf = new JRadioButton();
checkf.setText("f: Frequência Absoluta");
checkf.setSelected(true);
grupo.add(checkf);
JRadioButton checkF = new JRadioButton();
checkF.setText("F: Frequência Acumulada");
grupo.add(checkF);
JRadioButton checkfr = new JRadioButton();
checkfr.setText("fr: Frequência Relativa");
grupo.add(checkfr);
JRadioButton checkFr = new JRadioButton();
checkFr.setText("Fr: Frequência Relativa Acumulada");
grupo.add(checkFr);
if (JOptionPane.showOptionDialog(this, new Object[] {
texto, checkf,
checkF, checkfr, checkFr
}, "Gerar
gráfico de barras ou histograma", JOptionPane.OK_CANCEL_OPTION,
JOptionPane.QUESTION_MESSAGE, null, null, null) == 0) {
if (checkf.isSelected()) {
System.out.println("Grafico f");
}
if (checkF.isSelected()) {
System.out.println("Grafico F");
}
if (checkfr.isSelected()) {
System.out.println("Grafico fr");
}
if (checkFr.isSelected()) {
System.out.println("Grafico Fr");
}
}
}
private void jButton4ActionPerformed(java.awt.event.ActionEvent evt) {
JLabel texto = new JLabel();
texto.setText("Escolha de qual frequência gerar o gráfico.");
ButtonGroup grupo = new ButtonGroup();
JRadioButton checkf = new JRadioButton();
checkf.setText("f: Frequência Absoluta");
checkf.setSelected(true);
grupo.add(checkf);
JRadioButton checkF = new JRadioButton();
checkF.setText("F: Frequência Acumulada");
grupo.add(checkF);
JRadioButton checkfr = new JRadioButton();
checkfr.setText("fr: Frequência Relativa");
grupo.add(checkfr);
JRadioButton checkFr = new JRadioButton();
checkFr.setText("Fr: Frequência Relativa Acumulada");
grupo.add(checkFr);
if (JOptionPane.showOptionDialog(this, new Object[] {
texto, checkf,
checkF, checkfr, checkFr
}, "Gerar
32
gráfico de polígono", JOptionPane.OK_CANCEL_OPTION,
JOptionPane.QUESTION_MESSAGE, null, null, null) == 0) {
if (checkf.isSelected()) {
System.out.println("Grafico f");
}
if (checkF.isSelected()) {
System.out.println("Grafico F");
}
if (checkfr.isSelected()) {
System.out.println("Grafico fr");
}
if (checkFr.isSelected()) {
System.out.println("Grafico Fr");
}
}
}
// Variables declaration - do not modify
private javax.swing.ButtonGroup buttonGroup1;
private javax.swing.JButton jButton1;
private javax.swing.JButton jButton11;
private javax.swing.JButton jButton13;
private javax.swing.JButton jButton2;
private javax.swing.JButton jButton3;
private javax.swing.JButton jButton4;
private javax.swing.JButton jButton5;
private javax.swing.JButton jButton6;
private javax.swing.JLabel jLabel1;
private javax.swing.JLabel jLabel10;
private javax.swing.JLabel jLabel11;
private javax.swing.JLabel jLabel12;
private javax.swing.JLabel jLabel13;
private javax.swing.JLabel jLabel14;
private javax.swing.JLabel jLabel2;
private javax.swing.JLabel jLabel3;
private javax.swing.JLabel jLabel4;
private javax.swing.JLabel jLabel5;
private javax.swing.JLabel jLabel6;
private javax.swing.JLabel jLabel7;
private javax.swing.JLabel jLabel8;
private javax.swing.JLabel jLabel9;
private javax.swing.JScrollPane jScrollPane1;
private javax.swing.JScrollPane jScrollPane2;
private javax.swing.JTable jTable1;
private javax.swing.JTextArea jTextArea1;
private javax.swing.JTextField jTextField1;
private javax.swing.JTextField jTextField10;
private javax.swing.JTextField jTextField11;
private javax.swing.JTextField jTextField12;
private javax.swing.JTextField jTextField2;
private javax.swing.JTextField jTextField3;
private javax.swing.JTextField jTextField4;
private javax.swing.JTextField jTextField5;
private javax.swing.JTextField jTextField6;
private javax.swing.JTextField jTextField7;
private javax.swing.JTextField jTextField8;
private javax.swing.JTextField jTextField9;
// End of variables declaration
}
Top Related