C Funktion längste aufsteigende Teilfolge



  • Hallo:) ich brauche Hilfe bei einer Funktion und ich komm einfach nicht weiter.
    Info: Es handelt sich hierbei nur um die eigentliche Funktion.
    Man soll eine Folge ganzzahliger Werte eingeben und es soll die Länge der längsten aufsteigend sortierten Teilfolge ausgegeben werden. also bsp: Werte(267361) = 3

    Ich hab hier mal angefangen aber ihr werdet schnell sehen, warum das nicht funktionieren wird. Wäre nett wenn jemand mir sagen könnte wie man es macht.

    int langsortiert (int folge[], int Anzahl)
    {
        int laenge, i;
        laenge=1;
    
        for(i=0; i<Anzahl; i++ )
        {
            if(folge[i]<folge[i+1])
            {
                laenge=laenge+1;
            }
            else(folge[i]>folge[i+1])
            {
                laenge=1;
                i--;
            }
    
        }
    return laenge;
    }
    


  • Meine Frage ist einfach wie ich es mache, dass quasi die längen verglichen werden. Weil so gibt er mir ja nur die letzte länge aus und nicht die längste.



  • Führe noch eine Variable maxlen ein.



  • Machst du jetzt für jeden Furz ein neues Thema auf?
    Speicher die längste Zahl in einer anderen Variablen und beschreibe die nur, wenn die aktuelle Zahl länger ist als die in der Zwischenvariable.



  • und an welcher Stelle speicher ich dann die längste variable?



  • also dann so?

    int langsortiert (int folge[], int Anzahl)
    {
    int laenge, i,b,temp;
    laenge=1;

    for(b=0; b< Anzahl;b++)
            {
    
            if(folge[i]<folge[i+1])
            {
                laenge=laenge+1;
                temp = laenge;
            }
            else if (temp<laenge)
            {
                temp=laenge;
                laenge=1;
            }
    
            else()
    
            }
    
        }
    return temp;
    


  • funktioniert es so?



  • Nein.



  • Swordfish schrieb:

    Nein.

    Ach... die Frage war rein rhetorisch 🙄



  • Ach sorry, ich dachte das kam von becki006.



  • ja konnt ihr mir vllt zeigen wie es dann geht, anstatt einfach nur nein zu sagen? was soll denn das? Dass es nicht funktioniert weiss ich schon selber.. jetzt helft mir doch bitte



  • Swordfish schrieb:

    Nein.

    wie dann? 😕 🙄



  • Mach es mal selber auf einem Zettel und beobachte dich dabei.

    Du stellst fest, dass die Teilfolge zuende ist (steht in laenge).
    Dann musst das Maximum von maxlen und laenge in maxlen ablegen.
    Und laenge wieder auf 1 setzen.



  • DirkB schrieb:

    Mach es mal selber auf einem Zettel und beobachte dich dabei.

    Du stellst fest, dass die Teilfolge zuende ist (steht in laenge).
    Dann musst das Maximum von maxlen und laenge in maxlen ablegen.
    Und laenge wieder auf 1 setzen.

    glaub mir ich bin des jetzt so oft durchgegangen...ich verstehe zwar das Prinzip aber ich versteh einfach nicht an welcher stelle ich a) die maximale Länge in die temporäre variable speicher und b) und diese dann überschreibe. Weil bei meinem Programm wird die temporäre ja ständig ersetzt durch die aktuelle Länge. Ich schwör, könnte ich jemand n Kaffee ausgeben der mir hilft wurd ich des tun 😃



  • letzter Versuch: (was bestimmt auch falsch ist) 🤡

    int langsortiert (int folge[], int Anzahl)
    {
        int laenge, i,b,temp;
        laenge=1;
    
            for(b=0; b< Anzahl;b++)
            {
    
            if(folge[i]<folge[i+1])
            {
                laenge=laenge+1;
            }
            else if (folge[i]>folge[i+1])
            {
                temp=laenge;
                laenge=1;
            }
    
            else if(temp<laenge)
            {
                temp=laenge;
            }
    
            }
    
    return temp;
    }
    


  • int langsortiert (int folge[], int Anzahl)
    {
        int laenge, i,b,temp;
        laenge=1;
    
            for(b=0; b< Anzahl;b++)  // i oder b ?
            {
    
            if(folge[i]<folge[i+1])  // was passier, wenn i Anzahl-1 ist.
            {
                laenge=laenge+1;
            }
            else // hier ist die Folge zuende
                 if (folge[i]>folge[i+1]) // warum dann noch dieser Test? und was ist bei Gleichheit
            {
    
                temp=laenge;  // Das sollte man nur machen, wenn laenge länger ist. 
                laenge=1;
            }
    
            else if(temp<laenge)  // falsche stelle
            {
                temp=laenge;
            }
    
            }
    
    return temp;
    }
    

    Achte auf die Warnungen vom Compiler. Stelle den Warn-Level auf die höchste Stufe.