Programm für Studium



  • Ach so, schonmal danke für das Prgramm, aber nicht das was ich gesucht habe. Wir sollen den Umgang mit Pointern lernen. Hier noch die Hinweise, die unser Dozent gegeben hat. Außerdem habe ich vorhin in Eile die hälfte der Aufgabenstellung vergessen...

    Also nochmal:

    Entwickeln sie ein Programm, welches wiederholend ganzzahlige Werte vond der Tastatur einliest und diese in einer forlaufenden Liste speichert.

    Für die Liste muss folgende Struktur verwendet werden:

    struct ListenElement {
    int wert;
    ListenElement * naechstesElement;
    };

    Das fortlaufende Einlesen der Zahlenwerte wird durch die Eingabe 0 abgebrochen. Anschließend sollen alle eingelesenen Zahlen in der Reihenfolge der Eingabe am Bildschirm ausgegeben werden.

    Hinweise:

    []Sie benötigen eine Variable, die auf den Listenanfang zeigt.
    [
    ]Der Zeiger des letzten Listenelements ist immer auf NULL zu setzen.
    [*]Ein neues Listenelement erzeugen sie durch

    ListenElement * n = new ListenElement;



  • struct ListenElement 
    {
        int wert;
        ListenElement *naechstesElement;
    
        ListenElement() : naechstesElement(0)
        {
        }
        ~ListenElement()
        {
            delete this->naechstesElement;
        }
    }; 
    
    int main()
    {
        using namespace std;
        ListenElement Element,
                      *Liste = ∈
        for (;;)
        {
            cin >> Liste->wert;
            if (!Liste->wert)
                break;
            Liste = Liste->naechstesElement = new ListenElement;
        }
        return 0;
    }
    

    Da 🙄 👎



  • Josey schrieb:

    Sagen wir mal so: 1+2 ja, 3 größtenteils, 4 nein...

    Hallo Josey,

    ist doch prima; dann schreib doch mal ein Programm, welches in einer Schleife mit jedem Durchlauf eine Zahl einliest .... wir helfen Dir dann weiter.
    Oder bist Du mit der Lösung von Gideon schon zufrieden?

    @life
    Du hast den Member naechstesElement nicht korrekt belegt. Besser:

    struct ListenElement
    {
        ListenElement( int x ) : wert( x ), naechstesElement( 0 ) {}
        int wert;
        ListenElement* naechstesElement;
    };
    int main()
    {
        using namespace std;
        list< ListenElement > l;
        for( int x; cin >> x; )
        {
            l.push_back( ListenElement( x ) );
            if( l.size() > 1 )
                (----l.end())->naechstesElement = &l.back();
        }
        return 0;
    }
    

    Gruß
    Werner



  • struct ListenElement 
    {
    	int wert;
    	ListenElement * naechstesElement;
    }; 
    
    int main()
    {
    	ListenElement* current, *top = new ListenElement;
    	current = top;
    	current->naechstesElement = 0;
    
    	for( ;; )
    	{
    		int tmp;
    		cin >> tmp;
    		if( !tmp )
    			break;
    		current->naechstesElement = new ListenElement;
    		current->wert = tmp;
    		current = current->naechstesElement;
    		current->naechstesElement = 0;
    		current->wert = 0;
    	}
    	current = top;
    	while( current )
    	{
    		if( current->wert )
    			cout << current->wert;
    		ListenElement* tmp = current;
    		current = current->naechstesElement;
    		delete tmp;
    	}
    }
    

    Liebe Grüße von deinem Tutor, wir sprechen uns dann



  • Werner Salomon schrieb:

    [...]
    for( int x; cin >> x; )
    [...]
    

    überdenk das nochmal, das bricht nicht ab, wenn man ne 0 eingibt, sondern wenn der stream in nen fehlerzustand geht, besser wäre cin >> x && x, so fängt man den fehlerzustand ab und beendet, falls der stream in nen fehlerzustand geht und es wird bei der eingabe von ner 0 beendet.



  • Any schrieb:

    Werner Salomon schrieb:

    [...]
    for( int x; cin >> x; )
    [...]
    

    überdenk das nochmal, das bricht nicht ab, wenn man ne 0 eingibt, sondern wenn der stream in nen fehlerzustand geht,

    so isses gedacht 🕶

    Any schrieb:

    besser wäre cin >> x && x, so fängt man den fehlerzustand ab und beendet, falls der stream in nen fehlerzustand geht und es wird bei der eingabe von ner 0 beendet.

    Ende mit x oder quit.

    zugegeben; hab' wieder die Bedienungsanleitung nicht dabei gelegt.

    Gruß
    Werner



  • vllt lang und Umständlich aber ich schätze sowas will er:

    #include<iostream>
    #include<stdio.h>
    
    struct ListenElement 
    {
       int wert;
       ListenElement * naechstesElement;
    }Listenkopf; 
    
    ListenElement* GetFirst();
    ListenElement* GetLast();
    void PutNew(int Zahl);
    
    int main()
    {
       ListenElement*Pointer;
       int Zahl;
       Listenkopf.wert=0;
       Listenkopf.naechstesElement=0;
    
       while(true)
       {
          cout<<"Zahl eingeben:";
          cin>>Zahl;
    
          if(Zahl==0) 
          {
             break;
          }
          else
          {
             if(Listenkopf.wert==0)
             {
                Listenkopf.wert=Zahl;
    
             }
             else
             {
                PutNew(Zahl);
             }
          }
       }
       Pointer=GetFirst();
       while(true)
       {
          if(Pointer==GetLast())
          {
             cout<<Pointer->wert<<endl;
             break;
          }
          else
          {
             cout<<Pointer->wert<<endl;
             Pointer=Pointer->naechstesElement;
          }
       }
       getchar();
    }
    
    ListenElement* GetFirst()
    {
       return (&Listenkopf);
    }
    
    ListenElement* GetLast()
    {
       ListenElement* ListenElementPointer;
       ListenElementPointer=GetFirst();
       while(ListenElementPointer->naechstesElement!=0)
       {
          ListenElementPointer=ListenElementPointer->naechstesElement;
       }
    
       return ListenElementPointer;
    }
    void PutNew(int Zahl)
    {
       ListenElement* ListenElementPointer;
       ListenElementPointer=GetLast();
       ListenElementPointer->naechstesElement=new ListenElement;
       ListenElementPointer=ListenElementPointer->naechstesElement;
       ListenElementPointer->wert=Zahl;
       ListenElementPointer->naechstesElement=0;
    }
    

    Mfg
    PS: Wenn du es erklären musst würd ich den Code nichjt unbedingt nehmen.. gibt ein paar Stellen die man noch optimieren hätte sollen...



  • ok vergiss das ham welche bessere geschrieben(hatte ich nicht gesehen)



  • Werner Salomon schrieb:

    zugegeben; hab' wieder die Bedienungsanleitung nicht dabei gelegt.

    Nicht beigelegt oder nicht gelesen? 😃 😉

    Aufgabe schrieb:

    Das fortlaufende Einlesen der Zahlenwerte wird durch die Eingabe 0 abgebrochen.



  • Karldin schrieb:

    Mfg
    PS: Wenn du es erklären musst würd ich den Code nichjt unbedingt nehmen.. gibt ein paar Stellen die man noch optimieren hätte sollen...

    Ja, ich muss es erklären, aber danke für die Arbeit von dir und den anderen 👍 . Ich versuche jetzt noch mir selber zu erklären wie die ganzen Programme die hier gepostet wurden funktionieren, damit ich selber eines zusammenstellen kann. Ist auch nicht ganz einfach. Aber auch noch um Erklärungen zu bitten wäre doch etwas zu viel verlangt 😃 .



  • Josey schrieb:

    Aber auch noch um Erklärungen zu bitten wäre doch etwas zu viel verlangt 😃 .

    LOL... was du gemacht hast war schon etwas viel verlangt & es hat (komischerweise) trotzdem geklappt 😃



  • Eben. Darum bin ich auch verdammt dankbar. Ihr habt wohl mir einen großen Teil meines Semesters in Informatik gerettet!



  • Josey schrieb:

    Karldin schrieb:

    Mfg
    PS: Wenn du es erklären musst würd ich den Code nicht unbedingt nehmen.. gibt ein paar Stellen die man noch optimieren hätte sollen...

    Ja, ich muss es erklären, aber danke für die Arbeit von dir und den anderen 👍 . Ich versuche jetzt noch mir selber zu erklären wie die ganzen Programme die hier gepostet wurden funktionieren, damit ich selber eines zusammenstellen kann. Ist auch nicht ganz einfach. Aber auch noch um Erklärungen zu bitten wäre doch etwas zu viel verlangt 😃 .

    Hallo Josey,

    doch - wer konkrete Fragen stellt, der bekommt hier auch konkrete Antworten 🙂
    Das ist allemal besser als zu sagen 'macht meine Hausaufgaben für mich'. Vergiss den Code den ich und life gepostet haben. Das war Spaß.

    Die anderen kannst Du zumindest als Grundlage hernehmen. Stell' aber ruhig Fragen, wenn Du was nicht verstanden hast und poste uns das was Du schon hast.

    Gruß
    Werner

    @finix: Erwicht! 'nicht gelesen' war richtig 😉


Anmelden zum Antworten