Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include<iostream>
- #include<fstream>
- #include<vector>
- #include<math.h>
- #include<string>
- using namespace std;
- struct campione {double media;double sq;double eq;double ermed;double x0; double xf;double vmedia; double errv;};
- //media,sq,eq,ermed sono riferite al tempo
- int main(){
- campione a;
- vector <campione> W;
- float errlungh,dato=0,somma=0,n1=0,n2=0,c=5.,ausA,ausB,ausC;
- vector <float>misure;
- int sizemisure,i;
- string nameinput;
- string outputfile1,outputfile2;
- //calcoliamo errore distibuzione triangolare
- errlungh=0.001/sqrt(24);
- //acquisizione dati da file
- cout<<"Inserire il nome del file contente i dati da analizzare, con estensione"<<endl;
- while (cin>>nameinput) {
- if (nameinput=="quit")
- break;
- ifstream misure1 (nameinput.c_str());
- if(!nameinput.c_str())
- {cout<<"errore in lettura";
- return -1;
- }
- while(misure1>>dato)
- misure.push_back(dato);
- //analisi dati
- sizemisure= misure.size();
- for(i=0;i<sizemisure;i++)
- somma=(somma+misure[i]);
- a.media=somma/sizemisure;
- for(i=0;i<sizemisure;i++)
- n1=n1+(pow((misure[i]-a.media),2));
- n2=n1/sizemisure;
- a.sq=sqrt(n2);
- n2=n1/(sizemisure-1);
- a.eq=sqrt(n2);
- a.ermed=a.eq/(sqrt(sizemisure)); //x0 e xf sono già in metri
- a.x0=0.40;
- a.xf=c/10.;
- W.push_back(a);
- c++;
- cout<<"Inserire il nome del file contente i dati da analizzare, con estensione (quit per uscire)"<<endl;
- }
- cout<<"Inserire il nome del file in cui si vuole salvare l'analisi dati , con estensione"<<endl;
- cin>>outputfile1;
- ofstream outh(outputfile1.c_str());
- if(!outputfile1.c_str())
- {cout<<"errore in fase di scrittura analisi";
- return -1;
- }
- int cont=0,dim=W.size();
- for(cont=0;cont<dim;cont++){
- outh<<" Media "<<W[cont].media <<endl;
- outh<<" Scarto quadratico medio "<<W[cont].sq<<endl;
- outh<<" Errore quadratico medio "<<W[cont].eq<<endl;
- outh<<"Errore della media"<<W[cont].ermed<<endl<<endl;
- }
- cout<<"Inserire il nome del file in cui si vuole salvare il calcolo delle velocità, con estensione"<<endl;
- cin>>outputfile2;
- ofstream outz(outputfile2.c_str());
- if(!outputfile2.c_str())
- {cout<<"errore in fase di scrittura velocità";
- return -1;
- }
- for (i=0;i<W.size();i++) { //devo fargli mettere velocità, tempi, errori velocità e errori tempi in colonna (W è il vettore e vmedia la velocità)
- if (i==0) { //media,sq,eq,ermed sono riferite al tempo
- W[i].vmedia=(W[i].xf-W[i].x0)/(W[i].media);
- ausA=2*pow(1/(W[i].media-W[i].x0),2)*pow(errlungh,2);
- ausB=pow((-1)*(W[i].xf-W[i].x0)/pow(W[i].media,2),2)*pow(W[i].ermed,2); //poniamo errore t=0 pari a 0(chiedere conferma Sada)
- W[i].errv=sqrt(ausA+ausB);
- }
- else {
- W[i].vmedia=(W[i].xf-W[i-1].xf)/(W[i].media-W[i-1].media);
- ausA=2*pow(1/(W[i].media-W[i-1].media),2)*pow(errlungh,2);
- ausB=pow((-1)*(W[i].xf-W[i-1].xf)/pow((W[i].media-W[i-1].media),2),2)*pow(W[i].ermed,2);
- ausC=pow((W[i].xf-W[i-1].xf)/pow((W[i].media-W[i-1].media),2),2)*pow(W[i-1].ermed,2);
- W[i].errv=sqrt(ausA+ausB+ausC);
- }
- outz<<W[i].vmedia<<" "<<W[i].media<<" "<<W[i].errv<<" "<<W[i].ermed<<endl;
- }
- return 0;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement