TypeScript

Aufgabe 1: Typannotationen für Variablen

Datei: 1-vars.ts

Ergänze den folgenden Programmcode um passende Typannotationen:

let firstName = "Joe";
let age = 42;
let married = false;

let price = 10 / 3;
let priceDisplay = price.toFixed(2);
let discountPercentage = 5;
let reducedPrice = price - price * (1 - discountPercentage / 100.0)

let fibs = [1, 1, 2, 3, 5, 8, 13, 21];
let paradiddle = [true, false, true, true, false, true, false, false];
let mix = ["Joe", 42, false, 78.8];

Aufgabe 2: Typannotationen für Funktionen

Datei: 2-funcs.ts

Ergänze die folgenden Funktionen um Typannotationen, sowohl für die Parameter- und Rückgabetypen als auch für Variablen/Konstanten innerhalb der Funktion:

function displayPretty(price, granularity, currency) {
  const rounded = Math.round((price * 1.0) / granularity) / (1.0 / granularity);
  const result = `${currency} ${rounded}`;
  return result;
}

function formatTime(seconds) {
  let remainder = seconds;
  const hours = remainder / 3600;
  remainder %= 3600;
  const minutes = remainder / 60;
  remainder %= 60;
  let text = "";
  text = `${hours.toFixed(0)}:`;
  text += `${minutes.toFixed(0)}'`;
  text += `${remainder}"`;
  return text;
}

Aufgabe 3: Temperaturen umrechnen

Datei: 3-tempconv.ts

Schreibe eine Funktion namens convertTemperature, welche zwei Parameter erwartet:

  • temperature als Zahl
  • fromUnit als String

Die Temperatur kann entweder als Fahrenheit oder Celsius angegeben werden. Beim Aufruf wird die Ausgangstemperatur angegeben:

  • fromUnit == "C": Celsius
  • fromUnit == "F": Fahrenheit

Die angegebene Temperatur soll in die jeweils andere Einheit umgerechnet werden, d.h. von Celsius nach Fahrenheit und umgekehrt. Verwende hierzu diese Formeln:

$$ F = C \times \frac{9}{5} + 32 $$ $$ C = (F -32) \times \frac{5}{9} $$

Schreibe dazu ein Programm, welches die Angaben vom Benutzer mittels prompt einliest:

let temp: string = prompt("Please enter a temperature: ")!;
let unit: string = prompt("Please enter a unit (F or C): ")!;

Das berechnete Ergebnis soll dann ausgegeben werden, z.B. folgendermassen:

32°C = 89.6°F

Aufgabe 4: Zinsrechner

Datei: 4-interests.ts

Programmiere einen Zinsrechner, der die folgenden Werte vom Benutzer via prompt entgegennimmt:

  • das Ausgangskapital $K$
  • der jährliche Zinssatz in % $p$
  • die Laufzeit in Jahren $t$

Die Zinsen sollen dabei jeweils auf das Kapitel gutgeschrieben werden, sodass es exponentiell steigt. Die Jahreszinsen $Z$ kannst du nach der folgenden Formel berechnen:

$$ Z = K \times (1 + \frac{p}{100}) $$

Nachtrag: Diese Formel berechnet das neue Kapital nach der Zinsgutschrift. Die Differenz zwischen dem neuen und dem alten Kapital ergibt dann den effektiven Zins.

Für die Eingabe $K=1000$, $p=5$ und $t=5$ soll die Ausgabe folgendermassen aussehen:

year 1: 1000.00 + 50.00 = 1050.00
year 2: 1050.00 + 52.50 = 1102.50
year 3: 1102.50 + 55.13 = 1157.63
year 4: 1157.63 + 57.88 = 1215.51
year 5: 1215.51 + 60.78 = 1276.28

Achte darauf, dass die Zahlen auf zwei Nachkommastellen genau ausgegeben, aber immer ohne Rundung weiterverrechnet werden!

Aufgabe 5: Zahlenarray

Datei: 5-numarray.ts

Schreibe ein Programm, dass mittels prompt vom Benutzer in einer Schleife Zahlen entgegennimmt, bis er einen Wert eingibt, der sich nicht in eine Zahl konvertieren lässt (Number.isNaN(x) gibt dann true zurück).

Speichere diese Zahlen in einem Array ab. Berechne dann die Summe und das arithmetische Mittel (auf zwei Nachkommastellen gerundet) dieser Zahlen und gib diese Informationen aus.

Unterteile dein Programm in die folgenden Funktionen, welche du mit Typannotationen versiehst:

  1. promptNumber: liest eine Zahl vom Benutzer ein
  2. calculateSum: summiert ein Array
  3. calculateMean: berechnet das arithmetische Mittel eines Arrays

Die Bedienung des fertigen Programms könnte folgendermassen aussehen:

Please enter a number: 5.3
Please enter a number: 6.0
Please enter a number: 3.5
Please enter a number: no
Sum: 14.8
Mean: 4.93

Aufgabe 6: Exponentialrechnung mit Reiskörnern

Datei: 6-exprice.ts

Eine Legende besagt, dass ein König den Erfinder des Schachspiels damit belohnen wollte, dass er ihm auf das erste Feld des Schachbretts ein Korn Reis gelegt habe, und diese Menge für jedes der 64 Felder verdoppeln wollte.

Schreibe ein Programm, welches die Anzahl der Reiskörner pro Feld berechnet. Dieses soll folgende Ausgabe haben:

1. +1 (total: 1)
2. +2 (total: 3)
3. +4 (total: 7)
4. +8 (total: 15)
5. +16 (total: 31)

Berechne auch, wie viele Kilogramm Reis das sind, wenn ein Reiskorn $\frac{1}{64}g$ wiegt.

Findest du eine Formel, mit welcher sich der Wert total direkt abhängig von der Nummer des Feldes berechnen lässt?