Gast
2005-06-27, 16:21:33
Hallo!
Ist ein Berechnungsprog für Maschinenbau.
Eingegeben sind
Fr=1
axial=1
Fr=1
d=25
n=3000
L=20000
Aber: Stürzt ab und debug ergibt für optLager=-8xxxxxxxxx als Wert. Wie kann das sein?
Bin für jede Hilfe dankbar! ;(
// Lagersoftware.cpp : Defines the entry point for the console application.
//
#include "stdafx.h"
#include <cmath>
#include <vector>
#include <conio.h>
#include <string>
#include <iostream>
#include <iomanip>
#include <fstream>
#include <boost/lexical_cast.hpp>
using namespace std;
class Lagerdaten {
protected:
vector <float> e, dynC, statC, y, y0;
string Datei;
public:
vector <int> d;
vector <int> D;
vector <string> typ;
Lagerdaten(string LagerDatei) { Datei=LagerDatei; }
void Einlesen();
};
void Lagerdaten::Einlesen() {
ifstream Lagerliste(Datei.c_str());
Lagerliste.seekg(ios::beg);
std::string tmp;
while (!Lagerliste.eof() && !Lagerliste.fail() ) {
getline(Lagerliste,tmp,'\t');
d.push_back(boost::lexical_cast<int>(tmp));
getline(Lagerliste,tmp,'\t');
D.push_back(boost::lexical_cast<int>(tmp));
getline(Lagerliste,tmp,'\t');
dynC.push_back(boost::lexical_cast<float>(tmp));
getline(Lagerliste,tmp,'\t');
e.push_back(boost::lexical_cast<float>(tmp));
getline(Lagerliste,tmp,'\t');
y.push_back(boost::lexical_cast<float>(tmp));
getline(Lagerliste,tmp,'\t');
statC.push_back(boost::lexical_cast<float>(tmp));
getline(Lagerliste,tmp,'\t');
y0.push_back(boost::lexical_cast<float>(tmp));
getline(Lagerliste,tmp);
typ.push_back(tmp);
}
}
class dynBeanspruchung : public Lagerdaten {
double Fr, Fa;
int L, n, axial;
double p(int z);
public:
dynBeanspruchung(double FR, double FA, int LL, int N, int AXIAL, string LAGERDATEI) : Lagerdaten(LAGERDATEI) { FR=Fr; FA=Fa; LL=L; N=n; AXIAL=axial; }
int SucheLagerDyn(int y);
};
double dynBeanspruchung:P(int z) {
double p;
if ((Fa/Fr)<=e[z]) {
if (axial==1) p=Fr;
else p=Fr+1.12*y[z]*Fa;
}
else {
if (axial==1) p=0,4*Fr+y[z]*Fa;
else p=0.67*Fr+1.68*y[z]*Fa;
}
return p;
}
int dynBeanspruchung::SucheLagerDyn(int y) {
Einlesen();
double CTRAG;
int IndexOpt=1;
CTRAG=pow((L*n*60/1000000),(3/10))*p(y);
if (axial==2)
CTRAG=CTRAG/1.715;
if (dynC[y]<=CTRAG)
IndexOpt=y;
return IndexOpt;
}
class statBeanspruchung : public Lagerdaten {
double Fr, Fa;
int L, n, axial;
double p(int z);
public:
statBeanspruchung(double FR, double FA, int LL, int N, int AXIAL, string LAGERDATEI) : Lagerdaten(LAGERDATEI) { FR=Fr; FA=Fa; LL=L; N=n; AXIAL=axial; }
int SucheLagerStat(int y);
};
double statBeanspruchung:P(int z) {
double p;
if ((Fa/Fr)<=(1/(2*y0[z]))) {
if (axial==1) p=Fr;
else p=0.5*Fr+y0[z]*Fa;
}
else {
p=Fr+2*y0[z]*Fa;
}
return p;
}
int statBeanspruchung::SucheLagerStat(int y) {
Einlesen();
double CTRAG;
int IndexOpt=1;
CTRAG=pow((L*n*60/1000000),(3/10))*p(y);
if (axial==2)
CTRAG=CTRAG/1.715;
if (statC[y]<=CTRAG)
IndexOpt=y;
return IndexOpt;
}
int main() {
double Fa, Fr;
int axial, L, durchmesser, n, optLager;
string LagerDatei = "lager.txt";
cout << "Lagerbestimmungsprogramm am Bsp. FAG Kegelrollenlager\n\n" << endl;
cout << "Geben Sie die konstruktiven Merkmale an:" << endl;
cout << "\n\nAxialkraft in kN: ";
cin >> Fa;
Fa=fabs(Fa);
cout << "\n(1)einseitige oder (2)zweiseitige axiale Belastung?: ";
do
cin >> axial;
while(!axial==1 || !axial==2);
cout << "\nRadialkraft in kN: ";
cin >> Fr;
Fr=fabs(Fr);
cout << "\nWellendurchmesser: ";
cin >> durchmesser;
cout << "\nDrehzahl in min^-1: ";
cin >> n;
cout << "\nGewünschte Lebensdauer: ";
cin >> L;
if(n<=10) {
class statBeanspruchung statBea(Fr, Fa, L, n, axial, LagerDatei);
for(int x=1; x<=statBea.d.size(); x++) {
if(statBea.d[x]==durchmesser)
optLager = statBea.SucheLagerStat(x);
}
cout << "\n\nDas entsprechende Lager entspricht FAG" << statBea.typ[optLager] << " und hat eine Einbaudurchmesser D von " << statBea.D[optLager] << endl;
}
else {
class dynBeanspruchung dynBea(Fr, Fa, L, n, axial, LagerDatei);
for(int x=1; x<=dynBea.d.size(); x++) {
if(dynBea.d[x]==durchmesser)
optLager = dynBea.SucheLagerDyn(x);
}
cout << "\n\nDas entsprechende Lager entspricht FAG" << dynBea.typ[optLager] << " und hat eine Einbaudurchmesser D von " << dynBea.D[optLager] << endl;
}
getch();
return 0;
}
Und die Lager.txt:
15 35 15 0,35 1,73 14,3 0,95 30202A
15 42 23,2 0,29 2,11 20,8 1,16 30302A
17 40 19,3 0,35 1,74 19 0,96 30203A
17 40 29 0,31 1,92 30 1,06 32203A
17 47 28 0,29 2,11 25 1,16 30303A
17 47 36,5 0,29 2,11 36,5 1,16 32303A
20 42 24 0,37 1,6 29 0,88 32004X
20 47 27,5 0,35 1,74 27,5 0,96 30204A
20 52 34,5 0,3 2 33,5 1,1 30304A
20 52 31 0,73 0,82 30,5 0,45 31304
20 52 46,5 0,3 2 48 1,1 32304A
25 47 26,5 0,43 1,39 34 0,77 32005X
25 52 32,5 0,37 1,6 35,5 0,88 30205A
25 52 40,5 0,36 1,67 45 0,92 32205A
25 52 49 0,35 1,71 58,5 0,94 33205
25 62 47,5 0,3 2 46,5 1,1 30305A
25 62 38 0,83 0,73 39 0,4 31305A
25 62 63 0,3 2 65,5 1,1 32305A
28 52 34 0,43 1,39 40,5 0,77 320/28X
Ist ein Berechnungsprog für Maschinenbau.
Eingegeben sind
Fr=1
axial=1
Fr=1
d=25
n=3000
L=20000
Aber: Stürzt ab und debug ergibt für optLager=-8xxxxxxxxx als Wert. Wie kann das sein?
Bin für jede Hilfe dankbar! ;(
// Lagersoftware.cpp : Defines the entry point for the console application.
//
#include "stdafx.h"
#include <cmath>
#include <vector>
#include <conio.h>
#include <string>
#include <iostream>
#include <iomanip>
#include <fstream>
#include <boost/lexical_cast.hpp>
using namespace std;
class Lagerdaten {
protected:
vector <float> e, dynC, statC, y, y0;
string Datei;
public:
vector <int> d;
vector <int> D;
vector <string> typ;
Lagerdaten(string LagerDatei) { Datei=LagerDatei; }
void Einlesen();
};
void Lagerdaten::Einlesen() {
ifstream Lagerliste(Datei.c_str());
Lagerliste.seekg(ios::beg);
std::string tmp;
while (!Lagerliste.eof() && !Lagerliste.fail() ) {
getline(Lagerliste,tmp,'\t');
d.push_back(boost::lexical_cast<int>(tmp));
getline(Lagerliste,tmp,'\t');
D.push_back(boost::lexical_cast<int>(tmp));
getline(Lagerliste,tmp,'\t');
dynC.push_back(boost::lexical_cast<float>(tmp));
getline(Lagerliste,tmp,'\t');
e.push_back(boost::lexical_cast<float>(tmp));
getline(Lagerliste,tmp,'\t');
y.push_back(boost::lexical_cast<float>(tmp));
getline(Lagerliste,tmp,'\t');
statC.push_back(boost::lexical_cast<float>(tmp));
getline(Lagerliste,tmp,'\t');
y0.push_back(boost::lexical_cast<float>(tmp));
getline(Lagerliste,tmp);
typ.push_back(tmp);
}
}
class dynBeanspruchung : public Lagerdaten {
double Fr, Fa;
int L, n, axial;
double p(int z);
public:
dynBeanspruchung(double FR, double FA, int LL, int N, int AXIAL, string LAGERDATEI) : Lagerdaten(LAGERDATEI) { FR=Fr; FA=Fa; LL=L; N=n; AXIAL=axial; }
int SucheLagerDyn(int y);
};
double dynBeanspruchung:P(int z) {
double p;
if ((Fa/Fr)<=e[z]) {
if (axial==1) p=Fr;
else p=Fr+1.12*y[z]*Fa;
}
else {
if (axial==1) p=0,4*Fr+y[z]*Fa;
else p=0.67*Fr+1.68*y[z]*Fa;
}
return p;
}
int dynBeanspruchung::SucheLagerDyn(int y) {
Einlesen();
double CTRAG;
int IndexOpt=1;
CTRAG=pow((L*n*60/1000000),(3/10))*p(y);
if (axial==2)
CTRAG=CTRAG/1.715;
if (dynC[y]<=CTRAG)
IndexOpt=y;
return IndexOpt;
}
class statBeanspruchung : public Lagerdaten {
double Fr, Fa;
int L, n, axial;
double p(int z);
public:
statBeanspruchung(double FR, double FA, int LL, int N, int AXIAL, string LAGERDATEI) : Lagerdaten(LAGERDATEI) { FR=Fr; FA=Fa; LL=L; N=n; AXIAL=axial; }
int SucheLagerStat(int y);
};
double statBeanspruchung:P(int z) {
double p;
if ((Fa/Fr)<=(1/(2*y0[z]))) {
if (axial==1) p=Fr;
else p=0.5*Fr+y0[z]*Fa;
}
else {
p=Fr+2*y0[z]*Fa;
}
return p;
}
int statBeanspruchung::SucheLagerStat(int y) {
Einlesen();
double CTRAG;
int IndexOpt=1;
CTRAG=pow((L*n*60/1000000),(3/10))*p(y);
if (axial==2)
CTRAG=CTRAG/1.715;
if (statC[y]<=CTRAG)
IndexOpt=y;
return IndexOpt;
}
int main() {
double Fa, Fr;
int axial, L, durchmesser, n, optLager;
string LagerDatei = "lager.txt";
cout << "Lagerbestimmungsprogramm am Bsp. FAG Kegelrollenlager\n\n" << endl;
cout << "Geben Sie die konstruktiven Merkmale an:" << endl;
cout << "\n\nAxialkraft in kN: ";
cin >> Fa;
Fa=fabs(Fa);
cout << "\n(1)einseitige oder (2)zweiseitige axiale Belastung?: ";
do
cin >> axial;
while(!axial==1 || !axial==2);
cout << "\nRadialkraft in kN: ";
cin >> Fr;
Fr=fabs(Fr);
cout << "\nWellendurchmesser: ";
cin >> durchmesser;
cout << "\nDrehzahl in min^-1: ";
cin >> n;
cout << "\nGewünschte Lebensdauer: ";
cin >> L;
if(n<=10) {
class statBeanspruchung statBea(Fr, Fa, L, n, axial, LagerDatei);
for(int x=1; x<=statBea.d.size(); x++) {
if(statBea.d[x]==durchmesser)
optLager = statBea.SucheLagerStat(x);
}
cout << "\n\nDas entsprechende Lager entspricht FAG" << statBea.typ[optLager] << " und hat eine Einbaudurchmesser D von " << statBea.D[optLager] << endl;
}
else {
class dynBeanspruchung dynBea(Fr, Fa, L, n, axial, LagerDatei);
for(int x=1; x<=dynBea.d.size(); x++) {
if(dynBea.d[x]==durchmesser)
optLager = dynBea.SucheLagerDyn(x);
}
cout << "\n\nDas entsprechende Lager entspricht FAG" << dynBea.typ[optLager] << " und hat eine Einbaudurchmesser D von " << dynBea.D[optLager] << endl;
}
getch();
return 0;
}
Und die Lager.txt:
15 35 15 0,35 1,73 14,3 0,95 30202A
15 42 23,2 0,29 2,11 20,8 1,16 30302A
17 40 19,3 0,35 1,74 19 0,96 30203A
17 40 29 0,31 1,92 30 1,06 32203A
17 47 28 0,29 2,11 25 1,16 30303A
17 47 36,5 0,29 2,11 36,5 1,16 32303A
20 42 24 0,37 1,6 29 0,88 32004X
20 47 27,5 0,35 1,74 27,5 0,96 30204A
20 52 34,5 0,3 2 33,5 1,1 30304A
20 52 31 0,73 0,82 30,5 0,45 31304
20 52 46,5 0,3 2 48 1,1 32304A
25 47 26,5 0,43 1,39 34 0,77 32005X
25 52 32,5 0,37 1,6 35,5 0,88 30205A
25 52 40,5 0,36 1,67 45 0,92 32205A
25 52 49 0,35 1,71 58,5 0,94 33205
25 62 47,5 0,3 2 46,5 1,1 30305A
25 62 38 0,83 0,73 39 0,4 31305A
25 62 63 0,3 2 65,5 1,1 32305A
28 52 34 0,43 1,39 40,5 0,77 320/28X