Kurs:Programmierung/WS 10 11/Uebung
Erscheinungsbild
Übungsblatt 1
[Bearbeiten]/**
*
*/
/**
* @author Chi-Vinh (Wikiversity)
*
* Lehrstuhl Verlässlichkeit von Rechensystemen
Prof. Dr. Klaus Echtle
Übungsblatt 1
ProgrammierungWS 10/11
Aufgabe 1
Schreiben sie ein Programm, welches drei Integer-Zahlen addiert, multipliziert, den
Quotient aus der ersten und der dritten eingegebenen Zahl berechnet und die
Ergebnisse jeweils ausgibt. Das Programm soll weiterhin prüfen ob die erste Zahl
eine gerade Zahl ist oder nicht und eine entsprechende Meldung ausgibt. Ferner soll
das Programm den Mittelwert, das Minimum sowie das Maximum unter den Zahlen
errechnen und ausgeben.
*
*/
import java.util.Scanner;
public class Daten {
/**
* @param args
*/
public int addieren(int a, int b, int c)
{
return a+b+c;
}
public int multiplizieren(int a, int b, int c)
{
return a*b*c;
}
public double dividieren(int a, int c)
{
double dividend = (double) a; double divisor = (double) c; // Integer nach Double casten
return dividend/divisor;
}
public boolean is_a_gerade(int a)
{
return (a%2 == 0 );
}
public double mittelwert(int a, int b, int c)
{
return (a+b+c)/3;
}
public int max(int a, int b, int c)
{
int max = a;
if ( b > max ) { max = b;}
else if (c > max ) { max =c;}
return max;
}
public int min(int a, int b, int c)
{
int min = a;
if ( b < min ) { min = b;}
else if (c < min ) { min =c;}
return min;
}
public static void main(String[] args) {
// TODO Auto-generated method stub
int a,b,c;
Daten D = new Daten();
Scanner s = new Scanner(System.in);
System.out.println("Ganze Zahl a: "); a = s.nextInt();
System.out.println("Ganze Zahl b: "); b = s.nextInt();
System.out.println("Ganze Zahl c: "); c = s.nextInt();
s.close();
System.out.println("a+b+c = "+ D.addieren(a,b,c));
System.out.println("a*b*c = "+ D.multiplizieren(a,b,c));
System.out.println("a : c = "+ D.dividieren(a,c));
System.out.println("Ist a eine gerade ganze Zahl ? "+ D.is_a_gerade(a));
System.out.println("Mittelwert = "+ D.mittelwert(a,b,c));
System.out.println("Maximun = "+ D.max(a,b,c));
System.out.println("Minimum = "+ D.min(a,b,c));
}
}
Aufgabe 2
[Bearbeiten]public class Aufgabe2 {
public class Aufgabe3 {
int x, y = 5;
// Aus irgendeinem Grund meldet eclipse Fehler bei dieser Zeile. ?!
double a = 3.2, b, c;
x = y - 2;
x = x + 2;
a = x;
x = a;
a = b + c;
x = Y / 0;
/** Fehler: String A hat den Wert sollte durch ""-Zeichen eingeschlossen werden
ein Semikolon ; fehlt
*/
System.out.writeln(A hat den Wert + a)
/** Type mismatch: In einen byte-Datentyp passt ein kleinerer Zahlenbereich rein.
byte i = (byte) y;
*/
byte i = y;
}
// eclipse meldet, es soll nooch eine geschlossene, geschweifte Klammer rein . ?!
}
Aufgabe 3
[Bearbeiten]public class Flinttstone {
public static void main(String[]args){
int x = 1;
System.out.print("Yaba");
while (x < 2){
System.out.print("da");
System.out.print("ba");
x = x +1 ;
}
if ( x == 2 ) {
System.out.print("doo");
}
}
}
Aufgabe4
[Bearbeiten]import java.util.Scanner;
public class Aufgabe_4 {
double x,y ;
/**
* @param args
*/
public boolean gerade (double x,double y){
return (y == 2*x-2);
}
public boolean kreis ( double x,double y){
return (x*x+y*y ==8);
}
public boolean schnittpunkt (double x,double y){
return (x*x+(2*x-2)*(2*x-2) ==8);
}
public static void main(String[] args) {
Aufgabe_4 M = new Aufgabe_4();
// TODO Auto-generated method stub
double x,y ;
Scanner s = new Scanner(System.in);
System.out.print("x :");
x = s.nextDouble();
System.out.print("y:") ;
y = s.nextDouble();
s.close();
if ( M.gerade(x,y) ){
System.out.print("Punkt liegt auf gerade");
}
else {
System.out.print("Punkt liegt nicht auf der gerade");
}
if ( M.kreis(x,y) ){
System.out.print("Punkt liegt auf kreis");
}
else {
System.out.print("Punkt liegt nicht auf kreis");
}
if (M.schnittpunkt(x,y) ){
System.out.print("schnittpunkt");
}
else {
System.out.print("kein schnittpunkt");
}
}
}
Übungsblatt 2
[Bearbeiten]Aufgabe 1
[Bearbeiten]/**
* Professor Klaus Echtle
* Programmierung WS 10/11
*
* Übungsblatt 2
*
* Aufgabe 1
Schreiben Sie ein Java-Programm, welches eine Zahl zwischen 1 und 31 vom
Benutzer entgegennimmt und ausgibt, auf welchen Tag dieses Monats (Oktober)
fällt.
Beispiel: für die Eingabe 26 soll folgendes ausgegeben werden:
Der 26.10.2010 ist ein Dienstag.
*/
import java.util.Scanner;
public class Calendar {
/**
* @param args
*/
public String day_of_week(int tag) {
int fall = tag%7;
String day_of_week ="";
// 26.10.2010 ist ein Die, 26%7 = Rest 2
System.out.print("Rest: " + fall);
switch (fall) {
case 0: day_of_week = "DO"; break;
case 1: day_of_week = "FR"; break;
case 2: day_of_week = "SA"; break;
case 3: day_of_week = "SO"; break;
case 4: day_of_week = "MO"; break;
case 5: day_of_week = "DI"; break;
case 6: day_of_week = "MI"; break;
}
// System.out.print("day_of_week:" + day_of_week);
return day_of_week;
}
public static void main(String[] args) {
// TODO Auto-generated method stub
int tag;
Calendar kal = new Calendar();
Scanner s = new Scanner(System.in);
System.out.print("Geben Sie einen Oktober Tag i an ( Format i.10.2010 ) : ");
tag = s.nextInt();
System.out.println("Der " + tag + " . Tag ist ein " + kal.day_of_week(tag));
}
}
Aufgabe 2
[Bearbeiten]/** Prof. Klaus Echtle
* Programmierung WS 10/11
*
* Aufgabe 2
Schreiben Sie ein Java-Programm, welches eine Jahreszahl vom Benutzer
entgegennimmt und ausgibt, ob das angegebene Jahr ein Schaltjahr ist.
Hinweis:
Ein Jahr ist ein Schaltjahr, wenn es durch 4 aber nicht durch 100 teilbar ist, oder
durch 400 teilbar ist.
*/
import java.util.Scanner;
public class Schaltjahr {
/**
* @param args
*/
public boolean ist_Schaltjahr(int jahr){
boolean is_Schaltjahr = false;
if (jahr%4 == 0 && jahr%100 != 0 ){
is_Schaltjahr = true;
}
else if ( jahr % 400 == 0 ) {
is_Schaltjahr = true;
}
return is_Schaltjahr;
}
public static void main(String[] args) {
// TODO Auto-generated method stub
Schaltjahr S = new Schaltjahr();
Scanner s = new Scanner(System.in);
System.out.println("Geben Sie ein Jahr/Schaltjahr ein: ");
int jahr = s.nextInt();
System.out.println("Das "+jahr+". Jahr ist ein "+ S.ist_Schaltjahr(jahr)+ " Schaltjahr.");
s.close();
}
}
Aufgabe 3
[Bearbeiten]/**
Prof. Klaus Echtle
Programmierung WS 10/11
* Aufgabe 3
Schreiben Sie ein Programm, welches die ersten 10000 Elemente der Folge:
a(n+1)= (217*a(n-1)+1) mod 16384
errechnet. (mod ist die Modulo Operation)
Das Programm soll überprüfen, ob drei aufeinander folgende Zahlen unter den
ersten 10000 Elementen sind, die in einem Intervall der Größe 160 liegen. Dies
bedeutet, dass die Differenz zwischen größter und kleinster Zahl dreier aufeinander
folgender Zahlen 160 oder weniger ist.
Falls Zahlen gefunden werden, auf die diese Bedingung zutrifft, sollen die drei
Zahlen sowie der Index der dritten Zahl ausgegeben werden.
Wenn mehrere Zahlengruppen gefunden werden, sollen alle ausgegeben werden.
* @author student
*
*/
public class Modulofolge {
/**
* @param args
*/
public int a_n(int vorgänger){ // berechnet nächstes Folgenglied
return (217*vorgänger+1)%16384;
}
public int getMax(int x,int y,int z){
return Math.max(x,Math.max(y,z));
}
public int getMin(int x,int y,int z){
return Math.min(x,Math.min(y,z));
}
public static void main(String[] args) {
Modulofolge A = new Modulofolge();
// TODO Auto-generated method stub
int ai=1;
for ( int i= 2; i <= 10000; i++ )
{
int aj=A.a_n(ai),ak=A.a_n(aj);
int aktuelles_max = A.getMax(ai, aj, ak);
int aktuelles_min = A.getMin(ai, aj, ak);
if ( Math.abs( aktuelles_max - aktuelles_min ) <= 160 )
{
System.out.println("Die drei aufeianderfolgenden Zahlen 1 - 10 000 innerhalb der Intervallänge sind " +ai+"," + aj +"," +ak);
System.out.println("Index des dritten Folgenglied: "+ i);
}
ai = aj; aj=ak;
}
}
}
Aufgabe 4
[Bearbeiten]public class PI_Reihe {
/**Prof. Klaus Echtle
* Programmierung WS 10/11
* Aufgabe 4
Hinweis: Der / unterscheidet zwischen Ganzzahldivision und Fliesskommazahlen.
Die Kreiszahl PI kann durch die folgende Reihe angenähert werden:
Berechnen Sie PI mittels eines Java-Programms gemäß der obigen Formel.
Das Programm soll nicht unendlich aufsummieren, sondern bricht ab, wenn die
absolute Differenz zwischen der errechneten Zahl ( multipliziert mit 4 ) und der in
Java vordefinierten Konstante Math.PI kleiner als ein voreingestellte Zahl
(Genauigkeit) ist.
Testen Sie Ihr Programm mit den folgenden Genauigkeiten:
• 0,1
• 0,01
• 0,001
Wie verändert sich die Laufzeit Ihres Programms?
Hinweis: Verwenden Sie eine while-Schleife. Den Betrag einer Zahl x können Sie
mit Math.abs(x) berechnen, die Potenz
b a mittels Math.pow(a, b).
* @param args
*
*/
public double getPI(double eps) {
double s = 1; int n=1;
while ( Math.abs(Math.PI - 4*s ) > eps ) {
if ( n %2 == 0)
{
s += (double) 1/(2*n+1);
//System.out.print("n: "+n);
//System.out.print("s: "+s);
}
else if ( n%2 != 0 )
{
s -= (double) 1/(2*n+1);
}
n++;
}
return 4*s;
}
public static void main(String[] args) {
// TODO Auto-generated method stub
double epsilon1 = 0.1 , epsilon2 = 0.01 , epsilon3 = 0.001;
PI_Reihe PI = new PI_Reihe();
System.out.println("Die Zahl PI mit der Genauigkeit "+ epsilon1+" ist:"+PI.getPI(epsilon1));
System.out.println("Die Zahl PI mit der Genauigkeit "+ epsilon2+" ist:"+PI.getPI(epsilon2));
System.out.println("Die Zahl PI mit der Genauigkeit "+ epsilon3+" ist:"+PI.getPI(epsilon3));
}
}