urbic.com logotip

Naloga:

Napišite program, ki prebere podatke o višinah v datoteki (visine.txt) in izračuna povprečno vrednost in standarden odmik ter rezultat zapišite z absolutno in relativno napako. Program naj poišče še največjo in najmanjšo meritev in potem vse meritve razdelite na razrede in podatke o razredih shranite v datoteko z imenom hist.txt ter z gnuplotom narišite histogram.

Program je narejen, brez da mu povemo koliko podatkov ima v datoteki.

#include <iostream>
#include <cmath>
#include <fstream>
#include <iomanip>
using namespace std;

int main ()
{
  float x,y,vx=0,vx2=0,vmax,vmin,s,d;
  int i1=0,i2=0,i3=0,i4=0,i5=0,i6=0,i7=0,i8=0,i=0;
  string line;
  ofstream mf;
  mf.open ("hist1.txt");
  ifstream visine;
  visine.open ("visine.txt");
  getline(visine,line);
  while (!visine.eof()){
  visine >> y >> x;
   if (!visine.eof()) {
   i=i+1;
   if (i==1) {
    vmin=x;
    vmax=x;
    }
   else {
    if (x<vmax) vmax=x;
    if (x>vmin) vmin=x;
    }
   vx=vx+x;
   vx2=vx2+pow(x,2);
   if (x<145) {
    i1=i1+1;
	}
   else if (x<155) {
    i2=i2+1;
	}
   else if (x<165) {
    i3=i3+1;
	}
   else if (x<175) {
    i4=i4+1;
	}
   else if (x<185) {
    i5=i5+1;
	}
   else if (x<195) {
    i6=i6+1;
	}
   else if (x<205) {
    i7=i7+1;
	}
   else {
    i8=i8+1;
	}
   }
  }
  vx=vx/i;
  vx2=vx2/i;
  s=sqrt(vx2-pow(vx,2));
  d=s/vx;
  cout << "Imamo " << i << " meritev." << endl;
  cout << "Povprecje je " << vx << endl;
  cout << "Absolutna napaka je " << s << endl;
  cout << "Relativna napaka je " << d << endl;
  cout << "Najvecja visina je " << vmax << endl;
  cout << "Najmanjsa visina je " << vmin << endl;
  cout << "Z absolutno napako: " << vx << char(241) << s << endl;
  cout << "Z relativno napako: " << vx << "(1" << char(241) << d << ")" << endl;
  cout << "Histogram izracunan.";
  mf << 135 <<" "<<145<<" "<<i1<<endl;
  mf << 145 <<" "<<155<<" "<<i2<<endl;
  mf << 155 <<" "<<165<<" "<<i3<<endl;
  mf << 165 <<" "<<175<<" "<<i4<<endl;
  mf << 175 <<" "<<185<<" "<<i5<<endl;
  mf << 185 <<" "<<195<<" "<<i6<<endl;
  mf << 195 <<" "<<205<<" "<<i7<<endl;
  mf << 205 <<" "<<215<<" "<<i8<<endl;
  mf.close();
  visine.close();  
  return 0;
}

Tekst sedaj shranimo kot datoteko s1.cpp in prevedemo.

Tu je sedaj še print screen postopka prevajanja, postopka risanja z gnuplotom in narisana grafa v pdf datoteki. V kolikor vam kakšna podrobnost ni jasna, mi sporočite. Histogram je narisan v naslednji JPG datoteki.

Ter podatki za histogram v hist1.txt

Nazaj na osnovno stran za predmet Uporaba numeričnih metod v kemiji.