Kurs:Programmierung/WS 10 11/Uebung

Aus Wikiversity

Ü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));
		
		

	}

}