diff --git a/Sonderuebung/WiSe24-25/SU06_2024_11_26_Module_Inteface_ADT/02_teilnehmerverzeichnis.f95 b/Sonderuebung/WiSe24-25/SU06_2024_11_26_Module_Inteface_ADT/02_teilnehmerverzeichnis.f95
new file mode 100644
index 0000000000000000000000000000000000000000..a3fc93bd82231662dc0deb7bf58a325ef560085b
--- /dev/null
+++ b/Sonderuebung/WiSe24-25/SU06_2024_11_26_Module_Inteface_ADT/02_teilnehmerverzeichnis.f95
@@ -0,0 +1,112 @@
+module teilnehmer
+    implicit none
+    private
+    public :: student, PUT, vgl_studiendauer, vgl_name, name
+
+    TYPE student
+        CHARACTER (len=30) :: vname
+        CHARACTER (len=30) :: nname
+        INTEGER :: alter
+        INTEGER :: semester
+    END TYPE
+
+    interface PUT
+        module procedure PUT
+    end interface
+    
+ contains
+
+    function name(person)
+        type(student), intent(in) :: person
+        character (len=60) :: name
+    
+        name = trim(person%vname)//" "//trim(person%nname)
+    end function name
+
+
+    subroutine PUT(person)
+        type(student), intent(in) :: person
+
+        ! & als Klebelasche, da Zeile sonst zu lang (>131 Zeichen)
+        write(*,*) trim(name(person)), ", ", person%alter, " Jahre, ist Student im ",&
+            & person%semester, ". Semester."
+    end subroutine PUT
+
+
+    function vgl_studiendauer(p1, p2) result(kleiner)
+        ! vergleich auf strikt kleiner
+        type(student), intent(in) :: p1, p2
+        logical :: kleiner
+    
+        kleiner = p1%semester < p2%semester
+    end function vgl_studiendauer
+
+
+    function vgl_name(p1, p2) result(kleiner)
+        ! vergleich auf strikt kleiner
+        type(student), intent(in) :: p1, p2
+        logical :: kleiner
+    
+        kleiner = .false.
+
+        ! vergleiche nachname
+        if (p1%nname < p2%nname) then
+            kleiner = .true.
+        elseif (p1%nname == p2%nname) then
+            !vergleiche vorname
+            if (p1%vname < p2%vname) kleiner = .true.
+        end if
+
+    end function vgl_name
+
+end module teilnehmer
+
+
+
+program teilnehmerverzeichnis
+    use teilnehmer
+    implicit none
+
+    type(student) :: p1, p2
+
+    write(*,*) "Gebe den Vornamen, Nachnamen, das Alter und Semster von Student 1 an."
+    read(*,*) p1
+    ! alternativ funktioniert auch:
+    ! read(*,*) p1%vname, p1%nname, p1%alter, p1%semester
+    ! dies ist insbesondere nützlich, wenn die Komponenten nicht in Speicherreihenfolge eingelesen werden
+
+    CALL PUT(p1)
+    write(*,*) ! Leerzeile im Terminal
+
+    write(*,*) "Gebe den Vornamen, Nachnamen, das Alter und Semster von Student 2 an."
+    read(*,*) p2
+
+    CALL PUT(p2)
+    write(*,*) ! Leerzeile im Terminal
+
+
+    ! vergleich studiendauer
+    if (vgl_studiendauer(p1, p2)) then ! studiendauer p1 < studiendauer p2
+        write(*,*) trim(name(p2)), " studiert schon laenger als ", trim(name(p2))
+
+    elseif (vgl_studiendauer(p2, p1)) then ! studiendauer p1 < studiendauer p2
+        write(*,*) trim(name(p1)), " studiert schon laenger als ", trim(name(p2))
+
+    else ! studiendauer p1 == studiendauer p2
+        write(*,*) trim(name(p1)), " und ", trim(name(p2)), " studieren gleich lang."
+
+    end if
+
+
+    ! vergleich name
+    if (vgl_name(p1, p2)) then ! name p1 < name p2
+        write(*,*) trim(name(p1)), " ist lexikalisch vor ", trim(name(p2))
+
+    elseif (vgl_name(p2, p1)) then ! name p2 < name p1
+        write(*,*) trim(name(p1)), " ist lexikalisch nach ", trim(name(p2))
+
+    else ! name p1 == name p2
+        write(*,*) trim(name(p1)), " und ", trim(name(p2)), " haben den gleichen Namen."
+    end if
+    
+end program teilnehmerverzeichnis
\ No newline at end of file