• Kann mir jemand vielleicht bei dieser Aufgabe helfen irgendwie steh ich da auf dem Schlauch und komme nicht auf den Algorithmus.

    In einem Projekt wird eine Funktion

    LokalMinMax benötigt, die in einer zeitlichen Folge abgetasteter Messwerte
    x(t1), x(t2), usw. nach lokalen Minima und Maxima sucht.

    Ein lokales Maximum in einer diskreten Folge von Werten ist ein Wert, der größer ist als sein Vorgänger und
    sein Nachfolger. Entsprechend ist ein lokales Minimum ein Wert, der kleiner ist als sein Vorgänger und sein
    Nachfolger. Der erste und der letzte Wert in der Folge hat keinen Vorgänger bzw. Nachfolger, weswegen
    über diese beiden Werte keine Aussage gemacht werden kann. Wir nehmen an, dass die Werte stets in so
    dichter Folge gespeichert vorliegen, dass kein lokales Minimum oder Maximum für unsere Funktion unbemerkt
    bleibt.
    1.1 Nehmen Sie an, die Messwerte seien in einem Feld gespeichert, und die Indizes entsprechen den fortlaufenden
    Messzeitpunkten. Stellen Sie den Algorithmus für die Bestimmung der Anzahl gefundener lokaler
    Minima und der Anzahl gefundener lokaler Maxima als Struktogramm mit allen benötigten Größen in C dar,
    aber zunächst ohne umgebenden Funktions- und Programmrahmen.
    1.2 Formulieren Sie nun eine Funktion, die den Algorithmus nach 1.1 enthält. Das Feld mit den Messwerten
    soll zum Gültigkeitsbereich der aufrufenden Funktion gehören und dort in irgendeiner Länge angelegt worden
    sein. Die Anzahl gefundener lokaler Minima und Maxima geht als Ergebnis zurück an die aufrufende Funktion.
    1.3 Formulieren Sie eine aufrufende Anwendung in der Funktion

    main in möglichst knapper Form. In ihr soll
    der Speicher für die Messwerte in benutzerdefinierter Größe zur Laufzeit dynamisch angelegt werden. Bevor
    die Anwendung LokalMinMax aufruft, holt sie sich die Messwerte mit der hier nur als Aufruf vorhandenen


    Funktion holeMesswerte per Zeigerreferenz.

  • was genau ist deine Frage? ich find die Angabe doch sehr ausführlich. lediglich weiss ich nicht, ob du alle lokalen minima und maxima suchen oder nach dem ersten gefundenen aufhören sollst.
    EDIT: sorry, du sollst die anzahl der extrema finden...

    einfach nur genial: wenn man im wort "Mama" 4 buchstaben ändert, dann hat man auf einmal "Bier"

  • Nein ich dachte nur wenn ich die Aufgabe vollständig einfüge wird es leichter verständlich sein. Mein Problem ist wie gesagt der Algorithmus und zwar wie oben in der Aufgabenstellung gefordert für lokale Min/Max und nicht die absoluten. Ausgegeben werden soll die Anzahl der gefundenen Extrempunkte
    void minimax ( int * feld, int laenge, int * pmin, int * pmax )
    {
    int i,b,c;

    for ( i=1 ; i<laenge; i++ )
    {
    c = *(feld+i);

    for(b=0; b < laenge; b++)
    {
    if ( (c < *(feld-b)) && (c < feld[b+1]))
    *pmin++;

    else if ( (c > *(feld-b)) && (c > feld[b+1]))
    *pmax++;
    }
    Soweit bin ich im moment aber irgenwie klappt es nicht so ganz

  • seine frage ist "könnte jemand für mich meine hausübung machen?"


    er will ne funktion die ihm das min raussucht und eine die das max raussucht!!?!?
    wie sind die daten aufgebaut?!?
    also wir bekommst du die als baum oder nur als array oder ka?!? gg

  • [FONT=Helvetica][size=10][align=left]Kann mir jemand vielleicht bei dieser Aufgabe helfen irgendwie steh ich da auf dem Schlauch und komme nicht auf den Algorithmus.


    der ein und einzige Alforithmus:)
    mit kaum laufzeit und hoher funktionalotät gg
    den gibts nicht:)

    aber es gibt wahrscheinlich 1000000 Algo. für dein Problem:)

  • vor der funktion werden die messwerte eingelesen und in einem array gespeichert. Die funktion soll aus dem array die min/max raussuchen (und zwar die anzahl nicht die genauen werte) und über die ihr als parameter übergebene Zeiger ausgeben.

  • Ich habe mein Programm ein bisschen überarbeitet. Es funktioniert jetzt wenigsens so wie es soll. Als Leihe bin ich mir aber sicher dass es bestimmt noch eine "elegantere" Lösungsweise gibt. Vielleicht hat jemand ja ein paar Tipps für mich. Wäre euch echt dankbar

    #include <stdio.h>
    #include <stdlib.h>
    #include <malloc.h>
    void minimax ( int * feld, int laenge, int * pmin, int * pmax );
    void main (void)
    {
    unsigned anzahl,wert;
    int min=0, max=0;
    int *tabelle;
    fprintf( stdout, "Dies Programm bestimmt Minimum und Maximum ");
    fprintf( stdout, "einer Menge von Werten der Groesse X\n");
    fprintf( stdout, "Anzahl Werte eingeben: ");
    fflush( stdin );
    scanf_s( "%u", &anzahl);
    tabelle = (int *)malloc(anzahl * sizeof(int));
    for(wert = 0;wert < anzahl; wert++)
    {
    printf("%i. Wert:", wert+1 );
    scanf_s("%i", tabelle + wert);
    }


    minimax( tabelle , anzahl , & min, & max );
    fprintf( stdout, "\nMin=%d Max=%d", min, max);
    free(tabelle);
    }
    void minimax ( int * feld, int laenge, int * pmin, int * pmax )
    {
    int b,c;

    for(b = 1; b < laenge-1; b++)
    {
    c = feld[b];

    if ( (c < feld[b-1]) && (c < feld[b+1]))
    (*pmin)++;

    if ( (c > feld[b-1]) && (c > feld[b+1]))
    (*pmax)++;


    }
    }

  • Laut Aufgabenstellung ja nicht
    "Der erste und der letzte Wert in der Folge hat keinen Vorgänger bzw. Nachfolger, weswegen
    über diese beiden Werte keine Aussage gemacht werden kann"

Jetzt mitmachen!

Sie haben noch kein Benutzerkonto auf unserer Seite? Registrieren Sie sich kostenlos und nehmen Sie an unserer Community teil!