###################################################################################################
#                           Programmieraufgaben                                                   #  
###################################################################################################

# Einlesen von Bibliotheken -----------------------------------------------------------------------

import numpy as np
import matplotlib.pyplot as plt

rng = np.random.default_rng(1)


# Aufgabe 1 ---------------------------------------------------------------------------------------
# Programmiere eine zufaellige Zahl, die mit Wahrscheinlichkeit p = 1/2 den Wert 0 und Wahrschein-
# lichkeit 1 - p den Wert 1 annimmt. Werte Sie mit einer for-Schleife 10 mal aus.

                                 

                   
                                           
            


# Aufgabe 2 ---------------------------------------------------------------------------------------
# Programmiere eine Funktion, die fuer eine vorgegebene Pfadlaenge, die entsprechenden zufaelligen
# Schritte -1 oder 1 zurueckgibt. Werte sie fuer eine Pfadlaenge 6 und Wahr- scheinlichkeit 0.5 aus.

def zufallsschritte(pfadlaenge, wahrscheinlichkeit):
    """
    Erzeugt eine Folge zufälliger Schritte für einen eindimensionalen Zufalspfad.

    Jeder Schritt hat den Wert -1 oder +1 und wird zufällig erzeugt.

    Parameters
    ----------
    pfadlaenge : int
        Anzahl der zu erzeugenden Schritte.

    wahrscheinlichkeit : float
        Wahrscheinlichkeit für einen Schritt in positive Richtung (+1).
        Muss zwischen 0 und 1 liegen.

    Returns
    -------
    numpy.ndarray
        Eindimensionales Array der Länge `Pfadlaenge`, das die zufällig erzeugten Schritte (-1 oder +1) enthält.

    Notes
    -----
    Die Funktion verwendet den Zufallszahlengenerator `rng`.
    """
                                                                                                       

                   


                       


# Aufgabe 3 ---------------------------------------------------------------------------------------
# Programmiere eine Funktion, die fuer eine vorgegebene Pfadlaenge, zufaellige Schritte (-1, 1) mit
# der Funktion aus A2 zieht und dann den Pfad entlang der Schritte berechnet. Werte die Funktion mit
# Pfadlaenge 6 und Wahrscheinlichkeit 0.5 aus.

def zufallspfad(pfadlaenge, wahrscheinlichkeit):
    """
    Erzeugt einen eindimensionalen Zufallspfad.

    Für die angegebene Pfadlänge werden zunächst zufällige Schritte mit der Funktion `Zufallsschritte` erzeugt. Anschließend wird die Position nach jedem Schritt berechnet.

    Parameters
    ----------
    Pfadlaenge : int
        Anzahl der Schritte des Zufallspfades.

    Wahrscheinlichkeit : float
        Wahrscheinlichkeit für einen Schritt in positive Richtung (+1).

    Returns
    -------
    numpy.ndarray
        Array mit den Positionen entlang des Zufallspfades.
    """
                                                                         
                                             
                                                                    

                              


                   



# Aufgabe 4 ---------------------------------------------------------------------------------------
# Erstelle einne einfachen Plot eines Zufallspfades

                          

                          
                                                
                           
                      
                                         
              
          


# Aufgabe 5 ---------------------------------------------------------------------------------------
# Funktion n Pfade und Endpunkte speichern als Liste zurueckgeben

def endpunkte_von_zufallspfaden(n, pfadlaenge, wahrscheinlichkeit):
    """
    Erzeugt mehrfach Zufallspfade und speichert deren Endpunkte.

    Die Funktion zieht `n` unabhängige eindimensionale Zufallspfade mit der Funktion `zufallspfad` und sammelt jeweils die Endposition (den letzten Wert des Pfades) in einer Liste.

    Parameters
    ----------
    n : int
        Anzahl der zu erzeugenden Zufallspfade.

    pfadlaenge : int
        Anzahl der Schritte pro Zufallspfad.

    wahrscheinlichkeit : float
        Wahrscheinlichkeit für einen Schritt in positive Richtung (+1).

    Returns
    -------
    numpy.ndarray
           Eindimensionales Array der Länge `n`, das die Endpositionen
           aller erzeugten Zufallspfade enthält.
    """
                                      

                      
                                                          
                               

                    

                                                    


# Aufgabe 6 ---------------------------------------------------------------------------------------
# Erstelle ein Histogramm (Balkenplot) der Endpunkte

                                                                 

                                              
                         
                        
                                     
                   
          
