Der Compiler mag meine Doppelte If Schleife nicht



  • Ich habe hier eine doppelte Schleife zur Berechnung von Mittelwert , aber irgendwie hat Compiler was gegen die .. 😕

    //Berechnung von Mittelwert
        int mitte = ix;
        if(iy > min && iy < max)
            {mitte = iy;}
        if(iz > min && iz < max)
            {mitte = iz;}
    

    habe schon alles ausgegoogelt versucht die Bedingen mit getrennten Klammern etc zu machen nichts. Nur Fehlermeldung:
    error:invalidoperandsoftypesintand<unresolvedoverloadedfunctiontype>tobinaryoperator<error: invalid operands of types 'int' and '<unresolved overloaded function type>' to binary 'operator<'
    🙄





  • Da hätte auch der Code einer einfachen If Schleife gereicht. Wäre genauso ausagekräftig gewesen.



  • EOPOP schrieb:

    Wäre genauso ausagekräftig gewesen.

    Da hab ich wohl irgendeinen Buchstaben vergessen.



  • Hi Helenchen,

    versuch mal die beiden Teilaudrücke im Bedingungsausdruck zu klammern.

    //Berechnung von Mittelwert
        int mitte = ix;
        if((iy > minimum) && (iy < maximum))
            {mitte = iy;}
        if((iz > minimum) && (iz < maximum))
            {mitte = iz;}
    

    ansonsten kann es eventuell an den Typen von min und max liegen.
    Oder auch einfach daran, das der Compiler irgendwo in einer der eingeladenen Headderdateien die Funktion oder das Makro min und max gefunden hat.
    Es müsste gehen wenn Du meinen Tip aus dem vorigen Fred beachtet hättest und die deutschen Ausdrücke Minimum und Maximum genommen hättest.
    So versucht er unter umständen die Adresse der Funktion min mit iy zu vergleichen. Nach der Fehlermeldung tippe ich mal, dass der Compiler die Werte mit den Funktionsadressen vergleichen wollte. Hab aber in der Schule kein Englisch gehabt und daher nur rudimentäre Englischkenntnisse.
    Bitte gib wenn Du Fragen hast immer den Quelltext einschließlich der Deklaration der verwendeten Variablen an, sonst suchen wir uns ein Loch in den Bauch.
    Berichte mal was es war.

    Gruß Mümmel



  • Wird windows.h includiert? Dort sind nämlich die Makros min und max enthalten.



  • Hi Helenchen,

    helenchen schrieb:

    error: invalid operands of types 'int' and '<unresolved overloaded function type>' to binary 'operator<'

    Googles Übersetzung

    Error: ungültige Operanden der Typen 'int' und '<unaufgelösten überladenen Funktionstyp>' auf binäre 'operator <'

    Sagt recht eindeutig, dass es Probleme mit einem nichtaufgelösten überladenen Operator gibt. Welcher das nun ist, Ob kein Vergleichsoperator für die beiden unterschiedlichen Werte existiert oder ob er keine Min-Funktion auswählen kann weil er die Argumenttypen nicht kennt kann man auf die Schnelle so nicht sagen (vermutlich letzteres). Aber ich bin mir sicher, das es mit den Variablen min und max zusammenhängt.
    Wenn es eine einfache Variable sein soll, dann benenne sie um, und wenn es die das Minimum/Maximum von irgend was sein soll, dann sag dem Compiler wovon.

    Gruß Mümmel



  • muemmel schrieb:

    Hi Helenchen,

    helenchen schrieb:

    error: invalid operands of types 'int' and '<unresolved overloaded function type>' to binary 'operator<'

    Googles Übersetzung

    Error: ungültige Operanden der Typen 'int' und '<unaufgelösten überladenen Funktionstyp>' auf binäre 'operator <'

    Sagt recht eindeutig, dass es Probleme mit einem nichtaufgelösten überladenen Operator gibt. Welcher das nun ist, Ob kein Vergleichsoperator für die beiden unterschiedlichen Werte existiert oder ob er keine Min-Funktion auswählen kann weil er die Argumenttypen nicht kennt kann man auf die Schnelle so nicht sagen (vermutlich letzteres). Aber ich bin mir sicher, das es mit den Variablen min und max zusammenhängt.
    Wenn es eine einfache Variable sein soll, dann benenne sie um, und wenn es die das Minimum/Maximum von irgend was sein soll, dann sag dem Compiler wovon.

    Gruß Mümmel

    habe min und max umbenannt aber trotzdem geht das nicht :

    //Mittlerer Wert:
        int mitte = ix;
        klein =  a;
        gross = b;
        if((a < iy ) &&(b < iy))
                mitte = iy;
        if((a < iz) && (b < iz))
                mitte = iz;
    

    gibt diesen Fehler aus : error: 'gross' was not declared in this scope 😕



  • Hi Helenchen,

    der Compiler versucht Dir doch schon zu sagen wo es klemmt.
    gross ist nicht deklariert.
    schreib vor klein und gross auch je ein int und dann müsste es gehen. Oder beende die Deklaration von ix nicht mit Semikolon sondern mit einem Komma, dann gilt das int auch für die folgenden Zeilen.
    Außerdem weist du a an klein an, verwendest dann aber doch a. warum weist Du a dann an klein zu?
    Poste mal bitte die ganze Funktion

    Viel Glück wünscht Mümmel



  • 😃 Danke es funktioniert!! Habe Max und Min ins Funktionen umgeändert und bisschen auch int mitte umgestalltet (klein und gross sind jetzt Compiler Freunde habe es vor dem int mitte :p ) 🤡
    kleiner main Ausschnitt:

    // min Element
        int klein = min(ix,min(iy,iz));
        // max Element
       int gross = max(ix,max(iy,iz));
         //Mittlerer Wert:
    
        int  mitte = ix;
        if ((klein != ix) && (gross != ix))
            mitte = ix;
        if((klein != iy ) &&(gross != iy))
                mitte = iy;
        if((klein != iz) && ( gross != iz))
                mitte = iz;
    

    PS:min und max sind global definiert um unnötigen if Anweisungen zu vermeiden(Jetzt verstehe ich warum Compiler verwirrt war 😉 )



  • Hi Helenchen,

    wenns der Compiler frisst, dann ist doch erst mal was geschafft. 👍
    Aber ich bin mir da noch nicht so ganz sicher, ob das wirklich den Mittelwert berechnet 😕 🙄
    Wird da wirklich ein Mittelwert berechnet oder ein Median oder ein mittlerer Wert (von einer bestimmten Menge Werten).
    Irgendwie stelle ich mir unter einem Mittelwert immer was nach Regel "Summe durch Anzahl" vor (oder Wurzel aus Produkt für das geometrische Mittel).
    Hast Du für Dich überprüft, ob das Programm nicht nur syntaktisch richtig ist sondern auch richtig rechnet? Einfach mal ein paar Wertereihen auf Papier aufschreiben, den gesuchten "Mittelwert" mit Taschenrechner, Excel oder mit Kopf ausrechnen und dann gucken, ob auch dieser Wert jeweils rauskommt.
    Lass doch einfach mal die komplette Aufgabenstellung und den kompletten Queltext rüberwachasen. Ich drück Dir ganz fest die Daumen dass trotzdem alles OK ist, aber mehr Augen sehen mehr als wenige.

    Also bis morgen, ich mach jetzt erst mal Matratzenhorchdienst. 😉
    Gruß Mümmel



  • Hi Theta,

    theta schrieb:

    http://if-schleife.de/

    Doch, es gibt auch eine If-Schleife:

    1. If-Anweisung aufschreiben
    2. Übersetzungsversuch
    3. Fehlermeeldung des Compilers ---> Zurück auf 1. und nächster Schleifendurchlauf.

    Also wenn das keine If-Schleife ist, was dann??? 😃 😃 😃

    Gruß Mümel



  • [quote="muemmel"]Hi Helenchen,

    wenns der Compiler frisst, dann ist doch erst mal was geschafft. 👍
    Aber ich bin mir da noch nicht so ganz sicher, ob das wirklich den Mittelwert berechnet 😕 🙄
    Wird da wirklich ein Mittelwert berechnet oder ein Median oder ein mittlerer Wert (von einer bestimmten Menge Werten).
    Irgendwie stelle ich mir unter einem Mittelwert immer was nach Regel "Summe durch Anzahl" vor (oder Wurzel aus Produkt für das geometrische Mittel).
    Hast Du für Dich überprüft, ob das Programm nicht nur syntaktisch richtig ist sondern auch richtig rechnet? Einfach mal ein paar Wertereihen auf Papier aufschreiben, den gesuchten "Mittelwert" mit Taschenrechner, Excel oder mit Kopf ausrechnen und dann gucken, ob auch dieser Wert jeweils rauskommt.
    Lass doch einfach mal die komplette Aufgabenstellung und den kompletten Queltext rüberwachasen. Ich drück Dir ganz fest die Daumen dass trotzdem alles OK ist, aber mehr Augen sehen mehr als wenige.

    Also bis morgen, ich mach jetzt erst mal Matratzenhorchdienst. 😉
    Gruß Mümmel[/
    Gute Nacht Mümmelchen, ich habe ein Median ( Mitlere Zahl ) keinen Mittelwert gesucht habe mich am Anfang verschieben gehabt 😉



  • muemmel schrieb:

    Es müsste gehen wenn Du meinen Tip aus dem vorigen Fred beachtet hättest ...

    Du bist mir auch so ein "voriger Fred"...
    Lies und verinnerlichere mal SeppJs Signature.
    Am Besten noch bevor du deinen Hauptschulabschuss auf dem zweiten Bildungsweg wiedermal knapp verpasst hast.



  • Hi Helenchen,

    helenchen schrieb:

    😃 Danke es funktioniert!!

    Nein, tut es nicht.
    Ich gehe mal davon aus, dass die Aufgabenstellung besagt, dass der Median aus genau drei Werten bestimmt werden soll.
    Sicher hast Du es getestet. 1, 2, 3 eingeben, Median 2 richtig.
    3, 1, 2 eingeben, Median 2 richtig.
    Jetzt wirst Du mutig: 2, 2, 2 eingeben, Median 3568, wie das?
    Nochmal versuchen, 1, 1, 1 eingeben, Median -6842.
    Wat nu Mietzekatz oder wie der Tieger sagen würde What's new pussycat. Wie war doch gleich der berühmte Spruch - Houston, wir haben ein Problem.
    Wo kommen die Werte her, wie wurden die berchnet? - Gar nicht. Bedingung 1, 2 und 3 sind nicht erfüllt, also wird an Median nichts zugewiesen und Median enthält noch das, was von Vorher durch Zufall drin steht.

    Drei separate Ifs sind Müll. Wenn Franz und Paul die Fensterscheibe nicht eingeworfen haben wars Otto!

    Wenn der erste Test wahr ist, sind weiter Tests nicht nur überflüssig sondern Falsch. Und wenn der 1. und 2. Test fehlschlagen war es Nummer drei.
    Davor aber unbedingt den Test auf Gleicheit machen, denn wenn zwei Werte gleich sind, dann ist der Median dieser Wert.
    also:

    wenn a = b oder a = c dann ist der Median a 
    sonst
    wenn b = c dann ist der Median b
    sonst
    {
      Minimum und Maximum bestimmen,
      wenn a nicht mit Minimum und Maximum übereinstimmt ist es a
      sonst
      wenn b nicht mit Minimum und Maximum übereinstimmt ist es b
      sonst
      ist es ohne weiteren Test c
    }
    

    Ich hatte nicht ohne Grund gesagt, Du möchtest die genaue Aufgabenstellung und das ganze Programm posten.

    Gruß Mümmel



  • Hi Theta,

    theta schrieb:

    http://if-schleife.de/

    Es gab doch schon mal if-Schleifen. In alten FORTRAN-Dialekten (FORTRAN IV) mussten alle Schleifen außer der Zählschleife (do-Schleife) mit if realisiert werden. sowohl die abweisende als auch die nicht abweisende Schleife.

    Gruß Mümmel


Log in to reply