Cherrycoke
Mitglied
Hallo Community,
da ich mich gerade in einer Prüfungsvorbereitung befinde, versuche ich im Moment verschiedene Programme zu erstellen. Zur Zeit sitze ich an einem Programm zu doppelt verketteten structs.
Die Aufgabestellung lautet:
a ) Schreiben Sie ein vollständiges C-Programm, das ganze Zahlen einliest und das ausgibt, ob gleich viele positive und negative Zahlen eingegeben wurde, bzw welches Vorzeichen überwiegt.
b) Ergänzen Sie ihr Programm so, dass die Zahlen in einer doppelt verketteten Liste abgespeichert werden. Dabei sollen negative Zahlen am Anfang, positive am Ende eingefügt werden.
Der Aufgabenteil a) bereitet mir keine Schwierigkeiten. Zum Aufgabenteil b) ist folgender Quelltextausschnitt bereits vorgegeben.
Bei diesem Programm stehe ich leider total auf dem Schlauch. Es hagt bei mir schon in der ersten Zeile:
Das bedeutet, dass ich anstelle "struct Knot*" auch "KnotPtr" schreiben könnte, oder? (nur zum Verständnis) Aber was genau macht "struct Knot*"?
Zum generellen Ablauf des Programms habe ich mir folgende Gedanken gemacht. Da ich nicht weiß, wie viele Zahlen eingegeben werden, muss ich den Speicher dynamisch zuweisen. Das heißt, das alle Zahlen in folgender Struktur abgespiechert werden.
Dazu erstelle ich erst einmal genügend Speicherplatz. D.h. mein Programm sieht bisher so aus:
Nun wird mir der Fehler ausgegeben, dass "Knot" nicht deklariert wurde.
Warum steht hier:
Ich kenne nur die Schreibweise ohne das "Knot". Was genau sagt denn dieser Codeblock aus?
Jedenfalls habe ich jetzt erst einmal mein Programm ergänzt:
Aber wie geht es denn nun weiter? Ich habe auch noch gar keine Vorstellung, wie ich die negativen Zahlen an den Anfang schreibe. Mit "realloc()" kann ich den Speicherbereich ja vergrößern. Daher ist es auch kein Problem, eine Zahl anzuhängen. Aber wie füge ich negative Zahlen am Anfang hinzu?
So, jetzt habe ich mir meine GEdanken von der Seele geschrieben. Hoffentlich erschlage ich euch nicht damit. Eine kurze Hilfe wäre wirklich super!
Schon mal vielen, vielen Dank!
da ich mich gerade in einer Prüfungsvorbereitung befinde, versuche ich im Moment verschiedene Programme zu erstellen. Zur Zeit sitze ich an einem Programm zu doppelt verketteten structs.
Die Aufgabestellung lautet:
a ) Schreiben Sie ein vollständiges C-Programm, das ganze Zahlen einliest und das ausgibt, ob gleich viele positive und negative Zahlen eingegeben wurde, bzw welches Vorzeichen überwiegt.
b) Ergänzen Sie ihr Programm so, dass die Zahlen in einer doppelt verketteten Liste abgespeichert werden. Dabei sollen negative Zahlen am Anfang, positive am Ende eingefügt werden.
Der Aufgabenteil a) bereitet mir keine Schwierigkeiten. Zum Aufgabenteil b) ist folgender Quelltextausschnitt bereits vorgegeben.
Code:
#include <stdio.h>
#include <stdlib.h>
#include <assert.h>
typedef struct Knot* KnotPtr;
typedef struct Knot{
int n;
KnotPtr vorg;
KnotPtr nachf;
} Knoten;
typedef struct{
KnotPtr anfang;
KnotPtr ende;
} DVListe;
Bei diesem Programm stehe ich leider total auf dem Schlauch. Es hagt bei mir schon in der ersten Zeile:
Code:
typedef struct Knot* KnotPtr;
Das bedeutet, dass ich anstelle "struct Knot*" auch "KnotPtr" schreiben könnte, oder? (nur zum Verständnis) Aber was genau macht "struct Knot*"?
Zum generellen Ablauf des Programms habe ich mir folgende Gedanken gemacht. Da ich nicht weiß, wie viele Zahlen eingegeben werden, muss ich den Speicher dynamisch zuweisen. Das heißt, das alle Zahlen in folgender Struktur abgespiechert werden.
Code:
typedef struct Knot{
int n;
KnotPtr vorg;
KnotPtr nachf;
} Knoten;
Dazu erstelle ich erst einmal genügend Speicherplatz. D.h. mein Programm sieht bisher so aus:
Code:
int eingabeanzahl, zahl;
int main (void){
printf("Zahl eingeben (0 fuer Ende):");
scanf("%d", &zahl);
eingabeanzahl = eingabeanzahl + 1;
Knot = (Knoten *) calloc(eingabeanzahl, sizeof(Knoten));
}
Nun wird mir der Fehler ausgegeben, dass "Knot" nicht deklariert wurde.
Warum steht hier:
Code:
typedef struct Knot{
int n;
KnotPtr vorg;
KnotPtr nachf;
} Knoten;
Ich kenne nur die Schreibweise ohne das "Knot". Was genau sagt denn dieser Codeblock aus?
Jedenfalls habe ich jetzt erst einmal mein Programm ergänzt:
Code:
int eingabeanzahl, zahl;
int main (void){
printf("Zahl eingeben (0 fuer Ende):");
scanf("%d", &zahl);
eingabeanzahl = eingabeanzahl + 1;
Knoten* Knot;
Knot = (Knoten *) calloc(eingabeanzahl, sizeof(Knoten));
Knot->n = zahl;
}
Aber wie geht es denn nun weiter? Ich habe auch noch gar keine Vorstellung, wie ich die negativen Zahlen an den Anfang schreibe. Mit "realloc()" kann ich den Speicherbereich ja vergrößern. Daher ist es auch kein Problem, eine Zahl anzuhängen. Aber wie füge ich negative Zahlen am Anfang hinzu?
So, jetzt habe ich mir meine GEdanken von der Seele geschrieben. Hoffentlich erschlage ich euch nicht damit. Eine kurze Hilfe wäre wirklich super!
Schon mal vielen, vielen Dank!
Zuletzt bearbeitet: