1. Weiterleitung zu NetzLiving.de
  2. Forum
    1. Unerledigte Themen
  3. zum neuen Forum
  • Anmelden
  • Suche
Dieses Thema
  • Alles
  • Dieses Thema
  • Dieses Forum
  • Seiten
  • Forum
  • Erweiterte Suche
  1. Informatik Forum
  2. Webmaster & Internet
  3. Entwicklung

Pointer Basics - Hilfe gesucht !!

  • Larry
  • 21. Januar 2005 um 20:55
  • Unerledigt
Hallo zusammen,

das Informatik-Forum geht in den Archivmodus, genaue Informationen kann man der entsprechenden Ankündigung entnehmen. Als Dankeschön für die Treue bekommt man von uns einen Gutscheincode (informatikforum30) womit man bei netzliving.de 30% auf das erste Jahr sparen kann. (Genaue Infos sind ebenfalls in der Ankündigung)

Vielen Dank für die Treue und das Verständnis!
  • Larry
    Punkte
    35
    Beiträge
    6
    • 21. Januar 2005 um 20:55
    • #1

    Hallo Leute. :shinner:
    Bin neu hier im Forum und ein ziemlicher Grünschnabel in C++.
    Stehe nun vor folgendem Problem:
    Nach dem Starten des Programms und Eingabe von Zahlenwerten, werden die Zahlen in der umgekehrten Reihenfolge ihrer Eingabe ausgegeben. WARUM???
    Vielleicht hat ja der Eine oder Andere Profi kurz für mein Problem Zeit.

    Danke
    Larry


    <SPAN style="FONT-SIZE: 9pt; FONT-FAMILY: Tahoma">

  • rck
    Punkte
    2.342
    Beiträge
    437
    • 21. Januar 2005 um 21:13
    • #2
    Zitat von Larry

    Nach dem Starten des Programms und Eingabe von Zahlenwerten, werden die Zahlen in der umgekehrten Reihenfolge ihrer Eingabe ausgegeben. WARUM???

    Fettes Statement :-/

    Ich rate mal ins Blaue. Du tust die Daten in eine Verkettete Liste und hängst immer am Anfang rein. Tu statt dessen am Ende anhängen.

    Wenn's das nicht ist, wäre ein Listing gut. die Hellsehen VO hab ich im TUWIS leider noch nicht entdeckt, aber vielleicht hast ja Du da eine URL für mich?

  • Larry
    Punkte
    35
    Beiträge
    6
    • 21. Januar 2005 um 21:25
    • #3

    Danke für die schnelle Reaktion - habe leider auch so meine Probleme ein Listing hier hereinzubekommen (Schande !) arbeite gerade daran
    Larry

  • rck
    Punkte
    2.342
    Beiträge
    437
    • 21. Januar 2005 um 21:31
    • #4
    Zitat von Larry

    Probleme ein Listing hier hereinzubekommen

    How to paste a listing

    1. Datei in einem Editor aufmachen
    2. gewünschte Textpassage in die Zwischenablage kopieren
    3. Reply / New Topic im Forum machen
    4. Textpassage einfügen
    5. Vorher ein [code], dannach ein [/code]
    6. vor und / oder nach dem code noch zwei oder drei Absätze zur Problembeschreibung.

    Zu wenig Text lässt auf fehlendes Engagement schließen, zu viel langweilt.

  • Larry
    Punkte
    35
    Beiträge
    6
    • 21. Januar 2005 um 21:37
    • #5

    Wollte es aus dem Word rauskopieren. - Danke für den Hinweis.
    Hier das Listing:
    Ausgabe umgekehrt der Eingabe !?

    C
    #include <stdio.h>
    #include <malloc.h>
    #include <stdlib.h>
     
     
    struct Element
    {
    int x;
    Element *z;
    }; 
     
     
    void main (void)
    {
    Element *e, *ae, *aus;
    int i; 
     
    printf("Bitte Zahl eingeben: ");
    scanf("%d",&i);
     
     
    ae = new Element;
    ae->x = i;
    ae->z = NULL;
     
    printf("Bitte Zahl eingeben: ");
    scanf("%d",&i);
     
    while(i != 999)
    {
     
    e = new Element;
    e->x = i;
    e->z = ae;
     
    ae = e;
     
    printf("Bitte Zahl eingeben: ");
    scanf("%d",&i);
    }
     
    aus = e;
     
    while(aus)
    {
    printf("%d\n",aus->x);
     
    aus = aus->z;
    }
    Alles anzeigen
  • rck
    Punkte
    2.342
    Beiträge
    437
    • 21. Januar 2005 um 21:52
    • #6
    Zitat von Larry

    Wollte es aus dem Word rauskopieren. - Danke für den Hinweis.
    Hier das Listing:

    Und das hast Du selber programmiert?!

    Wenn ja: Bitte nenne die Variablen so, dass man einen Sinn zuordnen kann. zB head, tail, ptr, was weis ich.

    Wenn nein: Schau Dich doch mal im google um, da gibt's einen Haufen tutorials zu verketteten Listen. Such einfach nach "linked list c++"

  • rck
    Punkte
    2.342
    Beiträge
    437
    • 21. Januar 2005 um 21:53
    • #7

    Außerdem: Wieso verlangst Du mindestens zwei Zahlen? Wo ist der Zusammenhang zu 999, woher soll der Benutzer wissen, dass er ausgerechnet 999 eintippen soll, um das Programm zu beenden?

    Wieso ist die Zahleneingabe drei mal drinnen, reicht nicht einmal und/oder eine Funktion dafür?

  • Larry
    Punkte
    35
    Beiträge
    6
    • 21. Januar 2005 um 22:10
    • #8

    Zunächst mal ein Danke für die Mühe.
    Ja, das Programm ist selbst programmiert und ist nur eine Übung zum Unterricht und dient lediglich der Vorbereitung auf einen bevorstehenden Test (Abendschule). Ziel dieser Übung ist nichts anderes, als die Zahlen in der richtigen Reihenfolge rauszubekommen. Weiß zwar jetzt nicht mehr als vorher - aber werd mich mal im Google schlau machen.
    Danke
    Larry

  • michi204
    Punkte
    7.268
    Beiträge
    1.318
    • 21. Januar 2005 um 22:15
    • #9

    rck: ae ist anfangselement, e ist element und aus ist das letzte :)

    Larry: es ist ja ganz logisch: du weist immer dem neuen element einen zeiger auf das zuletzt erstellte zu. am schluss beginnst du bei aus und gehst den zeigern nach, natürlich gibt er dann alles von hinten nach vorne aus, also zuerst das letzte, dann das davor erstellte usw. um es zu korrigieren, müsstest du dem zuletzt erstellten einen zeiger auf das neue element zuweisen..

    lg michi

  • Larry
    Punkte
    35
    Beiträge
    6
    • 21. Januar 2005 um 22:27
    • #10

    Hättest Du vielleicht einen kurzen Tipp, wie man dies in meinem Fall anstellt?

  • rck
    Punkte
    2.342
    Beiträge
    437
    • 21. Januar 2005 um 23:20
    • #11
    Zitat von michi204

    rck: ae ist anfangselement, e ist element und aus ist das letzte :)

    Ok, Prüfungsstress und so. Danke für den Hinweis. Wenigstens die Eingangsdiagnose hat gestimmt, sogar ohne Listing *ggg*

    Hmm. Wie wäre es mit einer Funktion "get_last()", die einfach den letzten Pointer rückliefert? Den dann entsprechend ändern.

    Ungetestetes Beispiel:

    Code
    Element *get_last(Element *root) {
      if(!root)
        return(new Element);
    
    
      while(root)
        root=root->z;
    
    
      return(root);
    }
    
    
    main() {
    
    
    ....
    
    
      el=new Element;
      el->z=NULL;
      el->x=i;
    
    
      get_last(ae)->z=el;
    }
    Alles anzeigen

    el ist eine temporär variable, ae Dein "anfangs Element" :)

  • Prophet
    Punkte
    145
    Beiträge
    29
    • 21. Januar 2005 um 23:28
    • #12

    ae ist dein Anfangselement, ae->z wird anfangs auf NULL gesetzt da es keinen Nachfolger gibt. Waere ja nur logisch dies auf dein neukreiertes Element zeigen zu lassen... also statt...

    Code
    while(i != 999)
    {
    e = new Element;
    e->x = i;
    e->z = ae;
     
    ae = e;
     
    printf("Bitte Zahl eingeben: ");
    scanf("%d",&i);
    }
    Alles anzeigen

    etwas in der Art...

    Code
    [...]
    Element *tmp;
    [...]
    tmp = ae;
    while(i != 999)
    {
    e = new Element;
    e->x = i;
    e->z = NULL; // kein Nachfolger
    
    
    tmp->z = e; // Nachfolger setzten
    tmp = tmp->z; // aktuelles Element setzen
     
    printf("Bitte Zahl eingeben: ");
    scanf("%d",&i);
    }
    Alles anzeigen

    die Ausgabe kann dann in etwa so aussehen...

    Code
    tmp= ae;
    while(tmp) {
      printf("%d", tmp->i);
      tmp = tmp->z;
    }

    Eine primitive Liste mit Grundfunktionen wie get_head/get_tail zu konstruieren (oder in geeigneter Literatur nachzuschlagen/im iNet zu suchen) waer natuerlich auch eine Moeglichkeit.

  • Larry
    Punkte
    35
    Beiträge
    6
    • 22. Januar 2005 um 11:14
    • #13

    Danke für die zahlreichen und schnellen Hilfestellungen.

    Larry

  • michi204
    Punkte
    7.268
    Beiträge
    1.318
    • 22. Januar 2005 um 14:14
    • #14
    Zitat von Larry

    Hättest Du vielleicht einen kurzen Tipp, wie man dies in meinem Fall anstellt?


    Larry: auch wenn dein problem inzwischen schon gelöst ist: es empfiehlt sich, in so einem fall einfach eine skizze (mit kästchen + kleinen pfeilen, die woanders hinzeigen, für zeigervariablen und kästchen mit inhalt für andere variablen) zu machen, dann kommt man meistens ganz leicht drauf.

    lg michi

  • sauzachn
    Punkte
    3.101
    Beiträge
    606
    • 7. Februar 2005 um 20:31
    • #15
    Zitat von Larry

    Wollte es aus dem Word rauskopieren.


    Sag jetzt bitte, daß das nur ein Mißverständnis ist und daß du gar nicht mit Word deine C++ Programme schreibst. Bitte sag es *bettel*

  • michi204
    Punkte
    7.268
    Beiträge
    1.318
    • 7. Februar 2005 um 23:51
    • #16
    Zitat von sauzachn

    Sag jetzt bitte, daß das nur ein Mißverständnis ist und daß du gar nicht mit Word deine C++ Programme schreibst. Bitte sag es *bettel*

    ich schreibe sie auch mit word, du nicht? word ist ja auch ein schreibprogramm, oder? und da kann man die pointer auch gleich grafisch als pfeile einzeichnen. und das ganze dann ganz supa an alle seine freunde per html-email über die integrierte outlook-schnittstelle verschicken. :tongue1:

    lg michi

  • Maximilian Rupp 27. Dezember 2024 um 12:06

    Hat das Thema aus dem Forum Programmieren nach Entwicklung verschoben.

  1. Datenschutzerklärung
  2. Impressum