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