FAKULTÄT FÜR INFORMATIK

Ähnliche Dokumente
FAKULTÄT FÜR INFORMATIK

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

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

FAKULTÄT FÜR INFORMATIK

Übungen zu Algorithmen

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

1. Erste Schritte 2. Einfache Datentypen 3. Anweisungen und Kontrollstrukturen 4. Verifikation 5. Reihungen (Arrays)

CoMa 04. Java II. Paul Boeck. 7. Mai Humboldt Universität zu Berlin Institut für Mathematik. Paul Boeck CoMa 04 7.

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

Programmierpraktikum

Vorlesung Programmieren

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

2 Eine einfache Programmiersprache

16. Dezember 2004 Dr. M. Schneider, P. Ziewer

Abgabe: (vor 12 Uhr)

2 Eine einfache Programmiersprache

Übungsstunde 3. Einführung in die Programmierung

Software Entwicklung & Programmierung - 0. Übungsblatt

Objektorientierte Programmierung

1. Erste Schritte 2. Einfache Datentypen 3. Anweisungen und Kontrollstrukturen 4. Verifikation 5. Reihungen (Arrays)

! 1. Erste Schritte! 2. Einfache Datentypen! 3. Anweisungen und Kontrollstrukturen! 4. Verifikation! 5. Reihungen (Arrays) II.1.4. Verifikation - 1 -

Allgemeine Hinweise:

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

Vorlesung Programmieren

Arrays. Gilbert Beyer und Annabelle Klarl. Einführung in die Informatik. Zentralübung zur Vorlesung Einführung in die Informatik

Martin Unold INFORMATIK. Geoinformatik und Vermessung

II.3.1 Rekursive Algorithmen - 1 -

Programmierpraktikum

float: Fließkommazahl nach IEEE 754 Standard mit 32 bit

Institut für Programmierung und Reaktive Systeme. Java 2. Markus Reschke

Einführung in die Programmierung für Wirtschaftsinformatik

Musterlösung Stand: 5. Februar 2009

Lösungshinweise/-vorschläge zum Übungsblatt 4: Software-Entwicklung 1 (WS 2017/18)

Wiederholung der Endklausur am 24. September 2013

Aufgabenblatt: Arrays

Tag 5. Repetitorium Informatik (Java) Dozent: Marius Kamp Lehrstuhl für Informatik 2 (Programmiersysteme)

Heap vs. Stack vs. statisch. 6 Speicherorganisation. Beispiel Statische Variablen. Statische Variablen

Abgabe: (vor 24 Uhr)

Zentralübung Grundlagen der Programmierung

6 Speicherorganisation

Lösungshinweise/-vorschläge zum Übungsblatt 5: Software-Entwicklung 1 (WS 2017/18)

π auf (und mehr) Dezimalen Wegen π = 4 arctan(1) kann die Reihenentwicklung des Arkustangens verwendet werden.

Grundzüge der Wirtschaftsinformatik WS 2002/03. Wiederholung Java. Programmierzyklus. Heiko Rossnagel Problem

Heap vs. Stack vs. statisch. 6 Speicherorganisation. Beispiel Statische Variablen. Statische Variablen

II. Grundlagen der Programmierung. Beispiel: Merge Sort. Beispiel: Merge Sort (Forts. ) Beispiel: Merge Sort (Forts. )

Java Cheatsheet. Mehrzeiliger Kommentar (beginnt mit /* und endet mit */)

// Objekt-Methoden: public void insert(int x) { next = new List(x,next); } public void delete() { if (next!= null) next = next.next; } public String

Objektorientierte Programmierung OOP Programmieren mit Java

JAVA für Nichtinformatiker - Probeklausur -

5. Java Arrays und Strings

public class SternchenRechteckGefuellt {

Institut fu r Informatik

DAP2 Praktikum Blatt 1

JAVA BASICS. 2. Primitive Datentypen. 1. Warum Java? a) Boolean (logische Werte wahr & falsch)

Programmierkurs Java

Programmierung für Mathematik (HS13)

public static void main(string[] args) {

Einführung in die Programmierung für NF MI. Übung 04

Java Übung. Übung 3. Werner Gaulke. 2. Mai Universität Duisburg-Essen Kommedia, Übung EinPro SS06, Einführung in Java - Übung.

Tag 8 Repetitorium Informatik (Java)

Praktikum zu Einführung in die Informatik für LogWings und WiMas Wintersemester 2013/14

Einstieg in die Informatik mit Java

Die for -Schleife HEUTE. Schleifen. Arrays. Schleifen in JAVA. while, do reichen aus, um alle iterativen Algorithmen zu beschreiben

Informatik B von Adrian Neumann

Einführung in die Programmierung für NF. Arrays

Einführung Datentypen Verzweigung Schleifen. Java Crashkurs. Kim-Manuel Klein May 4, 2015

Abgabe: (vor 12 Uhr)

Abgabe: (vor 12 Uhr)

Grundlagen der Programmierung Prof. H. Mössenböck. 6. Methoden

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

Propädeutikum zur Programmierung

Praktikum Informatik II Prof. Dr. Martin Trauth, Dr. Michael Männel

Variablen. int Flugzeug. float. I write code Hund. String. long. Borchers: Programmierung für Alle (Java), WS 06/07 Kapitel

Semestralklausur Einführung in die Programmierung, WS 2005/06, Seite 1/6 Name, Vorname, Matrikelnummer: Gruppe A

II. Grundlagen der Programmierung. 9. Datenstrukturen. Daten zusammenfassen. In Java (Forts.): In Java:

Einfache Arrays. Annabelle Klarl. Einführung in die Informatik Programmierung und Softwareentwicklung

Informatik II Übung, Woche 10

Test zu Grundlagen der Programmierung Leitung: Susanne Guth/Michael Hahsler. 31. Jänner 2003

JAVA BASICS. 2. Primitive Datentypen. 1. Warum Java? a) Boolean (logische Werte wahr & falsch)

Primitive Datentypen

Programmierung WS12/13 Lösung - Übung 1 M. Brockschmidt, F. Emmes, C. Otto, T. Ströder

Algorithmen und Datenstrukturen II

3. Grundanweisungen in Java

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

Übung Programmierung WS 2007/08 - Blatt 5

Software Entwicklung 1. Felder / Arrays. Deklaration und Initialisierung I. Arrays. Annette Bieniusa / Arnd Poetzsch-Heffter

Javakurs für Fortgeschrittene

JAVA - Methoden

Objektorientierte Programmierung und Modellierung

EidP. Blocktutorium SS 2014

1. Teilklausur Gruppe A. Bitte in Druckschrift leserlich ausfüllen!

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

(08 - Einfache Sortierverfahren)

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

Grundlagen der Programmierung Prof. H. Mössenböck. 10. Klassen

Ausgabe:

Dynamische Datentypen. Destruktor, Copy-Konstruktor, Zuweisungsoperator, Dynamischer Datentyp, Vektoren

Programmieren in Java

JAVA BASICS. 2. Primitive Datentypen. 1. Warum Java? a) Boolean (logische Werte wahr & falsch)

Anweisungen zur Ablaufsteuerung

Transkript:

TECHNISCHE UNIVERSITÄT MÜNCHEN FAKULTÄT FÜR INFORMATIK Lehrstuhl für Sprachen und Beschreibungsstrukturen WS 2007/2008 Praktikum Grundlagen der Programmierung Lösungsvorschläge zu Blatt 3 F. Forster, T. Gawlitza, A. Flexeder 5. November 2007 Übungen zu Praktikum Grundlagen der Programmierung Aufgabe 14 Kontrollfluss-Graph (Lösungsvorschlag) Start i=read(); k = -1; j=read(); n = 0; no j >=-k yes no i > j yes j = j % i; i = i - j; write(i); n = (n - k) * 2-1; Stop Aufgabe 15 Minumum und Maximum (Lösungsvorschlag) public class MinMax extends MiniJava { public static void main( String [] args) { // Anzahl der einzugebenden Zahlen abfragen int eingaben = readint(" Wie viele Zahlen möchten Sie eingeben?"); if ( eingaben < 1)

Lösung 3/ Seite 2 return; // Array anlegen int[] zahlen = new int[ eingaben ]; // Array mit Zahlen füllen for (int i < eingaben; i ++) { int zahl = readint(" Bitte geben Sie die " + (i +1) + ". Zahl ein."); zahlen[i] = zahl; // min und max berechnen int min = zahlen [0]; int max = zahlen [0]; for (int i = 1; i < eingaben; i ++) { if ( zahlen[i] < min) min = zahlen[i]; if ( zahlen[i] > max) max = zahlen[i]; // Ausgeben write (" Die kleinste Zahl war " + min ); write (" Die größte Zahl war "+ max ); Aufgabe 16 (Ü) Tanzpaarbildung public class Tanzpaare extends MiniJava{ public static void main( String [] args ){ int c = 10; String [] men = new String[c]; String [] women = new String[c]; String [][] pair = new String[c][2]; for(int i < women. length; i ++){ women[i] = readstring (); for(int i<men.length; i++){ men[i] = readstring (); for(int j=0;j<women.length;j++){ int bigman =0; int bigwoman =0;

Lösung 3/ Seite 3 for(int i= 1; i<men.length; i++){ if(men[bigman ]. length () <men[i]. length ()) bigman = i; for(int i= 1; i < women. length; i ++){ if(women[bigwoman ]. length ()< women[i]. length ()) bigwoman = i; pair[j][0]= women[bigwoman ]; pair[j][1]= men[bigman ]; women[bigwoman ] = ""; men[bigman ]=""; write(" es ergibt sich folgende Tanzpaarbildung :"); for(int i= 0; i<men.length; i++){ write("frau: "+pair[i][0]); write("mann: "+pair[i][1]); Aufgabe 17 Sieb des Eratosthenes (Lösungsvorschlag) public class Eratosthenes extends MiniJava { public static void main( String [] args) { // Eingabe int n = read (); if (n < 0) { // fehlerhafte Eingabe write(" Nur positive Eingaben erlaubt."); else { // korrekte Eingabe; Berechnung kann erfolgen // Sieb anlegen boolean prime [] = new boolean[n + 1]; for (int i = 2; i < prime. length; i ++) prime[i] = true; // Primzahlen berechnen for (int i = 2; i < prime. length; i ++) { if (prime[i]) { // Primzahl ausgeben System.out.println(i); // alle Vielfachen streichen for (int j = i * i; j < prime. length; j = j + i) { prime[j] = false;

Lösung 3/ Seite 4 Mögliche Optimierungen: Nur ungerade Zahlen berücksichtigen Berechnung bis zur Wurzel der oberen Grenze ist ausreichend Aufgabe 18 Kontrollfluss-Graph (Lösungsvorschlag) Start n = read(); no n >= 0 yes write("n<0"); sum = 0; Stop prod = 1; no sum = 2*sum+1; i!= n yes sum = sum+prod; write(sum); prod = 3*prod; Stop i = i+1;

Lösung 3/ Seite 5 Aufgabe 19 Natürliche Zahlen (Lösungsvorschlag) a) public class L1 extends MiniJava { public static void main( String [] args) { // Deklarationen int i, max_len, uebertrag, tmp; String str_a, str_b, str_ret_val ; int[] a, b, ret_val; // Eingabe der Argumente str_a = readstring (); str_b = readstring (); // Instantiierung der Arrays fuer a und b a = new int[str_a.length ()]; b = new int[str_b.length ()]; // Umwandeln des ersten Argumentes in ein Array while (i < a. length) { a[i] = ( (int)( str_a.charat(a.length - i - 1)) - (int) 0 ); // Umwandeln des zweiten Argumentes in ein Array while (i < b. length) { b[i] = ( (int)( str_b.charat(b.length - i - 1)) - (int) 0 ); // Instantiierung eines hinreichend grossen Arrays // fuer das Ergebnis if (a. length < b. length) max_len = b. length; else max_len = a. length; ret_val = new int[ max_len + 1]; // Die eigentliche Addition uebertrag = 0; while (i < ret_val. length) { tmp = uebertrag ; if (i < a. length) tmp = tmp + a[i]; if (i < b. length) tmp = tmp + b[i]; ret_val[i] = tmp % 10;

Lösung 3/ Seite 6 uebertrag = tmp / 10; // Umwandlung des Ergebnisses in einen String str_ret_val = ""; while (i < ret_val. length) { str_ret_val = ret_val[i] + str_ret_val ; write( str_ret_val ); b) public class L2 extends MiniJava { public static void main( String [] args) { // Deklarationen int i, j, max_len, uebertrag, tmp; String str_a, str_b, str_ret_val ; int[] a, b, h, ret_val; // Eingabe der Argumente str_a = readstring (); str_b = readstring (); // Instantiierung der Arrays fuer a und b a = new int[str_a.length ()]; b = new int[str_b.length ()]; // Umwandeln des ersten Argumentes in ein Array while (i < a. length) { a[i] = ( (int)( str_a.charat(a.length - i - 1)) - (int) 0 ); // Umwandeln des zweiten Argumentes in ein Array while (i < b. length) { b[i] = ( (int)( str_b.charat(b.length - i - 1)) - (int) 0 ); // Instantiierung eines hinreichend grossen Arrays // fuer das Ergebnis ret_val = new int[a. length + b. length ];

Lösung 3/ Seite 7 // Die eigentliche Multiplikation uebertrag = 0; while (i < b. length) { // Multiplikation der i-ten Ziffer von b mit a. // Macht auf eine Multiplikation mit 10^i. h = new int[ ret_val. length ]; uebertrag = 0; j = 0; while (j < a. length) { tmp = a[j] * b[i] + uebertrag ; h[i + j] = tmp % 10; uebertrag = tmp / 10; j = j + 1; h[i + a. length] = uebertrag ; // Addition der Zwischen-Ergebnisse uebertrag = 0; j = 0; while (j < ret_val. length) { tmp = ret_val[j] + h[j] + uebertrag ; ret_val[j] = tmp % 10; uebertrag = tmp / 10; j = j + 1; // Umwandlung des Ergebnisses in einen String str_ret_val = ""; while (i < ret_val. length) { str_ret_val = ret_val[i] + str_ret_val ; write( str_ret_val ); Aufgabe 20 Fussballturnier (Lösungsvorschlag) public class Turnier extends Match{ public static void main( String [] args ){ String [] teams = new String [8];

Lösung 3/ Seite 8 int[] points = new int[8]; //Einlesen der Teamnamen, des Punktestands for(int i=0; i<teams.length; i++) teams[i] = readstring (); for(int i=0; i<points.length; i++) points[i] = readint (); //Punktestaende von Mannschaften, die eine Runde weiter sind String [] new_teams = new String[ teams. length /2]; int[] new_points = new int[ points. length /2]; int rounds = 0; while( new_teams. length!=1){ //Turnier laeuft so lange ab, bis GesamtSieger ermittelt new_teams = new String[ teams. length /2]; new_points = new int[ points. length /2]; rounds ++; //Bestimmung aller Mannschaften, die eine Runde weiter sind for(int i=0; i< new_teams.length; i++){ int min_pos =0, max_pos = 0; //Position von Mannschaft mit min/max Punktestand int min = points [0], max = points [0]; //Bestimmung der Mannschaften, die gegeneinander spielen for(int j=1; j<points.length; j++){ if( points[j] > max ){ max_pos = j; max = points[j]; if(( points[j] > min) && (min == -1) && (points[j]!= -1)) { min_pos = j; min = points[j]; if(( points[j] < min) && (min!= -1) && (points[j]!= -1)) { min_pos = j; min = points[j]; write(teams[min_pos ]+" spielt gegen "+teams[max_pos ]+" in der "+rounds+ //Bestimmung des Siegers einer Begegnung int[] result = getscores (); if( result [0] < result [1]){ new_teams [i] = teams[ max_pos ]; new_points [i] = points[ max_pos ]; else{ new_teams [i] = teams[ min_pos ]; new_points [i] = points[ min_pos ]; write(" Sieger dieser Begegnung ist "+ new_teams [i]); points[min_pos] =points[max_pos] = -1; //Ausblenden derer, die schon gegeneinander spielten teams = new String[ new_teams. length ]; for(int k =0;k < teams. length; k ++) teams[k] = new_teams [k]; points = new int[ new_points. length ]; for(int k =0;k < points. length; k ++) points[k] = new_points [k];

Lösung 3/ Seite 9 write(" Sieger des Turniers ist: "+ new_teams [0]);