Forum: Compiler & IDEs Wie kann ich aus zwei Arrays eine Matrix bekommen


von Alex (Gast)


Lesenswert?

Hallo zusammmen,

ich möchte ein Matrix erstellen
int var1 [3]={2,4,6};
int var2 [3]={1,3,5}
int Var[2][3];
Var={{var1},{var2}};

ich möchte  so eine Tabelle haben.
     2     4     6
  1  1*2   1*4  1*5

  3  3*2   3*4   3*6

  5  5*2   5*4   5*6

wie kann ich sowas in eine for schleife einpacken.
for(int i =0;i<3;i++)
{
  for(int j=0;j<3;jii)

    {
       // Var[i][j]=
    }
}

alle Antwörte sind willkommen!!

von Karl H. (kbuchegg)


Lesenswert?

Alex schrieb:
> Hallo zusammmen,
>
> ich möchte ein Matrix erstellen
> int var1 [3]={2,4,6};
> int var2 [3]={1,3,5}
> int Var[2][3];
> Var={{var1},{var2}};


Fast Var muss natürlich [3][3] sein

> ich möchte  so eine Tabelle haben.
>      2     4     6
>   1  1*2   1*4  1*5
>
>   3  3*2   3*4   3*6
>
>   5  5*2   5*4   5*6
>
> wie kann ich sowas in eine for schleife einpacken.
> for(int i =0;i<3;i++)
> {
>   for(int j=0;j<3;jii)
>
>     {
>        // Var[i][j]=
>     }
> }

Guter Ansatz.
Jetzt nimmst du deine Tabelle und ergänzt noch

         0     1     2  -> i
     ------------------
   |     2     4     6
   |
 0 | 1  1*2   1*4   1*5
   |
 1 | 3  3*2   3*4   3*6
   |
 2 | 5  5*2   5*4   5*6

 |
 v

 j


Wenn du also i und j hast (mit jeweils den Werten 0, 1, 2), wie 
berechnet sich dann der Wert im Schnittpunkt?

von Alex (Gast)


Lesenswert?

so was?

 for(int i =0;i<3;i++)
> {
>   for(int j=0;j<3;jii)
>
>     {
>        Var[i][j]=var1[i]*var2[j];
>     }
> }

von Karl H. (kbuchegg)


Lesenswert?

Bingo

von Alex (Gast)


Lesenswert?

echt!!
wird so funktioniert?

von Karl H. (kbuchegg)


Lesenswert?

Alex schrieb:
> echt!!
> wird so funktioniert?

Sag du's mir!

Du bist Computer und arbeitest das Programm ab.
1
  Var1                          Var
2
  +---+---+---+                 +---+---+---+
3
  | 2 | 4 | 6 |                 |   |   |   |
4
  +---+---+---+                 +---+---+---+
5
                                |   |   |   |
6
  Var2                          +---+---+---+
7
  +---+---+---+                 |   |   |   |
8
  | 1 | 3 | 5 |                 +---+---+---+
9
  +---+---+---+
10
11
  i        j
12
  +---+    +---+
13
  |   |    |   |
14
  +---+    +---+

jetzt gehst du dein Programm durch und machst mit den Kästchen (die 
deine Variablen symbolisieren) genau das und nur das, was dir der 
Programmtext vorschreibt.

  for( i = 0; i < 3; i++ )

was passiert hier?
(i wird auf 0 gesetzt und dann wird das erste mal die Bedingung geprüft.
Also setz i auf 0
1
  Var1                          Var
2
  +---+---+---+                 +---+---+---+
3
  | 2 | 4 | 6 |                 |   |   |   |
4
  +---+---+---+                 +---+---+---+
5
                                |   |   |   |
6
  Var2                          +---+---+---+
7
  +---+---+---+                 |   |   |   |
8
  | 1 | 3 | 5 |                 +---+---+---+
9
  +---+---+---+
10
11
  i        j
12
  +---+    +---+
13
  | 0 |    |   |
14
  +---+    +---+


dann wird die Bedingung geprüft. i < 3.
Schau auf deinem Zettel mit den Variablen nach. Welchen Wert hat i? Im 
Kästchen i steht 0 drinnen. 0 ist kleiner als 3 also wird die Schleife 
betreten.

Was geschieht innerhalb der Schleife

   for( j = 0; j < 3; j++ )

Wieder j wird auf 0 gesetzt und die Bedingung geprüft

j wird auf 0 gesetzt
1
  Var1                          Var
2
  +---+---+---+                 +---+---+---+
3
  | 2 | 4 | 6 |                 |   |   |   |
4
  +---+---+---+                 +---+---+---+
5
                                |   |   |   |
6
  Var2                          +---+---+---+
7
  +---+---+---+                 |   |   |   |
8
  | 1 | 3 | 5 |                 +---+---+---+
9
  +---+---+---+
10
11
  i        j
12
  +---+    +---+
13
  | 0 |    | 0 |
14
  +---+    +---+

und die Bedingung lautet j < 3?
Schau nach: j ist 0, 0 ist kleiner als 3, also wird die Schleife 
betreten

    Var[i][j] = Var1[i] * Var2[j]

Was passiert hier?
Rechte Seite der Zuweisung

  Var1[i]

Welchen Wert hat i? Schau am Zettel nach -> 0
Was ist daher Var1[0]? Wieder nachsehen: Var1 suchen und vom Array den 
Eintrag mit dem Index 0 (der von i kommt) aufsuchen. Also gleich das 
erste Kästchen. Was steht drinnen -> 2

Was brauchst du noch auf der rechten Seite?

  Var2[j]

Was ist der Wert von j?   -> 0
Was ist also Var2[j]. Wieder am Zettel nachsehen. Var2 finden und dort 
den Eintrag mit dem Index 0   -> 1

auf der rechten Seite stand           Var1[i] * Var2[j]
Die Einzelwerte wurden bestimmt zu       2    *   1

das ausgerechnet ergibt  -> 2

damit ist die rechte Seite fertig. Links vom = steht

   Var[i][j]

i war 0, j war 0.
Also such die Variable Var auf und identifiziere das Feld am 
Schnittpunkt von erster Zeile und erster Spalte. Und dort schreibst du 
das Rechenergebnis rein.
1
  Var1                          Var
2
  +---+---+---+                 +---+---+---+
3
  | 2 | 4 | 6 |                 | 2 |   |   |
4
  +---+---+---+                 +---+---+---+
5
                                |   |   |   |
6
  Var2                          +---+---+---+
7
  +---+---+---+                 |   |   |   |
8
  | 1 | 3 | 5 |                 +---+---+---+
9
  +---+---+---+
10
11
  i        j
12
  +---+    +---+
13
  | 0 |    | 0 |
14
  +---+    +---+

damit ist die innere Schleife erst mal am Ende angelangt, es wird vom 
for das Inkrement ausgeführt:  j++

also: j aufsuchen, wert holen, der ist 0, den erhöhst du um 1, das 
Ergebnis ist also 1, und den schreibst du zurück nach j
1
  Var1                          Var
2
  +---+---+---+                 +---+---+---+
3
  | 2 | 4 | 6 |                 | 2 |   |   |
4
  +---+---+---+                 +---+---+---+
5
                                |   |   |   |
6
  Var2                          +---+---+---+
7
  +---+---+---+                 |   |   |   |
8
  | 1 | 3 | 5 |                 +---+---+---+
9
  +---+---+---+
10
11
  i        j
12
  +---+    +---+
13
  | 0 |    | 1 |
14
  +---+    +---+

Die for-Schleife geht wieder nach oben und es wird die bedingung geprüft

   j < 3

j - ablesen vom Zettel - hat den Wert 1. 1 ist kleiner als 3. Ja, die 
Schleife wird erneut ausgeführt.

   Var[i][j] = Var1[i] * Var2[j]

  rechts vom = steht
    Var1[i] * Var2[j]

um das zu berechnen brauchen wir also mal Var1[i]. i war 0, also das 
erste Feld von Var1 aufsuchen, da steht 2 drinnen.

j hat den Wert 1, also das zweite Feld in Var2 aufsuchen. Da steht 3 
drinnen.

Also wird gerechnet  2 * 3

Und das wird zugewiesen an Var[i][j]

i war 0, j war 1
also suchst du den SChnittpunkt der ersten Zeile mit der 2ten Spalte und 
schreibst dort das Rechenergebnis rein
1
  Var1                          Var
2
  +---+---+---+                 +---+---+---+
3
  | 2 | 4 | 6 |                 | 2 | 6 |   |
4
  +---+---+---+                 +---+---+---+
5
                                |   |   |   |
6
  Var2                          +---+---+---+
7
  +---+---+---+                 |   |   |   |
8
  | 1 | 3 | 5 |                 +---+---+---+
9
  +---+---+---+
10
11
  i        j
12
  +---+    +---+
13
  | 0 |    | 1 |
14
  +---+    +---+


damit ist die for-Schleife unten angelangt. Das Inkrement wird 
ausgeführt, welche ist: j++
also erhöhst du j um 1 und ab gehts an den Anfang der Schleife, wo die 
bedingung geprüft wird


etc. etc. etc.
Du machst genau das und nur das, was im Programmtext steht. Auf deinem 
Zettel sind die Kästchen mit Variablen. Wenn eine Variable im Programm 
gelesen wird, dann liest du den Wert aus dem Kästchen ab, wenn im 
Programm an eine Variable zugewiesen wird, dann radierst du den Wert aus 
und schreibst den neuen hinein.
Ganz einfach.
Was anderes macht dein Computer auch nicht. Nur schneller.

von Alex (Gast)


Lesenswert?

ouahh,
danke schon für die Erklärung.Jetzt ist mir klar

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
Noch kein Account? Hier anmelden.