C++ |
info unregistriert
|
|
Meine Frage:
Hallo leute ich habe gerade ganz grosse Probleme bei einer Aufgabe wo ich keine Anhnung hab wie ich das machen soll.
Eine Konzertagentur will zur Verwaltung ihren Veranstaltungen ein neues DV-System einführen.
Dabei soll eine Veranstaltung mittels einer Struktur Event beschrieben werden und alle
Veranstaltungen der Agentur als verkettete Liste von Events.
Ihre Aufgabe ihm Rahmen des Projekts ist die Erstellung von Ausgabefunktionen.
Programmieren Sie
- eine Funktion void ausgabe(?)
welche die Daten eines Events am Bildschirm anzeigt. Der Parameter kann geeignet
gewählt werden
- eine Funktion void ausgabeListe( Event* start)
welche alle Events der Liste am Bildschirm anzeigt, wobei das erste Element als
Parameter übergeben wird.
Kann mir jemand sagen wie ich Vorgehen soll?
Hab leider noch keine Ansätze.
Meine Ideen:
keine
|
|
20.01.2013 23:34 |
|
|
|
Hallo, info/Chrisx2/Christine
In eine Struktur kommen zunächst einmal alle Variablen, die du für das Event benötigst. Da es sich um eine verkettete Liste handelt, brauchst du außerdem einen Zeiger auf das nächste Element:
code: |
1:
2:
3:
4:
5:
6:
|
struct Event
{
struct Event *next;
char Veranstaltungsort[20];
char Datum[11];
}; |
|
Den Zeiger auf das erste Element der Liste darfst du nicht überschreiben, da du dieses sonst nicht mehr findest.
Und jetzt du!
__________________ Syntax Highlighting fürs Board (Link)
|
|
21.01.2013 09:05 |
|
|
Info unregistriert
|
|
Was muss ich den genau als nächstes machen? Auf was soll ich den Zeiger genau zeigen?
|
|
21.01.2013 10:20 |
|
|
|
Nun geht es ans Befüllen der Elemente, damit wir etwas zum Ausgeben haben.
Du brauchst einen Zeiger auf die Struktur, dann kannst du (z.B. mit malloc) Speicher für das eine Element reseriveren.
Dabei kriegst du auch einen neuen Zeiger auf ein weiteres Element. Die anderen Elemente kannst du mit strcpy füllen.
__________________ Syntax Highlighting fürs Board (Link)
|
|
21.01.2013 10:51 |
|
|
Info unregistriert
|
|
In meinem Skript steht das ich mit dem Zeiger irgendwie so auf eine Variable zugreife:
Z.b
Uhrzeit u, *ptr= &u
Aber wie wende ich das an?
Für einen Anfänger ist das so schwer.
|
|
21.01.2013 11:52 |
|
|
|
Die Liste soll dynamische Länge haben, es wird immer genau ein neues Element erstellt.
Es ist einfacher, wenn man ein erstes Element ohne wirklichen Inhalt erstellt.
code: |
1:
2:
3:
4:
5:
6:
7:
8:
|
struct Event *erstes, *momentan;
erstes = (struct Event*)malloc(sizeof(struct Event));
if(erstes == NULL) //kein Speicherplatz vorhanden
return 1;
momentan = erstes;
//Daten einlesen
|
|
Das Einlesen am besten mit einer Schleife.
Neuen Speicher kann man dann mit dem Zeiger momentan->next reservieren
__________________ Syntax Highlighting fürs Board (Link)
|
|
21.01.2013 12:12 |
|
|
Info unregistriert
|
|
Ich bin mir nicht sicher kann ich das so machen?
if( erstes == momentan ) {
cout << "Event momentan ">>endl;
So in Ordnung. Tut mir leid falls es nicht in Ordnung ist.
|
|
21.01.2013 12:26 |
|
|
|
Ich verstehe nicht, was du mir mit diesen zwei Zeilen sagen willst.
Wie in meinem letzten Beitrag schon geschrieben:
Nimm zum Einlesen eine Schleife und reserviere in dieser Schleife Speicher für ein Element, das du dann mit dem Eingelesenen füllen kannst.
Wie du den Speicher reservierst, kannst du an meinem letzten Beitrag sehen, wo ich das für das erste Element getan habe.
__________________ Syntax Highlighting fürs Board (Link)
|
|
21.01.2013 12:35 |
|
|
info unregistriert
|
|
Oh man ich verzweifel grad wie soll ich das denn einlesen . Ich dachte , dass ich es mitweinen Zeilen gemacht hab. Kannst du mir noch einen kleinen Tipp geben. Was soll ich denn nur machen wenn ich einfach nicht drauf komme.
|
|
21.01.2013 13:03 |
|
|
|
cout ist, wie die letzten drei Buchstaben schon vermuten lassen, zum Ausgeben von Text.
Ich könnte dir jetzt einfach die fertige Lösung schreiben, habe aber Zweifel, ob das Sinn macht.
Du musst dir wohl nochmal durchlesen, wie man einliest (Stichwort: cin bzw. scanf)
__________________ Syntax Highlighting fürs Board (Link)
|
|
21.01.2013 14:32 |
|
|
info unregistriert
|
|
Ah könnte man das irgendwie so machen?
if( erstes == momentan ) {
cin>> "Event momentan ">>endl;
}
Du musst mir bitte noch ein wenig helfen , sonst schaffe ich diese Aufgabe nie.
|
|
21.01.2013 15:12 |
|
|
|
Du kannst nicht eine gesamte Struktur einlesen, sondern nur einzelne Variablen, die du dann in die Struktur schreibst.
Wenn du es schon nicht programmieren kannst, versuche zumindest zu verstehen, was ich mache:
code: |
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:
|
#include <iostream>
#include <stdlib.h>
#include <string.h>
using std::cout;
using std::cin;
int main(int argc, char*argv[])
{
struct Event *erstes, *momentan;
char ort[20], datum[11];
erstes = (struct Event*)malloc(sizeof(struct Event));
if(erstes == NULL) //kein Speicherplatz vorhanden
return 1;
momentan = erstes;
while(1)
{
cout << "Veranstaltungsort? ";
cin >> ort;
if(strlen(ort) < 2) break;
cout << "Datum? ";
cin >> datum;
momentan->next = (struct Event*)malloc(sizeof(struct Event));
if(momentan == NULL) //kein Speicherplatz vorhanden
return 1;
momentan = momentan->next;
momentan->next = NULL;
strcpy(momentan->Datum, datum);
strcpy(momentan->Veranstaltungsort, ort);
}
AusgabeListe(erstes->next);
getchar(); getchar();
return 0;
} |
|
fehlt noch AusgabeListe()
__________________ Syntax Highlighting fürs Board (Link)
|
|
21.01.2013 16:35 |
|
|
Info unregistriert
|
|
Ok bevor wir weiter machen müsst du mir kurz erklären was dieses malloc ist? Hast recht wenigsten will ich versuchen es zu verstehen.
Und was ist dieses strcpy?
|
|
21.01.2013 16:44 |
|
|
|
malloc reserviert Speicher, in den man dann etwas schreiben kann (hier: Datum, Ort und wo es weiter geht).
strcpy kopiert einen string an eine gewünschte Stelle.
Kann sein, dass ich etwas unübliche Befehle verwende (mein Programm funktioniert aber), kenne das so aus C.
Kennst du new zur Speicherreservierung?
__________________ Syntax Highlighting fürs Board (Link)
|
|
21.01.2013 17:14 |
|
|
info unregistriert
|
|
Ich benutze code Blocks und es zeigt mir fehler an:
||=== , Debug ===|
C:\C++\\main.cpp||In function 'int main(int, char**)':|
C:\C++\\main.cpp|12|error: invalid application of 'sizeof' to incomplete type 'main(int, char**)::Event'|
C:\C++\main.cpp|23|error: invalid use of incomplete type 'struct main(int, char**)::Event'|
C:\C++\\main.cpp|10|error: forward declaration of 'struct main(int, char**)::Event'|
C:\C++\main.cpp|23|error: invalid application of 'sizeof' to incomplete type 'main(int, char**)::Event'|
C:\C++\main.cpp|26|error: invalid use of incomplete type 'struct main(int, char**)::Event'|
C:\C++\P\main.cpp|10|error: forward declaration of 'struct main(int, char**)::Event'|
C:\C++\P\main.cpp|27|error: invalid use of incomplete type 'struct main(int, char**)::Event'|
C:\C++\\main.cpp|10|error: forward declaration of 'struct main(int, char**)::Event'|
C:\C++\main.cpp|28|error: invalid use of incomplete type 'struct main(int, char**)::Event'|
C:\C++\main.cpp|10|error: forward declaration of 'struct main(int, char**)::Event'|
C:\C++\main.cpp|29|error: invalid use of incomplete type 'struct main(int, char**)::Event'|
C:\C++\main.cpp|10|error: forward declaration of 'struct main(int, char**)::Event'|
C:\C++\main.cpp|31|error: invalid use of incomplete type 'struct main(int, char**)::Event'|
C:\C++\\main.cpp|10|error: forward declaration of 'struct main(int, char**)::Event'|
C:\C++\\main.cpp|31|error: 'AusgabeListe' was not declared in this scope|
C:\C++\|32|error: 'getchar' was not declared in this scope|
||=== Build finished: 16 errors, 0 warnings (0 minutes, 2 seconds) ===|
Das sind eine reihe von Fehler , vielleicht kannst du mir helfen sie zu beseitigen .
Noch eine frage warum hast du das getchar 2 mal benutzt ?
Das verstehe ich auch nicht.
Und bei der nächsten Aufgabe void Ausgabe liste soll ich da nicht einfach mit cout alles Ausgeben ?
|
|
21.01.2013 17:21 |
|
|
|