a/b = 0 for a,b ikke 0
/*Name: Usikkerheden
Copyright:
Author:
Date: 16-12-05 21:55
Description: Udregner gennemsnittet, spredningen og usikkerheden for et
vilkårligt antal værdier brugeren indtaster
*/
#include <iostream>
#include <ios>
#include <iomanip>
#include <vector>
#include <string>
#include <algorithm>
using std::cout; using std::cin; using std::endl;
using std::string; using std::vector; using std::streamsize;
using std::setprecision;
int main()
{
cout << "Indtast de enkelte værdier: ";
//definere nogle variable
vector<double> xvalues;
double x;
double sum;
int n = 0;
//loop: indsætter værdierne i en vektor og adderer alle værdierne ind i sum
while (cin >> x) {
xvalues.push_back(x);
sum += x;
cout << "xvalues[" << n << "] har værdien " << xvalues[n] << endl;;
++n;
}
//definerer et synonym for en en "double vector type" og
//putter størrelsen af vektoren ind i en variable
typedef vector<double>::size_type vec_size;
vec_size size = xvalues.size();
//checker om vektoren er nulvektoren
if (size == 0) {
cout << "Indtast nogle vaerdier!" << endl;
return 1;
}
cout << "Stoerrelsen af vektoren: " << size << endl;
cout << n << " tal er laest og skrevet." << endl;
//finder gennemsnittet af de indtassede tal
double snit = sum/n;
cout << "Gennensnittet <x>: " << snit << endl;;
//sorterer værdierne efter størrelse: starter med de små
sort(xvalues.begin(), xvalues.end());
cout << "xvaerdierne er sorteret således " << endl;
//definere endnu en variable
double kvad = 0;
//skriver værdierne i vektoren ud
//bestemmer summen af kvadratet på differensen af de enkelte vaerdier og gennemsnittet
for (int m = 0; m != n; m++) {
cout << xvalues[m] << endl;
kvad += (xvalues[m]-snit)*(xvalues[m]-snit);
}
cout << "Summen af kvadratet på differensen af de enkelte vaerdier og gennemsnittet: " << kvad << endl;
//beregner spredning og usikkerhed
double spred = sqrt(kvad/(n-1));
double usik = spred/sqrt(n);
streamsize prec = cout.precision();
cout << "Spredningen: " << setprecision(7) << spred << endl;
cout << "Usikkerheden: " << usik << setprecision(prec) << endl;
//definere variable
int temp = 0;
//virker ikke: burde bestemme antallet værdier i intervallet +-usikkerhed om gennemsnittet
//else: skriver de koordinater ud, der ikke ligger i intervallet
for (int m = 0; m != n; m++) {
if ((xvalues[m] >= snit - spred) && (xvalues[m] <= snit + spred)) {
++temp;
} else {
cout << "xvalues[" << m << "]: not" << endl;
}
}
//jeg forsøger at finde fejlen, men forgæves
cout << "temp er " << temp << endl;
cout << "n er " << n << endl;
double cent = (temp/n);
cout << cent << endl;
/*burde fortælle brugeren om det er en god fordeling eller en dårlig,
men da den ovenstående loop ikke virker, er der heller ikke meget mening i denne*/
if (temp/n >= 2/3) {
cout << "2/3 af maalingerne eller mere ligger i intervallet [" << snit-spred << "," << snit+spred << "], da er udgoer datapunkterne en normalfordeling: " << endl;
cout << cent << endl;
}
else {
cout << "mindre end 2/3 af maalingerne ligger i intervallet [" << snit-spred << "," << snit+spred << "]: " << cent << endl;
}
system("PAUSE");
return 0;
}
--------
Jeg har problemer med værdien af variablen temp (tror jeg).
Prøv programmet ved indtastning af værdierne 4, 5, 6, 7.
cout << temp; giver en talværdien 2.
cout << n; giver talværdien 4.
Hvilket er rimeligt.
Problemet er at idet
double cent = (temp/n);
så giver
cout << cent << endl;
værdien 0.
Hvilket er helt forkert. Kvotienten af to tal, der ikke er 0 giver aldrig 0.
Hvad er der galt med mit program.