Anfänger Problem mit Schleife



  • Hallo Gemeinde

    Ich habe ein Problem mit einer Schleife.
    Ich würde gerne folgende Schleife

    #include "stdafx.h"
    
    void main()
    
    {
    	int i,j,a[2][2];
    
    	for( int i=0; i<2; i++ )
    	{
    		for(j=0; j<2; j++)
    		{
    		a[i][j] = 2*i+j;
    		}
    }
    	for( i=0; i<2; i++ )
    	{
    		for( int j=0; j<2; j++ )
    		{
    		printf( "%d " , a[i][j] );
    		}
    	}
    }
    

    welche 0 1 2 3 ausgibt so umschreiben dass Sie

    2 1
    4 3

    ausgibt.

    Hier mein Ansatz

    #include "stdafx.h"
    
    void main()
    
    {
    	int a[2][2];
    	int i,j;
    
    	for(i=2; i<5; i=i+2)
    	{
    		for(j=1; j<3; j++ )
    		{
    			a[i][j] = i-j;
    		}
    	}
    
    	for(i=0; i<2; i++)
    	{
    		for(j=0; j<2; j++ )
    		{
    			printf( "%d " , a[i][j] );
    		}
    		printf("\n");
    	}
    }
    

    Da kommen allerdigs Zahlen jenseits von gut und böse raus. Bin über jede Hilfe dankbar.

    Gruß martin



  • for(i=2; i<5; i=i+2)
        {
            for(j=1; j<3; j++ )
            {
                a[i][j] = i-j;
            }
        }
    

    Hier zählst du bei i ab 2 und bei j ab 1, verwendest sie aber so als Indizes für a. Dort musst du dann entsprechend mit anderen Werten arbeiten.

    for(i=0; i<2; i=i+2)
        {
            for(j=0; j<2; j++ )
            {
                a[i][j] = (i*2+2)-j-1;
            }
        }
    


  • Hallo Fellhuhn

    Ich muss die schleife doch runterzählen
    Die ausgabe sollte

    2 1
    4 3

    sein.

    Wenn ich

    #include "stdafx.h"
    
    void main()
    
    {
    	int a[2][2],i,j;
    
    	for(i=0; i<2; i=i+2)
        {
            for(j=0; j<2; j++)
            {
                a[i][j] = (i*2+2)-j-1;
            }
        } 	
    
    	for(i=0; i<2; i++)
    	{
    		for(j=0; j<2; j++ )
    		{
    			printf( "%d " , a[i][j] );
    		}
    		printf("\n");
    	}
    }
    

    eingebe bekomme ich

    1 0
    und zwei richtig hohe zahlen...

    Gruß



  • In der äußeren Schleife erhöhst du i in jedem Schritt um 2, dh du bist nach dem ersten Durchlauf schon außerhalb des arrays.
    Entweder du teilst i bevor du es als Index benutzt durch zwei oder du erhöhst i nur um eins und schreibst bei deiner Zuzweisung 2*i statt i.



  • hallo crt

    kann dir leider nicht ganz folgen. Ich starte doch bei 0 für den ersten und erhöhe auf 2 für den zweiten durchlauf. passt doch... 😞

    gruß martin



  • crt32 hat schon Recht. Bereits beim 2. Durchgang bekommst du eine IndexOutOfRangeException.
    Du reservierst zwar so den Speicher "int a[2]", d.h. aber nicht das du auch wieder mit "a[2] = 5" drauf zugreifen kannst, da C++ bei 0 anfängt zu zählen und du somit nur "a[0]" oder "a[1]" nutzen kannst.



  • Hi Freaky

    Heißt das also das ich mit meiner Schleife nur bis i=2 gehen kann und
    um an das passende Ergebnis zu kommen mit der Schleifenvariablen tricksen muß?

    Puh hab echt Probleme mit Arrays merke ich gerade...

    Gruß Martin



  • Eig. dürftest du nur bis i = 1.



  • Jetzt bin ich total verwirrt... Das die Felder bei [0][0] anfangen ist mir ja soweit bewußt, aber was hat das mit meinen 2 schleifendurchlaufen zu tun. Es ist ja eine 2x2 matrix, so dass ich diese doch brauche.



  • Mit der Schleifenvariablen komme ich hin. Aber mit dem Feld nicht. Auch wenn ich es erweiter auf 3x3 hauts nicht hin.

    #include "stdafx.h"
    
    void main()
    
    {
        int a[3][3],i,j;
    
        for(i=0; i<=2; i=i+2)
        {
            for(j=0; j<2; j++)
            {
                a[i][j] = i+2-j;
            }
        }    
    
        for(i=0; i<2; i++)
        {
            for(j=0; j<2; j++ )
            {
                printf( "%d " , a[i][j] );
            }
            printf("\n");
        }
    }
    

    Was mach ich nur falsch? Ich weiß echt nicht wie ich die variable auf ein 2x2 feld sonst anpassen könnte.

    Gruß Martin



  • Kann mir niemand weiterhelfen?


Anmelden zum Antworten