Abgabe: (vor 12 Uhr)

Ähnliche Dokumente
Abgabe: (vor 12 Uhr)

Institut fu r Informatik

Abgabe: (vor 12 Uhr)

Abgabe: (vor 12 Uhr) Aufgabe 3.1 (P) Kontrollflussgraph. Zeichnen Sie für das folgende MiniJava-Programm den Kontrollflussgraphen.

TECHNISCHE UNIVERSITÄT MÜNCHEN FAKULTÄT FÜR INFORMATIK

Praktikum zu Einführung in die Informatik für LogWiIngs und WiMas Wintersemester 2017/18. Vorbereitende Aufgaben

FAKULTÄT FÜR INFORMATIK

2 Eine einfache Programmiersprache

Abgabe: keine Pflichtabgabe (vor 12 Uhr) Aufgabe 10.1 (P) Vererbung Gegeben seien folgende Java-Klassen:

Praktikum zu Einführung in die Informatik für LogWiIngs und WiMas Wintersemester 2015/16. Vorbereitende Aufgaben

ListElement (E i n f o, ListElement<E> prev, ListElement<E> next ) {

Übung 1: Installation + Test von Eclipse. Übung 2: Hello World

TECHNISCHE UNIVERSITÄT MÜNCHEN. Abgabe: (vor der Vorlesung)

Programmierkurs Java

Variablen und Datentypen

Technische Universität München WS 2004/2005 Fakultät für Informatik 11. Dezember 2004 Prof. Dr. Seidl

Einführung in die Programmierung für Computerlinguisten

Aufgabenblatt 1: - Präsenzübung für die Übungen Do Mi Ausgabe Mi

Programmierpraktikum

Einführung in die Programmierung WS 2014/15. Übungsblatt 0: Einführung

Übungen zu Algorithmen

Einführung in die Programmierung WS 2009/10. Übungsblatt 7: Imperative Programmierung, Parameterübergabe

Einführung in das Programmieren

Chuck a Luck Zielstellung Diese Aufgabe soll weniger dem Erlernen neuer Inhalte dienen, sondern ist als Anwendungs bzw.

Technische Informatik für Ingenieure WS 2010/2011 Musterlösung Übungsblatt Nr. 3

Abgabe: (vor 12 Uhr)

Übung Grundlagen der Programmierung WS 2008/09. Übung 04: Methoden. Abgabetermin: Prosabeschreibung Java-Programm.

Übung zu Einführung in die Informatik # 11

Technische Informatik für Ingenieure WS 2010/2011 Übungsblatt Nr. 3

Institut für Programmierung und Reaktive Systeme 20. November Programmieren I. 4. Übungsblatt

TU Kaiserslautern. Übungsblatt 2: Software-Entwicklung 1 (WS 2017/18) Hinweise zu Einreichaufgaben. Hinweise zu den Übungen

Primzahlen und Programmieren

Wissenschaftliches Rechnen

EPROG 2.Teilprüfung. Aufgabe 1:

Praktikum zu Einführung in die Informatik für LogWiIngs und WiMas Wintersemester 2015/16. Vorbereitende Aufgaben

Programmierpraktikum

Institut für Programmierung und Reaktive Systeme 5. Dezember Programmieren I. 5. Übungsblatt

Kapitel. Platzhalter. Was sind Platzhalter?

Praktikum zur Vorlesung Einführung in die Programmierung WS 14/15 Blatt 3

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

EidP. Blocktutorium SS 2014

Vorbereitende Aufgaben

Installationsanleitung

TECHNISCHE UNIVERSITÄT MÜNCHEN FAKULTÄT FÜR INFORMATIK

TECHNISCHE UNIVERSITÄT MÜNCHEN FAKULTÄT FÜR INFORMATIK

FAKULTÄT FÜR INFORMATIK

Dieses Dokument enthält alle Teilaufgaben zur Java-Pflichtaufgabe für das Sommersemester Aufgabe 1 (Vier Gewinnt 1. Teil)

Grundlagen: Algorithmen und Datenstrukturen

(6) Verknüpfen der GUI mit dem Spiel

Praktikum aus Programmierung Dr. Michael Hahsler (WS 05/06) Projekt: Würfelpoker

Greenfoot: Verzweigungen

Programmieren, Wintersemester 13/14 Übungsleiter: Sebastian Ebers Aufgabenblatt 3

Tag 3 Repetitorium Informatik (Java)

Tutoraufgabe 1 (Zweierkomplement): Lösung: Programmierung WS16/17 Lösung - Übung 2

Programmieren in C (Übungsblatt 1)

Praktikum 1: Einführung, BMI Rechner

Übungen zu Einführung in die Informatik: Programmierung und Software-Entwicklung: Lösungsvorschlag

Programmieren in C (Übungsblatt 1)

Greenfoot: Verzweigungen Nicolas Ruh und Dieter Koch

Übungen zur Vorlesung EidP (WS 2015/16) Blatt 6

Übungen zu Einführung in die Informatik: Programmierung und Software-Entwicklung: Lösungsvorschlag

FB Informatik. Fehler. Testplan

Übung Informatik I - Programmierung - Blatt 3

Prof. Dr. Heinrich Müller. Informatik VII Universität Dortmund. Organisatorisches zum Vorkurs Informatik

Mit PuTTY und WinSCP an der Pi

Allgemeine Hinweise: TECHNISCHE UNIVERSITÄT MÜNCHEN. Name Vorname Studiengang Matrikelnummer. Hörsaal Reihe Sitzplatz Unterschrift

Objektorientierung. Programmierstarthilfe WS 2010/11 Fakultät für Ingenieurwissenschaften und Informatik

Abgabe: (vor der Vorlesung) Aufgabe 2.1 (P) O-Notation Beweisen Sie die folgenden Aussagen für positive Funktionen f und g:

Nachklausur zu Einführung in die Programmierung 14. Oktober 2008 (SS 2008) Prof. Dr. Franz Schweiggert / Christoph Ott

Kontrollstrukturen und Logik

public class SternchenRechteckGefuellt {

System.out.println("TEXT");

Intensivübung zu Algorithmen und Datenstrukturen

Informatik 2 Labor 2 Programmieren in MATLAB Georg Richter

Mensch ärgere dich nicht

Informatik B von Adrian Neumann

Praktikum zu Einführung in die Informatik für LogWiIngs und WiMas Wintersemester 2017/18. Vorbereitende Aufgaben

Projekt: Programmierung mit dem. Grafikfähiger Taschenrechner CASIO CFX-9850GB Plus

Informatik I EProg HS13

1 Aufgaben 1.1 Umgebungsvariable setzen: CLASSPATH

Programmieren in Java -Eingangstest-

Übungsblatt 4. Java Vorkurs (WS 2015)

Technische Informatik für Ingenieure Winter 2005/2006 Übungsblatt Nr. 3

Aufgabe 16. Aufgabe 17

Ausgabe:

Probeklausur: Programmierung WS04/05

Übertragung der Software Aktivierung auf neuen PC

EINLEITUNG. Werden alle 52 Felder im Hauptspiel erreicht, gilt der Shooter-Bonus als geknackt und wird dem aktuellen Shooter (Würfler) ausbezahlt.

BSV Erlangen e.v. BogenSport-Verein Erlangen e.v. Ein Team = Bogenschütze + Würfelspieler

Transkript:

TECHNISCHE UNIVERSITÄT MÜNCHEN FAKULTÄT FÜR INFORMATIK Lehrstuhl für Sprachen und Beschreibungsstrukturen SS 2011 Einführung in die Informatik I Übungsblatt 1 Prof. Dr. Helmut Seidl, A. Lehmann, A. Herz, Dr. M. Petter 05.05.11 Abgabe: 15.05.11 (vor 12 Uhr) Hinweis: Die Klasse MiniJava In der Klasse MiniJava sind einige Details versteckt, damit Sie sich in den ersten Wochen ganz auf das Wesentliche konzentrieren können. Die Klasse bietet folgende Methoden zur vereinfachten Ein- bzw. Ausgabe: read() und readint() zum Einlesen eines ganzzahligen Werts, readstring() zum Einlesen einer textuellen Eingabe, sowie write(...) zur vereinfachten Ausgabe. Um die Klasse benutzen zu können, laden Sie die Klasse MiniJava.java von der Vorlesungsseite: http://www2.in.tum.de/hp/file?fid=645 speichern Sie MiniJava.java im selben Verzeichnis wie Ihre eigenen Java-Dateien und erweitern Sie ihre Klassendefinition(en) um extends MiniJava. Verwenden Sie zur Lösung der Aufgaben nur MiniJava-Sprachkonstrukte! Aufgabe 1.1 (P) Erste Schritte a) Starten Sie die Entwicklungsumgebung NetBeans. Erstellen Sie ein neues Projekt namens Info1 in NetBeans. Öffnen Sie die Datei MiniJava.java in NetBeans und speichern Sie diese in Ihrem Projekt unter Info1/src/info1/MiniJava.java ab. NetBeans weist Sie daraufhin, dass die package declaration geändert werden muss. Fügen Sie dazu die Zeile package info1; am Anfang der Klasse MiniJava ein. b) Erstellen Sie nun die Klasse HelloWorld im Package info1 in NetBeans. Diskutieren Sie mit Ihrem Tutor die automatisch erstellten Elemente des Programms. Ergänzen Sie Ihr Programm folgendermassen: public c l a s s HelloWorld extends MiniJava { w r i t e ( H e l lo World! ) ; Am Ende sollte ihr Netbeans in etwa so aussehen:

2 Machen Sie sich mit den grundlegenden Funktionen, wie dem Erstellen und Ausführen des Programms vertraut. c) Machen Sie den Ordner in ihrem Benutzerverzeichnis ausfindig, an dem Netbeans Ihre Java-Dateien ablegt übertragen Sie den Ordner mit den Java-Quellcode-Dateien als Ihre Lösung auf den Abgabeserver. (Auf diese Weise geben Sie in Zukunft Ihre Hausaufgaben ab, wie auf dem 1. Merkblatt ausführlich beschrieben.) Sie finden diese Dateien unter Unix normalerweise unter /home/username/netbeansprojects/info1/src, bzw. unter Windows im Ordner %HOMEPATH%\Eigene Dokumente\NetBeansProjects\Info1\src Aufgabe 1.2 (P) Ein- und Ausgabe a) Bart muss schon wieder nachsitzen. Als Strafaufgabe muss er ein Programm schreiben, das auf dem Bildschirm 100 Mal den Satz Ich darf während der Vorlesung nicht Computer spielen! ausgibt. Helfen Sie ihm dabei dies möglichst effizient umzusetzen. Hinweis: Erstellen Sie dazu im Package info1 eine neue Klasse namens Bart.java. b) Leider muss Bart des öfteren nachsitzen und verschiedene Sätze verschieden oft als Strafaufgabe ausgeben lassen. Modifizieren Sie das obige Programm so, dass es nach einem Satz und seinen Wiederholungen fragt und diesen dann entsprechend oft am Bildschirm ausgibt. Lösungsvorschlag 1.2 public c l a s s Bart extends MiniJava { int i ; i = 1 ; while ( i <=100){ w r i t e ( Ich d a r f während der Vorlesung + nicht Computer s p i e l e n! ) ; i = i +1;

3 public c l a s s Bart extends MiniJava { w r i t e ( Welcher Satz s o l l ausgegeben werden? ) ; S t r i n g s a t z = r e a d S t r i n g ( ) ; w r i t e ( Wie o f t s o l l der Satz ausgegeben werden? ) ; int anzahl = r e a d I n t ( ) ; int i ; i = 1 ; while ( i <= anzahl ) { w r i t e ( s a t z ) ; i = i +1; Aufgabe 1.3 (P) Summe Schreiben Sie ein Java-Programm namens Sum.java, welches solange Zahlen einliest und summiert bis die Zahl 0 eingegeben wird. Anschließend soll die berechnete Summe ausgegeben werden. Lösungsvorschlag 1.3 public c l a s s Sum extends MiniJava { int sum ; sum = 0 ; int x ; x = read ( ) ; while ( x!= 0) { sum = sum + x ; x = read ( ) ; w r i t e (sum) ; Aufgabe 1.4 (P) 17 und 4 In dieser Aufgabe wollen wir das Kartenspiel 17 und 4 programmieren, das wie folgt funktioniert: Zwei Spieler spielen gegen einander. Ziel des Spiels ist es, mit zwei oder mehr Karten näher an 21 Punkte heranzukommen als der andere Spieler, ohne dabei den Wert von 21 Punkten zu überschreiten. Eine Karte kann einen Wert zwischen 2 und 11 Punkten haben. Jeder Spieler hat am Anfang zwei Spielkarten. Er kann entscheiden, ob er weitere Karten ziehen möchte oder nicht.

4 Glaubt er, nahe genug an 21 Punkte herangekommen zu sein, so lehnt er weitere Karten ab. Wenn er durch einen Zug 22 oder mehr Punkte erreicht, verliert er sofort. Es gewinnt der Spieler, der als erstes am nächsten an 21 Punkte herankommt. Schreiben Sie ein Mini-Java Programm SuV.java, mit dem man 17 und 4 zu zweit spielen kann. Jeder Spieler soll über Dialogboxen gefragt werden, ob er weitere Karten ziehen will: 1 für ja, 0 für nein. Verwenden Sie dazu die statische Methode int drawcard() der Klasse MiniJava, um Karten zu ziehen. Hinweis: Achten Sie darauf, Eingaben auf Ihre Gültigkeit hin zu überprüfen! Lösungsvorschlag 1.4 public c l a s s SuV extends MiniJava { int cont = 1 ; w r i t e ( Player one ) ; // Store p l a y e r 1 s score in an i n t e g e r int playerone = drawcard ( ) ; // e x i t when score exceeded or user r e f u s e s to p l a y while ( ( playerone < 21) && ( cont == 1) ) { // draw cards playerone = playerone + drawcard ( ) ; w r i t e ( Player one : You drew +playerone ) ; i f ( playerone > 21) { // p l a y e r s c o r e > 17+4 : ) w r i t e ( Player one i s dead : Player one l o s t! ) ; cont = read ( Player one continue? (1=yes, 0=no ) ) ; while ( ( cont > 1) ( cont < 0) ) { cont = read ( Player one continue? (1=yes, 0=no ) ) ; w r i t e ( I t s Your turn, Player two! ) ; int playertwo = drawcard ( ) ; cont = 1 ; // computer t r i e s to b e a t p l a y e r u n t i l he l o o s e s while ( ( playertwo < 21) && ( cont == 1) ) { // draw cards playertwo = playertwo + drawcard ( ) ; w r i t e ( Player two : You drew +playertwo ) ; // e x i t when score exceeded or user r e f u s e s to p l a y i f ( playertwo <21){ cont = read ( Player2 continue? (1=yes, 0=no ) ) ; while ( ( cont > 1) ( cont < 0) ) { cont = read ( Player2 continue? (1=yes, 0=no ) ) ; // j u s t f o r information : i f ( playertwo > 21 playertwo < playerone ) {

5 w r i t e ( Player one won! ) ; else { w r i t e ( Player two beat p l a y e r one : Player two won ) ; Aufgabe 1.5 [1 Punkt] (H) Parabel Bart muss als Hausaufgabe Parabeln in ein Koordinatensystem einzeichnen. Seine Parabeln sind immer von folgender Form: f(x) = ax 2 + bx + c wobei der Definitionsbereich für x von 5 bis 5 reicht. Bart benötigt insgesamt 11 (x, y)- Paare durch die er die Parabeln zeichnen kann. Schreiben Sie für Bart ein Programm namens Parabel.java, das für ihn diese 11 Wertepaare berechnet, für beliebige Eingaben für die Parameter a, b und c. Zum Beispiel: Bei der Eingabe von a = 5, b = 2 und c = 1 erhält Bart die Wertepaare: (-5,116), (-4,73), (-3,40), (-2,17), (-1,4), (0,1), (1,8), (2,25), (3,52), (4,89), (5,136) Lösungsvorschlag 1.5 public class Parabel extends MiniJava { // Erfragen und Einlesen der Parameter int a = r e a d I n t ( Welchen Wert hat Parameter a? ) ; int b = r e a d I n t ( Welchen Wert hat Parameter b? ) ; int c = r e a d I n t ( Welchen Wert hat Parameter c? ) ; // Ausgabe der Paare int x = 5; while ( x<=5){ w r i t e ( ( +x+, +(a x x+b x+c )+ ) ) ; x = x+1; Aufgabe 1.6 [4 Punkte] (H) Lustige Sieben In dieser Aufgabe wollen wir das Würfelspiel Lustige Sieben als ein Programm namens LustigeSieben.java schreiben. Es gibt einen Spieler, der gegen die Bank spielt. Der Spieler startet mit einem Guthaben von 100. Der Spieler setzt einen Teil seines Guthabens auf nur eines der Felder des Spielfelds. Die Bank würfelt mit zwei Würfeln. Dazu steht Ihnen die Methode int dice() der Klasse MiniJava zur Verfügung. Anschliessend zahlt die Bank entsprechend folgender Regel an den Spieler dessen Gewinn aus:

6 der dreifache Einsatz wird ausgezahlt, falls die Summe der beiden Würfel 7 ergibt und der Spieler auf die 7 gesetzt hat; der doppelte Einsatz wird ausgezahlt, falls die Summe der beiden Würfel genau der gewählten Zahl des Spielfeldes entspricht; der einfache Einsatz wird zurückgezahlt, falls sich das Würfelergebnis auf derselben Längsseite wie die gewählte Zahl befindet. Zum Beispiel: Wenn insgesamt 4 Augen gewürfelt werden, so erhält der Spieler für die Wahl der 4 den doppelten Einsatz, seinen Einsatz zurück, wenn der Spieler auf die 2, 3, 5 oder 6 gesetzt hat und verliert andernfalls seinen Einsatz an die Bank. Das Spielfeld sieht wie folgt aus: 7 2 8 3 9 4 10 5 11 6 12 Das Programm fragt solange nach der gewählten Zahl und dem Einsatz bis das Guthaben von 100 des Spielers aufgebraucht ist oder der Spieler die 0 zur Beendigung des Glücksspiels eingegeben hat. Nach jeder Runde soll das Würfelergebnis und das Guthaben des Spielers ausgegeben werden. Hinweis: Achten Sie darauf, Eingaben auf Ihre Gültigkeit hin zu überprüfen! Hilfestellung: Implementieren Sie die Aufgabenstellung in kleinen Schritten so weit Sie kommen: a) Lassen Sie den Spieler zuerst nur einmal und ohne Einsatz spielen Vergleichen Sie den Tip mit dem Würfelergebnis! b) Lassen Sie den Spieler einen beliebigen Betrag auf eine Zahl setzen Geben Sie den Gewinn/Verlust aus! c) Legen Sie einen Kontostand für den Spieler an und verrechnen Sie den Gewinn/Verlust mit dem Kontostand. Verhindern Sie eine Überschreitung des Kontos! d) Lassen Sie wiederholt neue Spiele mit dem aktualisierten Kontostand zu! Lösungsvorschlag 1.6 public class L u s t i g e S i e b e n extends MiniJava { // I n i t i a l i s i e r u n g int guthaben =100; w r i t e ( Lass uns s p i e l e n! + Du hast +guthaben+ Chips zur Verfügung. ) ; // S p i e l a b l a u f while ( guthaben >0){ // Einsatz int e i n s a t z=r e a d I nt ( Wieviel Chips w i l l s t Du s e t z e n? ) ; i f ( e i n s a t z ==0){ //Beenden des S p i e l s w r i t e ( Du gewinnst mit +guthaben+ Chips.

7 + H e r z l i c h e n Glückwunsch. ) ; while ( e i n s a t z <0 e i n s a t z >guthaben ) { // Einsatz zu hoch oder zu k l e i n i f ( e i n s a t z >guthaben ) { e i n s a t z=readint ( S o v i e l e Chips hast Du n i c h t mehr. + Dein Guthaben b e t r ä g t +guthaben+. + Was i s t dein Einsatz? ) ; i f ( e i n s a t z <0){ e i n s a t z=readint ( Ungültige Eingabe. + Dein Guthaben b e t r ä g t +guthaben+. + Was i s t dein Einsatz? ) ; i f ( e i n s a t z ==0){ //Beenden des S p i e l s w r i t e ( Du gewinnst mit +guthaben+ Chips. + H e r z l i c h e n Glückwunsch. ) ; // Feld int f e l d=r e a d I n t ( Auf welches Feld w i l l s t Du s e t z e n? ) ; i f ( f e l d ==0){ //Beenden des S p i e l s w r i t e ( Du gewinnst mit +guthaben+ Chips. + H e r z l i c h e n Glückwunsch. ) ; while ( f e l d >12 f e l d <2){ // Feld e x i s t i e r t n i c h t f e l d=r e a d I n t ( Es g i b t nur d i e Felder 2 b i s 1 2. + Auf welches Feld w i l l s t Du s e t z e n? ) ; i f ( f e l d ==0){ // Beenden des S p i e l s w r i t e ( Du gewinnst mit +guthaben+ Chips. + H e r z l i c h e n Glückwunsch. ) ; // Wuerfeln w r i t e ( Rien ne va plus. + Du hast +e i n s a t z+ Chips auf d i e + f e l d + g e s e t z t. ) ; int wurf = d i c e ( )+d i c e ( ) ; w r i t e ( Die Würfel sind g e f a l l e n : +wurf+ gewinnt. ) ; // Gewinnberechnung int gewinn = 0 ; i f ( wurf==f e l d ) { gewinn = e i n s a t z 2 ; // 2. F a l l i f ( wurf == 7) gewinn = gewinn + e i n s a t z ; // 1. F a l l else { i f ( ( wurf<7&&f e l d <7) ( wurf>7&&f e l d >7) ) { gewinn = e i n s a t z ; // 3. F a l l guthaben=guthaben e i n s a t z+gewinn ; w r i t e ( Du bekommst +gewinn+ Chips.

8 + Dein Guthaben b e t r ä g t nun : +guthaben + Chips. ) ; i f ( guthaben==0){ w r i t e ( Du hast l e i d e r a l l e s v e r l o r e n. ) ;