const void SecondExperiment::printExp(){ cout << "Printing Second Exp" << endl; unsigned int bin[numberOfBins]; ofstream myfile; myfile.open("SecondExperiment.txt"); myfile << "# BinNr | NumberOfElektron\n"; srand(time(NULL)); for(unsigned int i=0;i<numberOfBins;i++){ bin[i] = 0; } double binBreite = 2*minima/numberOfBins; for(unsigned int i=0;i<numberOfElec;i++){ Electron* elec = new Electron(normalverteiltRand(deltaU,U)); Experiment* exp1 = new Experiment(*elec,slit); // Idee: VerwerfMethode: double randAngle = gleichverteilteRand(-minima,+minima); double randInt = exp1->Intensity(randAngle, elec->Lambda()); delete elec; delete exp1; if(randInt<gleichverteilteRand(0,1)){ i--; continue; } else { // cout << "randAngle = " << randAngle << "\n"; int binNr = randAngle/binBreite + numberOfBins/2; if(binNr >= 0 && binNr <= numberOfBins) bin[binNr]++; } } // end for // Normieren unsigned int max=0; for(unsigned int i=0;i<numberOfBins;i++){ if(max<bin[i]) max=bin[i]; } for(unsigned int i=0;i<numberOfBins;i++){ myfile << (i-numberOfBins/2.)*binBreite << "\t" << (double) bin[i]/max << "\n"; } myfile.close(); }
int main() { cout << "Computational Exercise 4.2a)\n\nDouble Slit\n" << endl; DoubleSlit *slit = new DoubleSlit(62,272); cout << "Slit has width = " << slit->Width() << " nm and Distance = " << slit->Distance() << " nm" << endl; Electron *elec = new Electron(300); cout << "The Electron has a lambda of " << elec->Lambda() << endl; // Idee: Electron erzeugen // Winkel zuordnen nach Wahrscheinlichkeitsverteilung // Seeding srand(time(NULL)); Experiment *expe = new Experiment(*elec,*slit); cout << "\nDie Minima der Intensität liegen bei: " << expe->Minima() << endl; expe->printEx(10000); cout << "\n *** Starte Experiment mit normalverteilter Spannung ***" << endl; // SecondExperiment(DoubleSlit slit, unsigned int numberOfElec,unsigned int numberOfBins, double U,double deltaU, SecondExperiment *expe2 = new SecondExperiment(*slit,10000,200,300.,10.); expe2->printExp(); expe2->printNormv(); cout << "\n +++ Finished! +++" << endl; delete expe; delete elec; delete slit; return 0; }