Funktionsrückgabewert ein Array



  • Hi,
    ich bräuchte nochmal eure Hilfe 🙂
    Die Aufgabe lautet:
    Schreiben Sie ein C++-Programm, welches eine Funktionsschablone namens vergleicher
    enthalt und als Parameter zwei Arrays a und b, sowie deren Lange (die Arrays sollen
    die gleiche Lange haben) ubergeben bekommt. Die Schablone soll uber die Arrays iterieren
    und samtliche Array-Elemente miteinander addieren, welche den gleichen Wert
    haben. Ist a[i] < b[i] wird fur diese Elemente nichts berechnet. Ist a[i] > b[i], so
    soll die Di erenz a[i] - b[i] gebildet werden. Die Ergebnisse sollen in einem dritten
    Array gespeichert und anschlieend von der Funktionsschablone zuruckgegeben werden
    (0,5 Punkte).
    Beachten Sie hierbei, dass die Funktionsschablone beliebige Typen von Zahlen verarbeiten
    konnen soll. Die als Parameter ubergebenen Arrays mussen somit nicht bei jedem
    Funktionsaufruf den gleichen Datentyp haben (0,5 Punkte).
    Da nicht fur alle Elemente der Eingabe ein Wert berechnet wird, muss das Array mit den
    Ergebnissen nicht die gleiche Lange haben wie die Eingabe. Implementieren Sie die Funktionsschablone
    so, dass das Array mit den Ergebnissen und dessen Lange in sinnvoller Art
    und Weise an den Aufrufer der Funktionsschablone zuruckgegeben werden (0,5 Punkte).
    Fuhren Sie Ihr Programm mit der vorgegebenen Testeingabe aus und geben Sie die Arrays
    mit den Ergebnissen elementweise aus. Fugen Sie die Ausgaben als Kommentar an das
    Ende der Datei. Aufgabe 06 1b.cpp an (0,5 Punkte).
    # include <iostream >
    using namespace std ;

    // *****************************************
    // Hier bitte die Funktionsschablone
    // vergleicher () erganzen
    // *****************************************

    int main () {
    int const laenge = 15;
    int eingabe1A [ laenge ] = {0, 15, 5, 7, 4, 90, 37, 11, 13,
    19, 101 , 333 , 459 , 233 , 87};
    int eingabe1B [ laenge ] = {0, 15, 25, 37, 74, 3, 7, 101 , 3,
    14, 101 , 333 , 459 , 233 , 87};
    double eingabe2A [ laenge ] = {0. , 10. , 5., 7., 13. , 90. , 37. ,
    11. , 13. , 99. , 101. , 33. , 48. , 233.};
    double eingabe2B [ laenge ] = {0. , 11. , 4., 7., 3., 9., 327. ,
    121. , 13. , 911. , 101. , 33. , 48. , 233.};
    long eingabe3A [ laenge ] = {0, 0, 15, 7, 33, 90, 37, 21,

    33, 99, 101 , 33, 458 , 23};
    long eingabe3B [ laenge ] = {0, 10, 25, 7, 33, 90, 37, 11,
    33, 99, 1001 , 333 , 4598 , 23};

    // *****************************************************
    // Hier bitte die Definition der Funktionsschablone
    // mit den drei Paaren von Arrays nacheinander
    // aufrufen und die Ergebnisse ausgeben.
    // ****************************************************

    return 0;
    }

    Mein Programmcode sieht so aus:

    # include <iostream >
    using namespace std ;

    // ******************************************************
    // Hier bitte die Funktionsschablone vergleicher () erganzen
    // ******************************************************

    template <typename T>
    T vergleicher (T a[], T b[], int const laenge){
    int i=0
    T c[];
    int f=0

    for(i=0;i<laenge;i++){
    if(a[i]==b[i]){
    a[i]+b[i]=c[f];
    f++;
    }
    if(a[i]>b[i]){
    a[i]-b[i]=c[f];
    f++;
    }
    }

    return
    }

    int main () {

    int const laenge = 15;
    int eingabe1A [ laenge ] = {0, 15, 5, 7, 4, 90, 37, 11, 13, 19, 101 , 333 , 459 , 233 , 87};
    int eingabe1B [ laenge ] = {0, 15, 25, 37, 74, 3, 7, 101 , 3, 14, 101 , 333 , 459 , 233 , 87};
    double eingabe2A [ laenge ] = {0. , 10. , 5., 7., 13. , 90. , 37. ,11. , 13. , 99. , 101. , 33. , 48. , 233.};
    double eingabe2B [ laenge ] = {0. , 11. , 4., 7., 3., 9., 327. ,121. , 13. , 911. , 101. , 33. , 48. , 233.};
    long eingabe3A [ laenge ] = {0, 0, 15, 7, 33, 90, 37, 21, 33, 99, 101 , 33, 458 , 23};
    long eingabe3B [ laenge ] = {0, 10, 25, 7, 33, 90, 37, 11, 33, 99, 1001 , 333 , 4598 , 23};

    cout<<"eingabe 1a und 1b: "<<vergleicher<int>(eingabe1A, eingabe1B, laenge)<<endl;

    cin.get();
    return 0;
    }

    Mein Frage ist nun wie ich das c[] an die mainfunktion übergeben soll.
    Das mit Referenzen gearbeitet wird bei den Arrays ist mir bewusst, nur muss ich ja ein Array zurückgeben da c[] nicht in der mainfunktion existiert.

    MfG Andy

    PS: Schon mal Danke für eure Hilfe 🙂



  • Schon mal was von Containern gehört?
    Guck dir mal die STL-Container, genauer den std::vector an!



  • leider dürfen wir keine andere Bibliothek benutzen



  • andydroid schrieb:

    leider dürfen wir keine andere Bibliothek benutzen

    Warum verwendest du dann <iostream>?



  • weil die in der aufgabe vorgegeben war. Das habe ich nicht mit kopiert, falls das für Verwirrung gesorgt hat tut es mir leid. Die einzige Bibliothek die wir benutzen dürfen ist iostream



  • Was glaubst du tut das?

    a[i]+b[i]=c[f];
    

    Du wirst wohl ein auf dem Heap allokiertes Array (Stichwort new[]) per Pointer zurückgeben müssen. Die Größeninformation gibst du über einen Referenzparameter der Funktion zurück. (Es sind deine Hausaufgaben, ich gebe dir hier nur ein paar Hinweis)



  • Ist das alles statisch? Dann kannst du die Type-Deduktion zur Hilfe nehmen

    template <typename T, std::size_t N>
    void fun (T (&array)[N])
    {
      // ... do stuff
    }
    

Anmelden zum Antworten