Beispiel: Multiplikation in Z(5):
Schreiben Sie ein Fortran95-Programm, welches eine zu der algebraische Struktur (M,∗) gehörende quadratische Matrix auf Assoziativität, Kommutativität und ein eventuell exitierendes Einselement hin untersucht!
Lösungshinweise
Eine Operation ∗:MxM → M
- heißt assoziativ, wenn ∀ i,j,k ∈ M gilt: (i∗j)∗k = i∗(j∗k)
- heißt kommutativ, wenn ∀ i,j ∈ M gilt: i∗j = j∗i
- besitzt ein eindeutig bestimmtes Einselement e, wenn ∀ j ∈ M gilt e∗j = j∗e = j
Die Überprüfung soll durch Funktionen realisiert werden.
Lösung
fortran Code
- PROGRAM operator_eigenschaften
- IMPLICIT NONE
- INTEGER :: n,i
- INTEGER,DIMENSION(:,:),ALLOCATABLE :: m
- write(*,*) 'Anzahl elemente n:'
- read(*,*) n
- allocate(m(0:n-1,0:n-1))
- write(*,*) 'Operationsmatrix A zeilenweise eingeben:'
- do i=0,n-1
- read(*,*) m(i,:)
- end do
- write(*,*) 'A ist Assoziativ?',assoziativ(m)
- write(*,*) 'A ist kommutativ?',kommutativ(m)
- write(*,*) 'Einselement?',einselement(m)
- deallocate(m)
- stop
- CONTAINS
- FUNCTION assoziativ(m)
- INTEGER,DIMENSION(0:,0:),INTENT(in) :: m
- LOGICAL :: assoziativ
- INTEGER :: i,j,k
- assoziativ=.true.
- aussen: do i=0,size(m,1)-1
- do j=0,size(m,1)-1
- do k=0,size(m,1)-1
- if(m(m(i,j),k) /= m(i,m(j,k))) then
- assoziativ=.false.
- EXIT aussen
- end if
- end do
- end do
- end do aussen
- END FUNCTION assoziativ
- FUNCTION kommutativ(m)
- INTEGER,DIMENSION(0:,0:),INTENT(in) :: m
- LOGICAL :: kommutativ
- INTEGER :: i,j
- kommutativ=.true.
- aussen: do i=0,size(m,1)-1
- do j=0,size(m,1)-1
- if(m(i,j) /= m(j,i)) then
- kommutativ=.false.
- EXIT aussen
- end if
- end do
- end do aussen
- END FUNCTION kommutativ
- FUNCTION einselement(m)
- INTEGER,DIMENSION(0:,0:),INTENT(in) :: m
- INTEGER :: i,j,einselement
- einselement = -1
- eins: do i=0,size(m,1)-1
- do j=0,size(m,1)-1
- if(m(i,j) /= j) then
- cycle eins
- end if
- end do
- einselement = i
- EXIT
- end do eins
- END FUNCTION einselement
- END PROGRAM operator_eigenschaften
An die Funktionien wird jeweils eine Matrix übergeben, wobei die erste Spalte/Zeile mit 0 indiziert wird. Der Rückgabewerte ist ein logischer Wert.