Mit dieser Funktion habe ich noch Probleme. Und zwar habe ich hier diesmal zwei Arrays die ich dieser Funktion übergebe. Der Min Wert vom Vector1 wird immer ausgegeben. Der min Wert von Vector2 ist bei mir immer 0. Woran liegt das? void MinElem(int* ivector1,int* ivector2) //Funktion zum feststellen der kleinsten Zahl { imerker_vector1= ivector1[0]; imerker_vector2= ivector2[0]; for(int i=0;i<iwerte;i++) { if (imerker_vector1>ivector1[i]) { imerker_vector1=ivector1[i]; } if (imerker_vector2>ivector2[i]) { imerker_vector2=ivector2[i]; } } printf("min.Element Vector1:%2d min.Element Vector2:%2d\n",imerker_vector1,imerker_vector2); }
Ja, ein wirklich schreklicher Chat hier. Schon 40 Minuten vergangen, und keiner kennt die Lösung.
Selten so eine grausige Benutzung von nur globalen Variablen gesehen. Das macht selbst das kleine Programm schon unleserlich. Programmier ordentlicher, dann klappts auch fehlerfreier!
Ich dreh noch durch. Ich verstehe einfach nicht warum ich nicht zwei min Werte angezeigt bekomme. Hier in diesem Forum sind doch zahlreiche Cracks oder?
Was heisst da nicht ordentlich programmiert. Ja wie kann ich den die globalen Variablen verhindern. Die brauche ich doch bei mir. Hier in diesem Forum wird nur drum herum geredet.Ok es gibt bestimmt noch 1000 elegantere Varianten. Aber ich habe nunmal ein Problem mit meinem C-Code.Ich will nur wissen warum ich keine zwei min Werte angezeigt bekomme?
> Hier in diesem Forum wird nur drum herum geredet.
Selbstverständlich. Du glaubst doch wohl nicht, daß Du nach Deinem
Auftritt noch vernünftige Antworten bekommst. Meine konnte ich
jedenfalls noch rechtzeitig zurückziehen, da habe ich Glück gehabt. Und
damit ist hier für mich EOT.
"Ja wie kann ich den die globalen Variablen verhindern. Die brauche ich doch bei mir." Ja ne, ist klar. Ein Beispiel: Du verwendest die imerker nur in einer einzigen Routine. Aber klar, das geht natürlich nicht mit lokalen Variablen, wie auch. Wie schon gesagt, mach deinen Code leserlicher, dann schauen sich das bestimmt auch mehr Leute an, denn so ist und bleibt es unleserlich
So ich habe mal die Funktion MinElem folgendermasen angeändert: void MinElem(int* ivector1,int* ivector2) //Funktion zum feststellen der kleinsten Zahl { int imerker_vector1=0, imerker_vector2=0; imerker_vector1= ivector1[0]; imerker_vector2= ivector2[0]; for(int i=0;i<iwerte;i++) { if (imerker_vector2>ivector2[i]) { imerker_vector2=ivector2[i]; } } printf("min.Element Vector1:%2d\n",imerker_vector2); } Wenn ich die Funktion so ausführe, dann bekomme ich auch immer den Wert 0 vom Vector 2 zurück. Verändere ich diese Funktion so wie unten, dann bekomme ich einen Min. Wert vom Vector 1 angezeigt. void MinElem(int* ivector1,int* ivector2) //Funktion zum feststellen der kleinsten Zahl { int imerker_vector1=0, imerker_vector2=0; imerker_vector1= ivector1[0]; imerker_vector2= ivector2[0]; for(int i=0;i<iwerte;i++) { if (imerker_vector1>ivector1[i]) { imerker_vector1=ivector1[i]; } } printf("min.Element Vector1:%2d\n",imerker_vector1); } Wo kann denn da der Fehler sein?
Dein Fehler liegt imo bei der variable i. Die setzt du nicht zurück..
Hi Tobi vielen Dank für den Tipp. Ja wo genau müsste ich diese Variable i zurücksetzen?
Nachdem du den ersten vektor gespeichert hast. Geb dir doch mal den Inhalt von Vektor 1 und 2 nach dem einlesen aus, dann wirst du es wahrscheinlich sehen
Ja das mache ich doch schon. Und zwar in Main nach den einlesen der Werte führe ich ja die Funktion WriteVec() aus(siehe Quellcode im Anhang). Ich kann da nix feststellen.
Ich sehe da nichts auffälliges. Ich verzweifle noch.Ich finde den Fehler nicht.
doch, es ist genau der Fehler, den ich schon sagte, nur ist dein WriteVec genauso verbuggt :)
Hmmm...ok ich kann es jetzt verstehen.Wie könnte man die beiden Funktionen verbessern?
Ich bekomme es noch als nicht hin. Bitte bitte helft mir. Ich muss bis morgen das Programm zum laufen bringen.
Ich habe diesen beiden Variablen von der Funktion MinElem() mal direkt einen Wert vergeben: imerker_vector1= 11; imerker_vector2= 22; Die For Schleife habe ich auskommentiert. Die printf Funktion liefert mir dann auch die beiden Werte zurück. Irgendwas stimmt mit den Vectoren nicht.
Es muss doch hier einen Crack geben, der mir genau sagen kann wo und wie ich das Programm abändern muss, damit es läuft. Ich kann ich noch 100 Stunden sitzen. Leider muss ich ja noch was anderes tun.
Wenn ich ivector1[0]=55; in der Funktion einfüge und teste, dann erhalte ich auch den min.Wert von Vector1. Das vestehe ich absolut nicht. void MinElem(int* ivector1,int* ivector2) //Funktion zum feststellen der kleinsten Zahl { imerker_vector1= ivector1[0]; ivector1[0]=55; //zusätzlich eingefügt. imerker_vector2= ivector2[0]; for(int m=0;m<iwerte;m++) { if (imerker_vector1>ivector1[m]) { imerker_vector1=ivector1[m]; } if (imerker_vector2>ivector2[m]) { imerker_vector2=ivector2[m]; } } printf("min.Element Vector1:%2d min.Element Vector2:%2d\n",imerker_vector1,imerker_vector2); }
In einem anderen Forum wurde mir das hier vorgeschlagen. int MinElem(int *a,size_t n){ int temp; for(temp =*a++;--n;++a) if(*a<temp)temp =*a; return temp } Also das finde ich total unübersichtlich und vor allem verstehe ich das nicht.
Bringt auch nix, der Fehler ist immer noch beim einlesen schreib deine ausgaberoutine noch mal neu und dann schau mal was wirklich in den vektoren drin steht
Mein Programm liest die Werte schon korrekt in die Vectoren ein. Hab ich ja auch getestet. Jetzt noch mal: void MinElem(int* ivector1,int* ivector2) //Funktion zum feststellen der kleinsten Zahl { ivector1[0]=99; //zusätzlich eingefügt. ivector2[0]=99; //zusätzlich eingefügt. imerker_vector1= ivector1[0]; imerker_vector2= ivector2[0]; for(int m=0;m<iwerte;m++) { if (imerker_vector1>ivector1[m]) { imerker_vector1=ivector1[m]; } if (imerker_vector2>ivector2[m]) { imerker_vector2=ivector2[m]; }$ } printf("min.Element Vector1:%2d min.Element Vector2:%2d\n",imerker_vector1,imerker_vector2); } GENAU SO FUNKTIONIERT ES JA!!!!!!
"Mein Programm liest die Werte schon korrekt in die Vectoren ein." Falsch du beschreibst vektor1 ab position 1, aber vector 2 aber der länge von vektor1
Ja und wie würdest du das machen bzw. programmieren? Ich stehe auf dem Schlauch.
wie ich schon sagte, einfach i zwischen den beiden einlese schritten wieder auf 0...
Achso hier muss ich die Variable i auf NULL setzte!? printf("Vector1:\n"); for(int x=1; x<=iwerte;x++) { scanf("%2d",&izahl); //einlesen der Zahlen in einen Vector ReadVec(izahl,1); } i = 0; printf("Vector2:\n"); for(int x=1; x<=iwerte;x++) { scanf("%2d",&izahl); //einlesen der Zahlen in einen Vector ReadVec(izahl,2); }
Sag du es mir. Funktioniert es? Die Ausgabe wird jetzt falsch sein aber klappt das Min-Suchen
Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.