Sitzung: Jeden Freitag in der Vorlesungszeit ab 16 Uhr c. t. im MAR 0.005. In der vorlesungsfreien Zeit unregelmäßig (Jemensch da?). Macht mit!

Javakurs/Übungsaufgaben/Quersumme/Musterloesung: Unterschied zwischen den Versionen

K (fix alignment)
 
Zeile 3: Zeile 3:
 
== Aufgabe 1 ==  
 
== Aufgabe 1 ==  
  
<code>
+
<pre>
public class Quersumme {
+
public class Quersumme {
    /*
+
 
    * Berechnet die Quersumme einer uebergebenen Zahl
+
/*
    */
+
* Berechnet die Quersumme einer uebergebenen Zahl
    public static int berechneQuersumme(int zahl){
+
*/
        int summe = 0;
+
public static int berechneQuersumme(int zahl) {
       
+
int summe = 0;
        while(0 != zahl){
+
while (0 != zahl) {
            //addiere die letzte ziffer der uebergebenen zahl zur summe
+
// addiere die letzte ziffer der uebergebenen zahl zur summe
            summe = summe + (zahl%10);
+
summe = summe + (zahl % 10);
           
+
// entferne die letzte ziffer der uebergebenen zahl
            //entferne die letzte ziffer der uebergebenen zahl
+
zahl = zahl / 10;
            zahl = zahl/10;
+
}
        }
+
return summe;
       
+
}
        return summe;
+
 
    }
+
/*
   
+
* Gibt alle Zahlen innerhalb eines Bereiches [zahlVon, zahlBis] aus, die
    /*
+
* eine bestimmte Quersumme haben
    * Gibt alle Zahlen innerhalb eines Bereiches [zahlVon, zahlBis] aus,
+
*/
    * die eine bestimmte Quersumme haben
+
public static void printZahlenFuerQS(int zahlVon, int zahlBis, int quersumme) {
    */
+
for (int i = zahlVon; i <= zahlBis; i++) {
    public static void printZahlenFuerQS(int zahlVon, int zahlBis, int quersumme){
+
int qs = berechneQuersumme(i);
        for(int i = zahlVon; i <= zahlBis; i++){
+
if (qs == quersumme) {
            int qs = berechneQuersumme(i);
+
System.out.println(i);
           
+
}
            if(qs == quersumme){
+
}
                System.out.println(i);  
+
}
            }
+
 
        }
+
/*
    }
+
* Gibt alle Zahlen innerhalb eines Bereiches [zahlVon, zahlBis] aus, die
   
+
* ein Vielfaches einer bestimmten Quersumme sind.
    /*
+
*/
    * Gibt alle Zahlen innerhalb eines Bereiches [zahlVon, zahlBis] aus,
+
public static void printZahlenFuerVielfachesQS(int zahlVon, int zahlBis, int quersumme) {
    * die ein Vielfaches einer bestimmten Quersumme sind.
+
for (int i = zahlVon; i <= zahlBis; i++) {
    */
+
int qs = berechneQuersumme(i);
    public static void printZahlenFuerVielfachesQS(int zahlVon, int zahlBis, int quersumme){
+
 
        for(int i = zahlVon; i <= zahlBis; i++){
+
if (0 != qs && 0 == (qs % quersumme)) {
            int qs = berechneQuersumme(i);
+
System.out.println(i);
           
+
}
            if(0 != qs && 0 == (qs % quersumme)){
+
}
                System.out.println(i);  
+
}
            }
+
 
        }
+
/*
    }
+
* Berechnet wie haeufig die Quersummen innerhalb eines bestimmten Bereiches
   
+
* [zahlVon, zahlBis] vorkommen und gibt diese als Array der Form
    /*
+
* array[quersumme] = Anzahl zurueck
    * Berechnet wie haeufig die Quersummen innerhalb eines bestimmten Bereiches [zahlVon, zahlBis]
+
*/
    * vorkommen und gibt diese als Array der Form array[quersumme] = Anzahl zurueck
+
public static int[] berechneHaeufigkeiten(int zahlVon, int zahlBis) {
    */
+
int anzahlQuersummen = 0;
    public static int[] berechneHaeufigkeiten(int zahlVon, int zahlBis){
+
int temp = zahlBis;
        int anzahlQuersummen = 0;
+
while (0 != temp) {
        int temp = zahlBis;
+
anzahlQuersummen = anzahlQuersummen + 1;
        while(0 != temp){
+
temp = temp / 10;
            anzahlQuersummen = anzahlQuersummen + 1;
+
}
            temp = temp / 10;
+
int[] quersummen = new int[anzahlQuersummen * 9];
        }
+
for (int i = zahlVon; i <= zahlBis; i++) {
       
+
int qs = berechneQuersumme(i);
        int[] quersummen = new int[anzahlQuersummen*9];
+
quersummen[qs] = quersummen[qs] + 1;
       
+
}
        for(int i = zahlVon; i <= zahlBis; i++){
+
return quersummen;
            int qs = berechneQuersumme(i);
+
}
            quersummen[qs] = quersummen[qs] + 1;
+
 
        }
+
/*
       
+
* Berechnet den hoechsten Wert eines uebergebenen Arrays
        return quersummen;
+
*/
    }
+
public static int berechneArrayMaximum(int[] quersummen) {
   
+
int max = 0;
    /*
+
for (int i = 0; i < quersummen.length; i++) {
    * Berechnet den hoechsten Wert eines uebergebenen Arrays
+
if (quersummen[i] >= max) {
    */
+
max = quersummen[i];
    public static int berechneArrayMaximum(int[] quersummen){
+
}
        int max = 0;
+
}
       
+
return max;
        for(int i = 0; i < quersummen.length; i++){
+
}
            if(quersummen[i] >= max){
+
 
                max = quersummen[i];
+
/*
            }
+
* Gibt die am häufigsten vorkommende Quersumme innerhalb eines bestimmten
        }
+
* Bereichs [zahlVon, zahlBis] auf der Konsole aus
       
+
*/
        return max;
+
public static void printMaxQuersumme(int zahlVon, int zahlBis) {
    }
+
int[] quersummen = berechneHaeufigkeiten(zahlVon, zahlBis);
   
+
System.out.println(berechneArrayMaximum(quersummen));
    /*
+
}
    * Gibt die am häufigsten vorkommende Quersumme innerhalb eines bestimmten  
+
 
    * Bereichs [zahlVon, zahlBis] auf der Konsole aus
+
/*
    */
+
* Gibt die iterierte Quersumme einer uebergebenen Zahl auf der Konsole aus
    public static void printMaxQuersumme(int zahlVon, int zahlBis){
+
*/
        int[] quersummen = berechneHaeufigkeiten(zahlVon, zahlBis);
+
public static void printIterierteQuersumme(int zahl) {
        System.out.println(berechneArrayMaximum(quersummen));
+
int iterierteQuersumme = zahl;
    }
+
while (0 != zahl) {
   
+
iterierteQuersumme = berechneQuersumme(iterierteQuersumme);
    /*
+
zahl = zahl / 10;
    * Gibt die iterierte Quersumme einer uebergebenen Zahl auf der Konsole aus
+
}
    */
+
System.out.println(iterierteQuersumme);
    public static void printIterierteQuersumme(int zahl){
+
}
        int iterierteQuersumme = zahl;
+
 
        while(0 != zahl){
+
/*
            iterierteQuersumme = berechneQuersumme(iterierteQuersumme);
+
* Berechnet das Querprodukt einer uebergebenen Zahl
            zahl = zahl / 10;
+
*/
        }
+
public static int berechneQuerprodukt(int zahl) {
       
+
int produkt = 1;
        System.out.println(iterierteQuersumme);
+
 
    }
+
while (0 != zahl) {
   
+
// multipliziere die letzte ziffer der uebergebenen zahl zum produkt
    /*
+
produkt = produkt * (zahl % 10);
    * Berechnet das Querprodukt einer uebergebenen Zahl
+
 
    */
+
// entferne die letzte ziffer der uebergebenen zahl
    public static int berechneQuerprodukt(int zahl){
+
zahl = zahl / 10;
        int produkt = 1;
+
}
       
+
 
        while(0 != zahl){
+
return produkt;
            //multipliziere die letzte ziffer der uebergebenen zahl zum produkt
+
}
            produkt = produkt * (zahl%10);
+
 
           
+
/*
            //entferne die letzte ziffer der uebergebenen zahl
+
* Gibt die Zahlen innerhalb eines Bereiches [zahlVon, zahlBis] auf der
            zahl = zahl/10;
+
* Konsole aus, für die gilt Zahl = Quersumme + Querprodukt
        }
+
*/
       
+
public static void printQuersummeQuerprodukt(int zahlVon, int zahlBis) {
        return produkt;
+
for (int i = zahlVon; i <= zahlBis; i++) {
    }
+
int qs = berechneQuersumme(i);
   
+
int qp = berechneQuerprodukt(i);
    /*
+
 
    * Gibt die Zahlen innerhalb eines Bereiches [zahlVon, zahlBis] auf der Konsole aus,
+
if (i == (qs + qp)) {
    * für die gilt Zahl = Quersumme + Querprodukt
+
System.out.println(i);
    */
+
}
    public static void printQuersummeQuerprodukt(int zahlVon, int zahlBis){
+
}
        for(int i = zahlVon; i <= zahlBis; i++){
+
}
            int qs = berechneQuersumme(i);
+
 
            int qp = berechneQuerprodukt(i);
+
public static void main(String[] args) {
           
+
// Gib alle Zahlen von 0-1000 aus, welche die Quersumme 15 haben
            if(i == (qs+qp)){
+
printZahlenFuerQS(0, 1000, 15);
                System.out.println(i);
+
 
            }
+
// Gib alle Zahlen von 0-1000 aus, deren Quersumme ein Vielfaches von 17 ist
        }
+
printZahlenFuerVielfachesQS(0, 1000, 7);
    }
+
 
   
+
// Gib die am haeufigsten vorkommende Quersumme von 0-1000 aus
   
+
printMaxQuersumme(0, 1000);
    public static void main(String[] args){
+
 
        //Gib alle Zahlen von 0-1000 aus, welche die Quersumme 15 haben
+
// Gib die iterierte Quersumme von 47 aus
        printZahlenFuerQS(0, 1000, 15);
+
printIterierteQuersumme(47);
       
+
 
        //Gib alle Zahlen von 0-1000 aus, deren Quersumme ein Vielfaches von 17 ist
+
// Gib alle Zahlen aus für die gilt Zahl = Quersumme + Querprodukt
        printZahlenFuerVielfachesQS(0, 1000, 7);
+
printQuersummeQuerprodukt(0, 1000);
       
+
 
        //Gib die am haeufigsten vorkommende Quersumme von 0-1000 aus
+
}
        printMaxQuersumme(0, 1000);
+
}
       
+
</pre>
        //Gib die iterierte Quersumme von 47 aus
 
        printIterierteQuersumme(47);
 
       
 
        //Gib alle Zahlen aus für die gilt Zahl = Quersumme + Querprodukt
 
        printQuersummeQuerprodukt(0, 1000);
 
       
 
    }
 
   
 
}
 
</code>
 
  
 
# Spalte die einzelnen Ziffern mittels Division und Modulo-Operation ab und addiere sie, um die Quersumme zu bestimmen.
 
# Spalte die einzelnen Ziffern mittels Division und Modulo-Operation ab und addiere sie, um die Quersumme zu bestimmen.
Zeile 409: Zeile 399:
 
== Aufgabe 2 ==  
 
== Aufgabe 2 ==  
  
<code>
+
<pre>
public class BoesenSieben {
+
public class BoeseSieben {
    /*
+
/*
    * Bestimmt ob eine uebergebene Zahl durch eine zweite uebergebene Zahl teilbar ist
+
* Bestimmt ob eine uebergebene Zahl durch eine zweite uebergebene Zahl
    */
+
* teilbar ist
    public static boolean istTeilbar(int zahl, int durch){
+
*/
        if(durch == 0){
+
public static boolean istTeilbar(int zahl, int durch) {
            return false;
+
if (durch == 0) {
        }
+
return false;
       
+
}
        return (zahl%durch == 0);
+
return (zahl % durch == 0);
    }
+
}
   
+
 
    /*
+
/*
    * Bestimmt ob eine uebergebene Zahl eine zweite uebergebene Zahl als Ziffer enthält
+
* Bestimmt ob eine uebergebene Zahl eine zweite uebergebene Zahl als Ziffer
    */
+
* enthält
    public static boolean enthaelt(int zahl, int ziffer){
+
*/
       
+
public static boolean enthaelt(int zahl, int ziffer) {
        while(0 != zahl){
+
while (0 != zahl) {
            if(ziffer == (zahl % 10)){
+
if (ziffer == (zahl % 10)) {
                return true;
+
return true;
            }
+
}
           
+
zahl = zahl / 10;
            zahl = zahl / 10;
+
}
        }
+
return false;
       
+
}
        return false;
+
 
    }
+
public static void main(String[] args) {
   
+
int zahl = 14;
   
+
if (enthaelt(zahl, 7) || istTeilbar(zahl, 7)) {
    public static void main(String[] args){
+
System.out.println("Die nächste Zahl muss übersprungen werden");
        int zahl = 14;
+
} else {
       
+
System.out.println("Die nächste Zahl darf nicht übersprungen werden");
        if(enthaelt(zahl, 7) || istTeilbar(zahl, 7)){
+
}
            System.out.println("Die nächste Zahl muss übersprungen werden");
+
}
        } else {
+
}
            System.out.println("Die nächste Zahl darf nicht übersprungen werden");
+
</pre>
        }
 
    }
 
}
 
</code>
 
  
 
== Kommentare ==
 
== Kommentare ==
 
Wenn du Anmerkungen zur Aufgabe hast oder Lob und Kritik loswerden möchtest ist hier die richtige Stelle dafür. Klicke einfach ganz rechts auf "bearbeiten" und schreibe deinen Kommentar direkt ins Wiki. Keine Scheu, es geht nichts kaputt ;)
 
Wenn du Anmerkungen zur Aufgabe hast oder Lob und Kritik loswerden möchtest ist hier die richtige Stelle dafür. Klicke einfach ganz rechts auf "bearbeiten" und schreibe deinen Kommentar direkt ins Wiki. Keine Scheu, es geht nichts kaputt ;)

Aktuelle Version vom 4. März 2013, 19:02 Uhr

Hinweis: Die Musterlösung kann von eurer Lösung abweichen, da es immer mehrere Varianten gibt ein Problem zu lösen. Im Zweifelsfall Fragt einen Tutor.

Aufgabe 1

public class Quersumme {

	/*
	 * Berechnet die Quersumme einer uebergebenen Zahl
	 */
	public static int berechneQuersumme(int zahl) {
		int summe = 0;
		while (0 != zahl) {
			// addiere die letzte ziffer der uebergebenen zahl zur summe
			summe = summe + (zahl % 10);
			// entferne die letzte ziffer der uebergebenen zahl
			zahl = zahl / 10;
		}
		return summe;
	}

	/*
	 * Gibt alle Zahlen innerhalb eines Bereiches [zahlVon, zahlBis] aus, die
	 * eine bestimmte Quersumme haben
	 */
	public static void printZahlenFuerQS(int zahlVon, int zahlBis, int quersumme) {
		for (int i = zahlVon; i <= zahlBis; i++) {
			int qs = berechneQuersumme(i);
			if (qs == quersumme) {
				System.out.println(i);
			}
		}
	}

	/*
	 * Gibt alle Zahlen innerhalb eines Bereiches [zahlVon, zahlBis] aus, die
	 * ein Vielfaches einer bestimmten Quersumme sind.
	 */
	public static void printZahlenFuerVielfachesQS(int zahlVon, int zahlBis, int quersumme) {
		for (int i = zahlVon; i <= zahlBis; i++) {
			int qs = berechneQuersumme(i);

			if (0 != qs && 0 == (qs % quersumme)) {
				System.out.println(i);
			}
		}
	}

	/*
	 * Berechnet wie haeufig die Quersummen innerhalb eines bestimmten Bereiches
	 * [zahlVon, zahlBis] vorkommen und gibt diese als Array der Form
	 * array[quersumme] = Anzahl zurueck
	 */
	public static int[] berechneHaeufigkeiten(int zahlVon, int zahlBis) {
		int anzahlQuersummen = 0;
		int temp = zahlBis;
		while (0 != temp) {
			anzahlQuersummen = anzahlQuersummen + 1;
			temp = temp / 10;
		}
		int[] quersummen = new int[anzahlQuersummen * 9];
		for (int i = zahlVon; i <= zahlBis; i++) {
			int qs = berechneQuersumme(i);
			quersummen[qs] = quersummen[qs] + 1;
		}
		return quersummen;
	}

	/*
	 * Berechnet den hoechsten Wert eines uebergebenen Arrays
	 */
	public static int berechneArrayMaximum(int[] quersummen) {
		int max = 0;
		for (int i = 0; i < quersummen.length; i++) {
			if (quersummen[i] >= max) {
				max = quersummen[i];
			}
		}
		return max;
	}

	/*
	 * Gibt die am häufigsten vorkommende Quersumme innerhalb eines bestimmten
	 * Bereichs [zahlVon, zahlBis] auf der Konsole aus
	 */
	public static void printMaxQuersumme(int zahlVon, int zahlBis) {
		int[] quersummen = berechneHaeufigkeiten(zahlVon, zahlBis);
		System.out.println(berechneArrayMaximum(quersummen));
	}

	/*
	 * Gibt die iterierte Quersumme einer uebergebenen Zahl auf der Konsole aus
	 */
	public static void printIterierteQuersumme(int zahl) {
		int iterierteQuersumme = zahl;
		while (0 != zahl) {
			iterierteQuersumme = berechneQuersumme(iterierteQuersumme);
			zahl = zahl / 10;
		}
		System.out.println(iterierteQuersumme);
	}

	/*
	 * Berechnet das Querprodukt einer uebergebenen Zahl
	 */
	public static int berechneQuerprodukt(int zahl) {
		int produkt = 1;

		while (0 != zahl) {
			// multipliziere die letzte ziffer der uebergebenen zahl zum produkt
			produkt = produkt * (zahl % 10);

			// entferne die letzte ziffer der uebergebenen zahl
			zahl = zahl / 10;
		}

		return produkt;
	}

	/*
	 * Gibt die Zahlen innerhalb eines Bereiches [zahlVon, zahlBis] auf der
	 * Konsole aus, für die gilt Zahl = Quersumme + Querprodukt
	 */
	public static void printQuersummeQuerprodukt(int zahlVon, int zahlBis) {
		for (int i = zahlVon; i <= zahlBis; i++) {
			int qs = berechneQuersumme(i);
			int qp = berechneQuerprodukt(i);

			if (i == (qs + qp)) {
				System.out.println(i);
			}
		}
	}

	public static void main(String[] args) {
		// Gib alle Zahlen von 0-1000 aus, welche die Quersumme 15 haben
		printZahlenFuerQS(0, 1000, 15);

		// Gib alle Zahlen von 0-1000 aus, deren Quersumme ein Vielfaches von 17 ist
		printZahlenFuerVielfachesQS(0, 1000, 7);

		// Gib die am haeufigsten vorkommende Quersumme von 0-1000 aus
		printMaxQuersumme(0, 1000);

		// Gib die iterierte Quersumme von 47 aus
		printIterierteQuersumme(47);

		// Gib alle Zahlen aus für die gilt Zahl = Quersumme + Querprodukt
		printQuersummeQuerprodukt(0, 1000);

	}
}
  1. Spalte die einzelnen Ziffern mittels Division und Modulo-Operation ab und addiere sie, um die Quersumme zu bestimmen.

Siehe Methode berechneQuersumme

  1. Gib alle Zahlen von 0 - 1000 aus, welche die Quersumme 15 haben.

69
78
87
96
159
168
177
186
195
249
258
267
276
285
294
339
348
357
366
375
384
393
429
438
447
456
465
474
483
492
519
528
537
546
555
564
573
582
591
609
618
627
636
645
654
663
672
681
690
708
717
726
735
744
753
762
771
780
807
816
825
834
843
852
861
870
906
915
924
933
942
951
960

  1. Gib alle Zahlen von 0 - 1000 aus, deren Quersumme ein Vielfaches von 7 ist.

7
16
25
34
43
52
59
61
68
70
77
86
95
106
115
124
133
142
149
151
158
160
167
176
185
194
205
214
223
232
239
241
248
250
257
266
275
284
293
304
313
322
329
331
338
340
347
356
365
374
383
392
399
403
412
419
421
428
430
437
446
455
464
473
482
489
491
498
502
509
511
518
520
527
536
545
554
563
572
579
581
588
590
597
601
608
610
617
626
635
644
653
662
669
671
678
680
687
696
700
707
716
725
734
743
752
759
761
768
770
777
786
795
806
815
824
833
842
849
851
858
860
867
876
885
894
905
914
923
932
939
941
948
950
957
966
975 
984
993

  1. Welche Quersumme der Zahlen von 0 - 1000 kommt am häufigsten vor? (Tipp: Überlegt Euch, wie viel verschiedene Quersummen vorkommen können, erstellt ein Array dieser Größe und speichert dort die Anzahl der Vorkomnisse)

75

  1. Die iterierte Quersumme wird auch Ziffernwurzel genannt (Abk. zw) Beispiel:
    47 --> 4 + 7 = 11 --> 1 + 1 = 2, also zw(47)=2
    Schreibt ein Programm, welches die Ziffernwurzel für eine beliebige Zahl bestimmt.

Siehe Methode printIterierteQuersumme

  1. Das Querprodukt ist wie folgt definiert: 68 = 6 * 8 = 48. Es gibt Zahlen, bei denen die Summe aus Quersumme und Querprodukt wieder die Zahl selbst ergibt Beispiel: 79 = 7 + 9 + 7*9 = 79. Gibt es weitere Zahlen zwischen 0 und 1000 mit dieser Eigenschaft? Wenn ja, welche ?

19
29
39
49
59
69 
79 
89
99

Aufgabe 2

public class BoeseSieben {
	/*
	 * Bestimmt ob eine uebergebene Zahl durch eine zweite uebergebene Zahl
	 * teilbar ist
	 */
	public static boolean istTeilbar(int zahl, int durch) {
		if (durch == 0) {
			return false;
		}
		return (zahl % durch == 0);
	}

	/*
	 * Bestimmt ob eine uebergebene Zahl eine zweite uebergebene Zahl als Ziffer
	 * enthält
	 */
	public static boolean enthaelt(int zahl, int ziffer) {
		while (0 != zahl) {
			if (ziffer == (zahl % 10)) {
				return true;
			}
			zahl = zahl / 10;
		}
		return false;
	}

	public static void main(String[] args) {
		int zahl = 14;
		if (enthaelt(zahl, 7) || istTeilbar(zahl, 7)) {
			System.out.println("Die nächste Zahl muss übersprungen werden");
		} else {
			System.out.println("Die nächste Zahl darf nicht übersprungen werden");
		}
	}
}

Kommentare

Wenn du Anmerkungen zur Aufgabe hast oder Lob und Kritik loswerden möchtest ist hier die richtige Stelle dafür. Klicke einfach ganz rechts auf "bearbeiten" und schreibe deinen Kommentar direkt ins Wiki. Keine Scheu, es geht nichts kaputt ;)