Mehrere Werte in eine Variable eingeben...



  • Gibt es eine Möglichkeit, das "alter" mehrere Eingaben Addieren kann?

    Sozusagen schon. Es gibt einen Trick, mit den Stream-Iteratoren:

    unsigned anzahl;
    for(; ... ; ++anzahl ) // Hier eine Bedingung deiner Wahl, bspw. einfach 'cin' für den Fehlerstatus
    {
        cout << "Bitte geben Sie ein Alter ein: ";
        alter += istream_iterator<unsigned int>(cin); /// Hier der Typ; ich nehme an, du willst nur positive Ganzzahlen? Oder willst du vielleicht, für die Bedingung in der While-Schleife, auch negative Eingaben zulassen?
    }
    

    (Ungetestet)

    Es ginge auch mit den Extraktions-Operatoren ( cin >> ... ), das erfordert aber eine weitere Variable zum Einlesen und draufaddieren (Edit: So wie SeppJ).

    P.S.: Bitte nicht meckern, falls mein Vorschlag schlicht und ergreifend bescheuert sein sollte 😉 🤡



  • #include <vector>
    #include <algorithm>
    #include <iostream>
    
    int main(int argc, char *argv[])
    {
    	std::vector<double> vec;
    
    	std::copy(std::istream_iterator<double>(std::cin), std::istream_iterator<double>(), std::back_inserter(vec));
    
    	double summe = std::accumulate(std::begin(vec), std::end(vec), 0.0);
    
    	std::cout << "Durchschnitt: " << summe / vec.size() << std::endl;
    
    	return 0x0;
    }
    


  • std::vector<double> vec; 
    
        std::copy(std::istream_iterator<double>(std::cin), std::istream_iterator<double>(), std::back_inserter(vec)); 
    
        double summe = std::accumulate(std::begin(vec), std::end(vec), 0.0);
    

    ... weil es üblich ist, Alter heutzutage auch als Fließkommazahl anzugeben 😃



  • Das ging aber flott 🙂
    Danke schonmal, werde es gleich mal ausprobieren! 👍



  • Sone, klappe halten mit deinen 17,345235623432465436 Jahren. 😃

    Ich denke, der TE kann solche Kleinigkeiten selbst nach seinen Wünschen und Bedürfnissen anpassen



  • Skym0sh0 schrieb:

    Sone, klappe halten mit deinen 17,345235623432465436 Jahren. 😃

    Ich denke, der TE kann solche Kleinigkeiten selbst nach seinen Wünschen und Bedürfnissen anpassen

    War ja auch nur ein Witz.

    Du hast mich aber gerade auf eine Idee gebracht, die sich mit Boost.Gregorian schön lösen lässt: Jemand gibt sein Geburtsdatum an, und dann wird je nach aktuellem Datum angezeigt, wie alt der User in Jahren ist. Mit Fließkommazahl. 😃

    (P.S.: Ich bin ca. 15.7)



  • Mh, ich hätte 16,256732837567 getippt 😣



  • Sone schrieb:

    Du hast mich aber gerade auf eine Idee gebracht, die sich mit Boost.Gregorian schön lösen lässt: Jemand gibt sein Geburtsdatum an, und dann wird je nach aktuellem Datum angezeigt, wie alt der User in Jahren ist. Mit Fließkommazahl. 😃

    Wieviele Tage hat ein Jahr?



  • volkard schrieb:

    Sone schrieb:

    Du hast mich aber gerade auf eine Idee gebracht, die sich mit Boost.Gregorian schön lösen lässt: Jemand gibt sein Geburtsdatum an, und dann wird je nach aktuellem Datum angezeigt, wie alt der User in Jahren ist. Mit Fließkommazahl. 😃

    Wieviele Tage hat ein Jahr?

    Kannst du deine kryptischen Suggestivfragen bitte unterlassen?


  • Mod

    Sone schrieb:

    Kannst du deine kryptischen Suggestivfragen bitte unterlassen?

    Dann mache ich das in volkards Namen als Aufforderung: Nenn doch mal alle Möglichkeiten die bei einer tagesgenauen Zeitauflösung vorkommen können.



  • SeppJ schrieb:

    Sone schrieb:

    Kannst du deine kryptischen Suggestivfragen bitte unterlassen?

    Dann mache ich das in volkards Namen als Aufforderung: Nenn doch mal alle Möglichkeiten die bei einer tagesgenauen Zeitauflösung vorkommen können.

    Ich hab schon verstanden, worauf er hinaus will. Das mindert doch nicht im Geringsten den Spaß an der Sache.



  • volkard schrieb:

    Wieviele Tage hat ein Jahr?

    365,24



  • So, hat alles geklappt! Danke für die Hilfe! 😃
    Hier der Code mit der Summe des Alters. 🤡

    #include<iostream>
    using namespace std;
    
    float alter=0;
    float summealter=0;
    int eingabe;
    
    int main()
    {
    	marke:;
    	cout<<"1=Eingabe;Alles andere Ausgabe!\n";
    	cin>>eingabe;
    
    if(eingabe==1)
            {
    do
    	{
    	cout<<"Bitte geben Sie Ihr Alter ein!\n";
    	cin >> alter;
    	summealter += alter;
    	}
    
    while   ( alterl <=0 );
    
    	goto marke;
    }
    
    else
    
    	cout<<alter<<"\n";
    	cout<<summealter;
    	system("pause");
    
    }
    

  • Mod

    Tu dir doch selbst einen Gefallen und versuch dieses Programm noch einmal zu schreiben. Dieses mal benutzt du kein goto* und alle Variablen sind so lokal wie du sie nur irgendwie machen kannst.

    *: Zur besseren Übung versuch auch ohne break oder continue auszukommen.



  • wo ist jetzt das durchschnittsalter?



  • Im Sinne der gestellten Frage sind einige Antworten hier Schrott. 🤡
    Eine Variable hat momentan jeweils nur einen Wert. Für solche Aufgaben verwendet man besser mehrere Variable: Eingabe, Anzahl der Eingaben, Summe, Ergebnis. Man probiert es oder liest ein Einsteigerbuch!
    Ist das überhaupt ein Thema für C++ ? 😕 Wenn als Durchschnittsalter 2375 geliefert wird, könnte ein Fehler vorliegen. daddeldu! :p



  • und schrieb:

    wo ist jetzt das durchschnittsalter?

    Natürlich nicht in dem Code 🕶
    habe nur nach der Möglichkeit gesucht, mehrere Werte in einer Variablen einzugeben bspw für ein Durschnittsalter...

    Ich gucke mal nach dem goto und probiere es zu ändern.
    Das ist aber auch nicht das Hauptprogramm, hab nur kurz aus meinem code die einzelnen Schnipsel zusammengesucht 😃



  • Sone schrieb:

    volkard schrieb:

    Sone schrieb:

    Du hast mich aber gerade auf eine Idee gebracht, die sich mit Boost.Gregorian schön lösen lässt: Jemand gibt sein Geburtsdatum an, und dann wird je nach aktuellem Datum angezeigt, wie alt der User in Jahren ist. Mit Fließkommazahl. 😃

    Wieviele Tage hat ein Jahr?

    Kannst du deine kryptischen Suggestivfragen bitte unterlassen?

    Daran war nichts kryptisch. Du hast selber sofort erkannt, daß man die Anzahl der Tage pro Jahr kaum noch sinnvoll angeben kann (sonst hättest du einfach das Ergenis hinschreiben können) und insbesondere nicht von boost.gregorian verraten bekommt. Damit ist die Aussage, es ließe sich mit boost.gregorian schön lösen völlig fölsch.



  • Naja, da gibt es schon Mittel und Wege. Du musst halt nur sinnvoll definieren, wo die Jahresschnitte sind -- das wird hier wohl der Geburtstag sein. Die vollen Jahre am Anfang fallen aus der Rechnung wunderbar als Integer raus, und den Anteil am letzten Jahr misst man halt mit der Tageszahl, die zwischen dem letzten und dem nächsten Geburtstag liegt.

    Ich denke mir das etwa so:

    #include <boost/date_time.hpp>
    
    #include <iostream>
    #include <string>
    
    int main() {
      using boost::gregorian::date;
      using boost::gregorian::days;
      using boost::gregorian::partial_date;
      using boost::gregorian::from_simple_string;
      using boost::gregorian::day_clock;
    
      std::string iso_date;
    
      std::cout << "Geburtsdatum (YYYY-mm-dd): " << std::flush;
      std::getline(std::cin, iso_date);
    
      date bday(from_simple_string(iso_date));
    
      // TODO: 29. Februar behandeln.
      partial_date bday_template(bday.day(), bday.month());
      date today = day_clock::local_day();
    
      date bday_this_year = bday_template.get_date(today.year());
    
      date bday_last;
      date bday_next;
    
      if(today < bday_this_year) {
        bday_last = bday_template.get_date(today.year() - 1);
        bday_next = bday_this_year;
      } else {
        bday_last = bday_this_year;
        bday_next = bday_template.get_date(today.year() + 1);
      }
    
      double lebenszeit = bday_last.year() - bday.year() + static_cast<double>((today - bday_last).days()) / (bday_next - bday_last).days();
    
      std::cout << lebenszeit << '\n';
    }
    


  • seldon schrieb:

    Naja, da gibt es schon Mittel und Wege. Du musst halt nur sinnvoll definieren, wo die Jahresschnitte sind -- das wird hier wohl der Geburtstag sein. Die vollen Jahre am Anfang fallen aus der Rechnung wunderbar als Integer raus, und den Anteil am letzten Jahr misst man halt mit der Tageszahl, die zwischen dem letzten und dem nächsten Geburtstag liegt.

    Mit dem supi Erfolg, daß meine Jahreslänge anders ist als Deine Jahreslänge und man damit keinen Dreisatz mehr durchführen kann. Schlimmer noch, die Jahreslänge ist nicht nur von der Person abhängig, sondern auch davon, wie alt sie gerade ist und wechselt recht sprunghaft.
    Die angebrochenen Jahre sollen mit so vielen Tagen gerechnet werden, wie die Gesamtzeit Tage pro Jahr hat. So langsam wird es zu einem interessanten Problem: Ist die Jahrestageanzahl dann überhaupt noch eindeutig?? Oder könnten zwei Lösungen (eine gerade mit dem 29.2. und eine gerade ohne) parallel beide korrekt sein? Ops, vier Lösungen natürlich. Oder drei? Wie alt muß jemand sein, damit vier Lösungen möglich sind? Wann habe ich Geburtstag und wie alt bin ich, wenn meine Jahre 365.247344562432298721 Tage lang sind? Aber im Sinne der ursprünglichen Aufgabenstellung kann das nicht mehr sein.

    seldon schrieb:

    Naja, da gibt es schon Mittel und Wege. Du musst halt nur sinnvoll definieren, wo die Jahresschnitte sind

    sinnvoll! Da ist das Problem. Man kann das Problem auch direkt lösen. Da gibt es Mittel und Wege. Du musst halt nur sinnvoll definieren, wo die Jahresschnitte sindwas 0 geteilt durch 0 ergibt.

    seldon schrieb:

    -- das wird hier wohl der Geburtstag sein.

    Wohl kaum. Warum? Und falls ja, warum doch nicht?

    seldon schrieb:

    Die vollen Jahre am Anfang fallen aus der Rechnung wunderbar als Integer raus, und den Anteil am letzten Jahr misst man halt mit der Tageszahl, die zwischen dem letzten und dem nächsten Geburtstag liegt.

    Ich denke mir das etwa so:

    Ich denke, Du hast Dich von der Implementierung leiten lassen und begründest sie im Nachhinein.

    Sagen wir mal, daß der Ansatz mit der personenbezogenen Zeitgeschwindigkeit Mist ist. Aber was nehmen wir dann? Derzeit hat ein Jahr 365 Tage. Neulich waren es 366. Im 20. Jahrhundert hatte ein Jahr 365.25 Tage. Zur Zeit 365.24 Tage. Sollte man für einen Menschen genau so zwischen 365.25 und 365.24 annehmen, wie weit er ins 20. bez. 21. Jahrhundert eingetaucht ist? Vorsicht, wieder mehrere Lösungen. Oder die lange Periode nehmen, wo sich der Kalender wiederholt? Da würde ich mich aber ungerecht behandelt fühlen, weil ich finde, daß das eher für Leute im 1800 passt aber nicht und genau gar nicht für Leute um 2000.

    Als Programmieraufgabe ist das nur halbwegs sinnvoll, wenn man dabei definiert, wieviele Tage ein Jahr hat und wenn man dazusagt, daß man genau weiß, daß die Aufgabe totaler Unfug ist und nicht als Übung verstanden werden sollte, die später in kommerzielle Software einfließt.

    Ich würde den Problemfall gerne auf den Punkt bringen mit der Frage "Wieviele Tage hat ein Jahr?".


Anmelden zum Antworten