Strukturen+Arrays... help! ;(



  • Hallo Leute!

    Wir (Kumpel und ich) haben ein Problem und ihr seid unsere letzte Hoffnung. Wir müssen folgendes Programm heute noch fertigstellen... wir haben zwar einen Anfang aber das ist so gut wie nichts und wahrscheinlich sowieso net richtig.

    Hier mal die Aufgabenstellung:

    Erstellen Sie ein C++-Programm, das in fünf zunächst leere Felder für 50 Strukturen
    (ElemT), die jeweils aus einem Integerwert (key) und einem Gleitkommawert (value)
    bestehen, beliebig eingegebene Elemente, mit dem Typ ElemT, dem key entsprechend
    aufsteigend sortiert einfügen und löschen kann, wobei für das Löschen nur die Eingabe
    des keys erforderlich ist.
    
    Implementieren und verwenden Sie für das Programm zumindest folgenden Funktionen:
    
    int get_field_nr();
    /*
    gibt eine Integer Zahl zwischen 0 und 4 zurück; dient zur Auswahl des Feldes
    */
    
    ElemT read_elem();
    /*
    Liest ein Element vom Typ ElemT ein und gibt es als Ergebnis zurück;
    */
    
    int insert(ElemT feld[50], int len, ElemT e);
    /*
    fügt das Element e in das Feld feld, in dem bereits len Elemente enthalten sind, sortiert
    ein; ist bereits ein Element mit dem gleichen key enthalten oder das Feld bereits voll, so
    wird das Element nicht eingefügt. Als Ergebnis liefert die Funktion die neue Anzahl der im
    Feld enthaltenen Elemente.
    */
    
    int delete(ElemT feld[50], int len, int key);
    /*
    Löscht das Element mit dem Key key aus dem Feld und gibt die neue Länge des Feldes
    als Ergebnis zurück.
    */
    
    void printField(ElemT feld[50], int len);
    /*
    Gibt len Elemente aus dem Feld feld beginnend mit dem Index 0 aus.
    */
    

    Ich hoffe ihr könnt uns helfen. 🙂

    Mit verzwiefelten Grüßen,
    die Gäste. 😞



  • Hallo,

    dürft ihr die STL verwenden, da gäbe es nämlich eine Klasse namens map, die genau die gesuchte Funktionalität mitbrächte.

    Mfg

    GPC



  • Hi und thx für die Antwort.

    Nein, deshalb müssen wir ja auch die Funktionen schreiben, so wie sie in der Aufgabenstellung beschrieben sind. Das wär sonst ja zu einfach... 😃



  • Hallo,

    d.h. kein std::vector, kein std::sort?? Gar nix? Ihr müsst alles selber schreiben?
    Wenn ja, dann wäre es vermutlich sinnvoller, eine Verwaltungs-Klasse zu schreiben, die Operationen wie einfügen, löschen usw. bereitstellt, und das Array mit den Strukturen kapselt.

    Etwa:

    class Verwaltung {
      size_t n;  //Anzahl elemente
      ElemT *x;  //Das Array
    
    public:
      Verwaltung(size_t n_) n(n_), x(new ElemT[n]) { }
      ~Verwaltung() { delete [] x; }
    
      void insert(const ElemT &et) {}
      void kill(int index) {}
      void print() {}
    };
    

    Mfg

    GPC



  • Danke für deine Hilfe, aber das ist nicht gefragt. Klassen haben wir auch noch net behandelt.
    Wir haben fix vorgegebene Funktionen in die wir die Aufgabenstellung implementieren müssen. Lies dir die Aufgabenstellung noch mal langsam und gründlich durch. 😉 😃



  • Was hast du denn schon vorliegen? Du benötigst als erstes einen struct-Typ für deine Datenwerte und dann einige Arrays mit jeweils 50 Elementen:

    struct ElemT {...};
    
    ElemT data1[50];
    

    Für die Funktionen ein paar Anregungen:
    * Einlesen geht mit cin (in deinem Fall nacheinander key und value)
    * für's durchsuchen empfielt sich binäre Suche, für's Ausgeben eine for()-Schleife



  • Solch grundlegende Kenntnisse haben wir schon... nur wir wissen nicht genau wie man mit Feldern in/und Strukturen arbeitet.

    Unser Code bis jetzt:

    #include <iostream.h>
    
    struct ElemT
    {
    	int key;
    	double value;
    };
    
    int get_field_nr()
    {
    	do
    	{
    		cout << "Feld auswählen: (1-5)";
    		cin >> auswahl;
    
    	}while (auswahl > 0 || auswahl <= 5);
    
    	return auswahl;
    
    }
    
    ElemT read_elem()
    {
    	ElemT e;
    
    	do
    	{
    		cout << "Feldposition?";
    		cin>> e.key;
    
    	}while (e.key > 0 || e.key <=50);
    
    	feld[auswahl][e].key;
    
    	return e;
    }
    
    int insert (ElemT feld[50], int len, ElemT e)
    {
    	int w;
    
    	w=get_field_nr();
    
    	cout << "Wert eingeben: ";
    	cin >> e.value;
    
    	feld[w][e].value;
    
    	// Sortierung - Bubble Sort
    
             // Überprüfung ob schon vorhanden, Feld voll, Anzahl vorhandener Elemente
    
    }
    
    int delete (ElemT feld[50], int len, int key)
    {
            // Element aus Feld löschen, Länge des Feldes nach dem löschen
    }
    
    void printField (ElemT feld[50], int len)
    {
    }
    
    void main()
    {
    	ElemT feld[5][50]={0};
    }
    

    Ich hoffe das hilft unser Problem besser zu verstehen.



  • Hallo,

    zuerst einmal: Es heißt nicht iostream.h sondern so:

    #include <iostream>
    
    //Achtung, das muss jetzt rein:
    using namespace std;
    

    Ihr dürft eure Lösch-Methode nicht delete nennen, da dies ein Schlüsselwort ist, also umbenennen gehen.

    Für Grundlagen (wie Arrays und Strukturen): http://tutorial.schornboeck.net

    Sortieren mit BubbleSort ist nicht gut, wenn's immer noch einfach sein soll: Insertion Sort? Wie? Hier: http://www.volkard.de/vcppkold/straight_insertion_sort.html

    Als kleine Hilfe die print Funktion:

    void printField (ElemT feld[50], int len) {
      cout<<"Key:\tWert:\n;
      for (int i=0;i<len;++i) {
        cout<<feld[i].key<<'\t'<<feld[i].value<<'\n';
      }
    }
    

    Ihr habt nen engen Zeitrahmen, wäre besser gewesen, früher zu kommen...

    Mfg

    GPC



  • Hallo,

    Vorweg: wir wissen das es nicht iostream heißt; nur, wir verwenden eine alte Visual Studio Version (6.0), wo man es noch so verwendet bzw. implementieren muss..

    Danke für den Denkanstoss (insert sort) 😉 und die Links

    mfg
    die Gäste


Anmelden zum Antworten