Algorithmen/Funktionen mit Arrays, Rekursion, Iteration???? Hilfe!!!



  • Hallo an Alle,
    also bin noch ziemlich neu in der Programmierung mit C++. Müssen wieder mal ein Praktikum abgeben. Bloß habe ich diesmal keine Ahnung wie ich das machen soll.
    Könnte ihr mir vielleicht helfen oder noch besser ein grobes Programm schreiben.
    Wäre echt super, danke schoneinmal im vorraus 😉

    Ps: Verwende Microsoft Visual C++ 2010 Express, Vista Betriebssystem!

    Aufgabenbeschreibung:
    In allen Funktionen sollen einfache Aufgaben mit Arrays bearbeitet werden.
    Der Typ des Arrays a kann beliebig gewählt werden: int,short,double,float, etc.
    Erstellen Sie dazu weiterhin e i n Programm, welches alle Funktionen verwendet.

    Funktion 1 mittels Iteration: input(n,a)
    Es werden in einem Array a die Elemente von Tastatur eingelesen.

    Funktion 2 mittels Iteration: output(n,a)
    Es werden die Elemente des arrays am Bildschirm formatiert angezeigt

    Funktion 3 mittels Iteration: copy(anfang,ende,a,b)
    Die Elemente a[anfang]…a[ende] sollen in das array b kopiert werden, beginnend ab der Position 0.

    Funktion 4 rekursiv: mischen(m,a,n,b,c)
    Es sollen die Elemente zweier sortierter Arrays a(m Elemente) und b(n Elemente)
    zusammengemischt und in einem Array c sortiert gespeichert werden.

    Beispiel: a 1 4 5 6 9 b 2 4 11 Ergebnis in c 1 2 4 4 5 6 9 11.

    Dies lässt sich rekursiv sehr leicht programmieren.
    Falls a keine Elemente enthält: b nach c kopieren
    Falls b keine Elemente enthält: a nach c kopieren.
    Ansonsten das Maximum aller Elemente von a und b bestimmen

    Anmerkung: da beide Arrays sortiert ist es eines der beiden letzten Elemente
    dieses wird an die entsprechende Stelle von c kopiert
    dann die übrigen Elemente von a und b (ohne das maximale) nach c mischen.
    Beispiel für einen Zwischenschritt:

    Beispiel: a 1 4 5 6 9 b 2 4 11 Ergebnis in c .- - - - - 6 9 11.
    Maximum der verbliebenen Elemente von a und b: 5 wird nach c kopiert
    a 1 4 5 6 9 b 2 4 11 Ergebnis in c .- - - - 5 6 9 11.

    Dann ist nur noch der Rest von a: 1 4 und der Rest von b: 2 4 in die ersten 4 Elemente von c zu mischen.





  • Ja, ich brauche Hilfe.
    Ich weiß nicht mal wie ich anfangen soll?

    Hat irgendeiner eine Idee, wie ich das machen könnte?



  • Das hat nichts mit Idee zu tuen. Das könnte dir beinahe jeder hier schreiben. Fakt ist aber, dass du bisher keine Eigenleistung erbracht hast und wir dir deine Hausaufgaben nicht erledigen werden.

    Wo ist dein Code?
    Wo sind die Fehlermeldungen?
    (siehe link von oben)

    Alles andere liegt an dir!



  • BigNeal schrieb:

    Du brauchst Hilfe?

    tobbas1 schrieb:

    Ja, ich brauche Hilfe.
    Ich weiß nicht mal wie ich anfangen soll?

    Hat irgendeiner eine Idee, wie ich das machen könnte?

    Hehe, der war gut. Du solltest schon dem link folgen und lesen, was dort steht, nicht einfach auf "Du brauchst Hilfe?" antworten 😃


  • Mod

    Komische Aufgabe. Gibt's doch schon alles. Und die vorgeschlagenen Wrapper enthalten lauter unsinnige Parameter wie die Größe des Arrays und sind irgendwie viel inflexibler als die Originalfunktionen. Seufz. Aber wenn's denn sein soll, ignorieren wir halt die Compilerwarnungen wegen ungenutzter Parameter:

    #include<vector>
    #include<algorithm>
    #include<iterator>
    #include<iostream>
    
    template<typename T> void input(size_t n, T &a)
    {
      a.resize(n);
      for(typename T::iterator it=a.begin(); it!=a.end(); ++it) std::cin>>*it;
    }
    
    template<typename T> void output(size_t n, const T &a)
    {
      std::ostream_iterator<int> out_it (std::cout,", ");
      std::copy ( a.begin(), a.end(), out_it );
      std::cout<<std::endl;
    }
    
    template<typename T>  void copy(size_t anfang, size_t ende, const T &a, T &b)
    {
      b.assign(&a[anfang], &a[ende]+1);
    }
    
    template<typename T>  void mischen(size_t m, const T &a, size_t n, const T &b, T &c)
    {
      c.clear();
      std::merge(a.begin(), a.end(), b.begin(), b.end(), std::back_inserter(c));
    }
    
    int main()
    {
      typedef std::vector<int> array; 
    
      array a;
      std::cout<<"Gib mir 5 Werte für a:"<<std::endl;
      input(5, a);
    
      std::cout<<"a enthält:"<<std::endl;
      output(0, a);
    
      array b;
      std::cout<<"Kopiere a[0] bis a[2] nach b:"<<std::endl;
      copy(0,2,a,b);
      std::cout<<"b enthält:"<<std::endl;
      output(0, b);
    
      std::cout<<"Gib mir 5 neue Werte für b:"<<std::endl;
      input(5, b);
      std::cout<<"b enthält:"<<std::endl;
      output(0, b);
    
      std::cout<<"Sortiere a und b:"<<std::endl;
      std::sort(a.begin(), a.end());
      std::sort(b.begin(), b.end());
      std::cout<<"a enthält:"<<std::endl;
      output(0, a);
      std::cout<<"b enthält:"<<std::endl;
      output(0, b);
    
      array c;
      std::cout<<"Mische a und b nach c:"<<std::endl;
      mischen(0,a,0,b,c);
      std::cout<<"c enthält:"<<std::endl;
      output(0, c);
    
    }
    

    P.S.: Solche Antworten bekommt man übrigens immer, wenn man selber gar nichts macht.



  • @SeppJ Du hast seinen Horizont gesprengt. Ich glaube die Lösung kauft ihm niemand ab. 🙄



  • Ich glaube, das war Absicht.



  • SG1 schrieb:

    Ich glaube, das war Absicht.

    Ja ^^ finde ich aber auch nicht so gut, weil er wird die Aufgabe nicht lösen können und aus Verzweiflung die Lösung von SeppJ verwenden, dann kommt die Arbeit und er bekommt eine 6.


  • Mod

    HighLigerBiMBam schrieb:

    SG1 schrieb:

    Ich glaube, das war Absicht.

    Ja ^^ finde ich aber auch nicht so gut, weil er wird die Aufgabe nicht lösen können und aus Verzweiflung die Lösung von SeppJ verwenden, dann kommt die Arbeit und er bekommt eine 6.

    Ohne die Lösung bekommt er aber auch eine 6.


Anmelden zum Antworten