alter berechnen



  • Kennt jemand einen c++ quellcode mit dem ich nach der eingabe des Geburtstages+monats+jahr das alte berechnen kann?

    Das heißt wenn ich z.b. 31.01.1987 oder so ähnlich eintippe das der mit dann das alter ausgib. hier dann 21.



  • Gick Dir mal das hier an, und versuch es slebst zu machen. Das übt. 😉



  • jbird schrieb:

    Kennt jemand einen c++ quellcode mit dem ich nach der eingabe des Geburtstages+monats+jahr das alte berechnen kann?

    Das heißt wenn ich z.b. 31.01.1987 oder so ähnlich eintippe das der mit dann das alter ausgib. hier dann 21.

    Den Code kennt hier sicher jeder...
    Klingt nach Hausaufgabe...warum probierst du es nicht selbst?



  • Kuldren schrieb:

    ...warum probierst du es nicht selbst?

    Wer kennts nicht, es muss immer schnell schnell gehen 🕶

    @jbird, schau dir das mal an:

    [b]Aktuell[/b]
    31.12.2008
    20081231
    
    13.06.1984
    19840613
    
    20081231 - 19840613 = 24[0618 = 24 Jahre
    
    01.11.2007
    20071101
    
    20081231 - 20071101 = 1[0130 = 1 Jahr
    

    Von der Ganzzahl die du als Ergebnis bekommst, schneidest du einfach die eltzten 4 Zahlen ab und dann hast du das Alter in Jahre 😉

    greez



  • Schönen guten Tach,

    mein erster Post hier im Forum, yeah!

    Um dieses Thema hier nochmal hochzuholen:

    Ich probiere schon eine Weile daran herum...
    Ich möchte das Geburtsdatum in der Form TT.MM.JJJJ eingeben und das Alter irgendwie mit Hilfe der Systemzeit, bzw. der time-Funktion berechnen.
    Wie ist das umzusetzen? 😮

    Mit freundlichem Gruß
    Lukas



  • lukrass schrieb:

    Ich probiere schon eine Weile daran herum...

    Dann zeig mal, was Du schon hast.



  • // Auslesen und Formatierung des Systemdatums
    	time_t rawtime;
    	struct tm * timeinfo;
    	char buffer[8];
    
    	time(&rawtime);
    	timeinfo = localtime(&rawtime);
    
    	datum = strftime(buffer,8,"%Y%m%d",timeinfo);
    	puts(buffer);
    

    damit habe ich dann einen char oder string als datum & ich muss das geburtsdatum noch in der form JJJJMMTT eingeben.
    diesen ansatz habe ich mir auch im internet gesucht und verstehe den code noch nicht so ganz.

    dazugesagt bin ich auch noch ziemlicher c++- und generell programmierneuling. 😉



  • Wozu über time gehen? Alter ist doch einfach Jahreszahl2 - Jahreszahl1 und dann muss man eben noch Monat und Tag vergleichen. :p



  • ich möchte das aktuelle datum nicht eingeben, sondern es passend formatiert mit time generieren.
    das ganze bräuchte ich dann nur als int, damit ich die differenz berechnen kann.

    das größte problem ist dann noch die form TT.MM.JJJJ...



  • #include <iostream>
    #include <sstream>
    
    using namespace std;
    
    int main()
    {
       cout << "Gib Datum ein (TT.MM.JJJJ):\n";
       int tag, monat, jahr;
       cin >> tag;
       cin.ignore();
       cin >> monat;
       cin.ignore();
       cin >> jahr;
       cout << tag << '/' << monat << '/' << jahr << '\n';
    }
    

  • Mod

    lukrass schrieb:

    ich möchte das aktuelle datum nicht eingeben, sondern es passend formatiert mit time generieren.
    das ganze bräuchte ich dann nur als int, damit ich die differenz berechnen kann.

    Mit localtime kannst du aus der Zeit die du von time bekommst ein struct tm machen. Und aus dem kannst du dir die Werte holen die du brauchst.



  • vielen dank schonmal an Belli für den cin.ignore()-befehl! 🙂

    auch wenn ich das nicht gerne schreibe, aber diese time-geschichte raubt mir echt die letzten nerven. 😃
    ich habe bisher noch nie mit zeigern gearbeitet und verstehe den code dementsprechend auch nicht so recht.
    könnte den code evtl. jemand für mich kommentieren bis zum cout?

    time_t zeit;
    	struct tm *datum;
    	zeit = time(0);
    	datum = localtime(&zeit);
    	cout << datum->tm_mday << '.' << datum->tm_mon+1 << '.'
    	<< datum->tm_year+1900 << endl << endl;
    

    mein vorhaben ist es die einzelnen datumsteile (jahr, monat, tag) irgendwie als int in der form JJJJMMTT zusammenzusetzen, um einen brauchbaren minuenden zu haben.
    das gleiche soll natürlich für die geburtstagseingabe mit der form TT.MM.JJJJ passieren.

    dafür müsste ich für den monat und für den tag auch noch jeweils eine führende 0 vor den einstelligen integer-wert hängen, damit ich auch wirklich immer einen 8-stelligen block der form JJJJMMTT bekomme.
    geht das überhaupt? 😮
    oder denke ich einfach nur zu kompliziert? 😕

    ich bin da immo leider echt überfragt.



  • Wenn dus im JJJJMMTT haben willst, dann mach doch für die eingabe:

    jahr*10000 + monat*100 + tag



  • vielen dank Welzo für die simple, aber so logische idee!

    das programm funktioniert jetzt so, wie ichs mir vorgestellt habe.

    hier der code für das formatieren des datums in einen geeigneten minuenden:

    time_t zeit;
    	zeit = time(0);
    	struct tm * timeinfo;
    	timeinfo = localtime(&zeit);
    
    	day = timeinfo->tm_mday;
    	mon = timeinfo->tm_mon+1;
    	year = timeinfo->tm_year+1900;
    	datum = year*10000 + mon*100 + day;
    

    könnte mir evtl. noch wer den ersten abschnitt kommentieren?
    das ist für mich noch kauderwelsch. 😉

    gruß
    Lukas



  • lukrass schrieb:

    time_t zeit; //Variable für die Speicherung eines Zeit/Datumswertes
    	zeit = time(0); //Aktuelle Zeit holen
    	struct tm * timeinfo; //Zeiger auf Struktur für aufgesplittete Zeit/Datumsbestandteile
    	timeinfo = localtime(&zeit); //Struktur mit den Werten der gerade 
                                         //gelesenen aktuellen Zeit füllen und den
                                         //Zeiger darauf setzen
    
    	day = timeinfo->tm_mday;
    	mon = timeinfo->tm_mon+1;
    	year = timeinfo->tm_year+1900;
    	datum = year*10000 + mon*100 + day;
    

    könnte mir evtl. noch wer den ersten abschnitt kommentieren?

    Siehe auch:
    http://www.cplusplus.com/reference/clibrary/ctime/



  • aaah, dankesehr!
    visual c++ sollte noch smarter werden und die datentypen, die mit einer eingebundenen bibliothek erst dazukommen, auch direkt blau darstellen. 😉
    das würde sehr dem überblick dienen.

    ansonsten sollte ich mich wohl mal mit zeigern beschäftigen! 😃

    gibt es denn noch eine einfachere lösung oder ist das schon das optimum?
    was meint ihr?



  • Mhm, einfacher ...?
    Anders, zB wenn Du hier mal liest:
    http://www.cplusplus.com/reference/clibrary/ctime/time_t/
    siehst Du, dass man mit dem Datentyp time_t auch rechnen kann. Man könnte also den umgekehrten Weg gehen, das eingegebene Geburtsdatum in einen time_t - Wert umwandeln, die Berechnung mit den time_t Variablen machen, aus dem Ergebnis die tm - Struktur und da dann direkt das Alter entnehmen ...
    Das hätte Dir die Notwendigkeit der Entdeckung des Algorithmus jahr mal 100000 + monat mal 100 + tag erspart, aber ob das nun einfacher ist, ist wohl eher Geschmackssache.


  • Mod

    lukrass schrieb:

    gibt es denn noch eine einfachere lösung oder ist das schon das optimum?
    was meint ihr?

    Das ist eher Geschmacksfrage. Das ist eben die alte C-Bibliothek für Datum und Zeit. Daher musst du da mit Zeigern rumwerkeln. Und dies fällt dir ja anscheinend schwer.

    Eine Datum- und Zeitbibliothek im C++-Stil ist im Standard nicht vorgesehen (die C-Bib ist in der Regel gut genug), aber die quasi-Standardbibliothek Boost bietet dies an. Ob dir als Anfänger ein durchgestyltes C++-Interface leichter fällt als ein paar einfache Zeigeroperationen musst du selber beurteilen:
    http://www.boost.org/doc/libs/1_47_0/doc/html/date_time/examples.html#date_time.examples.days_alive


Anmelden zum Antworten