Analiza podatkov
Smučarski skakalec je opravil pet poletov z enako dolgim zaletom. Pri odskoku je dosegel naslednje
hitrosti v km/h: 30,4; 29,8; 31,1; 30,3; 30,8. Zapiši program, ki bo prebral podane hitrosti in
izpisal povprečno hitrost z absolutno in relativno napako.
Ko primerjaš kateri čas je hitrejši, pazi, da program ne vrne odgovora, da je najhitrejši čas 0 min in 0 s.
Odmik pomeni razliko med izmerjeno vrednostjo in povprečno vrednostjo. Odmike zaokrožimo na ustrezno število mest. Absolutno napako določimo tako, da prečrtamo tretjino po absolutni vrednosti največjih odmikov. Absolutna napaka je največji od preostalih odmikov. Relativno napako dobimo tako, da absolutno napako delimo s povprečno vrednostjo. Zapis z absolutno napako: v = povprečna vrednost +- absolutna napaka Zapis z relativno napako: v = povprečna vrednost (1 +- relativna napaka)
import javax.swing.*;
public class AnalizaPodatkov {
public static void main (String[] args) {
int n = Integer.parseInt (JOptionPane.showInputDialog("Koliko bo vnešenih podatkov?"));
// preberemo vrednosti za hitrost (v), jih vpišemo v tabelo in prištevamo k vsoti
double[] v = new double[n];
int i = 0;
double vsota = 0;
while (i <= (n - 1)) {
v[i] = Double.parseDouble(JOptionPane.showInputDialog ("Vnesi hitrost skakalca v km/h."));
vsota = vsota + v[i];
i++;
}
// v nekaterih primerih program vleče pri vsoti preveč decimalk, potem pa pride do napake pri
// izračunu povprečja
vsota = (Math.round(vsota * 1000)) / 1000.0;
// izračun povprečja z upoštevanje pravila, da nismo pri zapisu povprečja nič bolj natančni
// kot pri zapisu posameznih števil
double povprecje = (Math.round(vsota / n * 10)) / 10.0;
// ugotovimo, koliko je tretjina vseh meritev (k), da bomo vedeli, koliko odmikov prečrtati
// v primeru petih meritev prečrtamo dva največja odmika
int k = n / 3 ;
if (n % 3 == 2) {
k = k + 1;
}
// vsaki meritvi izračunamo odmik in ga spravimo v tabelo
// ker nas predznak ne zanima, uporabimo metodo Math.abs
double[] odmik = new double[n];
i = 0;
while (i <= (n - 1)) {
odmik[i] = (Math.round((Math.abs(v[i] - povprecje)) * 10)) / 10.0;
i++;
}
// najti moramo absolutno napako
// zato poiščemo največji odmik in ga spravimo na nič
// ponovimo k-krat
int j = 1;
while (j <= k) {
i = 0;
double max = 0; // začetna vrednost največjega odmika
int indeks = 0; // začetna vrednost indeksa največjega odmika
while (i <= (n - 1)) {
if (odmik[i] >= max) {
max = odmik[i];
indeks = i;
}
i++;
}
odmik[indeks] = 0;
j++;
}
// zdaj zadnjič iščemo največji odmik in ta je enak absolutni napaki (max)
i = 0;
double max = 0; // začetna vrednost največjega odmika
while (i <= (n - 1)) {
if (odmik[i] >= max) {
max = odmik[i];
}
i++;
}
// izračun relativne napake (r_max), zapisane največ na desetinko procenta natančno
double r_max = (Math.round(max / povprecje * 1000)) / 10.0;
JOptionPane.showMessageDialog (null,"Hitrost, zapisana z absolutno napako: v = " +povprecje + " km/h " + "\u00B1 " + max + " km/h " + "\n" +
"Hitrost, zapisana z relativno napako: v = " + povprecje + " km/h (1 " + "\u00B1 " + r_max + " %) ",
"Tabelarična analiza", JOptionPane.INFORMATION_MESSAGE);
}
}