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

Upload New File

parent 35297195
Branches master
No related tags found
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.
Finish editing this message first!
Please register or to comment