Probleme mit Schleife



  • 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?
    🙂


  • Administrator

    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...


Anmelden zum Antworten