KGÜ #3 Frage zu 3.P.b

Moderator: Moderatoren

Antworten
Benutzeravatar
beafraid88
Beiträge: 99
Registriert: Sa 25. Okt 2008, 17:34
Wohnort: Aachen/Düsseldorf/Mönchengladbach

KGÜ #3 Frage zu 3.P.b

Beitrag von beafraid88 » Fr 3. Dez 2010, 01:25

Hallo Leute,

könnt ihr mir vllt. sagen,warum im Codeausschnitt für die Transpornierung der Matrix der erste Zähler i bei i=1 anfängt und nicht bei i=0?
Eigentlich müsste man auch bei i=0 anfangen können zu zählen,da ja dann für i=0 und j=0 : A[j]<--> A[j] entspricht.

for(i = 1; i <= M - 1; i++)
{
for(j = 0; j < i; j++)
{
tmp = A[j];
A[j] = A[j];
A[j] = tmp;
}
}

Benutzeravatar
Daniel Rüschen
Beiträge: 152
Registriert: Mi 16. Apr 2008, 17:37
Kontaktdaten:

Re: KGÜ #3 Frage zu 3.P.b

Beitrag von Daniel Rüschen » Fr 3. Dez 2010, 15:51

Du könntest die äußere Schleife auch bei i = 0 anfangen lassen, allerdings würde die innere Schleife durch die Bedingung j < i sowieso übersprungen werden, also kannst du auch gleich bei i = 1 anfangen ;)

Darkmaster
Beiträge: 501
Registriert: Do 19. Jun 2008, 12:12

Re: KGÜ #3 Frage zu 3.P.b

Beitrag von Darkmaster » Fr 3. Dez 2010, 19:50

weil die diagonale nach dem transponieren so aussieht wie vorher

Benutzeravatar
beafraid88
Beiträge: 99
Registriert: Sa 25. Okt 2008, 17:34
Wohnort: Aachen/Düsseldorf/Mönchengladbach

Re: KGÜ #3 Frage zu 3.P.b

Beitrag von beafraid88 » Di 14. Dez 2010, 23:24

Daniel Rüschen hat geschrieben:Du könntest die äußere Schleife auch bei i = 0 anfangen lassen, allerdings würde die innere Schleife durch die Bedingung j < i sowieso übersprungen werden, also kannst du auch gleich bei i = 1 anfangen ;)
Hmm ...das ist mir ja bewusst :)

Aber iwie gibt er bei mir dann in der ersten Spalte ab der zweiten Zeile iwelche Float-Werte zurück(teils auch negative).


Kilian

bob10
Beiträge: 414
Registriert: So 1. Feb 2009, 19:34

Re: KGÜ #3 Frage zu 3.P.b

Beitrag von bob10 » Mi 15. Dez 2010, 10:01

Poste doch mal den ganze Code.

Benutzeravatar
Daniel Rüschen
Beiträge: 152
Registriert: Mi 16. Apr 2008, 17:37
Kontaktdaten:

Re: KGÜ #3 Frage zu 3.P.b

Beitrag von Daniel Rüschen » Mi 15. Dez 2010, 20:50

Das hört sich nach falsch interpretierten Werten an, benutz in deinem printf mal den Platzhalter %i statt %f.

Benutzeravatar
beafraid88
Beiträge: 99
Registriert: Sa 25. Okt 2008, 17:34
Wohnort: Aachen/Düsseldorf/Mönchengladbach

Re: KGÜ #3 Frage zu 3.P.b

Beitrag von beafraid88 » Mo 20. Dez 2010, 00:15

Hier der Code:

#include <stdio.h>
#define M 4
#define N 4

int main()
{
int A[M][N]; /* MxN=4x4 Matrix */
int i, j;
int tmp;

A[0][0] = 1; A[0][1] = 2; A[0][2] = 3; A[0][3] = 4;
A[1][0] = 5; A[1][1] = 6; A[1][2] = 7; A[1][3] = 8;
A[2][0] = 9; A[2][1] = 10; A[2][2] = 11; A[2][3] = 12;
A[3][0] = 13; A[3][1] = 14; A[3][2] = 15; A[3][3] = 16;

printf("Folgende Matrix A soll transponiert werden:\n\n");

for(i = 0; i < M; i++)
{
printf("%d\t%d\t%d\t%d\n", A[0], A[1], A[2], A[3]);
}

/* A transponieren */
printf("\nAn der HD soll Matrix A transponiert werden: ");
for(i = 0; i < M; i++)
printf("%d ", A);

for(i = 0; i <= M ; i++)
{
for(j = 0; j < i; j++)
{
tmp = A[j];
A[j] = A[j];
A[j] = tmp;
}
}

printf("\n\n");

for(i = 0; i < M; i++)
{
printf("%d\t%d\t%d\t%d\n", A[i][0], A[i][1], A[i][2], A[i][3]);
}

printf("\n");
getchar();
return 0;
}



Also wie gesagt, wollte ich es so haben, dass die Zählschleife bei der Transpornierung nicht ab der 2. Zeile anfängt, sondern von der 1.Zeile an.



Kilian

bob10
Beiträge: 414
Registriert: So 1. Feb 2009, 19:34

Re: KGÜ #3 Frage zu 3.P.b

Beitrag von bob10 » Mo 20. Dez 2010, 10:18

Dein Fehler lag in der Transponieren-Schleife. Du fragst da die Bedingung i <= M ab, was falsch ist, da der Index nur von 0 bis M-1 gehen darf.
Ich beginne hier in der zweiten Zeile, aber ab der ersten funktioniert es auch.
Ich hab auch Deine Ausgabe mal korrigiert. Denn was machst Du, wenn N = 1000 ist? Viel Spaß beim tippen ;-)
Und so ein mehrdimensionales Array kannst du mit weniger Schreibarbeit initialisieren.
#include <stdio.h>
#define M 4
#define N 4

int main(int argc, char* argv[]) {
int A[M][N] = {
{1, 2, 3, 4},
{5, 6, 7, 8},
{9, 10, 11, 12},
{13, 14, 15, 16}
};
int i, j;
int tmp;

printf("Folgende Matrix A soll transponiert werden:\n");

for(i = 0; i < M; i++) {
for (j = 0; j < N; j++) {
printf("%d\t", A[j]);
}

printf("\n");
}

/* A transponieren */
printf("\nAn der HD soll Matrix A transponiert werden: ");
for(i = 0; i < M; i++) {
printf("%d ", A);
}

printf("\n\n");

for(i = 1; i < M ; i++) {
for(j = 0; j < i; j++) {
tmp = A[j];
A[j] = A[j];
A[j] = tmp;
}
}

for(i = 0; i < M; i++) {
for (j = 0; j < N; j++) {
printf("%d\t", A[j]);
}

printf("\n");
}

return 0;
}


Ausgabe:
Folgende Matrix A soll transponiert werden:
1 2 3 4
5 6 7 8
9 10 11 12
13 14 15 16

An der HD soll Matrix A transponiert werden: 1 6 11 16

1 5 9 13
2 6 10 14
3 7 11 15
4 8 12 16

Antworten

Zurück zu „Info I“