Umweltsystemmodellierung (Subject) / Termin 2 Tutoratsaufgaben (Lesson)
There are 4 cards in this lesson
Termin 2 Tutoratsaufgaben
This lesson was created by Ak123.
- 1. Schreiben Sie eine R-Funktion, die eine Temperatur x von Grad Celsius in Fahrenheit umrechnet. Probieren Sie Ihre Funktion mit x=15°C und x=32°C aus. Hinweis: [Temperatur in °F] = 9/5*[Temperatur in °C]+32 celsiusf <- function(x){fahrenheit <- (9/5)*x+32return(fahrenheit)} celsiusf(15)celsiusf(32)
- 2. Schreiben Sie eine Funktion, die als Argument eine Zahl x bekommt. Wenn die Zahl gerade ist, soll die Funktion den Text „Dies ist eine gerade Zahl“ ausgeben, bei einer ungeraden Zahl „Dies ist eine ungerade Zahl“. Probieren Sie Ihre Funktion mit x=237 und x=58 aus. Hinweis: Benutzen Sie den Modulo-Operator (in R ein doppeltes Prozentzeichen: %%; vergleiche Termin 1), um herauszufinden, ob die Zahl gerade oder ungerade ist. ungerade <- function(x){if ((x %% 2) == 0) {return("Dies ist eine gerade Zahl")} else {return("Dies ist eine ungerade Zahl")}} ungerade(237)ungerade(58)
- 3. Die Fibonacci-Folge ist so definiert: Das erste Element der Fibonacci-Folge ist 0, das zweite 1, und alle weiteren Elemente sind jeweils die Summe der beiden vorhergehenden Elemente. a) Schreiben Sie R-Code, der die ersten 5 Elemente der Fibonacci-Folge ausgibt. (ohne die Funktion cumsum() zu verwenden!) b) Machen Sie dann aus Ihrem Code eine Funktion, die für eine beliebige Zahl x die ersten x Elemente der Fibonacci-Folge berechnet und das Ergebnis ausgibt. Lassen Sie sich von dieser Funktion die ersten 32 Elemente der Fibonacci-Folge anzeigen. Hinweis: Schauen Sie beim letzten Termin nach, wie man einen „leeren“ Vektor vorgegebener Länge anlegt. Über Indizierung können in so einen vor-angelegten Vektor in späteren Schritten Werte eingetragen werden. Noch ein Hinweis: Es liegt nahe, eine for-Schleife zu verwenden, bei der der Zähler i den Vektor 3:x durchläuft. a) Code für x=5:x <- 5fib <- numeric(x) # Lege einen Vektor der Länge x mit lauter Nullen anfib[1] <- 0 # An der ersten Stelle steht eine 0fib[2] <- 1 # An der zweiten Stelle eine 1for (i in 3:x) {fib[i] <- fib[i-1]+fib[i-2] # An der i-ten Stelle steht die Summe der beiden vorherigen Elemente des Vektors}fib b) Und nun als Funktion für beliebige Werte von x:fibonacci <- function(x){fib <- numeric(x)fib[1] <- 0fib[2] <- 1for (i in 3:x) fib[i] <- fib[i-1]+fib[i-2]return(fib)} fibonacci(32)
- 4. Sortierung von Zahlen „von Hand“ programmiert: x a) Schreiben Sie R-Code, der drei Zahlen x1, x2 und x3 von der kleinsten zur größten sortiert und einen Vektor mit den sortierten Zahlen ausgibt. Dabei dürfen Sie nur if … else … - Konstruktionen benutzen (also keine Abkürzung über sort(), min() oder max()!) Probieren Sie mit mehreren Werten von x1, x2 und x3 aus, ob ihr Code funktioniert. x b) Machen Sie dann eine Funktion daraus, die einen Vektor x mit den Elementen x1, x2 und x3 bekommt und den Vektor sortiert zurückgibt. Hinweis: Hier ist etwas Getüftel und konzentriertes Denken gefragt. Falls Sie nicht zu einer Lösung kommen, machen Sie dasselbe zumindest mit zwei Zahlen x1 und x2. a) Code für eine Kombination von x1, x2 und x3:x1 <- 5x2 <- 2x3 <- 7if (x1<x2) {if (x3>x2) {sortvec <- c(x1,x2,x3)} else {if (x3<x1) {sortvec <- c(x3,x1,x2)} else {sortvec <- c(x1,x3,x2)}}} else {if (x3>x1) {sortvec <- c(x2,x1,x3)} else {if (x3>x2) {sortvec <- c(x2,x3,x1)} else {sortvec <- c(x3,x2,x1)}}}sortvec b) Das ganze als Funktion:numsort <- function(x){x1 <- x[1]x2 <- x[2]x3 <- x[3]if (x1<x2) {if (x3>x2) {sortvec <- c(x1,x2,x3)} else {if (x3<x1) {sortvec <- c(x3,x1,x2)} else {sortvec <- c(x1,x3,x2)}}} else {if (x3>x1) {sortvec <- c(x2,x1,x3)} else {if (x3>x2) {sortvec <- c(x2,x3,x1)} else {sortvec <- c(x3,x2,x1)}}}return(sortvec)} numsort(c(32, 3, 20))
