Promillemesser überarbeitet und neue features - bitte weiterhin Tipps :)
-
So, ich hab mich mal an die Arbeit gemacht, das ganze zu verbessern...
Nun können auch Profile gespeichert und ausgelesen werden.
erstmal der Coderunden.h
double runden(double rundungs_wert, int genauigkeit){ double tempWert = pow(10.0, genauigkeit); rundungs_wert *= tempWert; if(rundungs_wert>0) { rundungs_wert += 0.5; } else { rundungs_wert -= 0.5; } rundungs_wert = floor(rundungs_wert); rundungs_wert /= tempWert; return rundungs_wert; }bak.cpp
#include <iostream> #include <math.h> #include "runden.h" #include <fstream> using namespace std; /* Promillerechner - wann wieder nüchtern? */ int main(){ int exit = 1; while(exit != 0){ float menge = 0; // in l float prozent = 0; // in prozent (x.xx%) float alter; // in jahren float groesse; // in cm float kg; // in kg float zeitraum; // in ganzen zahlen float magenmenge; // erstmal außer acht float verteilungsfaktor; //abhängig von m o w string geschlecht; // m oder w int anzahl_getraenke; double gesamt_alk_gramm = 0; double alk_gramm; char profil_gespeichert; char profil_speichern; string gefunden; string s_name; //Copyright cout << endl << endl << "\t \t ~~~ ~~~ ~~~ ~~~ (c) R. Hillers ~~~ ~~~ ~~~ ~~~" << endl << endl << endl; //Besteht Profil schon? cout << "Ist dein Profil schon gespeichert? ( j oder n)" << endl; cin >> profil_gespeichert; if(profil_gespeichert == 'j') { cout << "Dein Name?" << endl; cin >> s_name; ifstream r_file; string s; r_file.open("bak_profile.txt", ios::in); // Öffne Datei while (!r_file.eof()) // Solange noch Daten vorhanden { getline(r_file, s); // Zeile lesen string suche(s_name); if(s.find(suche) == 0) // "Profilname" in der Zeile? { gefunden = s; // wenn gefunden, dann Daten der Variablen "gefunden" zuordnen } } r_file.close(); // Datei schließen string auslesen[5]; char * cstr, *p; string str (gefunden); cstr = new char [str.size()+1]; strcpy (cstr, str.c_str()); int i_ausl=0; p=strtok (cstr,"."); while (p!=NULL) { auslesen[i_ausl]=p; p=strtok(NULL,"."); i_ausl++; } delete[] cstr; //Ausgabe der Profildaten cout << "Name: " << auslesen[0] << endl; cout << "Geschlecht: "<< auslesen[1] << endl; cout << "Alter: " << auslesen[2] << endl; cout << "Groesse: " << auslesen[3] << endl; cout << "Gewicht: " << auslesen[4] << endl; //Zuordnen der Profildaten geschlecht=auslesen[1]; alter = atoi(auslesen[2].c_str()); groesse=atol(auslesen[3].c_str()); kg=atol(auslesen[4].c_str()); } else // Wenn Profil nicht angelegt, Profildaten manuell eingeben { //Dateneingabe //Person cout << "Zuerst brauchen wir dein Geschlecht (m oder w)" << endl; cin >> geschlecht; cout << "alter:" << endl; cin >> alter; cout << "Groesse (in cm):" << endl; cin >> groesse; cout << "Gewicht (in kg)" << endl; cin >> kg; cout << endl; cout << "Profil speichern? (j oder n)" << endl; cin >> profil_speichern; if(profil_speichern == 'j') { string name; cout << "Dann bräuchten wir noch deinen Namen (kein \".\" und keine Sonderzeichen verwenden!" << endl; cin >> name; ofstream file("bak_profile.txt", ios::app); file << name << "." << geschlecht << "." << alter << "." << groesse << "." << kg << endl; file.close(); cout << "Daten gespichert" << endl << endl; } } //Alkohol cout << "Nun zu den Getraenken" << endl; cout << "Wie viele verschiedene Getraenke hast du getrunken?" << endl; cin >> anzahl_getraenke; int i; for(i=1;i<=anzahl_getraenke;i++) { cout << "Wie viel Prozent hatte das " << i << ". Getraenk? (komma mit . darstellen)" << endl; cin >> prozent; cout << "Wie viel hast du davon getrunken? (in Liter, komma mit . darstellen)" << endl; cin >> menge; alk_gramm = menge*1000*(prozent/100); gesamt_alk_gramm += alk_gramm; } cout << "In welchem Zeitraum wurde dieser Verzehrt? (eingabe in Std., komma mit . darstellen )" << endl; cin >> zeitraum; cout << endl; // promille - watson double promille_watson_gkw; //vertraeglichkeit maennlich bzw. weiblich if(geschlecht == "m") { promille_watson_gkw = 2.447 - 0.09516 * alter + 0.1074 * groesse + 0.3362 * kg; //männlich } else { promille_watson_gkw = -2.097 + 0.1069 * groesse + 0.2466 * kg; //weiblich } double promille_watson = (0.8*gesamt_alk_gramm)/(promille_watson_gkw*1.055); //promille - widmark //verträglichkeit maennlich bzw. weiblich if(geschlecht == "m") { verteilungsfaktor = 0.7; } else { verteilungsfaktor = 0.6; } double promille_widmark = gesamt_alk_gramm*0.8/(verteilungsfaktor*kg); //durchschnitt watson und widmark ermitteln double promille_wat_wid = (promille_watson+promille_widmark)/2; //Zeitraum abbau abziehen double promille_ergebnis = promille_wat_wid-(0.1*zeitraum); //Ausgabe Ergebnis cout << "getrunkener Alkohol: " << runden(gesamt_alk_gramm , 2) << " g" << endl; cout << "Dein Promillewert: " << runden(promille_wat_wid , 3) << endl; cout << "Dein Promillewert nach " << zeitraum << " Std.: " << runden(promille_ergebnis , 3) << endl; // Ausgabe resultat cout << endl << "Dein Level:" << endl; if(promille_ergebnis < 0.3) { cout << "Nuechtern - hau ma rein!! ^^" << endl; } else if(promille_ergebnis < 0.5) { cout << "die Wirkung des Alkohols ist spuerbar" << endl; } else if(promille_ergebnis < 0.8) { cout << "deutliches Waermegefuehl, Anheiterung" << endl; } else if(promille_ergebnis < 1.0) { cout << "deutlich eingeschraenkte Reaktionsfaehigkeit" << endl; } else if(promille_ergebnis < 1.5) { cout << "Konzentrations- und Koordinationsschwierigkeiten, Beeintraechtigung der Muskelkontrolle und des Gleichgewichts, erste Sprachstoerungen" << endl; } else if(promille_ergebnis < 2.0) { cout << "starke Betrunkenheit" << endl; } else if(promille_ergebnis < 2.5) { cout << "unkontrolliertes Torkeln, Vollrausch, Erbrechen" << endl; } else if(promille_ergebnis < 3.0) { cout << "ab hier besteht Lebensgefahr" << endl; } else if(promille_ergebnis < 4.0) { cout << "man kann sich nicht mehr aufrecht halten, verliert das Bewusstsein" << endl; } else { cout << "toedliche Dosis" << endl; } cout << endl; //fahrtuechtig nach weiteren x std. double fahrtuechtig = (promille_ergebnis/0.1)-3; if(fahrtuechtig < 0) { cout << "Du bist Fahrtuechtig! (Angaben ohne Gewaehr ;))" << endl; } else { cout << "Fahrtuechtig in " << runden(fahrtuechtig , 3) << " Stunden (Angabe ohne Gewaehr ;))" <<endl; } //nuechtern nach x std. double nuechtern = promille_ergebnis/0.1; cout << "nuechtern in " << runden(nuechtern , 3) << " Stunden" << endl; cout << endl << endl << endl << "\t --- --- --- 0 = schliessen ; 1 = neu starten --- --- ---" << endl << endl << endl; cin >> exit; } return 0; }Nun meine Fragen/Probleme *g
1. wie kann ich das lesen/speichern auslagern? (als header wills irgendwie nicht klappen...)
2. um speichern/lesen auszulagern muss ich die Datein sicherlich linken - ähm wie, bzw. wo kann man sich belesen :)?
3. Was sagt ihr dazu?ThX & MfG Reen
-
ReenBeam schrieb:
1. wie kann ich das lesen/speichern auslagern? (als header wills irgendwie nicht klappen...)
Was will nicht klappen? Natürlich kannst du es als Header auslagern, du musst die Headerdatei dann aber einbinden.
ReenBeam schrieb:
2. um speichern/lesen auszulagern muss ich die Datein sicherlich linken - ähm wie, bzw. wo kann man sich belesen :)?
Nein, Auslagern und Einbinden per #include reicht. Du musst nichts zusätzlich linken.
ReenBeam schrieb:
3. Was sagt ihr dazu?
Ich weiss jetzt nicht, wie es den anderen geht, aber ich hab ehrlich gesagt keine Lust, 300 Zeilen Code durchzulesen...
Nur was ich grad gesehen habe: Nimm statt <math.h> den C++-Standardheader <cmath>. Eventuell wäre es auch ratsam, einige Variablen in Klassern auszulagern (auch für Profile geeignet).
-
Du baust jetzt drum herum eine schöne Klasse, mit einem Struct, dass alle Informationen enthält. Dieses Struct kannst du dann später leichter abspeichern (wie das geht steht bei "Streams" im C++-FAQ).
struct Ttest { // Hier die ganzen Daten rein (Gewicht Größe Promille etc..) }; class Saufpegel { // Konstruktor // Destruktor void ReadGewicht(); // Liest das Gewicht ein void ReadAnzahlBierchen(); // Liest die Menge des Alkohols ein . . . void SaveToFile( std::string filename); // speichert das Struct in // einer Datei };usw. usf.
deiner Phantasie sind hier keine Grenzen gesetzt

Die grundlagen für dieses Projekt findest du alle hier in den entsprechenden FAQs.
-
das wäre dann u.a. eines der nächsten schritte uach wenn ich die klamotte mit den structs und klassen noch net 1000%ig versteh