Direkte Berechnungen



Ähnliche Dokumente
Programmieraufgaben. 1. Hello World! Schreibe ein Programm, dass auf der Konsole den Text Hello World! ausgibt.

Programmieraufgaben. 1. Hello World! Schreibe ein Programm, dass auf der Konsole den Text Hello World! ausgibt.

Programmieren mit Python

1 Berechnung von Summen (ca = 10 Punkte)

Variablen und Datentypen

Zahlen raten. Al Sweigart, Eigene Spiele programmieren Python lernen, dpunkt.verlag, ISBN D3kjd3Di38lk323nnm

Übungszettel 2a - Python

Kapitel. Platzhalter. Was sind Platzhalter?

7. Arrays. Beim Deklarieren und Initialisieren der Liste bräuchte man oft zueinander sehr ähnlichen Code:

Vorbemerkungen. Die Programmieroberfläche des ClassPad

Grundlagen der Theoretischen Informatik: Übung 10

JavaScript. Dies ist normales HTML. Hallo Welt! Dies ist JavaScript. Wieder normales HTML.

Variablen und Datentypen

Es ist für die Lösung der Programmieraufgabe nicht nötig, den mathematischen Hintergrund zu verstehen, es kann aber beim Verständnis helfen.

Kontrollstrukturen und Logik

Programmieren in C (Übungsblatt 1)

Schritt 1. Schritt 1. Schritt 3. - Analysieren des Problems und Spezifizierung einer Lösung.

Praktikum Ingenieurinformatik. Termin 2a. Schleifen und Verzweigungen in C und mit MATLAB

Programmieren in C (Übungsblatt 1)

Kontrollstrukturen und Funktionen in C

Programmieren in C (Übungsblatt 1)

Programmieren mit dem TI-92

Übersicht Shell-Scripten

Informatik für Schüler, Foliensatz 3 Vorhandene Funktionen und Wiederholschleifen

Gruber I Neumann. CASIO fx-82 / fx-85. gut erklärt. Ausführliche Beispiele und Übungsaufgaben

Einführung in die Computerlinguistik

Tutoraufgabe 1 (Casting): Programmierung WS17/18 Übungsblatt 2 (Abgabe ) Allgemeine Hinweise:

Informatik für Schüler, Foliensatz 2 Ausdrücke, Variablen, Datentypen, Ein- und Ausgabe

Angewandte Mathematik und Programmierung

GI Vektoren

Terme, Rechengesetze, Gleichungen

2 Eine einfache Programmiersprache

Aufgabe Total Punkte

Informatik B von Adrian Neumann

2 Eine einfache Programmiersprache

2 Eine einfache Programmiersprache. Variablen. Operationen Zuweisung. Variablen

Name: Aufgaben. Arbeitsanweisung

Programmierstarthilfe SS 2010 Fakultät für Ingenieurwissenschaften und Informatik 6. Blatt Für die Woche vom bis zum 4.6.

Programmierstarthilfe SS 2009 Fakultät für Ingenieurwissenschaften und Informatik 4. Blatt Für die Woche vom bis zum 22.5.

Variablen in MATLAB. Unterschiede zur Mathematik: Symbolisches und numerisches Rechnen. Skriptdateien. for-schleifen.

Actionscript Kleine Programme Fragen & Aufgaben

Programmiergrundkurs

Programmieren mit Jython Teil 4: Selektion und Zufallszahlen

Programming 101. Carl Herrmann IPMB & DKFZ

1 Vom Problem zum Programm

Übungsblatt 1. Java Vorkurs (WS 2017)

PYTHON. 04 Funktionen II, Module

Ausgabe:

2 Programmieren in Java I noch ohne Nachbearbeitung

SFZ FN Sj. 12/13. Python 2 Grundlagen. W.Seyboldt. Python, SFZ FN, Sj 12/13

This image cannot currently be displayed. Java à Matlab. bereitgestellt von Dr. Lukas Faessler 12/4/17

Übung zu Einführung in die Informatik # 11

Java 8. Elmar Fuchs Grundlagen Programmierung. 1. Ausgabe, Oktober 2014 JAV8

Einführung in die Programmiersprache Julia Vorlesung Computerphysik Sommersemester 2018 Ralf Bulla Universität zu Köln

JAVA-Datentypen und deren Wertebereich

Linux Kommandozeile: Einfache Skripte. 1 Wiederhohlung. 2 Einfache Skripte

Kontrollfluss. man Verzweigungen und Sprünge. o bisher linear (von oben nach unten) o Für interessante Programme braucht

1 Dreiecksfläche. Für das Dreieck A( 1, 0), B(0, 2), C(1, 0) berechnet das Programm zum Beispiel2 diefläche2.0:

Übungskomplex Reelle Zahlen. Rechnen mit Gleitkommazahlen

Objektorientiertes Programmieren (Java)

1 Lineare Programme. Aufgaben: 1.1 Subtraktion. 1.2 Division. LF6 ANW LS6.3 C++-Programmierung

Ideen und Konzepte der Informatik. Programme und Algorithmen Kurt Mehlhorn

Rückgabewerte von Methoden

Programmierstarthilfe SS 2008 Fakultät für Ingenieurwissenschaften und Informatik 5. Blatt Für den 26. und

zu große Programme (Bildschirmseite!) zerlegen in (weitgehend) unabhängige Einheiten: Unterprogramme

Javakurs für Anfänger

Vorsichtige Programmierer verwenden Inkrement- Operatoren nicht in komplizierteren Ausdrücken

Einstieg in die Informatik mit Java

Kapitel 1: Informationsverarbeitung durch Programme

COBOL Grundlagen. Übungen zur Schulung

Funktionen nur wenn dann

Wirtschaftsinformatik I (Bachelor) SS 07 Prof. Gomber. Python

Einführung in die Programmierung für Computerlinguisten

Informatik für Schüler, Foliensatz 18 Rekursion

SFZ FN Sj. 12/13. Python 4 Grundlagen. W.Seyboldt. Python, SFZ FN, Sj 12/13

Informatik Algorithmen und Programme

Python Intro. Vorsemesterkurs Informatik Praktischer Teil WS2012/13. 2.Oktober Vorkurs Informatik - WS 2012/13

Nachname: Vorname: Matr.-Nr.: Punkte: 1. Aufgabe: ( / 25 Pkt.) Gegeben ist das folgende Struktogramm zur Berechnung von sin(x) mit Hilfe einer Reihe.

Struktogramme. (6.) Ermitteln Sie den Wert von a und b aus dem Struktogramm: Struktogramme S. 1/3

Gruber I Neumann CASIO FX-87DE PLUS. gut erklärt. Mit ausführlichen Beispielen und Übungsaufgaben

Dokumentation IMI Faktura

1. Umzug mit Hindernissen. Wurzeln, Satz des Pythagoras, quadratische Gleichungen, ähnliche Dreiecke, Excel

Anwendung 1: Rabatt und Skonto

Eine JAVA Einführung ... Quellcode:... COMA Übung 3. T.Bosse. A.Griewank. Vorschau JAVA Programme Sprachen Kate

Python Einführung. Monica Selva Soto. 24 März Mathematisches Institut

Mathematische Funktionen

Tag 3 Repetitorium Informatik (Java)

Inhaltsverzeichnis. Inhaltsverzeichnis

FACHHOCHSCHULE AUGSBURG Hochschule für Technik, Wirtschaft und Gestaltung

2 Eine einfache Programmiersprache

Algorithmen als systematische Vorgehensweisen zur Lösung eines formal definierten Problems

SFZPy Sj. 17/18. Python Jupyter / Spyder. SFZ 16/17 W.Seyboldt

Transkript:

Einführung Dieses Skript gibt einen möglichen Aufbau für einen Informatik-Jahreskurs zum Programmieren mit Python. Mit möglichst wenig Grundstrukturen soll die Einführung so gestaltet werden, dass im ersten Semester kurze Programme mit soweit möglich praktischem Bezug geschrieben werden.

Direkte Berechnungen 1) Die Python-Programmierumgebung Wir lernen die algorithmischen Grundstrukturen in Python kennen. Öffne dazu die sogenannte IDLE (Python GUI), wobei GUI für "Graphic User Interface" steht. Diese Umgebung wird uns unter anderem dazu dienen, die selbst geschriebenen Programme laufen zu lassen und zu testen. 2) Beispiel Eine Gruppe von 5 Personen geht ins Kino. Der Eintritt kostet CHF 14.70 pro Person. Wir schreiben dazu ein Programm. Dabei wollen wir die Anzahl Personen und den Preis pro Person eingeben können, und das Programm soll die Kosten berechnen. Öffne mit der IDLE ein neues, leeres Fenster. Tippe dann die folgenden Zeilen ein: # Kino name = input("bitte den Gruppennamen eingeben: ---> ") anzpers = int(input("wie viele Personen? ---> ")) propers = float(input("preis pro Person? ---> ")) kosten = anzpers * propers # Berechnung der Kosten print("der Kino-Besuch kostet für ",name," CHF ",kosten) Speichere dann die Datei, beispielsweise als "kino.py". Mit dem Befehl "Run Module" kannst du dein Programm laufen lassen. Wenn du keine Tippfehler gemacht hast, dann wird es laufen. Der Dialog erfolgt dann in der IDLE. 3) Grundbefehle des Programmierens 2

Direkte Berechnungen a) Der Befehl "input" verlangt vom Benutzer eine Eingabe. b) Mit "=" wird einer Variablen ein Wert zugewiesen. c) Der Befehl "int" macht aus der Eingabe eine ganze Zahl. Wenn das "int" nicht steht, dann ist der eingegebene Wert für die Anzahl Personen quasi ein Text, mit der der Computer nicht rechnen kann. Erst der Befehl "int" macht aus dem eingegebenen Text eine Zahl. "int" steht für Integer, was der englische Begriff für eine ganze Zahl ist. Solche Zahlen haben keine Nachkommastellen. (Das macht auch Sinn, denn eine Eingabe von 4.6 Personen ist wohl sinnlos.) d) Der Befehl "float" macht aus der Eingabe eine reelle Zahl. "float" funktioniert also genau gleich wie "int", die Zahl darf aber Nachkommastellen haben. e) Die Berechnung einer Variablen muss immer nach dem Schema gesuchtevariable = Berechnung erfolgen. Der Name für die Variablen besteht aus einem Wort. f) Mit "print" wird etwas ausgedruckt. Der "print"-befehl im obigen Programm besteht aus vier Teilen: zunächst kommt Text, dann die Variable für den Gruppennamen, dann wieder Text und schliesslich die Kosten. Die Teile innerhalb des "print"-befehls werden immer durch Kommas getrennt. g) Und schliesslich kann man mit dem #-Zeichen Kommentare einfügen. Alles, was innerhalb einer Zeile hinter dem # steht, gilt als Kommentar. Übungen 1) Bergbahn Eine Bergbahn berechnet pro Person Fr. 12.50. Eine Gruppe von 15 Personen will mit dieser Bahn fahren. Berechne den Tarif. Für das zugehörige Programm zu diesem Beispiel gilt: 3

Direkte Berechnungen Eingaben: der Preis pro Person sowie die Grösse der Gruppe. Ausgabe: der Tarif. 2) Zeit-Umrechnung Eingabe: 1 Stunde, 5 Minuten, 30 Sekunden Ausgabe: 3930 Sekunden Schreibe ein Programm zu dieser Beispiel-Aufgabe. 3) Werkstatt Eine Werkstatt verlangt für die Benützung einer Maschine eine Grundgebühr von 60. sowie 35. pro Stunde. Man überlege sich, welche Daten einzugeben und welche Daten zu berechnen sind und erstelle ein passendes Programm. 4) Transport Ein Kleinunternehmen stellt seinen Kunden für Transporte einen Lieferwagen und einen Lastwagen zur Verfügung. Für Transporte mit dem Lieferwagen werden Fr. 1.60 pro Kilometer verrechnet, für den Lastwagen beträgt der Tarif Fr. 2.80 pro Kilometer. Welche Gebühr hat ein Kunde zu bezahlen, wenn der Lieferwagen 85 km und der Lastwagen 120 km zurückgelegt hat? 5) Wein Ein Weinhändler verkauft Rotwein zu 18. pro Flasche, Roséwein zu 13. und Weisswein zu 12. pro Flasche. Ein Kunde bestellt (beispielsweise) 12 Flaschen Rotwein, 6 Flaschen Rosé und 24 Flaschen Weisswein. Die Eingabe beinhaltet also sechs Grössen. Ausgabe: Was kostet die Bestellung? 4

Verzweigungen 1) Programmierstrukturen Nebst den direkten Berechnungen, in welchen eine Reihe von Befehlen abgearbeitet wird, gibt es im Wesentlichen genau zwei Programmierstrukturen. Die erste ist die Verzweigung. 2) Beispiel Ein Velo-Billett kostet gleich viel wie ein Billett zum halben Preis. Wenn der Fahrpreis (mit Halbtax-Abonnement) jedoch über 12 Franken liegt, dann kauft man besser eine Velo-Tageskarte für 12 Franken. Das folgende Programm illustriert die Struktur: # Velo fahrpreis = float(input("preis mit Halbtax-Abo? ---> ")) if (fahrpreis < 12): else: print("lösen Sie ein Velo-Billett zum halben Preis.") print("lösen Sie eine Velo-Tageskarte für 12 Franken.") Speichere die Datei, beispielsweise als "velo.py" und lass das Programm laufen. 3) Bemerkungen a) Nach dem "if" kommt die Bedingung, welche getestet wird. Die Bedingung kann (aber muss nicht) in Klammern stehen. Bei komplizierteren Bedingungen können Klammern durchaus mehr Übersicht herstellen. Der Befehl wird immer mit einem Doppelpunkt abgeschlossen. b) Nach dem Doppelpunkt folgt die Einrückung automatisch. c) Wenn die Bedingung erfüllt ist, dann werden alle Befehle (der Reihe nach) ausgeführt, die eingerückt sind. Nach dem "if" sind also mehrere Befehle möglich. 5

d) Der "else"-befehl steht auf gleicher Höhe wie der "if"-befehl und wird ebenso mit einem Doppelpunkt abgeschlossen. Was anschliessend eingerückt ist, wird ausgeführt, wenn die unter dem "if"-befehl notierte Bedingung nicht erfüllt war. e) Der "else"-teil kann auch fehlen. Die folgende Version des obigen Programms zeigt das. 4) Velo zum Zweiten # Velo fahrpreis = float(input("preis mit Halbtax-Abo? ---> ")) velopreis = fahrpreis if (fahrpreis > 12): Verzweigungen velopreis = 12 # Der Velopreis wird neu berechnet. if (velopreis == 12): else: Beachte: print("lösen Sie eine Velo-Tageskarte für 12 Franken.") print("ihr Velo-Billett kostet ",velopreis," Franken.") a) Zuerst wird der Fahrpreis unter der Variablen Velopreis zwischengespeichert. Wenn der Fahrpreis mehr als 12 Franken beträgt, dann wird der Velopreis auf 12 Franken gesetzt. Hier ist kein "else" nötig. (Der deutsche Satz hat ja auch kein "und sonst...") b) Unterscheide genau: Ein "=" ist ein zuweisendes Gleichheitszeichen, womit ein Wert in einer Variablen gespeichert wird. Ein "==" ist ein vergleichendes Gleichheitszeichen, womit zwei Werte auf Gleichheit geprüft werden. Übungen 1) Bergbahn 6

Den Bestimmungen einer Bahn entnimmt man: Preis pro Person 7.50 Fr. Ab 20 Personen wird ein Gruppenrabatt von 5% gewährt. Erstelle ein Programm gemäss folgenden Angaben: Eingabe: Gruppengrösse, Einzelfahrpreis, Rabattsatz, ab wie viel Personen der Rabatt gewährt wird. Ausgabe: Tarif 2) Franchise Krankenkassen verlangen vom Patienten 10% der Arztrechnung als Selbstbehalt, jedoch mindestens 100. Fr. (Diesen Betrag nennt man Franchise) Krankenkassen bieten zudem an, die Franchise zu erhöhen (beispielsweise auf 150. pro Jahr) und senken dafür die Prämien. Erstelle ein Programm. Eingabe: Rechnungsbetrag, Franchise. Ausgabe: Selbstbehalt Zusatz Wenn die Rechnung kleiner ist als der Franchise-Betrag, kommt es günstiger, die Rechnung selber zu bezahlen. Erweitere die obige Aufgabe so, dass dieser Sonderfall auch berücksichtigt wird. 3) Portokosten Eine Möbelfirma verlangt 5% des Rechnungsbetrages als Portokosten. Wenn Ware für mindestens 1000. bestellt wurde, erfolgt die Lieferung portofrei. Überlege selber, welche Daten Eingabe- resp. Ausgabewerte sind und schreibe ein passendes Programm. 4) Rabatt Ein Geschäft gewährt Rabatt, und zwar so: Ab 1500. Einkaufspreis beträgt der Rabatt 5 %, ab 5000. sogar 12 %. Verzweigungen 7

Verzweigungen 5) Maximaler Wert Schreibe ein Programm, welches zu drei eingegebenen (verschieden grossen) Zahlen den grössten Wert bestimmt und diesen ausdruckt. Ein Dialog könnte etwa so aussehen: Eingabe der ersten Zahl: 45 Eingabe der zweiten Zahl: 42 Eingabe der dritten Zahl: 44 Die erste Zahl war die grösste und beträgt 45. Zusatz Verändere das Programm so, dass es auch dann korrekt läuft, wenn zwei (oder sogar alle drei) der eingegebenen Zahlen gleich gross sind. 8

Module 1) Bemerkung Viele Grundfunktionen sind in Python direkt vorhanden und abrufbar. Gewisse Funktionen befinden sich aber in externen Modulen und können erst verwendet werden, wenn dieses Modul aufgerufen wurde. 2) Quadratwurzel Berechne zu zwei eingegebenen Katheten eines rechtwinkligen Dreiecks die Hypotenuse. # Hypotenuse from math import * # oder: import math a = float(input("kathete a =? ---> ")) b = float(input("kathete b =? ---> ")) c = sqrt(a*a + b*b) # oder: c = math.sqrt(a*a + b*b) print("länge der Hypotenuse c = ",c) Beachte: Die Funktion sqrt(...) berechnet die Quadratwurzel einer Zahl. Diese Funktion ist im Modul math programmiert und kann erst verwendet werden, nachdem dieses Modul ins Programm importiert wurde. 3) Division mit und ohne Rest Eine Gruppe von 42 Personen macht einen Ausflug mit einer Bergbahn. Dabei kostet ein Einzelbillett 15 Franken und ein Abonnement für 12 Fahrten kostet 170 Franken. # Bergbahn gruppe = int(input("gruppengrösse? ---> ")) einzel = float(input("preis der Einzelfahrt? ---> ")) abopreis = float(input("preis für ein 12-er-Abo? ---> ")) anzabo = gruppe // 12 # Das gibt die Division ohne Rest 9

Module anzeinz = gruppe % 12 # Das gibt den Rest tarif = anzabo*abopreis + anzein*einzel print("lösen Sie ",anzabo," Abos und ",anzeinz," Einzelfahrten.") print("die Reise kostet ",tarif," Franken.") Beachte: Für dieses Programm muss man kein Modul importieren. Die ganzzahlige Division mit und ohne Rest funktioniert aber nur für "int". a // b berechnet die Division ohne Rest, a % b berechnet den entstehenden Rest. 3) Zufallszahlen Der Computer "würfelt" einmal. Du versuchst, die gewürfelte Zahl zu erraten. # Wuerfeln from random import * gewuerfelt = randint(1,6) geraten = int(input("welche Zahl wurde gewürfelt? ---> ")) if (gewuerfelt == geraten): else: print("treffer! Richtig geraten.") print("leider knapp daneben.") Beachte: Mit randint(1,6) wird eine ganze Zahl zwischen 1 und 6 (Grenzen inklusive) zufällig generiert. Für diese Funktion muss man das Modul random importieren. Es empfiehlt sich, die benötigten Module immer am Anfang des Programms zu deklarieren. Übungen 10

Module 1) Quader Wenn man die drei Seitenlängen eines Quaders eingibt, dann kann man die drei Flächendiagonalen (Längen der Diagonalen in einer Seitenfläche des Quaders) sowie die Raumdiagonale berechnen. Schreibe dazu ein Programm. 2) Wurzel ziehen Dieses (rein technische) Programm soll eine Zahl einlesen. Wenn die eingegebene Zahl positiv (oder Null) ist, dann soll die Quadratwurzel gezogen werden. Wenn die eingegebene Zahl negativ ist, dann soll eine entsprechende Fehlermeldung erfolgen. Beispiele: Eingabe: 6.25 Ausgabe: 2.5 Eingabe: 1.234 Ausgabe: Keine Quadratwurzel! 3) Bergbahn Auf einen Berg führen mehrere Bahnen Der Tarif von Bahn A beträgt pro Person 17 Fr. Der Tarif von Bahn B lautet: Einzelfahrt 18 Fr. Ab 10 Personen gibt es 10% Rabatt. Bahn C: Die Einzelfahrt kostet 19 Fr, ein Abonnement für 6 Fahrten kostet 100 Fr. Bahn D: Einzelfahrt 20 Fr. Jede 5. Person fährt gratis. Schreibe ein Programm, welches zur einzugebenden Gruppengrösse alle 4 Tarife berechnet und ausgibt. 4) Drei Würfel Drei Würfel werden miteinander geworfen. Schreibe ein Programm, welches drei Würfe simuliert und die Summe der geworfenen Zahlen ausdruckt. 5) Zufälliges Datum Für ein Spiel wollen wir ein zufälliges Datum generieren. 11

Erzeuge zwei Zufallszahlen. Die erste heisse T und soll zwischen 1 und 31 liegen, die zweite nennen wir M und sie liegt zwischen 1 und 12 (Grenzen überall inklusive). Das Programm soll dann testen, ob ein Datum mit Tag T und Monat M möglich ist. Beispiele: T = 28, M = 11 ergibt ein mögliches Datum (28. November). T = 31, M = 4 ergibt kein mögliches Datum (den 31. April gibt es nicht). Module 12

Wiederholungen 1) Schleifen Die zweite wichtige Programmierstruktur ist die Wiederholungsschleife. Dabei wird eine gewisse Folge von Befehlen ausgeführt, so lange eine Bedingung erfüllt ist. Man unterscheidet drei Arten von Wiederholungsschleifen, wobei eigentlich nur eine einzige Art nötig ist. (Die andern beiden Arten kann man als Spezialfälle dieser ersten Art betrachten.) 2) Beispiel Schreibe ein Programm, welches den Notendurchschnitt einiger einzugebender Zahlen berechnet. Dabei soll die Eingabe wiederholt werden, so lange man sinnvolle Werte eingibt. Die Wiederholung endet also, wenn man eine Zahl kleiner als 1 oder grösser als 6 eingegeben hat. Das folgende Programm illustriert die Struktur: # Noten summe = 0 # Zu Beginn ist die Summe der Noten = 0 anznoten = 0 eing = 2 # und man hat noch keine Note eingegeben. # eing muss definiert sein ("dummy"-wert) while (eing >= 1) and (eing <= 6): eing = float(input("nächste Note? ---> ")): summe = summe + eing anznoten = anznoten + 1 # Addiere die Eingabe zur Summe # Erhöhe die Anzahl der Noten schnitt = summe/anznoten print("der Durchschnitt beträgt ",schnitt,".") 3) Bemerkungen 13

a) Nach dem "while" kommt die Bedingung, welche getestet wird. Die Bedingung kann in Klammern stehen. Der Befehl wird immer mit einem Doppelpunkt abgeschlossen. b) Nach dem Doppelpunkt folgt die Einrückung automatisch. c) Wenn die Bedingung erfüllt ist, dann werden alle Befehle ausgeführt, die eingerückt wurden. d) Die Berechnung des Durchschnitts erfolgt, nachdem die Noten eingegeben wurden. 4) Dummy-Werte Die Zeile mit dem Befehl eing = 2 im obigen Programm ist nötig, damit man überhaupt einmal in die Schleife hinein kommt. Wenn dieser Befehl fehlt, dann ist das Überprüfen der Bedingung nicht möglich und es erfolgt eine Fehlermeldung. Damit das Programm also korrekt läuft, muss man den Wert von eing initialisieren. Der genaue Wert ist bedeutungslos, da er mit der ersten Eingabe ohnehin überschrieben wird. Diese Initialisierung kann man bei diesem Programm umgehen, indem man die erste Note vor der Wiederholungsschleife eingibt. Das ergibt etwa folgende Version. # Noten zum Zweiten eing = float(input("erste Note? ----> ")) Wiederholungen summe = eing anznoten = 1 # Die erste Eingabe zählt zur Summe # Nun hat man eine Note eingegeben while (eing >= 1) and (eing <= 6): eing = float(input("nächste Note? ---> ")): summe = summe + eing anznoten = anznoten + 1 # Addiere die Eingabe zur Summe # Erhöhe die Anzahl der Noten schnitt = summe/anznoten print("der Durchschnitt beträgt ",schnitt,".") 14

Wiederholungen Übungen 1) Immobilie Der Wert einer Immobilie steigt jedes Jahr um p % an. Schreibe ein Programm, welche den Zeitwert dieser Immobilie so lange berechnet, bis der Zeitwert (mehr als) doppelt so gross ist wie der heutige Anfangswert. 2) Degressive Abschreibung Ein Gegenstand hat den Wert k (dieser Wert ist Eingabe). Erstelle ein Programm, welche für die nächsten Jahre (die Anzahl Jahre ist Eingabewert) den Zeitwert dieses Gegenstands berechnet, wenn jedes Jahr p % des Werts abgeschrieben werden. (Der Abschreibungssatz p ist auch einzugeben.) Diese Art Abschreibung heisst degressive Abschreibung. 3) Lineare Abschreibung Eine Firma kauft eine Maschine (der Einkaufspreis ist einzugeben), welche innert einiger Jahre (die Anzahl Jahre ist einzugeben) linear abgeschrieben wird. Beispiel: Eingabe: 20000 (Fr. Einkaufspreis), 5 (Jahre) Ausgabe: Jahr 1: 16000. Jahr 2: 12000. Jahr 3: 8000. Jahr 4: 4000. Jahr 5: 0. 4) Zins und Zinseszins Herr Spar legt sich jedes Jahr einen festen Betrag (z.b. 800. ) auf sein Konto, welches (beispielsweise) 2.5% Zins trägt. Er tut dies so lange, bis er einen bestimmten Betrag überschreitet. Dieser Betrag ist auch einzugeben, z.b. 5000. Schreibe dazu ein Programm. 5) Warten auf die erste Sechs 15

Wie lange muss man einen Würfel werfen, bis (zum ersten Mal) eine 6 erscheint? Schreibe ein Programm, welches so lange würfelt, bis eine 6 erschienen ist. Eingabe: keine Ausgabe: alle geworfenen Zahlen und die Anzahl Würfe. 6) Würfeln Ein Würfel wird so lange geworfen, bis die Summe der erhaltenen Zahlen 100 erreicht (oder überschreitet). Bestimme mit einem Programm, wie viele Würfe dazu nötig sind. 7) Zahlen raten Der Computer "würfelt" eine Zufallszahl zwischen 1 und 6 (Grenzen inklusive). Der Spieler versucht nun, die gewürfelte Zahl zu erraten. Bestimme mit einem Programm, wie viele Versuche dazu nötig sind. 8) Fibonacci Die Folge der Fibonacci-Zahlen beginnt mit 1, 1, 2, 3, 5, 8, 13, 21,... Erstelle ein Programm, welches die ersten 25 Fibonacci-Zahlen berechnet. Wiederholungen 16

Alle Grundstrukturen 1) Bemerkung Mit den in den vorherigen vier Kapiteln gelernten Grundstrukturen kann man theoretisch jede Aufgabe lösen, die ein Programm verlangt. Selbstverständlich gibt es Verbesserungen und Möglichkeiten zur Optimierung, aber rein theoretisch sind die bis hier bekannten Grundstrukturen ausreichend. Mit dem folgenden Spiel soll gezeigt werden, wie die Grundstrukturen zusammenspielen. 2) "Black Jack" Der Computer generiert Zufallszahlen zwischen 1 und 10. Zunächst zeigt der Computer zwei Zufallszahlen und berechnet die Summe. Der Spieler darf wählen, ob der Computer noch eine Zahl generieren soll. Je näher man mit der Summe aller generierten Zufallszahlen an die Zahl 21 herankommt, ohne sie zu überschreiten, desto besser. Für dieses Spiel gelten (abweichend vom üblichen "Black Jack") folgende Regeln: Wenn man mit Summe 15 oder weniger aufhört mit "Ziehen", erhält man keinen Punkt. Wenn man mit Summe 16, 17 oder 18 aufhört, dann gibt es einen Punkt. Wenn man mit Summe 19 oder 20 aufhört, dann gibt es zwei Punkte. Wenn man mit Summe 21 aufhört, dann gibt es drei Punkte. Wenn die Summe 21 überschritten wird, dann gibt es zwei Strafpunkte (Minuspunkte). Das Ziel ist, in 5 Runden möglichst viele Punkte zu machen. # BlackJack from random import * punkte = 0 runde = 1 while runde <= 5: 17

Alle Grundstrukturen print("runde ",runde) zahl1 = randint(1,10) zahl2 = randint(1,10) summe = zahl1 + zahl2 print("die erste Zahl war ",zahl1,", die zweite ",zahl2) print("somit ist die Summe ",summe) noch = int(input("nochmal (1 = ja, 0 = nein)? ---> ")) while (noch == 1) and (summe < 22): zahl = randint(1,10) summe = summe + zahl print("neue Zahl: ",zahl,", neue Summe: ",summe) if summe <= 21: noch = int(input("nochmal (1 = ja, 0 = nein)? ---> ")) if summe <= 15: pneu = 0 if (summe > 15) and (summe <= 18): pneu = 1 if (summe == 19) or (summe == 20): pneu = 2 if summe == 21: pneu = 3 if summe > 21: 18

Alle Grundstrukturen pneu = 2-4 print("du holst in dieser Runde ",pneu," Punkte") punkte = punkte + pneu print("neuer Punktestand: ",punkte," Punkte") runde = runde + 1 print("spielende") print("du hast total ",punkte," Punkte geholt. (!)") Übungen 1) Spareinlagen Herr Spar legt sich ein Kapital an, indem er stets (jährlich) am 1. Januar 1000. auf ein Konto überweist. Der Zinsfuss ist einzugeben (z.b. 1.75%). Berechne das Kapital bis zum Ende des 10. Jahres (d.h. gerade vor der 11. Einzahlung). Schreibe dazu ein Programm. 2) Quadratische Gleichung Erstelle ein Programm, welches die quadratische Gleichung a x2 + b x + c = 0 löst. Eingabe: a, b, c. Ausgabe: Die Lösungszahlen (sofern sie existieren), andernfalls eine Meldung, dass die Gleichung keine reelle Lösung hat. 3) Pythagoras Schreibe ein Programm, welches die Hypotenuse und eine Kathete eines rechtwinkligen Dreiecks einliest und die andere Kathete berechnet. Beispielsweise wie folgt: Eingabe: Ausgabe: Hypotenuse: 13 Kathete: 12 andere Kathete: 5 19

Alle Grundstrukturen Hypotenuse: 10 Kathete: 10 andere Kathete: 0 (entartetes Dreieck) Hypotenuse: 10 Kathete: 12 zu diesen Daten gibt es kein Dreieck 4) Schuldabzahlung Jemand nimmt eine Schuld (Kleinkredit) von beispielsweise 10'000. auf. Jedes Jahr soll ein bestimmter Betrag (die so genannte Rate, z.b. 1000. ) zurückgezahlt werden. Die Rückzahlung beginnt am Ende des ersten zu berechnenden Jahres. Der Schuldzins soll für die ganze Zeit gleich bleiben (beispielsweise 9.75%). Schreibe dazu ein Programm. Verfeinerungen Die letzte Rate ist kleiner, wenn der Schuldbetrag kleiner wird als die Rate. Diese letzte Rate soll auch berechnet werden. Wenn die Rate zu klein ist, dann kann man die Schuld nie abzahlen. Ändere das Programm so ab, dass in diesem Fall das Programm abbricht und eine entsprechende Fehlermeldung ausgibt. 5) Datenprüfung Schreibe ein Programm, welches zu drei eingegebenen Zahlen den Durchschnitt bestimmt und diesen ausdruckt. Dabei soll jeder Eingabewert geprüft werden, d.h. es werden nur Zahlen zwischen 1.0 und 6.0 (natürlich inkl. diese beiden Werte) akzeptiert. Erweiterungen Am Anfang des Programms soll man zuerst eingeben, wie viele Noten man hat, von denen man den Durchschnitt rechnen will. Sehr schwierig wird das Programm, wenn man die einzelnen Noten noch gewichtet (analog zur Situation, dass eine Prüfung stärker zählt als eine andere). 20

Datentypen 1) Zeichenketten (Strings) Nebst ganzen Zahlen (Integers) und reellen Zahlen kann man auch Texte verarbeiten. Technisch gesehen nennt man dies eine Zeichenkette. Beispiele dafür sind "ja" und "nein", aber auch irgendwelche Spielernamen. 2) Teilnehmer Man soll Vornamen und Namen eines Teilnehmers einlesen. Dabei soll es möglich sein, dass man zwei Vornamen eingeben kann. (Es geht hier nur um die Eingabe.) # Teilnehmer name = input("wie lautet Ihr Name? ---> ") i = 1 vorname1 = input("wie lautet Ihr "+str(i)+". Vorname? ---> ") i = 2 frage = input("haben Sie einen "+str(i)+". Vornamen? ---> ") if (frage == "ja"): else: vorname2 = input("wie lautet Ihr "+str(i)+". Vorname? ---> ") ` vorname2 = " "``` Beachte: input kann (im Gegensatz zu print) nur einen Text annehmen. Deshalb muss man mehrere Texte zusammenfügen (das geschieht mit dem "+") und aus der Zahl muss man eine Zeichenkette generieren (und das geschieht mit dem Befehl "str"). 3) Listen Häufig ist es in der Informatik und beispielsweise in der Statistik nötig, mehrere gleichartige Daten in einer Liste zusammenzufassen. Eine Liste hat folgende Struktur: 21

liste = [14.5, 7.6, 3.8, 4, 0, 1.5, 0.4] und steht beispielsweise für Wetterdaten (Niederschlagsmengen, gemessen während einer Woche). Eine Liste funktioniert im Wesentlichen genau gleich wie ein Vektor. Beachte: a) Listen muss man normalerweise initialisieren. liste = [0,0,0,0,0,0,0] b) Jedes Element einer Liste hat einen Index. Das erste Element einer Liste hat den Index Null. c) Einen Wert speichert man mit liste[2] = 3.8. d) Einen Listenwert kann man abfragen mit liste[1] abfragen. Das Ergebnis ist dann die oben gespeicherte 7.6. e) Wenn man am Schluss der Liste noch ein Element hinzufügen will, dann geschieht dies mit liste = liste + [0.4] 4) Beispiel Speichere 10 gewürfelte Zahlen in einer Liste und drucke die Liste am Schluss aus. # Liste from random import * Datentypen liste = [] # Erstellt eine leere Liste i = 1 while i <= 10: wurf = randint(1,6) liste = liste + [wurf] i = i + 1 print(liste) 22

Datentypen Übungen 1) Zeichenketten Man will von 5 (diese Zahl soll man eingeben können) Werten die grösste Zahl berechnen. Dabei soll bei der Eingabe jedes Mal aufgeführt werden, welchen Wert man eingibt. Beispiel: Eingabe der 1. Zahl: 14.5 Eingabe der 2. Zahl: 23.68 usw. 2) Unbestimmte Anzahl Werte Schreibe ein Programm, welches Zahlen einliest, bis man mit einer entsprechenden Eingabe signalisiert, dass man mit dem Einlesen der Werte fertig ist. Am Schluss soll der Durchschnitt der eingegebenen Werte berechnet werden. Ein Dialog könnte also etwa so aussehen: Gib die 1. Zahl ein: 235.8 Gibt es noch mehr Zahlen? ja Gib die 2. Zahl ein: 256.7 Gibt es noch mehr Zahlen? ja Gib die 3. Zahl ein: 245.2 Gibt es noch mehr Zahlen? nein Du hast 3 Zahlen eingegeben. Der Durchschnitt beträgt 245.9. 3) Listen Speichere 5 einzugebende Werte in eine Liste und drucke diese Liste aus. Berechne anschliessend den grössten und den kleinsten Wert dieser Liste. 4) Skalarprodukt 23

Schreibe ein Programm, welches 2 Vektoren einliest und berechne das Skalarprodukt der beiden Vektoren. 5) Fibonacci Berechne die ersten 15 Fibonacci-Zahlen, indem du diese in einer Liste speicherst. 6) Würfeln zu ersten Ein Würfel wird (beispielsweise) 150 Mal geworfen. Zähle, wie viele "1", wie viele "2",... und wie viele "6" gewürfelt wurden und drucke am Schluss diese Werte aus. 7) Würfeln zum zweiten Schreibe ein Programm, welches so lange würfelt, bis (irgend) eine Zahl 50 Mal vorgekommen ist. Drucke am Schluss aus, welche Zahl wie oft gewürfelt wurde. 8) Zahlenlotto Schreibe ein Programm, welches 6 Zahlen aus 49 zufällig wählt. Es versteht sich von selbst, dass keine Zahl doppelt vorkommt. Datentypen 24