1. Dashboard
  2. Forum
    1. Unerledigte Themen
  3. Mitglieder
    1. Letzte Aktivitäten
    2. Benutzer online
    3. Team-Mitglieder
    4. Trophäen
    5. Mitgliedersuche
  4. Tutorial Bereich
  • Anmelden
  • Registrieren
  • Suche
Dieses Thema
  • Alles
  • Dieses Thema
  • Dieses Forum
  • Seiten
  • Forum
  • Lexikon
  • Erweiterte Suche
  1. Informatik Forum
  2. Webmaster & Internet
  3. Entwicklung

Problem

  • wiczynski777
  • 4. Juli 2007 um 16:08
  • Unerledigt
  • wiczynski777
    2
    wiczynski777
    Mitglied
    Punkte
    30
    Beiträge
    5
    • 4. Juli 2007 um 16:08
    • #1

    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.

  • Erklärbär
    8
    Erklärbär
    Mitglied
    Reaktionen
    6
    Punkte
    661
    Beiträge
    130
    • 4. Juli 2007 um 19:26
    • #2

    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"

  • mdk
    26
    mdk
    Emeritus
    Reaktionen
    130
    Punkte
    7.120
    Beiträge
    1.390
    • 4. Juli 2007 um 19:28
    • #3
    Zitat von Erklärbär

    was genau ist deine Frage?

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

  • wiczynski777
    2
    wiczynski777
    Mitglied
    Punkte
    30
    Beiträge
    5
    • 4. Juli 2007 um 20:23
    • #4

    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

  • tomi1986
    1
    tomi1986
    Gast
    • 4. Juli 2007 um 20:38
    • #5
    Zitat von mdk

    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

  • tomi1986
    1
    tomi1986
    Gast
    • 4. Juli 2007 um 20:40
    • #6
    Zitat von wiczynski777

    [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:)

  • wiczynski777
    2
    wiczynski777
    Mitglied
    Punkte
    30
    Beiträge
    5
    • 4. Juli 2007 um 20:44
    • #7

    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.

  • wiczynski777
    2
    wiczynski777
    Mitglied
    Punkte
    30
    Beiträge
    5
    • 4. Juli 2007 um 21:28
    • #8

    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)++;


    }
    }

  • tomi1986
    1
    tomi1986
    Gast
    • 4. Juli 2007 um 22:01
    • #9
    Zitat von wiczynski777

    for(b = 1; b < laenge-1; b++)

    solltest nicht bei b=0 beginnen?!?

  • wiczynski777
    2
    wiczynski777
    Mitglied
    Punkte
    30
    Beiträge
    5
    • 4. Juli 2007 um 22:21
    • #10

    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"

  • Maximilian Rupp 27. Dezember 2024 um 12:05

    Hat das Thema aus dem Forum Programmieren nach Entwicklung verschoben.

Jetzt mitmachen!

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

Benutzerkonto erstellen Anmelden

Benutzer online in diesem Thema

  • 1 Besucher

Rechtliches

Impressum

Datenschutzerklärung