Anfängerproblem - bitte um dringende Hilfe!!



  • Hallo kann mir vielleicht jemand bei dieser Aufgabe behilflich sein?

    Leider bin ich nicht sehr weit gekommen, beginne gerade es in einem Schnellkurs zu lernen. also:

    Eine Integer-Liste ist eine Folge von Integer-Werten. Beispiele für Integer-Listen: Leere Liste: < >, eine Liste mit zwei Elementen: < 2, 4 >, eine Liste kann Wiederholungen enthalten: <3, 3, 3, 7 >.

    1. Definieren Sie einen Datentyp List für Integer-Listen mit maximal 12 Elementen.
    2. Geben Sie für die Listen < >, < 2, 4 >, < 3, 3, 3, 7 > jeweils an, wie sie von Ihrem Datentyp dargestellt werden.
    3. Erweitern Sie Ihren Datentyp List um eine Methode empty, die die Liste, für die sie aktiviert wird, leert. Die leere List kann also mit

    List x; x.empty ( );
    erzeugt werden.
    4. Schreiben Sie eine freie Funktion emptyList die eine leere Liste erzeugt. Ein Beispiel für die Verwendung dieser Funktion ist:
    Liste x ; x = emptyList ( ) ;
    5. Schreiben Sie eine Methode append die einen übergebenen Integer-Wert an ihre Liste anhängt. Beispiel: Wenn x die Liste < 7, 9, 7 > darstellt, dann wird mit x.append ( 4 ) die Darstellung der Liste < 7, 9, 7, 4 > in x erzeugt.
    6. Geben Sie die Abstraktionsfunktion und die Dateninvariante Ihrer Liste an.

    Ok, hier mein Ansatz:
    Zu 1:
    typedef int List [ 12 ]

    Zu 2:
    List list1, list2, list3;
    Liste list1 = {};
    Liste list2 = {2, 4};
    Liste list3 = {3, 3, 3, 7};

    Zu 3:
    struct List empty () {…

    naja irgendwie komme ich nicht weiter, weiss auch nicht ob soweit alles richtig ist. würde mich über Antworten sehr freuen.



  • Hi!

    Also ich verstehe nicht was gefordert ist.
    Eine Liste oder ein Vector (Array ?!)

    Zum einen wird Liste geschrieben aber es wird von X Elementen geredet. Das erste spricht für ne liste der es egal ist wieviel Elemente sie hat, das letzte spricht eher für nen Array.

    Ansonsten musst Du eine Klasse schreiben da punkt 3 eine Methode fordert.

    Punkt 4 ergibt irgendwie auch kein Sinn da die Liste so über den op=() zugewiesen werden müsste.

    Kannst Du bitte kurz umschreiben was gefordert ist ? Liste

    struct List
    {
     int Element;
     List * next;
    };
    
    oder eher ein Array
    
    struct List
    {
      int Elemente[12];
    };
    

    [ Dieser Beitrag wurde am 06.07.2003 um 21:11 Uhr von Knuddlbaer editiert. ]



  • Original erstellt von virtuel:
    3. Erweitern Sie Ihren Datentyp List um eine Methode empty, die die Liste, für die sie aktiviert wird, leert. Die leere List kann also mit

    List x; x.empty ( );
    erzeugt werden.

    Soll der Datentyp etwa den Standardkonstruktor behalten? 😕

    btw:
    Nimm eine Klasse und keine struct, wenn du in C++ programmierst. 🙂



  • - also wir arbeiten noch nicht mit klassen, private und public, somit dürfen wir das auch noch nicht einsetzen.
    - es soll eine liste sein und kein array
    - mit konstruktor und destruktur haben wir auch noch nicht gearbeitet und dürfen es somit auch nicht einsetzen, es soll ganz simbles anfänger programmieren sein
    - mit zeigern haben wir auch noch nicht gearbeitet

    ich hoffe diese zusatzinfo hilft euch weiter, mich weiterhin zu beraten.

    vielen dank!



  • Nö da können wir nicht helfen. Ich sehe da keinen Zusammenhang. Ich makiere
    mal die Textstellen auf die ich mich beziehen möchte.

    3. Erweitern Sie Ihren Datentyp List um eine Methode empty, die die Liste, für die sie aktiviert wird, leert
    - also wir arbeiten noch nicht mit klassen, private und public, somit dürfen wir das auch noch nicht einsetzen.

    Das höer sich schon danach ans als sollte es eine Klasse sein. Wüsste nicht wie man sonst den Datentyp um eine Methode erweitern soll.

    struct foo
      {
      }; 
      ist das gleiche wie 
      class foo
      {
       public:
      };
    

    1. Definieren Sie einen Datentyp List für Integer-Listen mit maximal 12 Elementen

    **
    - es soll eine liste sein und kein array
    - mit zeigern haben wir auch noch nicht gearbeitet
    **

    Eine Liste braucht Zeiger um auf das nächste Element zu Zeigen. Ich wüsste nicht wie ich eine Liste bauen söllt ohne Zeiger die genau 12 Elemente aufnimmt. (Ok das mit den 12 lässt sich beschränken beim hinzufügen mit counter...)

    Sorry das wiederspricht sich in meinen Augen. Die Lösung für die Aufgabe (die des Lehrers) würde mich aber brennend interessieren. Ich steh bestimmt nur wieder auf dem Schlauch ?!?

    [ Dieser Beitrag wurde am 07.07.2003 um 00:03 Uhr von Knuddlbaer editiert. ]



  • - also mit dem array habe ich mich vertan, hab nochmal nachgefragt ist ok
    - aber keine klassen
    - wir sollen resteinmal lernen mit methoden und freien funktionen umzugehen bevor wir auf das wirkliche objektorientierte übergehen
    - danke für deinen mühe

    gruss
    v.



  • du kannst nicht ohne klassen lernen, mit methoden umzugehen. weil eine methode per definition eine member-funktion ist.

    und das
    Liste x ; x = emptyList ( ) ;
    sollte doch bitteschoen so
    Liste x = emptyList();
    aussehen.

    das ist wohl wieder einer dieser typischen umgeschulten lehrer, der keine ahnung hat und beim abaendern von aufgabenstellungen aus dem internet nur unsinn erzeugt.

    meine loesung saehe so aus, obwohl man bei einem struct mit methoden nicht wirklich von "keine klasse" reden kann. falls dich die header erschrecken: die unteren 3 braucht man nur fuer die nicht geforderte show methode.

    #include<vector>
    #include<cassert>
    #include<algorithm>
    #include<iterator>
    #include<iostream>
    
    using namespace std;
    
    struct List{
        void empty(){ internal_.clear(); }
        void append(int x){ assert(internal_.size()<12); internal_.push_back(x); }
        void show(){ copy(internal_.begin(), internal_.end(), ostream_iterator<int>(cout, "\n")); }
        vector<int> internal_;
    };
    
    List emptyList(){ return List(); }
    
    int main(){
        List x = emptyList();
        x.append(5);
        x.append(14);
        x.append(17000);
        x.show();
        return 0;
    }
    


  • man braucht da keine Klassen
    das ziel ist sicher einen ADT zu erzeugen in dem solche relationen wie

    Liste x [] ->Liste
    Liste x Int -> Liste
    Liste x Liste -> Liste

    deffiniert werden.



  • ok, super! habt mir schon sehr geholfen, wird sich bald rausstellen, ob die Lösung so gefordert war. werde auf jeden fall diesen ansatz benutzen.
    - ich habe mir folgende Lösung überlegt:

    #include <stdio.h>

    typedef struct Liste
    {
    int list[12];
    void empty();
    void init();
    void print();
    };

    void Liste::empty()
    {
    for(int i=0; i<12; i++)
    list[ i ] = 0;
    }

    void Liste::init()
    {
    this->empty(); //
    }

    void Liste::print()
    {
    printf("{");
    for(int i=0; i<12; i++)
    printf("%d%s", this->list[ i ], i==11 ? "}\n" : ", ");

    }

    int main()
    {
    Liste x;
    x.init();
    for(int i=0; i<12; i++)
    x.list[11-i] = i+1;
    x.print();
    x.empty();
    x.print();
    }

    - vielleicht könnt ihr kurz euer kommentar dazu abgeben!
    und ob dies C++ technisch ok ist!

    vielen dank!

    gruss
    v.


Anmelden zum Antworten