Skip to content
Snippets Groups Projects
Commit cbd29fa8 authored by dali662d's avatar dali662d
Browse files

Upload New File

parent 35297195
No related merge requests found
module mat_rechnen
implicit none
private
public :: einlesen, spur, orthogonal, positivteil, ausgabe
contains
subroutine einlesen(A)
integer, dimension(:,:), intent(out) :: A ! rueckgabewert
integer :: i
write(*,*) "Gebe die Eintraege der Matrix zeilenweise ein."
do i = 1, size(A, 1)
read(*,*) A(i,:)
end do
! Alternativ :
! do i = 1, size(A,1) ! Zeilen
! write(*,*) "Zeile", i, ", Eintragsweise"
! do j = 1, size(A, 2) ! Spalten
! read(*,*) A(i,j)
! end do
! end do
end subroutine einlesen
function spur(A)
integer, dimension(:,:), intent(in) :: A
integer :: spur ! rueckgabewert
integer :: i
spur = 0
do i = 1, size(A,1)
spur = spur + A(i,i)
end do
end function spur
function orthogonal(A)
integer, dimension(:,:), intent(in) :: A
logical :: orthogonal ! rueckgabewert
integer, dimension(size(A,1), size(A,1)) :: I
integer :: j
! Einheitsmatrix anlegen
I = 0
do j = 1, size(A,1)
I(j,j) = 1
end do
orthogonal = all( matmul(A, transpose(A)) == I )
end function orthogonal
function positivteil(A)
integer, dimension(:,:), intent(in) :: A
integer, dimension(size(A,1), size(A,1)) :: positivteil ! rueckgabewert
integer :: i, j
do i = 1, size(A,1)
do j = 1, size(A,1)
if ( A(i,j) > 0 ) then
positivteil(i,j) = A(i,j)
else ! A(i,j) <= 0
positivteil(i,j) = 0
end if
end do
end do
end function positivteil
subroutine ausgabe(A)
integer, dimension(:,:), intent(in) :: A
integer :: i
do i = 1, size(A,1)
write(*,*) A(i,:)
end do
end subroutine ausgabe
end module mat_rechnen
program matrizen
use mat_rechnen
implicit none
integer, allocatable, dimension(:,:) :: A
integer :: n
! Einlesen Dimension Matrix
write(*,*) "Wie gross soll die Matrix sein?"
do
read(*,*) n
if (n > 0) exit
write(*,*) "Fehler: n <= 0! Erneute Eingabe."
end do
! Allokieren der Matrix als nxn-Matrix
allocate(A(n,n))
call einlesen(A)
write(*,*) "Die Spur der Matrix ist ", spur(A)
if (orthogonal(A)) then
write(*,*) "Die Matrix ist orthogonal."
else
write(*,*) "Die Matrix ist nicht orthogonal."
end if
write(*,*) "Der Positivteil der Matrix ist :"
call ausgabe(positivteil(A))
! Deallokieren nicht vergessen
deallocate(A)
end program matrizen
\ No newline at end of file
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment