minimum maximalwert ermitteln ?



  • max_element erfordert lt. Standard einen ForwardIterator.


  • Mod

    Bashar schrieb:

    max_element erfordert lt. Standard einen ForwardIterator.

    Eine Schwäche in der Iteratorhierarchie. istream_iterator hätte eigentlich alles, was ein forward_iterator bräuchte, außer dass er natürlich kein output iterator ist. Daher ist er nur als input iterator eingeordnet. max_element bräuchte natürlich die output-Eigenschaft gar nicht, braucht aber die multi-pass Eigenschaft, die der forward Iterator bringt. Der aber dummerweise auch mindestens noch ein input und ein output Iterator sein muss.

    Meine Funktion kommt jedenfalls auch mit input Iteratoren zurecht, die nicht die multi-pass Eigenschaft haben, zu dem Preis, dass eventuell eine Exception geworfen wird. Möge der Thread-Nekromant entscheiden, von welcher Kategorie seine Iteratoren sind und dann entsprechend wählen.



  • SeppJ schrieb:

    ]Ganz genau so. Zumindest, wenn es in diesem Thread vernünftig gemacht wurde, was ich hoffe, dann spielt es keinerlei Rolle, wie viele Werte es sind und ob diese schon von vornherein feststehen oder erst nach und nach kommen. Aber ich will mir jetzt keinen langen Uraltthread durchlesen.

    Hi Danke erstmal für die ganzen Zuschriften. Soweit ich das deinem Code erkennen kann setzt du da einen Maximal-Wert vorraus. Ich habe leider kein Maximal wert. Aus den (schätzung 1000 Werten) will ich den Maximalwert ermitteln ohne das ich einen Max Wert habe mit dem ich das vergleichen kann.

    Sprich Beispiel:
    Wert Zeit

    1. 50 = 10ms
    2. 64 = 20ms
    3. 68 = ...
    4. 80 = ...

    Aus den Werten will ich den Max wert haben. Aber womit ich die vergleichen soll versteh ich nicht. Danke für eure Hilfe bei meiner Unwissenheit 🙂



  • Dann initialisiere den Maximalwert mit dem kleinst-möglichen Wert dieses Datentyps. Das wurde hier auch schon gesagt, ist das so schwerz zu verstehen?

    Angenommen Du bekommst nur positive Werte, dann setzt Du z.B. max = -1 am Anfang.
    Und für alle Messwerte:
    `if(aktueller_messwert > max)

    max = aktueller_messwert `



  • Du kannst ja auch mitzählen wieviel Werte du schon bearbeitet hast.
    Und beim ersten Durchlauf setzt du max auf den ersten Wert.

    asdyxc schrieb:

    Angenommen Du bekommst nur positive Werte, dann setzt Du z.B. max = -1 am Anfang.

    Da wäre 0 angebrachter, dann kann man auch einen unsigned Typ nehmen kann.
    Zudem gibt es ja auch noch <climits> wo diese Grenzen definiert sind.
    Aber dann muss man immer darauf achten, dass die Grenzen auch zu dem Variablen-Typ passt.



  • Zudem gibt es ja auch noch <climits> wo diese Grenzen definiert sind.

    Ich hoffe, du hast nur aus Versehen ein c vor den Headernamen gesetzt. 😉



  • asdyxc schrieb:

    Angenommen Du bekommst nur positive Werte, dann setzt Du z.B. max = -1 am Anfang.
    Und für alle Messwerte:
    `if(aktueller_messwert > max)

    max = aktueller_messwert `

    Tut mir leid ich rall das immer noch nicht... ja bin bin dumm und ein anfänger...

    Nochmal zusammengefasst:
    Ich Lese die Daten aus einen Alkoholgassensor. Dieser gibt mir 0-5V welches mit der Auflösung der Karte in 0-255 geändert wird. Ich lese die Signale in 10ms Schritten aus. Wenn ich jetzt den aktueller_messwert mit z.b -1 Vergleiche was hilft mir das außer das ich weiß er ist größer als -1.???

    Oder muss ich dem max Wert über einen Timer hochlaufen lassen sodas er alle werte abfährt und vergleicht?! Das habe ich grade versucht... leider is das zu langsam da er ja alle Werte von 0-255 abfahren muss.

    Mein Problem: Ihm zu sagen welches mein Max Wert ist da ich ihn ja nicht habe, sondern aus den eingelesenen Werten den höchten Wert haben möchte.

    mein kläglicher versuch:
    `

    void __fastcall TForm2::TimerMaxTimer(TObject *Sender)

    {

    Max++;

    if( Max>=255)

    {

    Max=0;

    }

    if(Messwert >= Max)

    {

    Max = WertMax;

    Label1->Caption=WertMax;

    }}`



    1. erstelle Varible "max". Initialisiere diese mit -1.
    2. Wenn ein neuer Messwert "m" kommt: vergleiche "m" mit "max".
      Ist "m" größer als "max"?
      a) Ja: Neuen Maximalwert gefunden. Setze "max" gleich "m". Goto 2)
      b) Nein: Der alre Maximalwert ist weiterhin maximal. Goto 2)


  • Wasn Schwachfug.



  • Möchtest du den Wert vom Maximum wissen, oder welcher Messwert (laufende Nummer) das Maximum ist?



  • daddy_felix schrieb:

    1. erstelle Varible "max". Initialisiere diese mit -1.
    2. Wenn ein neuer Messwert "m" kommt: vergleiche "m" mit "max".
      Ist "m" größer als "max"?
      a) Ja: Neuen Maximalwert gefunden. Setze "max" gleich "m". Goto 2)
      b) Nein: Der alre Maximalwert ist weiterhin maximal. Goto 2)

    Super Danke bist meine Rettung.! 👍
    Bin wirklich anfänger auf dem Gebiet... zum Glück gibs auch noch Leute die einen Helfen statt sie vollzumotzen.


Anmelden zum Antworten