Fragen zu verketteten Listen
-
coolio schrieb:
struct knoten {int kontonummer; double ktostand; struct knoten *next;};
wie lese ich das dann ein? habe ja anstatt einem wert in der struct nun zwei.
also wie stelle ich da speicherplatz zur verfügung?Ordne mal deine Gedanken. Möchtest du einlesen (was auch immer du damit meinst) oder Speicherplatz bereitstellen? Letzteres wird in deinem Programm doch gemacht (siehe malloc).
-
das obige hat mit dem unteren 0 zu tun.
struct knoten {int wert; struct knoten *next;}; struct knoten *neuelement, *head1, *hilf1; for (i = 1; i < 6; i++) { printf("Zahl eingeben: "); scanf("%i", &neuzahl); neuelement=(struct knoten*) malloc(sizeof(*neuelement)); neuelement->wert=neuzahl; neuelement->next=head1; head1=neuelement;}
und wie mache ich das jetzt mit zwei variablen in der struct??
also mit kontonummer und ktostand?
-
Du kannst den Kontostand doch genauso einfach füllen wie in deinem Beispiel die Variable wert:
scanf("%lf", &kontostand);
//...
neuelement->ktostand = kontostand;
-
und die kontonummer?? muss ich 2 printf/scanf anweisungen hintereindander machen?
muss ich die zahlen in 2 versch. variablen einlesen?
-
coolio schrieb:
und die kontonummer?? muss ich 2 printf/scanf anweisungen hintereindander machen?
muss ich die zahlen in 2 versch. variablen einlesen?Genau!
-
also
int eingabe1; float eingabe2; struct knoten {int kontonummer; float kontostand; struct knoten *next;}; struct knoten *neuelement, *head1, *head2, *head3, *hilf1, *hilf2, *hilf3; for (i = 1; i < 6; i++) { printf("Kontonummer eingeben: "); scanf("%i", &eingabe1); neuelement=(struct knoten*) malloc(sizeof(*neuelement)); neuelement->kontonummer=eingabe1; neuelement->next=head1; head1=neuelement; printf("Kontonummer eingeben: "); scanf("%f", &eingabe2); neuelement=(struct knoten*) malloc(sizeof(*neuelement)); neuelement->kontostand=eingabe2; neuelement->next=head2; head2=neuelement;
kann ich beides in head1 einlesen, oder muss ich das so machen wie oben?
ist eine for-schleife überhaupt sinnvoll dort, oder soll man eine while (janein = 'j') oder so machen. keine bank der welt weiß ja wieviele nummern und kontostände sie eingeben will.
-
das zweite sollte natürlich kontostand heißen. kann ja als gast net editieren ^^
-
Aus dem hier
coolio schrieb:
und die kontonummer?? muss ich 2 printf/scanf anweisungen hintereindander machen?
muss ich die zahlen in 2 versch. variablen einlesen?kann ich leider nicht auf das hier
coolio schrieb:
printf("Kontonummer eingeben: "); scanf("%i", &eingabe1); neuelement=(struct knoten*) malloc(sizeof(*neuelement)); neuelement->kontonummer=eingabe1; neuelement->next=head1; head1=neuelement; printf("Kontonummer eingeben: "); scanf("%f", &eingabe2); neuelement=(struct knoten*) malloc(sizeof(*neuelement)); neuelement->kontostand=eingabe2; neuelement->next=head2; head2=neuelement;
schließen. Du schreibst doch selber, dass du nur die printf()/scanf() Anweisung zu wiederholen brauchst mit entsprechender Abänderung. Warum machst du das dann nicht??
So wie du es nämlich jetzt hast, ist es falsch und deine zusätzlichen Heads und Hilfs kannst du dir auch sparen.Bevor du da jetzt groß weitermachst, solltest du erstmal verstehen was Strukturen sind und wie man sie handhabt, dann was dynamische Speicherreservierung ist und wie man diese handhabt und zu guter letzt solltest du verstehen was verkettete Listen sind. Dass du wissen solltest wie Zeiger funktionieren, setze ich jetzt auch mal voraus.
-
das alles zu verstehen ist für einen studenten nicht gerade einfach, wenn er alles nur so ein bisschen erklärt bekommt.
das ist die aufgabe einer klausur.
es wurde explizit gesagt, dass man kein komplettes programm schreiben soll, sondern nur ausschnitte.
also soweit ich mich erinnern kann war gefragt wie man kontonummmer und kontostand einliest. dann müsste ja mein beispiel stimmen...in der schule haben wie das erste beispiel mit nur einem wert (int wert) gelernt. in der klausur kam dann eine aufgabe mit kontonummer und kontostand dran. in der klausur ist es dann schwierig von einer variablen auf 2 zu schließen, wenn der dozent selber meint es wäre schwierig malloc zu verstehen, und wir es in nur 2 doppelstunden behandelt haben.
was eine structure ist, das sollte ich wissen. es ist wie ein array nur mit verschiedenen datentypen. was gibt es da mehr zu verstehen?
-
coolio schrieb:
also soweit ich mich erinnern kann war gefragt wie man kontonummmer und kontostand einliest. dann müsste ja mein beispiel stimmen...
Ansichtssache. Einfach betrachtet ja. Komplex betrachtet nein. Und komplexes Denken setze ich bei einem Studenten voraus.
Kennst du dich mit Datenbanken aus? Wenn ja, dann ist es etwas leichter zu erklären. Ich geh einfach mal davon aus (wenn nicht, dann versuch ich es anders, aber vielleicht wirds ja trotzdem klar):
Eine Struktur musst du dir vorstellen wie einen Datensatz in einer Datenbank. In deinem Fall sind das Kontodaten. Nun willst du 5 neue Konten anlegen, jeweils mit Kontonummer und Kontostand. Allerdings macht dein Programm was anderes. Es legt 10 Konten an und zwar 5 nur mit Kontonummer und keinem Kontostand und die anderen 5 mit Kontostand, aber keiner Kontonummer.Dann noch zu deinen 3 head variablen. Das wäre vergleichbar mit 3 absolut gleichen Datenbanktabellen, die sich nicht unterscheiden (nur vom Namen natürlich). Macht es wirklich sinn 3 Tabellen zu haben, wenn es auch eine tut?
Stimmt malloc() ist schwierig zu verstehen, besonders wenn man noch am Anfang steht mit dem Programmieren. Allerdings fällt es einem um einiges leichter, wenn man sich ein wenig in die Sache reinkniet und selber ein wenig Zeit aufwendet um es richtig zu erlernen (wobei natürlich Hilfe von außen, wie hier, nicht verkehrt ist ;)).
So jetzt überleg dir nochmal genau was dein Programm(ausschnitt) können soll und was auch Sinn macht ;). Und dann mach dich nochmal dran es auszuprogrammieren. Wenn du fertig bist, schau dir nochmal den Code an und überlege, ob er wirklich das erwünschte Resultat bringt. Zur Not kannst du den Quellcode auch einfach mal compilieren, ausführen und überprüfen, ob er auch wirklich das macht, was du erwartest (schau dir dazu aber auch den Inhalt deiner Variablen an).
-
Mit Datenbanken hatte ich noch nichts zu tun. Habe ich im nächsten Semester.
Also, da ich momentan keine Möglichkeit habe den Code auszuprobieren, schreibe ich einmal den Code hin, der vielleicht funktionieren könnte.
struct knoten {int kontonummer, float kontostand; struct knoten *next;}; struct knoten *neuelement, *head1, *head2; printf("Kontonummer eingeben: "); scanf("%i", &eingabe1); printf("Kontostand eingeben: "); scanf("%f", &eingabe2); neuelement=(struct knoten*) malloc(sizeof(*neuelement)); neuelement->kontonummer=eingabe1; neuelement->next=head1; head1=neuelement; neuelement->kontostand=eingabe2; neuelement->next=head2; head2=neuelement;
naja, wenn das nicht gehen sollte, dann weiß ich auch nicht weiter
und komplexes Denken bei Studenten???