tutorials.de Buch-Aktion 05/2012
Like Tree2Danke
  • 1 Beitrag von sheel
  • 1 Beitrag von sheel
ERLEDIGT
JA
ANTWORTEN
7
ZUGRIFFE
1651
EMPFEHLEN
  • An Twitter übertragen
  • An Facebook übertragen
AUF DIESES THEMA
ANTWORTEN
  1. #1
    lyon64 lyon64 ist offline Mitglied
    Registriert seit
    Sep 2010
    Beiträge
    13
    Hallo,

    habe eine neue Aufgabe eingestellt, die fast fertig ist, allerdings nur fast

    Eine einfach verkettete Liste mit Objekte rückwärts ausgeben.

    Vorgabe:
    keine doppelt verkettete Liste erstellen
    es soll die Methode ausgabeRueckwaerts () erstellen, die sich rekursiv aufruft
    das Programm soll 5 Elemente vorwärts und dieselben Elemente rückwärts ausgeben

    Mein code: ACHTUNG: Programm geht nicht ************!!

    [ccp)

    #include "stdafx.h"

    using namespace System;

    ref class listenelement {
    String ^daten;
    listenelement ^next;

    public:
    void datenSetzen(String ^datenneu);
    void anhaengen(String ^datenneu);
    void ausgeben();
    void ausgebenRueckwaerts ();
    };

    //die Zeichenkette in das Element schreiben
    void listenelement::datenSetzen(String ^datenneu)
    {
    daten=datenneu;
    }
    //neues Element am Ende der Liste anhängen
    void listenelement::anhaengen(String ^datenneu)
    {
    //hat next den Wert nullptr?
    //dann ein neues Element anhängen
    if (next == nullptr) {
    next = gcnew listenelement;
    next->daten=datenneu;
    //nullptr wird automatisch zugewiesen!
    }
    //sonst die Methode für next noch einmal aufrufen
    else
    next->anhaengen(datenneu);
    //nur zur Veranschaulichung
    Console::WriteLine("Daten {0} wurden eingefügt.",datenneu);
    }

    //Alle Elemente der Liste ausgeben
    void listenelement::ausgeben()
    {
    //den ersten Eintrag ausgeben
    Console::WriteLine("{0}",daten);
    //wenn das Ende nicht erreicht ist, die Methode für next erneut aufrufen
    if (next != nullptr)
    next->ausgeben();
    }
    // *** NEU *** Alle Elemente rückwärts ausgeben ***rekursiv***
    void listenelement::ausgebenRueckwaerts()
    {
    if(next != nullptr)
    next->ausgebenRueckwaerts();
    Console::WriteLine("{0}",next);
    }

    int main(array<System::String ^> ^args)
    {
    //Handle auf den Anfang der Liste
    listenelement ^listenAnfang;

    //Handle auf das Ende der Liste
    listenelement ^listenEnde;

    //das erste Element per Hand erzeugen
    listenAnfang = gcnew listenelement;

    //Zeichenkette in das erste Element schreiben
    listenAnfang->datenSetzen("Element 1");

    //in einer Schleife mehrere Elemente anfügen
    for (Int32 schleife=2;schleife<6;schleife++)
    listenAnfang->anhaengen("Element "+schleife);

    //die Liste ausgeben
    listenAnfang->ausgeben();

    //die Liste rückwärts ausgeben
    listenEnde->ausgebenRueckwaerts();

    return 0;
    }

    [/ccp]

    Wer kann mir hier einen Tipp geben.

    Danke und Gruß
    lyon64
     

  2. #2
    badday badday ist offline Mitglied Brokat
    Registriert seit
    Dec 2009
    Beiträge
    321
    Blog-Einträge
    1
    Ersetze die Runde Klammer bei [cpp) durch eine eckige, sonst kann man es kaum lesen!
     
    Galaxy under Fire - 24/7 Online-Real-Time-Strategy-Game - servers are already running - Wir suchen einen Texturier für 3D-Modelle (bei Interesse einfach PM ;) )

  3. #3
    lyon64 lyon64 ist offline Mitglied
    Registriert seit
    Sep 2010
    Beiträge
    13
    Hallo badday,

    konnte meine Aufgabe lösen. Anbei mein Ergebnis. )


    Gruß
    lyon64

    [ccp] #include "stdafx.h"

    using namespace System;

    ref class listenelement {
    String ^daten;
    listenelement ^next;

    public:
    void datenSetzen(String ^datenneu);
    void anhaengen(String ^datenneu);
    void ausgeben();
    void ausgebenRueckwaerts ();
    };

    //die Zeichenkette in das Element schreiben
    void listenelement::datenSetzen(String ^datenneu)
    {
    daten=datenneu;
    }
    //neues Element am Ende der Liste anhängen
    void listenelement::anhaengen(String ^datenneu)
    {
    //hat next den Wert nullptr?
    //dann ein neues Element anhängen
    if (next == nullptr)
    {
    next = gcnew listenelement;
    next->daten=datenneu;
    //nullptr wird automatisch zugewiesen!
    }
    //sonst die Methode für next noch einmal aufrufen
    else
    next->anhaengen(datenneu);
    //nur zur Veranschaulichung
    Console::WriteLine("Daten {0} wurden eingefügt.",datenneu);
    }

    //Alle Elemente der Liste ausgeben
    void listenelement::ausgeben()
    {
    //den ersten Eintrag ausgeben
    Console::WriteLine("{0}",daten);
    //wenn das Ende nicht erreicht ist, die Methode für next erneut aufrufen
    if (next != nullptr)
    next->ausgeben();
    }
    // *** NEU *** Alle Elemente rückwärts ausgeben ***rekursiv***
    void listenelement::ausgebenRueckwaerts()
    {
    if(next != nullptr)
    {
    next->ausgebenRueckwaerts();
    }
    Console::WriteLine("{0}",daten);
    }

    int main(array<System::String ^> ^args)
    {
    //Handle auf den Anfang der Liste
    listenelement ^listenAnfang;

    //Handle auf das Ende der Liste
    listenelement ^listenEnde;

    //das erste Element per Hand erzeugen
    listenAnfang = gcnew listenelement;

    //Zeichenkette in das erste Element schreiben
    listenAnfang->datenSetzen("Element 1");

    //Listenanfang auf Listenende setzen
    listenEnde = listenAnfang;

    //in einer Schleife mehrere Elemente anfügen
    for (Int32 schleife=2;schleife<6;schleife++)
    listenEnde->anhaengen("Element "+schleife);

    //die Liste ausgeben
    listenAnfang->ausgeben();

    //die Liste rückwärts ausgeben
    listenAnfang->ausgebenRueckwaerts();

    return 0;
    } [/ccp]
     

  4. #4
    Avatar von sheel
    sheel sheel ist offline Moderator
    tutorials.de Moderator
    Registriert seit
    Jul 2007
    Beiträge
    4.504
    Und bitte auch cpp statt ccp
    lyon64 bedankt sich. 

  5. #5
    crouwd crouwd ist offline Grünschnabel
    Registriert seit
    Dec 2011
    Beiträge
    2
    Code cpp:
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    
    #include "stdafx.h"
     
    using namespace System;
     
    ref class listenelement {
    String ^daten;
    listenelement ^next;
     
    public:
    void datenSetzen(String ^datenneu);
    void anhaengen(String ^datenneu);
    void ausgeben();
    void ausgebenRueckwaerts ();
    };
     
    //die Zeichenkette in das Element schreiben
    void listenelement::datenSetzen(String ^datenneu)
    {
    daten=datenneu;
    }
    //neues Element am Ende der Liste anhängen
    void listenelement::anhaengen(String ^datenneu)
    {
    //hat next den Wert nullptr?
    //dann ein neues Element anhängen
    if (next == nullptr) {
    next = gcnew listenelement;
    next->daten=datenneu;
    //nullptr wird automatisch zugewiesen!
    }
    //sonst die Methode für next noch einmal aufrufen
    else
    next->anhaengen(datenneu);
    //nur zur Veranschaulichung
    Console::WriteLine("Daten {0} wurden eingefügt.",datenneu);
    }
     
    //Alle Elemente der Liste ausgeben
    void listenelement::ausgeben()
    {
    //den ersten Eintrag ausgeben
    Console::WriteLine("{0}",daten);
    //wenn das Ende nicht erreicht ist, die Methode für next erneut aufrufen
    if (next != nullptr)
    next->ausgeben();
    }
    // *** NEU *** Alle Elemente rückwärts ausgeben ***rekursiv***
    void listenelement::ausgebenRueckwaerts()
    {
    if(next != nullptr)
    next->ausgebenRueckwaerts();
    Console::WriteLine("{0}",daten);
    }
     
    int main(array<System::String ^> ^args)
    {
    //Handle auf den Anfang der Liste
    listenelement ^listenAnfang;
     
    //Handle auf das Ende der Liste
    listenelement ^listenEnde;
     
    //das erste Element per Hand erzeugen
    listenAnfang = gcnew listenelement;
     
    //Zeichenkette in das erste Element schreiben
    listenAnfang->datenSetzen("Element 1");
    listenEnde=listenAnfang;
    //in einer Schleife mehrere Elemente anfügen
    for (Int32 schleife=2;schleife<6;schleife++)
    listenAnfang->anhaengen("Element "+schleife);
     
    //die Liste ausgeben
    listenAnfang->ausgeben();
     
    //die Liste rückwärts ausgeben
    listenEnde->ausgebenRueckwaerts();
     
    Console::Read();
    return 0;
    }

    sooo ich hatte bzw habe diese aufgabe auch und dein Quelltext ist schon inordnung nur du darfst bei der ausgebe nicht Console::WriteLine("{0}",NEXT)schreiben sonder Daten dann klappt es habe mal den Quell text mit Kopiert.... im Übrigen bei der ersten Aufgabe hing ich auch 20 stunden an genau dem selben Problem und die Fragestllung ist bei mir die selbe gewesen XD
     

  6. #6
    Avatar von sheel
    sheel sheel ist offline Moderator
    tutorials.de Moderator
    Registriert seit
    Jul 2007
    Beiträge
    4.504
    Danke, dass du doch noch eine Lösung bringst.
    Durch die fehlende Reaktion vom Fragesteller hab ich den Thread gar nicht mehr angeschaut...

    Was aber bei euch beiden der Fall ist:
    Ihr verwendet C++/CLI, als eine .NET-Sprache.
    Das ist kein C++, auch wenns im Namen vorkommt.
    ...Nur als Info.

    Gruß
     
    Netiquette (vA §15) und Nutzungsregeln (vA §4.8) einhalten! Programmcode in Codetags/Codeboxen.
    Sehr gute Beiträge bitte Bewerten (Stern darunter oder "Danke").
    "Funktioniert nicht" ist zu ungenau! Code, Fehlermeldungen, Verhalten des Programms, ...?

  7. #7
    crouwd crouwd ist offline Grünschnabel
    Registriert seit
    Dec 2011
    Beiträge
    2
    Ehm auch wenn sich grade alle die das lesen denken Boa das weiß doch jeder......Aber ich frag Trotzdem mal....Wo is der Unterscheid zwischen C++ Und C++/CLI....****?
     

  8. #8
    Avatar von sheel
    sheel sheel ist offline Moderator
    tutorials.de Moderator
    Registriert seit
    Jul 2007
    Beiträge
    4.504
    C++/CLI ist eine von Microsoft entwickelte Sprache, die ursprünglich dafür gedacht war,
    die Klassen von C# mit C++-Syntax zu mischen.
    Also die C#-Funktionalität mit C++-Schreibweise für den Code.
    Das hatte MS eigentlich vor.
    Den C#-Klassenteil haben sie geschafft, den Rest nicht.
    Die Syntax/Schreibweise von C++/CLI ist jetzt weder die von C# noch C++,
    sondern was eigenes neues.

    ...Wenn man die (nicht sehr beliebte) Schreibweise mal wegdenkt,
    ist der Funktionsumfang von C++/CLI komplett gleich wie bei C#
    und passt damit besser zu Java als C/C++.

    C# wird übrigens allgemein als Programmierer-freundlicher angesehen...
    Wenn man also bisher unwissend seine Winformsprogramme
    in "C++" mit gcnew^ usw. geschrieben hat, tut man sich mit dem Umstieg
    auf C# selbst einen Gefallen. Man wird sich sofort damit auskennen,
    und das Programmieren geht etwas leichter.
    Vor allem, wenn man zB. Java schon kennt.

    Der einzige Grund, bei dem ich C++/CLI verwenden würde:
    Wenn ich C++ und C# zusammen in ein Programm hängen will.
    C++/CLI machts relativ einfach, den Verbindungsteil
    zwischen den zwei Welten zu machen.

    Lange Rede, kurzer Sinn: Bis auf den Namen haben die zwei Sprachen wenig gemeinsam.

    Und mach dir keine Sorgen; weil du das nicht wusstest.
    Bist bei Weitem nicht der Einzige.
    Vor allem, weil das echte C++ und C++/CLI in Visual Studio beide als "C++" drin sind.

    Vllt. will Microsoft ja so die Verwendung seiner Sprache erhöhen,
    indem die Leute absichtlich verwirrt werden...

    Von MS offiziell aus gibts den Namen "C++/CLI" meines Wissens gar nicht.
    Fakt ist aber, dass es nicht C++ ist; deshalb hat sich irgendwie der Name mit CLI eingebürgert.

    Gruß
    crouwd bedankt sich. 
    Netiquette (vA §15) und Nutzungsregeln (vA §4.8) einhalten! Programmcode in Codetags/Codeboxen.
    Sehr gute Beiträge bitte Bewerten (Stern darunter oder "Danke").
    "Funktioniert nicht" ist zu ungenau! Code, Fehlermeldungen, Verhalten des Programms, ...?

Ähnliche Themen

  1. Einfach verkettete Liste mit Objekte
    Von lyon64 im Forum C/C++
    Antworten: 15
    Letzter Beitrag: 12.09.10, 10:39
  2. Antworten: 5
    Letzter Beitrag: 10.12.09, 15:56
  3. Antworten: 14
    Letzter Beitrag: 06.07.09, 14:27
  4. Antworten: 19
    Letzter Beitrag: 06.03.09, 11:35
  5. Einfach verkettete Liste
    Von lernen.2007 im Forum Java
    Antworten: 1
    Letzter Beitrag: 25.04.05, 09:27