Werte aus Array ausgeben (Dyn. Liste)
-
Hallo zusammen!
Ich habe folgendes Problem, ich habe 3 Dynamische Listen Nr. 1+2 für Werte aus einem Messkanal und Nr. 3 für einen Zeitstempel. Nun muss ich aus den Listen 1+2 jeweils die 20 kleinsten Werten (Anz) ausgeben. Ich habe alle Werte aus Liste 1+2 nun in ein Array gepackt, und dieses Array nacher mit dem Bubblesort der Grösse nach sortiert. Ich habe das auch schon direkt ausgegeben die Wert sind da von klein nach gross drin. Nun will ich die Dyn. Liste 1+2 durchlaufen lassen, und wenn ein Wert in dem sortierten Array dem Wert in der Dynmaischen Liste entspricht, eine Ausgabe machen. Wenn ich nur Aus der Liste 1 oder 2 Ausgeben möchte, geht es ohne Probleme. Wenn jedoch beide Listen ausgegeben werden sollten, geht es nur etwas bis an die 10 Position, oder ich mehr als 50 Werte habe! Ich weiss nicht woran es liegen könnte. Vielleicht hat ja einer eine Idee.
if (gKanal==3) { cout << " Zeitstempel Kanal 1 Kanal2" << endl; do { hz1=bz1; hz2=bz2; hz3=bz3; //Kanal 1+2 while (hz1!=NULL && hz2!=NULL && hz3!=NULL && dl<Anz) { if (Array_Werte [i] == hz1->Wert_ZZahl1) { interpol1=F_Interpolation1 (hz1->Wert_ZZahl1, gND11, gND21, gND31, gND41); cout << setw(2) << i+1 << ". Wert " << setw(2) << hz3->Day << "." << setw(2) << hz3->Month << "." << setw(4) << hz3->Year << " " << setw(2) << hz3->Hour << ":"<< setw(2) << hz3->Minute << ":" << setw(2) << hz3->Second << ":" << setw(3) << hz3->Milliseconds << " " << setw(8) << interpol1 << " " << setw(2) << gEinheit << endl; i++; dl++; } if (Array_Werte [i] == hz2->Wert_ZZahl2) { interpol2=F_Interpolation2 (hz2->Wert_ZZahl2, gND12, gND22, gND32, gND42); cout << setw(2) << i+1 << ". Wert " << setw(2) << hz3->Day << "." << setw(2) << hz3->Month << "." << setw(4) << hz3->Year << " " << setw(2) << hz3->Hour << ":"<< setw(2) << hz3->Minute << ":" << setw(2) << hz3->Second << ":" << setw(3) << hz3->Milliseconds << " " << setw(8) << interpol2 << " " << setw(2) << gEinheit << endl; i++; dl++; } hz1=hz1->next1; hz2=hz2->next2; hz3=hz3->next3; } } while (i=dl); }Vielen Dank schonmal im Voraus.
-
Der Code ist viel zu unvollständig, um auch nur über das Problem spekulieren zu können. Bitte lies dir mal den dritten Link in meiner Signatur durch und handele danach. Rück Code vernünftig ein und benutze die für C++ passenden Codetags.
Was mir noch auffällt: Das ganze klingt nicht sehr nach Übungsaufgabe, sondern nach Code, der tatsächlich benutzt wird. Ist das dein Ernst mit Bubblesort? Und dem ganzen Pointergefrickel?
-
Nein es handelt sich nicht um eine Übungsaufgabe, und der Grund warum ich nicht den ganzen Code gepostet habe ist, weil es über 3000 Zeilen sind. Ja es ist mein ernst mit dem Bubblesort. Ich habe nur den Teil aus dem Programm gepostet, der nicht läuft, und ich auch beschrieben habe.
-
evo, weißt du, was schlimmer als Buchstabensuppe ist? Die Hälfte von der Suppe.
Man kann unmöglich nachvollziehen, was du hier machst.
-
evo-style schrieb:
if (gKanal==3) { // int i = 0; ? fehlt das hier cout << " Zeitstempel Kanal 1 Kanal2" << endl; do { /* Hz* ? */ hz1=bz1; /* Hz* ? */ hz2=bz2; /* Hz* ? */ hz3=bz3; //Kanal 1+2 while (hz1!=NULL && hz2!=NULL && hz3!=NULL && dl<Anz) { if (Array_Werte [i] == hz1->Wert_ZZahl1) { /*double ? */ interpol1=F_Interpolation1 (hz1->Wert_ZZahl1, gND11, gND21, gND31, gND41); cout << setw(2) << i+1 << ". Wert " << setw(2) << hz3->Day << "." << setw(2) << hz3->Month << "." << setw(4) << hz3->Year << " " << setw(2) << hz3->Hour << ":"<< setw(2) << hz3->Minute << ":" << setw(2) << hz3->Second << ":" << setw(3) << hz3->Milliseconds << " " << setw(8) << interpol1 << " " << setw(2) << gEinheit << endl; i++; dl++; } if (Array_Werte [i] == hz2->Wert_ZZahl2) { /*double ? */ interpol2=F_Interpolation2 (hz2->Wert_ZZahl2, gND12, gND22, gND32, gND42); cout << setw(2) << i+1 << ". Wert " << setw(2) << hz3->Day << "." << setw(2) << hz3->Month << "." << setw(4) << hz3->Year << " " << setw(2) << hz3->Hour << ":"<< setw(2) << hz3->Minute << ":" << setw(2) << hz3->Second << ":" << setw(3) << hz3->Milliseconds << " " << setw(8) << interpol2 << " " << setw(2) << gEinheit << endl; i++; dl++; } hz1=hz1->next1; hz2=hz2->next2; hz3=hz3->next3; } } while (i=dl); }Es fällt zunächst die Zuweisung(!) in Zeile 37 auf - könnte auch while(i==dl) heißen sollen.
Dann fällt auf, dass in der inneren Schleife in jedem(!) if-Block die Zählvariablen 'i' und 'dl' hochgezählt werden (Zeilen 19,20 und 29,30). Ist also die erste if-Bedigung erfüllt, so wird die zweite Abfrage mit dem gleichem Index gar nicht mehr gemacht, sondern schon mit dem nächsten Index. Da keine Abfrage da ist (i<Anz?) kann das zu einem Überlauf von Array_Werte[] führen.Tipp: versuche Variablen erst dann zu deklarieren, wenn Du sie benötigst - und nicht vorher (z.B. Zeilen 7-9, 15, 25); das schafft Über- und Durchblick.
-
hz1=bz1; sollte Hilfszeiger1=Basiszeiger1 heissen. Und die Interpolation ist eine Funktion welche ich aus dem Hauptprogramm ausgelagert habe.
-
Habe nund folgendes herausgefunden, wenn ich die Werte nicht Interpoliere, dann werden Sie in der richtigen Reihenfolge herausgegeben. Die Funktion der Interpolation ist jedoch richtig!
if (gKanal==3) { // int i = 0; ? fehlt das hier cout << " Zeitstempel Kanal 1 Kanal2" << endl; do { /* Hz* ? */ hz1=bz1; /* Hz* ? */ hz2=bz2; /* Hz* ? */ hz3=bz3; //Kanal 1+2 while (hz1!=NULL && hz2!=NULL && hz3!=NULL && dl<Anz) { if (Array_Werte [i] == hz1->Wert_ZZahl1) { cout << setw(2) << i+1 << ". Wert " << setw(2) << hz3->Day << "." << setw(2) << hz3->Month << "." << setw(4) << hz3->Year << " " << setw(2) << hz3->Hour << ":"<< setw(2) << hz3->Minute << ":" << setw(2) << hz3->Second << ":" << setw(3) << hz3->Milliseconds << " " << setw(8) << hz1->Wert_ZZahl1 << " " << setw(2) << gEinheit << endl; i++; dl++; } if (Array_Werte [i] == hz2->Wert_ZZahl2) { cout << setw(2) << i+1 << ". Wert " << setw(2) << hz3->Day << "." << setw(2) << hz3->Month << "." << setw(4) << hz3->Year << " " << setw(2) << hz3->Hour << ":"<< setw(2) << hz3->Minute << ":" << setw(2) << hz3->Second << ":" << setw(3) << hz3->Milliseconds << " " << setw(8) << hz2->Wert_ZZahl2 << " " << setw(2) << gEinheit << endl; i++; dl++; } hz1=hz1->next1; hz2=hz2->next2; hz3=hz3->next3; } } while (i=dl); }