Listen

Schnelle objektorientierte, kompilierende Programmiersprache.
Benutzeravatar
Dirty Oerti
Beiträge: 2229
Registriert: Di Jul 08, 2008 5:05 pm
Wohnort: Thurndorf / Würzburg

Re: Listen

Beitrag von Dirty Oerti » So Mär 15, 2009 6:23 pm

Dazu musst du uns verraten, wie Elemente hinzugefügt werden können.
Wie schon gesagt, es gibt mehrere Wege.

An den Anfang, ans Ende, sortiert in die Mitte, an eine festgelegte Position etc...
Bei Fragen einfach an daniel[ät]proggen[Punkt]org
Ich helfe gerne! :)
----------
Wenn du ein Licht am Ende des Tunnels siehst, freu dich nicht zu früh! Es könnte ein Zug sein, der auf dich zukommt!
----
It said: "Install Win95 or better ..." So I installed Linux.

Empire
Beiträge: 272
Registriert: Mo Jan 26, 2009 5:36 pm

Re: Listen

Beitrag von Empire » Mo Mär 16, 2009 4:53 pm

Einfach hinter einander.
Ich bin schon ein stück weiter versuch gerade herauszukriegen wie ich nicht bei jedem Programmstart jedes der was wies ich wie vielen bücher neu anlegen zu müssen.

mfg
Empire

PS: Da es irgendwan eine Suchfunktion geben soll ist die Riehenfolge egan.

Benutzeravatar
Dirty Oerti
Beiträge: 2229
Registriert: Di Jul 08, 2008 5:05 pm
Wohnort: Thurndorf / Würzburg

Re: Listen

Beitrag von Dirty Oerti » Mo Mär 16, 2009 5:14 pm

PS: Da es irgendwan eine Suchfunktion geben soll ist die Riehenfolge egan.
Genau deswegen ist die Reihenfolge evtl nicht egal...
Einfach hinter einander.

Code: Alles auswählen

struct eintrag *zeiger;
// zum letzten element (bis zeiger->next == NULL)
zeiger->next = (struct eintrag *) malloc(sizeof(struct eintrag));
zeiger = zeiger->next;
zeiger->Wert_A = 25;
//...
Bei Fragen einfach an daniel[ät]proggen[Punkt]org
Ich helfe gerne! :)
----------
Wenn du ein Licht am Ende des Tunnels siehst, freu dich nicht zu früh! Es könnte ein Zug sein, der auf dich zukommt!
----
It said: "Install Win95 or better ..." So I installed Linux.

Empire
Beiträge: 272
Registriert: Mo Jan 26, 2009 5:36 pm

Re: Listen

Beitrag von Empire » Mo Mär 16, 2009 5:24 pm

Ich versteh diene argumentation nicht

Benutzeravatar
Dirty Oerti
Beiträge: 2229
Registriert: Di Jul 08, 2008 5:05 pm
Wohnort: Thurndorf / Würzburg

Re: Listen

Beitrag von Dirty Oerti » Mo Mär 16, 2009 6:01 pm

Du kannst die Liste z.B. alphabetisch sortieren, oder nach ISBN-Nummern.
Dann kannst du eine Suchfunktion (später) schreiben, die sich den Vorteil zu nutze macht, dass die Liste bereits vorsortiert ist. Dadurch wird die Suche dann (bei geeigneter Implementierung) schneller.
:)

Ich hoff mal das ich bei dem Code keinen Mist verzapft habe^^
So müsste es aber funktionieren.
Was ich noch vergessen habe:
Im Listenkopf musst du die Anzahl natürlich noch anpassen.

MfG
Daniel
Bei Fragen einfach an daniel[ät]proggen[Punkt]org
Ich helfe gerne! :)
----------
Wenn du ein Licht am Ende des Tunnels siehst, freu dich nicht zu früh! Es könnte ein Zug sein, der auf dich zukommt!
----
It said: "Install Win95 or better ..." So I installed Linux.

Empire
Beiträge: 272
Registriert: Mo Jan 26, 2009 5:36 pm

Re: Listen

Beitrag von Empire » Di Mär 17, 2009 2:24 pm

Der Code passt ich hab ihn schon nach meine bedürfnissen angepasst.
Aber noch ne Frage :
Ich kann die suchfunktion doch auch noch machen wenn es nicht sortiert ist nur ist dann die suche langsammer oder?

mfg
Empire

Empire
Beiträge: 272
Registriert: Mo Jan 26, 2009 5:36 pm

Re: Listen

Beitrag von Empire » Di Mär 17, 2009 2:39 pm

Ich bekomms net hin. Variablen kann ich in Dokumente spiechen aber wenn ich das gleiche mit der liste versuchekommt:
r Programme\Sicherheit.c|70|error: expected primary-expression before ',' token|
kann mir jemand helfen?

mfg
Empire

Benutzeravatar
Dirty Oerti
Beiträge: 2229
Registriert: Di Jul 08, 2008 5:05 pm
Wohnort: Thurndorf / Würzburg

Re: Listen

Beitrag von Dirty Oerti » Di Mär 17, 2009 3:47 pm

Du solltest uns evtl deinen Code zeigen?
Speichern in eine Datei müsste (nicht getestet) im Prinzip doch so gehen:

Code: Alles auswählen

struct liste *zeiger;
FILE *datei;
datei = fopen("Datei.txt","w");
zeiger = listenkopf->start;
while (zeiger!=0) {
   fwrite (zeiger, sizeof (struct liste), 1, datei);
   zeiger = zeiger->next;
}
So müsstest du deine Liste in eine Datei schreiben können. Lesen halt mit fread.
Bei Fragen einfach an daniel[ät]proggen[Punkt]org
Ich helfe gerne! :)
----------
Wenn du ein Licht am Ende des Tunnels siehst, freu dich nicht zu früh! Es könnte ein Zug sein, der auf dich zukommt!
----
It said: "Install Win95 or better ..." So I installed Linux.

Empire
Beiträge: 272
Registriert: Mo Jan 26, 2009 5:36 pm

Re: Listen

Beitrag von Empire » Di Mär 17, 2009 5:41 pm

thx
mfg
Empire

Empire
Beiträge: 272
Registriert: Mo Jan 26, 2009 5:36 pm

Re: Listen

Beitrag von Empire » Di Mär 17, 2009 5:55 pm

Inzwischen sieht der Code so aus:

Code: Alles auswählen

#include <stdio.h>
#include <stdlib.h>

typedef struct Element        // Struktur für die Liste. Erklärung warum sie zwei Namen hat siehe unten.
{
  struct Element *next;      // Zeiger auf den nächsten Knoten
  char  Buchtitel[20];
  char  Autor[30];
  char  ISBNummer[15];
  char  Inhalt[500];
  char  Kommentar[100];                        // Zahl die in dem Knoten gespeichert wird.
} Knoten;

int main ()
{

  int anz, i;
  Knoten *listen_kopf, *ptr_knoten, *help;                   // Kopf der Liste und 2 Hilfszeiger


  listen_kopf = NULL;                                   // Liste ist leer

  printf ("Anzahl: ");
  scanf ("%d", &anz);                                   // Eingabe der Anzahl

  printf ("\n\n");

  for (i = 0; i < anz; i++)                            // Erstellen von "anz"-Elementen
  {

    ptr_knoten = (Knoten *) malloc (sizeof(Knoten));        // Speicher für neues Element reservieren

    printf ("Buchtitel des %d. Buches: ", i + 1);
    scanf("%s", &ptr_knoten -> Buchtitel);
    printf ("Autor des %d. Buches: ", i + 1);
    scanf("%s", &ptr_knoten -> Autor);
    printf ("Die ISBNummer des %d. Buches: ", i + 1);
    scanf("%s", &ptr_knoten -> ISBNummer);
    printf ("Der Inhalt des %d. Buches: ", i + 1);
    scanf("%s", &ptr_knoten -> Inhalt);
    printf ("Kommentar zum %d. Buch: ", i + 1);
    scanf("%s", &ptr_knoten -> Kommentar);        // Wert für den Knoten einlesen

    ptr_knoten -> next = listen_kopf;                    // Knoten wird am Beginn eingefügt
    listen_kopf = ptr_knoten;                              // neuer Knoten ist der neue Listenkopf

  }



  printf ("\n\n");


  for (i = 0; i < anz; i++)                               // Ausgabe der Liste
  {

    printf ("Buch:\n%s\n", ptr_knoten -> Buchtitel);
    printf ("Autor:\n%s\n", ptr_knoten -> Autor);
    printf ("ISBnummer:\n%s\n", ptr_knoten -> ISBNummer);
    printf ("Inhalt:\n%s\n", ptr_knoten -> Inhalt);
    printf ("Kommentar:\n%s\n", ptr_knoten -> Kommentar);

    ptr_knoten = ptr_knoten -> next;                 // nächster Knoten

  }
  struct liste *zeiger;
FILE *datei;
datei = fopen("Datei.txt","w");
zeiger = listen_kopf -> start;
while (zeiger!=0) {
   fwrite (zeiger, sizeof (struct liste), 1, datei);
   zeiger = zeiger->next;
}



  ptr_knoten = listen_kopf;                              // Pointer auf den Listenkopf setzen

  while (ptr_knoten != NULL)                             // Löschen der Liste; wenn der Pointer NULL ist, dann ist die Liste zu Ende
  {

    help = ptr_knoten -> next;                   // Adresse des nächsten Knotens speichern

    free (ptr_knoten);                               // Speicher freigeben

    ptr_knoten = help;                                 // dadurch bist du auf dem nächsten Knoten

  }

  printf ("\n");
  scanf ("%d");

  return 0;

}
Das meint der Compiler dazu:
r Programme\Sicherheit.c||In function `int main()':|
r Programme\Sicherheit.c|69|error: 'struct Element' has no member named 'start'|
r Programme\Sicherheit.c|72|error: invalid use of undefined type `struct liste'|
r Programme\Sicherheit.c|66|error: forward declaration of `struct liste'|
||=== Build finished: 3 errors, 0 warnings ===|

Wo zu ich wiederum meine:
Was will der???

mfg
Empire

Antworten