Hackerboard Wiki HaboBlog
Hackerboard bei Facebook Hackerboard bei Google+ Hackerboard bei Twitter

[HaBo]

 
Code Kitchen Allgemeines Coder-Forum rund um das Programmieren eigenständiger, ausführbarer Programme.

C++ Ringliste Vorgänger suchen

Diskussion: C++ Ringliste Vorgänger suchen im Forum Code Kitchen, in der Kategorie Software Home; Anzeige Hi HaBo, mein Frauchen hat ein kleines Problem unter C++ und einer Ringliste. Sie gibt 10 Werte ein und ...

Like Tree1Likes
  • 1 Post By Eydeet

Antwort
Alt 24.07.11, 15:32   #1 (permalink)
Senior Member
 
Benutzerbild von Chakky
 
Registriert seit: 28.10.03
Chakky Leistung: 8086
Chakky eine Nachricht über ICQ schicken
Likes: 110
erledigt C++ Ringliste Vorgänger suchen

Anzeige

Hi HaBo,

mein Frauchen hat ein kleines Problem unter C++ und einer Ringliste.

Sie gibt 10 Werte ein und bestimmt bei einer beliebigen Zahl (die auch eingegebn wird) den Vorgänger.

Das Funktioniert bei 9 von 10 Fällen, sprich bei einer eingabe von

1
2
3
4
5
6
7
8
9
10

und als Suche 5.
Wird Ordnungsgemäß die 4 Angezeigt, bei allen anderen Suchwerten auch. Nur bei der 1 als Suchwert wird keine 10 Ausgegebn sondern die 2.
Weis einer warum und ob es mit einer Doppeltverkettenliste das funktionieren würde, nur dann ist wieder die frage wie wird das Implementiert.

Hier der Code:

Code:
#include <iostream>
using namespace std; 

struct nummer 
       {
          int a;
          nummer *b;
       };
int main ()
    {
           nummer *first,*current,*before,*davor;
           int i;
           int n;
           
           first = new nummer;
           cout << "Eingabe:\n";
           cin >> first ->a; 
           first-> b =first;
           
           current=first;
           before=first;
           davor=first;
           
           i = 1;
           while (i!=10)
                 {
                    current->b =new nummer;
                    current = current-> b;
                    current ->b =first;
                    cin >>current->a;
                    i++;
                 }
           current= first;
           cout<<"Suche nach einer Zahl:\n";
           cin>> n;
           while (n!=current->a)
                 {
                 
                     davor=before;
                     before=current;
                     current=current->b;
                     
                 }
                 cout<<davor->b->a;
           

system("PAUSE");
return 0;
    }
Danke für Hinweise und Lösungsvorschläge
__________________
cu
Chakky

we are dreaming in digital
we are living in realtime
we are thinking in binary
we are talking in IP
welcome to our world

Geändert von Chakky (25.07.11 um 13:57 Uhr)
Chakky ist offline   Mit Zitat antworten
Alt 24.07.11, 16:44   #2 (permalink)
 
Benutzerbild von Eydeet
 
Registriert seit: 14.04.06
Eydeet Leistung: Facit NTK
Likes: 4
Standard

Hi, das Problem ist, dass die Variable "davor" nicht korrekt initalisiert wird. Bei Eingabe der 1 kommst du in die zweite While-Schleife gar nicht rein, deshalb zeigt sie auf den ersten Wert.
Mit einer doppelt oder rückwärts verketteten Liste ist es natürlich auch möglich, das Problem zu lösen. Zwingend nötig ist das aber nicht.
Mir ist auch nicht so ganz klar, warum du nicht nur die Variable "before" benutzt. Ich habe mir erlaubt, den Code zu korrigieren, mir wäre aber wichtig, dass du/deine Frau es erst einmal selbst versuch[s]t.
   
Code:
#include <iostream>
using namespace std; 

struct nummer
{
    int a;
    nummer *b;
};

int main ()
{
    nummer *first, *current, *before;
    int i;
    int n;
    
    first = new nummer;
    cout << "Eingabe:\n";
    cin >> first->a; 
    first->b = first;
    
    current = first;
    
    i = 1;
    while (i!=10) {
        current->b =new nummer;
        current = current->b;
        current->b =first;
        cin >> current->a;
        i++;
    }
    
    before = current;
    current = first;
    cout << "Suche nach einer Zahl:\n";
    cin >> n;
    while (n != current->a) {
        before = current;
        current = current->b;
    }
    cout << before->a;
    return 0;
}
Chakky likes this.
Eydeet ist offline   Mit Zitat antworten
   
HaBOT
 
- Anzeige -

Werbung ist gerade online    
Alt 24.07.11, 17:31   #3 (permalink)
Senior Member
Themenstarter
 
Benutzerbild von Chakky
 
Registriert seit: 28.10.03
Chakky Leistung: 8086
Chakky eine Nachricht über ICQ schicken
Likes: 110
Standard

Vielen dank dir. Frauchen saß heute schon eine Weile dran und kam zu keiner richtigen Lösung, ich selber hab von den Listen keinen Plan.
__________________
cu
Chakky

we are dreaming in digital
we are living in realtime
we are thinking in binary
we are talking in IP
welcome to our world
Chakky ist offline   Mit Zitat antworten
Alt 26.07.11, 02:02   #4 (permalink)
Senior Member
 
Registriert seit: 13.07.08
enkore Leistung: K 6-3enkore Leistung: K 6-3enkore Leistung: K 6-3
Likes: 85
Standard

Protip: Boost hat eine Ringpuffer-Klasse
__________________
"It is the human race! The deterioration of the spirit of man. Man undermining himself, causing a self-willed, self-imposed, self-evident self-destruction."
+++ BREAKING +++ Troll ertrinkt im Planschbecken +++
enkore ist offline   Mit Zitat antworten
Antwort
   
- Anzeige -

Werbung ist gerade online    

[HaBo] » Software Home » Code Kitchen » C++ Ringliste Vorgänger suchen
Themen-Optionen
Ansicht

Forumregeln
Es ist Ihnen nicht erlaubt, neue Themen zu verfassen.
Es ist Ihnen nicht erlaubt, auf Beiträge zu antworten.
Es ist Ihnen nicht erlaubt, Anhänge hochzuladen.
Es ist Ihnen nicht erlaubt, Ihre Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks sind aus
Pingbacks sind aus
Refbacks sind aus



1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61