Probleme mit Schleife
-
Hallo
Ich habe vor eine Matrix von der Ordnung 10 mit einer Schleife durchzugehen um am ende zu ermitteln welche der Größte wert in der Ganzen Matrix ist . Leider Gibt mir meine Funktion immer 0 zurück, ich denke das ich einen Denkfehler in meinen Code habe, komme allerdings nicht selbst drauf..
Wäre für jede Hilfe dankbar.
#define MAX_ORD 10 typedef int tiMatrix[MAX_ORD][MAX_ORD]; tiMatrix matrix; int i; int gross = 0; int main(void) { matrix[1][1] = 4; matrix[1][2] = 2; for(i=0; i <= MAX_ORD; i++) { for (int i2=0; i2 <= MAX_ORD;i2++) { if(matrix[i][i2] > gross) { matrix[i][i2] == gross; } } } printf("%d", gross);
-
Denk mal nach was Zeile 24 macht :).
-
Naja also er sollte eigentlich wenn er einen Wert gefunden hat der Größer ist als "gross" ( Von Anfang auf 0 gesetzt) Soll er den Wert wenn er größer ist als gross in gross speicher.
Ist doch vom Prinzip richtig oder nicht ? Oder weißt du auf das == hin ?
Wenn ich nur ein = mache dann läuft er die Schleife nicht zuende komischerweise.Ja hab mich mit Java vertan, da war es ==, allerdings ist das Problem nochnicht gelöst, da wenn ich es mit nur einen = mache läuft die zweite schleife nich durch und ich weiß nicht warum...
-
kingmarv schrieb:
Wenn ich nur ein = mache dann läuft er die Schleife nicht zuende komischerweise.
Aber so wie sie dasteht, tut die Zeile garantiert gar nichts.
-
doch komischerweise schmeißt er mir am ende eine 0 raus
Ist es eine falsche zuweisung ?
Oh man bin ich Blöd ^^ Jetzt seh ich es auch ... hab es Falschherum gemacht
Danke für den Hinweis
-
Ok soweit klappt es, allerdings ist noch nen kleiner Fehler drin: Undzwar gibt er mir schon das richtige ergebnis aus allerdings zeigt er mir am ende immer zusätzlich 2 Werte an:
[9][10] = 9
und[10][0] = 10
Sprich scheinbar schreibt er innerhalb der Schleife werte in die Matrix rein was natürlich nicht von mir beabsichtigt ist.
matrix[1][1] = 1; matrix[1][5] = 2; matrix[3][5] = 6; matrix[2][5] = 8; for(i=0; i <= MAX_ORD; i++) { for (int i2=0; i2 <= MAX_ORD;i2++) { if(matrix[i][i2] > gross) { printf("\n %d %d \n", i,i2); gross = matrix[i][i2]; printf("%d ", gross); } } }
Das ganze kann ja nur hier passieren
gross = matrix[i][i2];
Nach meinen kenntnissen weiße ich den Inhalt von Matrix[][] der Var "gross" zu. Daher verstehe ich nicht warum sich die Matrix mit werten füllt ?
-
kingmarv schrieb:
Sprich scheinbar schreibt er innerhalb der Schleife werte in die Matrix rein was natürlich nicht von mir beabsichtigt ist.
Das sollte ausgeschlossen sein, wenn du das nicht mit einem
matrix[n][n] = ...
(oder mit einem Zeiger) selbst gemacht hast. Vielleicht hängt das damit zusammen, dass deine Matrix von Anfang an irgendwelche zufälligen Werte enthält, wenn du die Werte nicht gleich am Amfang auf Null setzt. Hast du das gemacht?
-
Du hast das
printf
in der Schleife. Logisch bekommst du da mehrere Ausgaben, nämlich jedesmal wenn ein grösserer Wert gefunden wird ...Grüssli
-
ja aber er gibt ja nur das print f aus wenn er einen wert findet der größer ist als der vorhige.
Ja hab ALLE felder am anfang des Programmes ausgeben lassen und es stehen alle auf 0. Dann hab ich nochmal alle Felder ausgeben lassen in der 2ten Schleife und bekomme folgendes Ergebnis:
[9][10] = 9
[10][0] = 10
[10][1] = 10
... danach geht es wieder mit 0 weiter also es sind wirklich nur diese 3 Felder wo er reinschreibt. und aufgrund der Zahlen kann nur sein das in den Schleifen irgendwo reingeschrieben wird....
-
Ich weiß nicht mehr so recht, was jetzt Debug-Ausgabe, und was Ergebnis ist. Zeig doch schnell mal ein lauffähiges Beispiel, in dem nur das Ergebnis ausgegeben wird, dann versteh' ich dich vielleicht besser.
-
beide schleifen dürfen nur bis x<MAX_ORD und nicht x<=MAX_ORD laufen da kann es sein das du dir was madiges überschreibst, da du was haben willst was du nicht bestellt hast
-
#include <stdio.h> #define MAX_ORD 10 typedef int tiMatrix[MAX_ORD][MAX_ORD]; tiMatrix matrix; int i; int gross = 0; int main(void) { matrix[1][1] = 1; matrix[1][5] = 2; matrix[3][5] = 6; matrix[2][5] = 8; printf("%d", matrix[10][1]); for(i=0; i <= MAX_ORD; i++) { for (int i2=0; i2 <= MAX_ORD;i2++) { if(matrix[i][i2] > gross) { printf("\n %d %d \n", i,i2); gross = matrix[i][i2]; printf("%d ", gross); } } } }
Hier sollte er jede Zahle ausgeben die Größer ist als die Größte die er bisher gefunden hat und wenn du das mal Ausführst siehst du die komischen 2 Einträge am Ende
Danke
-
kingmarv schrieb:
Hier sollte er jede Zahle ausgeben die Größer ist als die Größte die er bisher gefunden hat und wenn du das mal Ausführst siehst du die komischen 2 Einträge am Ende
Verstehe. Ich seh da leider keine Ausgabe, sondern schon in Zeile 21 einen Segfault. Warum das so ist? Keine Ahnung, vielleicht weiß es ja noobLolo.
Von inklusive Null bis inklusive Zehn gibt es übrigens elf Zahlen.
-
matrix[1][1] = 1; matrix[1][5] = 2; matrix[3][5] = 6; matrix[2][5] = 8; printf("%d", matrix[10][1]);
Das sind doch nur Testwerte damit ich weiß das meine Routine auch funktioniert und printf("%d", matrix[10][1]); hab ich gemacht um zuschauen ob er auotmatisch Werte in die Zellen schreibt bevor meine Schleifen losgehen, das hat doch einer von euch vorgeschlagen
-
kingmarv schrieb:
hab ich gemacht um zuschauen ob er auotmatisch Werte in die Zellen schreibt bevor meine Schleifen losgehen, das hat doch einer von euch vorgeschlagen
Nur daß 10 kein zulässiger Index für dein Array ist. Mahnt das dein Compiler nicht an? Dann wirf ihn weg.
-
ist vs08 ...
Hat jemand den Code mal kompeliert und versteht warum die Einträge am Ende erscheinen ?
-
noobLolo schrieb:
beide schleifen dürfen nur bis x<MAX_ORD und nicht x<=MAX_ORD laufen
µngbd schrieb:
Nur daß 10 kein zulässiger Index für dein Array ist.
-
Ok jetzt klappt alles danke...