symmetrische Matrix < C/C++ < Programmiersprachen < Praxis < Informatik < Vorhilfe
|
Aufgabe | Eine Matrix A in R nxn ist symmetrisch, falls Ajk=Akj für alle j,k von 1....n gilt. Schreiben Sie eine Funktion issymmetric, die eine Matrix A auf Symmetrie überprüft(Rückgabewert 1 bei Symmetrie und 0 bei Nicht-Symmetrie). Schreiben Sie ein aufrufendes Hauptprogramm, in dem A eingelesen wird und ausgegeben wird, ob A symmetrisch ist oder nicht. Speichern Sie die Matrix spaltenweise. Die Dimension n in N der Matrix soll eine Konstante im Hauptprogramm, aber ein Parameter der Funktion issymmetric sein. |
1: | #include <stdio.h>
| 2: | #define N 3
| 3: |
| 4: | int issymmetric(double A[],int n)
| 5: | {
| 6: | int j,k;
| 7: | double tmp;
| 8: |
| 9: | for(j=0;j<n;++j) for(k=j+1;k<n;++k)
| 10: | tmp=A[j+k*n];
| 11: | A[j+k*n]=A[k+j*n];
| 12: | A[k+j*n]=tmp;
| 13: |
| 14: | for(j=0;j<n;++j) for(k=j+1;k<n;++k)
| 15: | { if(A[j+k*n]!=A[k+j*n])
| 16: | return 0;
| 17: | else
| 18: | return 1;
| 19: | }
| 20: |
| 21: | main()
| 22: | {
| 23: | int j,k,n;
| 24: | double A[N*N];
| 25: |
| 26: | for(j=0;j<N;++j) for(k=j+1;k<N;++k)
| 27: | { printf("A(%d %d)",j,k);
| 28: | scanf("%lf",&A[j+k*n] ); }
| 29: |
| 30: | printf("sym=%d\n",issymmetric(A,n));
| 31: | } |
Ich grüble schon ewig.
Ich habe diese Frage auch in folgenden Foren auf anderen Internetseiten gestellt:
https://tuwis.tuwien.ac.at/zope/_ZopeId/52601658A3X5y91I9UQ/tpp/trusted/student/forum/dispMsg?num=101275&sem=2008S&msgid=439233&sort=thread
|
|
|
|
Status: |
(Antwort) fertig | Datum: | 16:48 Fr 23.05.2008 | Autor: | Gilga |
Speichern Sie die Matrix spaltenweise:
Bestimmt nicht alles in einem Vektor speichern!
double A[N][N]; verwenden und spaltenweise einlesen!
26: for(j=0;j<N;++j) for(k=j+1;k<N;++k)
Netter Versuch: mit dieser Schleife kann man nur folgende Elemente der Matrix speichern: (=>nur brauchbar wenn man eine symmetrische MAtrix einlesen möchte). Hier muss man aber auf Symmetrie überprüfen.
Schreibe mal deine Schleifen um und verwende zum speichern
Bedenke Ajk=Akj für alle j,k von 1....n
X X X X X
X X X X
X X X
X X
X
|
|
|
|