Funktionen
Erstelle ein neues Verzeichnis functions, initialisiere darin ein Git-Repository und halte die C-Quellcodedateien mittels git add und git commit im Repository fest.
Schreibe zu jeder Funktion auch ein Hauptprogramm, welches die Funktion aufruft. Die Benutzereingaben des Programms sollen an die Funktion weitergegeben werden:
Aufgabe 1: Tage, Stunden, Minuten, Sekunden
Schreibe eine Funktion void dhms(int seconds), welche eine Anzahl Sekunden erwartet, diese in Tage, Stunden, Minuten und Sekunden umrechnet und als eine Zeichenkette der folgenden Form ausgibt:
$ ./dhms 3600
1h
$ ./dhms 300
5m
$ ./dhms 4529
1h15m29s
$ ./dhms 86430
1d30sEs sollen immer nur die relevanten Angaben (!= 0) ausgegeben werden.
Aufgabe 2: Rock, Paper, Scissors
Schreibe eine Funktion int rock_paper_scissors(char a, char b), welche die Zeichen 'R' (Rock), 'P' (Paper), 'S' (Scissors) gemäss den Regeln von Rock, Paper, Scissors (Schere, Stein, Papier) folgendes zurückgibt:
-1, wennabschlägt+1, wennbaschlägt0, wennaundbden gleichen Spielzug machen (unentschieden)-2, wennaeinen ungültigen Spielzug macht+2, wennbeinen ungültigen Spielzug macht
$ ./rock_paper_scissors R P
1
$ ./rock_paper_scissors S P
-1
$ ./rock_paper_scissors R R
0
$ ./rock_paper_scissors x P
-2
$ ./rock_paper_scissors P y
2Aufgabe 3: Wörter sortieren
Schreibe eine Funktion int before(char left[], char right[]), welche zwei Zeichenketten entgegennimmt und sie zeichenweise alphabetisch mit dem <-Operator vergleicht. Das Programm soll folgendes zurückgeben:
-1, wennleftvorrightkommt+1, wennleftnachrightkommt0, wenn die Zeichenketten identisch sind
Die Funktion bricht beim ersten Unterschied ab. Beispiel:
| 0 | 1 | 2 | 3 | 4 |
|---|---|---|---|---|
| ’s' | ‘u’ | ‘g’ | ‘u’ | ’s' |
| ’s' | ‘u’ | ‘g’ | ’e' | ‘r’ |
= | = | = | > |
Ein längeres Wort wird nach einem kürzeren Wort einsortiert, es gilt z.B. "Baumhaus" > "Baum".
$ ./before abba baba
-1
$ ./before abracadabra abbacadabba
1
$ ./before foo foo
0Tipp: Die Länge einer Zeichenkette erfährst du über strlen aus string.h.
Aufgabe 4: Minimum, Maximum, Mean
Schreibe die folgenden Funktionen:
float min(float numbers[], int n): gibt die kleinste Zahl unternumberszurückfloat max(float numbers[], int n): gibt die grösste Zahl unternumberszurückfloat sum(float numbers[], int n): gibt die Summe der Zahlennumberszurückfloat mean(float numbers[], int n): gibt das arithmetische Mittel vonnumberszurück
Die Funktion erwartet jeweils ein Array an float-Werten und eine Zahl n, welche die Länge des Arrays bezeichnet.
Die Funktion mean soll den Durchschnitt mithilfe der Funktion sum berechnen.
./min-max-mean 4 6 12 9 3
min: 3
max: 12
sum: 34
mean: 6.8Tipp: Lege zuerst in main ein genügend grosses Zahlenarray an, z.B. float numbers[1000]. Konvertiere die Kommandozeilenargumente in argv nacheinander mit atof zu Fliesskommazahlen und lege sie in numbers ab.
Aufgabe 5: Zahlenreihen
Schreibe eine Funktion namens series mit der Typsignatur void (short, short, short) mit folgenden Parametern:
- der ersten Zahl einer Zahlenreihe
- der zweiten Zahl einer Zahlenreihe
- der gewünschten Länge der Zahlenreihe
Die Funktion gibt anschliessend die Zahlenreihe aus:
./series 2 4 10
2
4
6
8
10
12
14
16
18
20Tipp: Die Schrittweite erfährst du, wenn du von der ersten Zahl die zweite subtrahierst.
Aufgabe 6: Body-Mass-Index
Schreibe eine Funktion bmi mit der Typsignatur float(float, float), welche den Body-Mass-Index anhand von Körpergrösse in cm und Körpergewicht in kg anhand der folgenden Formel berechnet und zurückgibt:
Schreibe dazu ein C-Programm analog zu Verzweigungen: Aufgabe 4, welches die Funktion bmi verwendet.
Aufgabe 7: FizzBuzz
Das Spiel FizzBuzz wird in einer Runde von Leuten gespielt und läuft nach folgenden Regeln ab:
- Die erste Person fängt bei 1 an zu zählen und spricht diese Zahl aus.
- Die zweite Person zählt weiter auf 2 und spricht diese Zahl ebenfalls aus.
- Bei Zahlen, die restlos durch drei teilbar sind, soll nicht die Zahl, sondern “Fizz” ausgesprochen werden.
- Bei Zahlen, die restlos durch fünf teilbar sind, soll anstelle der Zahl “Buzz” ausgesprochen werden.
- Bei Zahlen, die restlos durch drei und fünf teilbar sind, soll anstelle der Zahl “FizzBuzz” ausgesprochen werden.
Schreibe eine Funktion void fizzbuzz(short number), welche für jede Zahl die passende Zeichenkette ausgibt. Schreibe dazu ein Programm namens fizzbuzz.c, welches die Obergrenze der Zahl entgegennimmt und entsprechend viele Runden durchspielt.
$./fizzbuzz 16
1
2
Fizz
4
Buzz
Fizz
7
8
Fizz
Buzz
11
Fizz
13
14
FizzBuzz
16Aufgabe 8: 99 Bottles of Beer
Schreibe eine Funktion short beer_stanza(short), welche eine Strophe für den Song 99 Bottles of Beer anhand des übergebenen Parameters ausgibt und den Parameter um 1 reduziert zurückgibt.
Die Strophe hat folgende Form, wobei n durch die tatsächliche Anzahl Bierflaschen zu ersetzen ist:
nbottles of beer on the wall,nbottles of beer.Take one down and pass it around,
n-1bottles of beer on the wall.
Schreibe ein Programm namens bottles-of-beer.c, welches den ganzen Song folgendermassen ausgibt:
./bottles-of-beer 99
99 bottles of beer on the wall, 99 bottles of beer.
Take one down and pass it around, 98 bottles of beer on the wall.
98 bottles of beer on the wall, 98 bottles of beer.
Take one down and pass it around, 97 bottles of beer on the wall.
[Strophen von 97 bis 2]
1 bottle of beer on the wall, 1 bottle of beer.
Take one down and pass it around, no more bottles of beer on the wall.
No more bottles of beer on the wall, no more bottles of beer.
Go to the store and buy some more, 99 bottles of beer on the wall.