Knigge87 Geschrieben 12. August 2009 Teilen Geschrieben 12. August 2009 Hallo, bin neu hier im Forum und komme bei einer Infromatikaufgabe nicht weiter, die relevant für die Klausur ist. Die Aufgabe lautet: Erstellen sie eine Datenstruktur in C, nicht C++ für einen Stapelspeicher mit einer statischen Größe von 8 Einträgen mit Dateninhalt einer Integerzahl. Geben sie den Programmcode für Funktionen void push(intx) und int pop() an. Auf die Stapelstruktur wird global zugegrifen. Wäre nett, wenn mir jemand dabei helfen könnte. struct stack { int s_element[8] }; wie gehe ich vor. ?????? Freue mich auf Antworten Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
Guybrush Threepwood Geschrieben 12. August 2009 Teilen Geschrieben 12. August 2009 Wo ist das Problem? Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
Knigge87 Geschrieben 12. August 2009 Autor Teilen Geschrieben 12. August 2009 Ganz Allgemein, ich weiß nicht wie ich das Programm schreiben soll? Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
Knigge87 Geschrieben 12. August 2009 Autor Teilen Geschrieben 12. August 2009 hab angefangen mit dem Programmcode in C, weiß aber nicht wie ich die void push(intx) und int pop() nun einbinden soll....... Komme da nicht weiter....... Hättest du ne Idee für den Programmcode, so das es in C zum Laufen kriege? Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
T3D Geschrieben 12. August 2009 Teilen Geschrieben 12. August 2009 du solltest deine ansaetze, ideen und genaue fehlerbeschreibung wo du nicht weiterkommst posten, andernfalls wird dir hier wohl ehr weniger geholfen. Ted Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
Klotzkopp Geschrieben 12. August 2009 Teilen Geschrieben 12. August 2009 Was sollen Pop und Push denn tun? Und welche Informationen muss ein Stapel verwalten? Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
perdian Geschrieben 12. August 2009 Teilen Geschrieben 12. August 2009 Ganz Allgemein, ich weiß nicht wie ich das Programm schreiben soll?Zuerst würde ich mir (entweder im Kopf oder mit Toolunterstützung) Gedanken darüber machen was für Daten prinzipiell verwaltet werden müssen und in welchen Datenstrukturen und -typen diese abgelegt werden sollen. Anschließend dann die grobe algorithmische Analyse: Was bedeutet die Operation pop (was muss von A nach B verschoben werden), was beudetet push. Anschließend gilt es dann das ganze zu coden. Und um dir direkt die Hoffnungen zu nehmen: Den fertigen Code wird dir hier niemand vorsetzen - das würde bei dir auch nicht zu dem gewünschten Lerneffekt führen. Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
TDM Geschrieben 12. August 2009 Teilen Geschrieben 12. August 2009 Was sollen Pop und Push denn tun? Ich denk mal anfügen und entnehmen. Die Frage, die sich mir aber grad stellt, ist, ob es LIFO oder FIFO sein soll. Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
Pointerman Geschrieben 12. August 2009 Teilen Geschrieben 12. August 2009 Moin! Hast Du Dich denn schon mit dem Thema Stack beschäftigt? Ein Stack ist ja nicht weiter als ein Stapel von Werten. In Deinem Fall nur mit begrenzter Anzahl von Elementen. Ersteinmal eine kleine Bestandsaufnahme zur Anregung: - Array mit 8 Elementen (hast Du) - ein Zähler, der auf das "oberste" Element des Stacks zeigt - Funktionen Push und Pop um Werte auf den Stack zu legen/vom Stack zu holen - Ein kleiner Rest Eigenleistung um jetzt noch das Programm zu erstellen... Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
Pointerman Geschrieben 12. August 2009 Teilen Geschrieben 12. August 2009 @TDM: Ist ein Stack nicht immer LIFO? Man kann doch nur das Element entnehmen, das oben auf dem Stapel liegt. Sonst kippt er doch um! Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
Klotzkopp Geschrieben 12. August 2009 Teilen Geschrieben 12. August 2009 Ich denk mal anfügen und entnehmen.Ja, das sollte fast jedem hier klar sein. Ich möchte rausfinden, ob Knigge87 die notwendigen Kenntnisse besitzt, diese Aufgabe zu lösen, und ihn durch passende Fragen auf den Weg zur Lösung bringen. Klappt natürlich nur, wenn niemand vorsagt Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
TDM Geschrieben 12. August 2009 Teilen Geschrieben 12. August 2009 Sonst kippt er doch um! Erinnert mich grad an ein altes Spiel (ich komm nicht auf den Namen), bei dem Man an einem Turm immer "Zwischenelemente" rausziehen muss und oben anfügt. :floet: Aber stimmt, Stack ist LIFO, FIFO war Queue. Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
perdian Geschrieben 12. August 2009 Teilen Geschrieben 12. August 2009 Ist ein Stack nicht immer LIFO? Man kann doch nur das Element entnehmen, das oben auf dem Stapel liegt.So ist es. Bestimmte Stack-Implementierungen (z.B. der grauenhafte java.util.Stack) erlauben es dann trotzden noch auf die weiteren Elemente zuzugreifen, aber streng konzeptionell ist ein Stack immer LIFO, denn: Sonst kippt er doch um! Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
Knigge87 Geschrieben 13. August 2009 Autor Teilen Geschrieben 13. August 2009 Hallo, danke schon mal für die vielen Antworten. Prinzipiell verstehe ich die stack(Stapelspeicher) und was deren Aufgabe ist. Hab mir die Aufgabe gestern nochmal angegeuckt.....und bin zu folgendem Programmcode gekommen: Es handelt sich natürlich um einen Lifo..... so nun der Code: struct stack { int element[8]; int tail; }; struct stack intstack; void init() { stack tail=0; } void push(struct stack, int x) { if(tail==8) error("full"); element[tail]=x; tail=tail+1; return; }; int pop(struct stack) { int x; if(tail==0) error("empty"); x=element[tail-1]; tail=tail-1 return x; }; Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
TDM Geschrieben 13. August 2009 Teilen Geschrieben 13. August 2009 Ich bin jetzt mal kleinlich und sag, dass du die Parameteranzahl nicht überschreiten darfst. Geben sie den Programmcode für Funktionen void push(intx) und int pop() an. Auf die Stapelstruktur wird global zugegrifen. Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
Knigge87 Geschrieben 13. August 2009 Autor Teilen Geschrieben 13. August 2009 Ist der Programmcode denn prinzipiell richtig? Er lässt sich leidernicht ausführen, weil ich eine Fehlermeldung bekomme? Bin Elektrotechnikstudent im 2 Semester und haben uns mit C nur 2 Wochen beschäftigt bzw in 2 Vorlesungsstunden alles behandelt....... Versuche jetzt mir selbst einbischen C beizubringen...... Wäre nett, wenn einer mal den Programmcode zu kurz wie möglich schreiben könnte, das er auch funktioniert...... Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
perdian Geschrieben 13. August 2009 Teilen Geschrieben 13. August 2009 Er lässt sich leidernicht ausführen, weil ich eine Fehlermeldung bekomme?Wozu das Fragezeichen? Bekommst du nun eine Fehlermeldung oder nicht? Und wenn ja: Welche denn? Wäre nett, wenn einer mal den Programmcode zu kurz wie möglich schreiben könnte, das er auch funktioniert......Deine Hausaufgaben sollst du selbst erledigen und nicht einen anderen für dich machen lassen - dann ist dein Lerneffekt nämlich gleich null. Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
flashpixx Geschrieben 13. August 2009 Teilen Geschrieben 13. August 2009 Wäre nett, wenn einer mal den Programmcode zu kurz wie möglich schreiben könnte, das er auch funktioniert...... Ich schließe mich da perdian an, so lernst Du es nicht. Außerdem hilft auch ein gutes C Buch. Du solltest dort die Kapitel Datentypen und call-by-reference bzw call-by-value durcharbeiten. Außerdem gibt es diverse Referenzimplementierungen im Netz Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
Knigge87 Geschrieben 13. August 2009 Autor Teilen Geschrieben 13. August 2009 Danke für die vielen Antworten. Hatte mir von dem Forum ein bischen mehr erwartet..... Es handelt sich hier ja nicht um Hausaufgaben.....in den Semesterferien macht das wenig Sinn.... Wir schreiben in 2 Wochen eine Klausur und leider komm ich mit der Aufgabe nicht weiter..... Danke für eure Bemühungen......werd mir die Aufgabe von einem Informatiker erklären lassen.......hier hat da ja keiner Lust zu Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
perdian Geschrieben 13. August 2009 Teilen Geschrieben 13. August 2009 Hatte mir von dem Forum ein bischen mehr erwartetNun, das kommt auf die Anspruchshaltung an, mit der man an eine solche Sache herangeht. "Das Forum" gibt es sowieso nicht - es besteht immer aus Menschen, die bereit sind dort anderen Leuten zu helfen, ihre Meinung zu posten, etc. Und sobald man es mit Menschen zu tun hat ist es nun einmal so, dass man nicht immer das von ihnen bekommt, was man sich gerne vorgestellt hat. Oder um eine anderen Metapher zu verwenden: Wie man in dei Wald hinein ruft... Es handelt sich hier ja nicht um Hausaufgaben [...] Wir schreiben in 2 Wochen eine Klausur und leider komm ich mit der Aufgabe nicht weiterWo ist der Unterschied? Wenn du hier die Lösungen fertig präsentiert bekommst hast du keinen Lerneffekt dabei. Gut, theoretisch könntest du ihn haben, wenn du dir die Lösungen genau ansiehts, den Weg zurück verfolgst, etc. Der Erfahrung nach macht das aber niemand. Und wenn du dir tatsächlich diesen Aufwand machen willst - wieso fängst du dann nicht einfach bei den Grundlagen an anstatt die ersten beiden Kapitel zu überspringen und dich dann zu wundern, wieso das dritte Kapitel plötzlich so unverständlich ist? hier hat da ja keiner Lust zuIch glaube mit Lust hat das wenig zu tun. Und jetzt hör auf zu jammern wie gemein und ungerecht die Welt ist und tu selbst etwas. Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
Knigge87 Geschrieben 13. August 2009 Autor Teilen Geschrieben 13. August 2009 Mit deinen Aussagen hast ja auch auch vollkommen recht, ich hätte mir nur gewünscht, dass einer mal ein Statement zu meinem Programm abgibt. Ob ich prinzipiell auf dem richtigen Weg bin oder das Programm komplett falsch programmiert ist?? Habe die Kapitel dazu durchgearbeitet und mir stellt sich außerdem die Frage ob ich in C Pfeilzuweisungen -> benutzen muss für das Programm?? Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
TDM Geschrieben 13. August 2009 Teilen Geschrieben 13. August 2009 Habe die Kapitel dazu durchgearbeitet und mir stellt sich außerdem die Frage ob ich in C Pfeilzuweisungen -> benutzen muss für das Programm?? Pfeilzuweisungen brauchst du nur bei Zeigern (ich nehm mal an, dass du das meinst). Da die instanz der Struktur aber global sein soll, brauchst du keine Zeiger. Anmerkung: Ich vermisse eine Main. Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
Klotzkopp Geschrieben 13. August 2009 Teilen Geschrieben 13. August 2009 struct stack { int element[8]; int tail; }; // [COLOR="SeaGreen"]Soweit, so gut.[/COLOR] struct stack intstack; [COLOR="SeaGreen"]// Auch O.K.[/COLOR] void init() { stack tail=0; [COLOR="#2e8b57"]// Das ist Quatsch. Es gibt keinen Typ namens stack // (bestenfalls struct stack, aber auch das wäre Quatsch, // es gibt ja schon den globalen Stack).[/COLOR] } void push(struct stack, int x) [COLOR="#2e8b57"]// Parameterliste entspricht nicht der Aufgabenstellung[/COLOR] { if(tail==8) error("full"); [COLOR="#2e8b57"]// hier gibt's kein tail[/COLOR] element[tail]=x; [COLOR="#2e8b57"]// und auch kein element[/COLOR] tail=tail+1; [COLOR="#2e8b57"]// s.o.[/COLOR] return; [COLOR="#2e8b57"]// Das kann weg[/COLOR] }; [COLOR="#2e8b57"]// Das Semikolon ist überflüssig[/COLOR] int pop(struct stack) [COLOR="#2e8b57"]// Parameterliste entspricht nicht der Aufgabenstellung[/COLOR] { int x; if(tail==0) error("empty"); [COLOR="#2e8b57"]// s.o.[/COLOR] x=element[tail-1]; [COLOR="#2e8b57"]// s.o.[/COLOR] tail=tail-1 [COLOR="#2e8b57"]// s.o., Semikolon fehlt[/COLOR] return x; }; [COLOR="#2e8b57"]// s.o.[/COLOR][/code] Auf Elemente einer Struktur greift man übrigens mit dem Punkt-Operator zu. Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
Knigge87 Geschrieben 13. August 2009 Autor Teilen Geschrieben 13. August 2009 #include<stdio.h> #include<stlib.h> main() { struct stack { int element[8]; int tail; }; struct stack intstack; void init() void push( intx) { if(element==8) error("full"); } int pop() { int x; if(element==0) error("empty"); } getch(); } } Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
Klotzkopp Geschrieben 13. August 2009 Teilen Geschrieben 13. August 2009 Schlimmer als vorher. Du hast fast alles, was richtig war, entfernt. Du brauchst keine main-Funktion, weil in der Aufgabenstellung nicht nach einem vollständigen Programm gefragt wird. Selbst wenn, wäre es Blödsinn, um alles einen main-Block zu legen. intx gibt's nicht.element ist in push und pop kein gültiger Bezeichner, weil es weder eine lokale noch eine globale Variable mit diesem Namen gibt. Es gibt ein Element einer Struktur. Strukturelemente spricht man an, indem man den Namen des Strukturobjekts und den Namen des Elements mit dem Punkt-Operator (.) verbindet.Selbst dieses Strukturelement "element" ist kein int, kann also nicht 0 oder 8 sein. Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
Empfohlene Beiträge
Dein Kommentar
Du kannst jetzt schreiben und Dich später registrieren. Wenn Du ein Konto hast, melde Dich jetzt an, um unter Deinem Benutzernamen zu schreiben.