matheraum.de
Raum für Mathematik
Offene Informations- und Nachhilfegemeinschaft

Für Schüler, Studenten, Lehrer, Mathematik-Interessierte.
Hallo Gast!einloggen | registrieren ]
Startseite · Forum · Wissen · Kurse · Mitglieder · Team · Impressum
Forenbaum
^ Forenbaum
Status Hochschulmathe
  Status Uni-Analysis
    Status Reelle Analysis
    Status UKomplx
    Status Uni-Kompl. Analysis
    Status Differentialgl.
    Status Maß/Integrat-Theorie
    Status Funktionalanalysis
    Status Transformationen
    Status UAnaSon
  Status Uni-Lin. Algebra
    Status Abbildungen
    Status ULinAGS
    Status Matrizen
    Status Determinanten
    Status Eigenwerte
    Status Skalarprodukte
    Status Moduln/Vektorraum
    Status Sonstiges
  Status Algebra+Zahlentheo.
    Status Algebra
    Status Zahlentheorie
  Status Diskrete Mathematik
    Status Diskrete Optimierung
    Status Graphentheorie
    Status Operations Research
    Status Relationen
  Status Fachdidaktik
  Status Finanz+Versicherung
    Status Uni-Finanzmathematik
    Status Uni-Versicherungsmat
  Status Logik+Mengenlehre
    Status Logik
    Status Mengenlehre
  Status Numerik
    Status Lin. Gleich.-systeme
    Status Nichtlineare Gleich.
    Status Interpol.+Approx.
    Status Integr.+Differenz.
    Status Eigenwertprobleme
    Status DGL
  Status Uni-Stochastik
    Status Kombinatorik
    Status math. Statistik
    Status Statistik (Anwend.)
    Status stoch. Analysis
    Status stoch. Prozesse
    Status Wahrscheinlichkeitstheorie
  Status Topologie+Geometrie
  Status Uni-Sonstiges

Gezeigt werden alle Foren bis zur Tiefe 2

Navigation
 Startseite...
 Neuerdings beta neu
 Forum...
 vorwissen...
 vorkurse...
 Werkzeuge...
 Nachhilfevermittlung beta...
 Online-Spiele beta
 Suchen
 Verein...
 Impressum
Das Projekt
Server und Internetanbindung werden durch Spenden finanziert.
Organisiert wird das Projekt von unserem Koordinatorenteam.
Hunderte Mitglieder helfen ehrenamtlich in unseren moderierten Foren.
Anbieter der Seite ist der gemeinnützige Verein "Vorhilfe.de e.V.".
Partnerseiten
Weitere Fächer:

Open Source FunktionenplotterFunkyPlot: Kostenloser und quelloffener Funktionenplotter für Linux und andere Betriebssysteme
StartseiteMatheForenPraxisNochmal verkettete Listen C++
Foren für weitere Schulfächer findest Du auf www.vorhilfe.de z.B. Philosophie • Religion • Kunst • Musik • Sport • Pädagogik
Forum "Praxis" - Nochmal verkettete Listen C++
Nochmal verkettete Listen C++ < Praxis < Informatik < Vorhilfe
Ansicht: [ geschachtelt ] | ^ Forum "Praxis"  | ^^ Alle Foren  | ^ Forenbaum  | Materialien

Nochmal verkettete Listen C++: Korrektur, Hilfe, Tipp, Idee
Status: (Frage) überfällig Status 
Datum: 18:18 Do 02.05.2013
Autor: Mija

Aufgabe
Schreiben Sie ein C++-Programm, das eine Liste von Feiertagen nach FIFO-Prinzip verwaltet. Es muss auch möglich sein, einen bestimmten Wert in der Liste zu finden.

Ein Listenknoten wird wie folgt definiert:
1: const int MAX = 30;
2: struct Listenknoten {
3: char feiertag[MAX];
4: struct Listenknoten *next;
5: };


a) Bauen Sie Ihr Programm modular auf: Die Liste in einem Modul (fifo_liste.h und fifo_liste.cpp) und das Hauptprogramm im einem anderen Modul.
b) Die Eingabe der Feiertage soll im Dialog mit dem Benutzer passieren. Der Benutzer entscheidet, wann er die Eingabe beendet.
c) Für die Arbeit mit der Liste implementieren Sie folgende Funktionen:
1:
2: // ein Feiertag am Anfang der Liste einfuegen
3: void push(char *feiertag);
4:
5: // den Feiertag am Ende der Liste zurueckliefern
6: // und den Knoten entfernen
7: char *pop();


d) Desweiteren implementieren Sie eine Funktion zum Suchen eines bestimmten Knotens in der Liste. Die Funktion liefert einen Zeiger auf den Knoten mit dem als Parameter übergebenen Feiertag oder 0, wenn der Feiertag nicht in der Liste ist.
Listenknoten *find(char *feiertag);
Gestalten Sie die Suche als Dialog mit dem Benutzer.
e) Am Ende des Programms sollen alle Feiertage der Liste vom Ende bis zum Anfang ausgegeben und die Liste dabei geleert werden.
Hinweise:
1. Sie können die Datei lifo_liste.cpp aus moodle als Basis für Ihr Programm benutzen.
2. Wenn Sie in dieser Aufgabe globale Datenobjekte (Variablen, Arrays) brauchen, definieren Sie diese Datenobjekte.




Hallo, ich habe ein Problem mit der obenstehenden Aufgabe.

Nachdem ich die Feiertage eingegeben habe und dann meine 0 als Abbruchbedingung eingegeben habe, werden nur komische Zeichen in sovielen Zeilen ausgegeben wie ich Eingaben getätigt habe (einschließlich der 0 zum Abbruch).
Leider weiß ich nicht weiter, wo mein Fehler ist. Ich bekomme auch keine Fehermeldungen.

Wo habe ich etwas falsch gemacht?

Ich würde mich sehr freuen, wenn mir jemand weiterhelfen könnte! :-)

Hier ist mein Code:

1: /*feiertage_fifo.h*/
2: #ifndef FEIERTAGE_FIFO_H
3: #define FEIERTAGE_FIFO_H
4:
5: const int MAX = 30;
6:
7: struct Listenknoten {
8: char feiertag[MAX];
9: struct Listenknoten *next;
10: };
11:
12: extern struct Listenknoten* anker;
13: extern struct Listenknoten* ende;
14:
15: //Funktionsdeklarationen
16: void push(char*);
17: char* pop();
18: Listenknoten* find(char*);
19: void ausgabe();
20:
21: #endif //FEIERTAGE_FIFO_H


1: /*feiertage_fifo.cpp*/
2: #include <iostream>
3: #include "feiertage_fifo.h"
4:
5: using namespace std;
6:
7: // ein Feiertag am Anfang der Liste hinzufuegen
8: void push(char* feiertag)
9: {
10: //Neuer Knoten ANFANG
11: Listenknoten* neuer_Knoten = new Listenknoten; //erstelle einen neuen Knoten
12: int i = 0;
13: while(feiertag[i]!='\0')
14: {
15: neuer_Knoten->feiertag[i] = feiertag[i]; // besetze die Daten des Knotens
16: i++;
17: }
18: if( i < MAX-1 )
19: {
20: neuer_Knoten->feiertag[i] = '\0';
21: }
22: //Neuer Knoten ENDE
23:
24: if (anker == 0)
25: {//die Liste ist leer
26: anker = neuer_Knoten; //anker zeigt auf neuen Knoten
27: ende = neuer_Knoten; //ende zeigt auf neuen Knoten
28: neuer_Knoten->next = NULL; //das Ende der Liste markieren
29: }
30: else
31: {//die Liste ist nicht leer
32: neuer_Knoten->next = anker; // haenge bisherige Liste an
33: anker = neuer_Knoten; // aktualisiere den Anfang der Liste
34: }
35: }
36:
37: // den Feiertag am Ende der Liste zurueckliefern und den Knoten entfernen
38: char* pop() 
39: {
40:
41: char* inhalt = 0;
42: if (anker != 0)
43: {
44: if (anker == ende)
45: {// Liste besteht aus einem Element, d.h. das erste ist auch das letzte Element
46: inhalt = anker->feiertag; //Daten fuer die Ausgabe sichern
47: delete anker;
48: anker = NULL; //leere Liste herstellen
49: ende = NULL; // den Zeiger ende aktualisieren
50: }
51: else
52: {// die Liste besteht aus mehreren Elementen
53: Listenknoten* hilfsknoten = anker;
54:
55: //gehe bis zum letzten Element
56: while (hilfsknoten != 0 && hilfsknoten->next != ende)
57: {
58: hilfsknoten = hilfsknoten->next;
59: }
60:
61: inhalt = ende->feiertag; // Daten fuer die Ausgabe sichern
62: delete ende; // das letzte Element entfernen
63:
64: hilfsknoten->next = NULL; //Ende der Liste markieren
65: ende = hilfsknoten; // den Zeiger aktualisieren
66: }
67: }
68: return inhalt; //die Data des Elements zurueckliefern
69: }
70:
71:
72: Listenknoten* find(char* feiertag)
73: {
74: Listenknoten* knoten = anker;
75: while(knoten != NULL)
76: {
77: int i=0;
78: while(feiertag[i] == knoten->feiertag[i] && feiertag[i] != '\0' && knoten->feiertag[i] !='\0' )
79: {
80: i++;
81: }
82: if(knoten->feiertag[i] == feiertag[i])
83: {
84: return knoten;
85: }
86: else
87: {
88: knoten = knoten->next;
89: }
90: }
91: return NULL;
92: }


1: /*feiertage_fifo_main.cpp*/
2: #include <iostream>
3: #include "feiertage_fifo.h"
4:
5: using namespace std;
6:
7: struct Listenknoten* anker = 0;
8: struct Listenknoten* ende = 0;
9:
10: int main(void) {
11:
12: char feiertag[MAX], element[MAX];
13: int wahl;
14:
15: // fuelle Liste mit Feiertagen, bis eine 0 eingegeben wird
16: do
17: {
18: cout << "Einen Feiertag eingeben (0 == Ende): ";
19: cin.get();
20: cin.getline(feiertag, MAX);
21: if ( feiertag )
22: push(feiertag);
23: } while ( feiertag[0] != 0 );
24:
25: // gebe in verkehrter Reihenfolge aus und loesche dabei die ausgegebenen Elemente
26: while (anker != 0)
27: { // solange die Liste nicht leer ist!
28: cout << pop() << endl;
29: }
30:
31: cout << endl << "Moechten Sie ein Element suchen? (1=ja, 0=Ende)" << endl;
32: cin >> wahl;
33: if (wahl==1)
34: {
35: cout << endl << "Welches Element moechten Sie suchen: ";
36: cin >> element;
37: Listenknoten* erg = find(element);
38:
39: if (erg)
40: cout << "Element \" " << element << "\" wurde in der Liste gefunden.";
41: else
42: cout << "Element " << element << "nicht gefunden." << endl << endl;
43: }
44: else
45: {
46: cout << endl << "Ende." << endl << endl;
47: }
48:
49: return 0;
50: }


        
Bezug
Nochmal verkettete Listen C++: Mitteilung
Status: (Mitteilung) Reaktion unnötig Status 
Datum: 07:44 Fr 03.05.2013
Autor: Mija

Kann mir denn niemand weiterhelfen?

Bezug
        
Bezug
Nochmal verkettete Listen C++: Frage (überfällig)
Status: (Frage) überfällig Status 
Datum: 17:09 Fr 03.05.2013
Autor: Mija

Ich habe jetzt noch eine Funktion Ausgabe geschrieben, die mir die Liste von hinten nach vorne ausgibt, bevor ich mit dem Suchen eines Feiertags beginne.
Leider wird dort immer das nullte Zeichen des jeweiligen Feiertags geschluckt und ich kann nicht finden weshalb.

Nach der Suche nach einem bestimmten Feiertag möchte ich außerdem mit Hilfe der pop()-Funktion alle Feiertage nochmals ausgeben und den Knoten entfernen.
Dort erscheinen bei mir leider immer noch nur seltsame Zeichen.

Ich würde mich sehr freuen, wenn mir jemand bei diesen Problemen noch weiterhelfen könnte.

Vielen Dank.

Hier ist mein Code:

1: #ifndef FEIERTAGE_FIFO_H
2: #define FEIERTAGE_FIFO_H
3:
4: const int MAX = 30;
5:
6: struct Listenknoten {
7: char feiertag[MAX];
8: struct Listenknoten *next;
9: };
10:
11: extern struct Listenknoten* anker;
12: extern struct Listenknoten* ende;
13:
14: //Funktionsdeklarationen
15: void push(char*);
16: char* pop();
17: Listenknoten* find(char*);
18: void ausgabe();
19:
20: #endif //FEIERTAGE_FIFO_H


1: #include <iostream>
2: #include "feiertage_fifo.h"
3:
4: using namespace std;
5:
6: // ein Feiertag am Anfang der Liste hinzufuegen
7: void push(char* feiertag)
8: {
9: //Neuer Knoten ANFANG
10: Listenknoten* neuer_Knoten = new Listenknoten; //erstelle einen neuen Knoten
11: int i;
12: for (i=0; feiertag[i]!='\0'; i++)
13: {
14: neuer_Knoten->feiertag[i] = feiertag[i]; // besetze die Daten des Knotens
15: }
16: if( i < MAX-1)
17: {
18: neuer_Knoten->feiertag[i] = '\0';
19: }
20: //Neuer Knoten ENDE
21:
22: if (anker == 0)
23: {//die Liste ist leer
24: anker = neuer_Knoten; //anker zeigt auf neuen Knoten
25: ende = neuer_Knoten; //ende zeigt auf neuen Knoten
26: neuer_Knoten->next = NULL; //das Ende der Liste markieren
27: }
28: else
29: {//die Liste ist nicht leer
30: neuer_Knoten->next = anker; // haenge bisherige Liste an
31: anker = neuer_Knoten; // aktualisiere den Anfang der Liste
32: }
33: }
34:
35: // den Feiertag am Ende der Liste zurueckliefern und den Knoten entfernen
36: char* pop() 
37: {
38: char* inhalt = 0;
39: if (anker != 0)
40: {
41: if (anker == ende)
42: {// Liste besteht aus einem Element, d.h. das erste ist auch das letzte Element
43: inhalt = anker->feiertag; //Daten fuer die Ausgabe sichern
44: delete anker;
45: anker = NULL; //leere Liste herstellen
46: ende = NULL; // den Zeiger ende aktualisieren
47: }
48: else
49: {// die Liste besteht aus mehreren Elementen
50: Listenknoten* hilfsknoten = anker;
51:
52: //gehe bis zum letzten Element
53: while (hilfsknoten != 0 && hilfsknoten->next != ende)
54: {
55: hilfsknoten = hilfsknoten->next;
56: }
57:
58: inhalt = ende->feiertag; // Daten fuer die Ausgabe sichern
59: delete ende; // das letzte Element entfernen
60:
61: hilfsknoten->next = NULL; //Ende der Liste markieren
62: ende = hilfsknoten; // den Zeiger aktualisieren
63: }
64: }
65: return inhalt; //die Data des Elements zurueckliefern
66: }
67:
68:
69: Listenknoten* find(char* feiertag)
70: {
71: Listenknoten* knoten = anker;
72: while (knoten != NULL)
73: {
74: int i=0;
75: while (feiertag[i] == knoten->feiertag[i] && feiertag[i] != '\0' && knoten->feiertag[i] !='\0' )
76: {
77: i++;
78: }
79: if (knoten->feiertag[i] == feiertag[i])
80: {
81: return knoten;
82: }
83: else
84: {
85: knoten = knoten->next;
86: }
87: }
88: return NULL;
89: }
90:
91: void ausgabe()
92: {
93: Listenknoten* knoten = anker;
94: while (knoten != 0)
95: {
96: cout << endl << knoten->feiertag << endl;
97: knoten = knoten->next;
98: }
99: }


1: #include <iostream>
2: #include "feiertage_fifo.h"
3:
4: using namespace std;
5:
6: struct Listenknoten* anker = 0;
7: struct Listenknoten* ende = 0;
8:
9: int main(void)
10: {
11:
12: char feiertag[MAX], element[MAX];
13: int wahl;
14:
15: // fuelle Liste mit Feiertagen, bis eine 0 eingegeben wird
16: do
17: {
18: cout << "Einen Feiertag eingeben (0 == Ende): ";
19: cin.get();
20: cin.getline(feiertag, MAX);
21: if ( feiertag )
22: push(feiertag);
23: } while ( feiertag[0] != 0);
24:
25: ausgabe();
26:
27: cout << endl << "Moechten Sie ein Element suchen? (1=ja, 0=Ende)" << endl;
28: cin >> wahl;
29: if (wahl==1)
30: {
31: cout << endl << "Welches Element moechten Sie suchen: ";
32: cin.get();
33: cin.getline(element, MAX);
34:
35: Listenknoten* erg = find(element);
36:
37: if (erg)
38: cout << "Element \"" << element << "\" wurde in der Liste gefunden.";
39: else
40: cout << "Element " << element << " nicht gefunden." << endl << endl;
41: }
42: else
43: {
44: cout << endl << "Ende." << endl << endl;
45: }
46:
47: // gebe in verkehrter Reihenfolge aus und loesche dabei die ausgegebenen Elemente
48: while (anker != 0)
49: { // solange die Liste nicht leer ist!
50: cout << pop() << endl;
51: }
52: cout << endl << endl;
53:
54: return 0;
55: }


Bezug
                
Bezug
Nochmal verkettete Listen C++: Mitteilung
Status: (Mitteilung) Reaktion unnötig Status 
Datum: 19:37 Sa 04.05.2013
Autor: Mija

Es wäre wirklich super, wenn mir noch jemand weiterhelfen könnte, denn ich habe bald Abgabe!

Bezug
                
Bezug
Nochmal verkettete Listen C++: Mitteilung
Status: (Mitteilung) Reaktion unnötig Status 
Datum: 17:38 So 05.05.2013
Autor: Mija

So langsam bin ich wirklich am Verzweifeln..
Ich kann einfach keinen Fehler finden :-(

Bezug
                
Bezug
Nochmal verkettete Listen C++: Fälligkeit abgelaufen
Status: (Mitteilung) Reaktion unnötig Status 
Datum: 17:20 Do 09.05.2013
Autor: matux

$MATUXTEXT(ueberfaellige_frage)
Bezug
        
Bezug
Nochmal verkettete Listen C++: Fälligkeit abgelaufen
Status: (Mitteilung) Reaktion unnötig Status 
Datum: 18:20 Fr 10.05.2013
Autor: matux

$MATUXTEXT(ueberfaellige_frage)
Bezug
Ansicht: [ geschachtelt ] | ^ Forum "Praxis"  | ^^ Alle Foren  | ^ Forenbaum  | Materialien


^ Seitenanfang ^
www.unimatheforum.de
[ Startseite | Forum | Wissen | Kurse | Mitglieder | Team | Impressum ]