Statisches Feld



  • Hallo, ich bin gerade dabei folgende Aufgabe zu bearbeiten und komme an einer Stelle leider nicht weiter.

    Für eine Fußballmannschaft Sind die Tordifferenzen einer Spielsaison mit Zufallszahlen zu belegen. Danach sollen die erreichten Punkte der Spielsaison ermittelt werden. Außerdem ist die größte Tordifferenz zu ermitteln.

    • In der Funktion initRandom sollen allen n Elementen des Arrays a die Tordifferenzen als zufällige ganze Zahlen aus dem Bereich [-4... 4] mittels rand() % 9 - 4 zugewiesen werden.
    Ein negativer Wert bedeutet, dass das Spiel verloren wurde: (Habe ich noch hinbekommen)

    void initRandom(int a[], int n)
    {
    srand(time(0));
    for(int i=0; i<n; i++)
    {
    a[i]=rand()%9-4;
    }
    }

    • Die Funktion points berechnet aus der Tordifferenz diff die erreichten Punkte:

    • negative Tordifferenz (Spiel verloren) liefert 0 Punkte,
    • positive Tordifferenz (gewonnenes Spiel) bringt 3 Punkte und
    • für ein Remis (Tordifferenz 0) gibt es einen Punkt.

    — so, jetzt soll das Ergebnis der initRandom Funktion hier weiterverwendet werden und jedem Arrayelement wird eine Differenz zugeordnet
    — Meine Frage: Wie arbeite ich mit der obigen Funktion weiter und stimmt das was ich gemacht habe?
    Vor ab, vielen Dank für die Hilfe
    (Die Frage Scheint jetzt wahrscheinlich sehr banal aber ich komme nicht darauf)

    int points(int diff)
    { a[i]= diff;

    for (int i=0;i<n;i++)
    {
    if(a[i]<0)
    {
    diff = 0;
    }else if(a[i]>0)
    {
    diff = 3;
    }else if(a[i]=0)
    {
    diff = 1;
    }return diff;
    }
    }

    I



  • Die Funktion points soll das Array nicht anfassen. Eine Tordifferenz wird übergeben. Daraus sollen die Punkte errechnet werden.

    @Montag sagte in Statisches Feld:

    — so, jetzt soll das Ergebnis der initRandom Funktion hier weiterverwendet werden und jedem Arrayelement wird eine Differenz zugeordnet

    Dann muss die Funktion points für jedes Arrayelement aufgerufen werden.



  • @manni66
    Tut mir leid, ich verstehe nicht was ich machen soll.
    Eine Schleife die das Array durchläuft wäre ja schon da?



  • @manni66 sagte in Statisches Feld:

    Die Funktion points soll das Array nicht anfassen



  • Genau. Fange mit der einfachen Frage an:

    Ein Spiel geht 3:1 aus. Die Tordifferenz ist also +2.

    Jetzt sollst du eine Funktion schreiben, der man die +2 übergeben kann.

    Also sowas wie
    int punkteAusTordifferenz = points(2);
    Und danach soll in punkteAusTordifferenz der Wert 3 stehen.

    Und dann rufst du diese points-Funktion über eine Schleife für jedes Ergebnis auf.

    Wichtig ist: eine Funktion soll genau eine Sache machen - und die richtig. Die Funktion points braucht doch überhaupt nicht zu wissen, wie viele Spiele es gab und/oder ob diese nun z.B. in einem Array abgelegt sind. Beschränke Funktionen immer auf das Nötigste, ohne sie in der Allgemeinheit zu beschränken.

    Also: nicht die Schleife innerhalb der points-Funktion, sondern rufe die Funktion innerhalb einer Schleife auf.



  • Die Schleife sollst du außerhalb der Funktion schreiben und in dieser wird dann für jedes Array-Element die Funktion points(...) aufgerufen (am besten du erzeugst dafür eine andere passend benannte Funktion).

    PS: srand(time(0)); sollte nur einmalig am Anfang der main-Funktion aufgerufen werden.


  • Mod

    Auch: Soll das wirklich C++ sein? Das ist C.



  • Hallo und danke für die Infos zum Thema Statisches Feld, damit befassen wir uns gerade in der Schule und die Infos helfen mir schon weiter. 😃


Anmelden zum Antworten