/* Quersumme.java
$DATE (22.12.2000)
$AUTH Lars Ehrhardt
$VER 1.0
Übung 11 - Aufgabe 1:
Berechnet die Quersumme einer eingebenen Zahl!
Lösung: Die eingegebene Zahl / 10 teilen und
den Rest jeweils bestimmen. Dadurch erhält man
jeweils die letzte Ziffer der Zahl und kann diese
so aufaddieren.
*/
class Quersumme {
public static void main(String arguments[]){
int Zahl, Quersumme;
Zahl = 32345;
Quersumme = 0;
System.out.print("Die Quersumme von " + Zahl + " lautet: ");
while (Zahl != 0) {
Quersumme = Quersumme + Zahl % 10;
Zahl = Zahl / 10;
}
System.out.println(Quersumme);
}
}
/* Addition.java
$DATE (22.12.2000)
$AUTH Lars Ehrhardt
$VER 1.0
Übung 11 - Aufgabe 2:
Schreiben Sie ein Programm, das die Summe 1 - 1/2 + 1/3 - 1/4 ... + 1/99999 - 1/10000 berechnet.
*/
class Addition {
public static void main(String arguments[]){
double Zahl;
Zahl = 0;
for(double i = 1; i <= 10000; i++){
if(i % 2 == 0) Zahl = Zahl - 1/i;
else Zahl = Zahl + 1/i;
}
System.out.println("Ergebnis der strikten Links-Addition: " + Zahl);
Zahl = 0;
for(double i = 10000; i >= 1; i--) {
if(i % 2 == 0) Zahl = Zahl - 1/i;
else Zahl = Zahl + 1/i;
}
System.out.println("Ergebnis der strikten Rechts-Addition: " + Zahl);
Zahl = 0;
for(double i = 1; i <= 10000; i = i + 2)
Zahl = Zahl + 1/i;
for(double i=2; i <= 10000; i = i + 2)
Zahl = Zahl - 1/i;
System.out.println("Ergebnis der getrennten Links-Addition: " + Zahl);
Zahl = 0;
for(double i = 10000; i >= 1; i = i - 2)
Zahl = Zahl - 1/i;
for(double i = 9999; i >= 1; i = i - 2)
Zahl = Zahl + 1/i;
System.out.println("Ergebnis der getrennten Rechts-Addition: " + Zahl);
}
}
/* DayCount.java
$DATE (22.12.2000)
$AUTH Lars Ehrhardt
$VER 1.1
Übung 11; Aufgabe 3
Schreiben Sie ein Programm, das die Tagnr. eines gegebenen Jahresdatums angibt.
Beispiel: Der 15.02.2001 ist der 46. Tag des Jahres
(Hinweis: Schaltjahrberechnung beachten!)
Hinweis2: Ich war zu faul, noch eine Abfrage einzubauen, ob der Benutzer
auch ein gültiges Datum angegeben hat.
Folgende Eingabe würde zum Beispiel nicht abgefangen werden: 39.02.2000 ...
Wer unbedingt will, kann dies ja noch hinzufügen!
*/
class DayCount {
public static void main(String arguments[]){
int day, month, year;
int days, febdays;
day = 15;
month = 2;
year = 2000;
// Handelt es sich um ein Schaltjahr?
if ((year % 4) == 0)
if ((year % 100) == 0)
if ((year % 400) == 0)
febdays = 29;
else
febdays = 28;
else
febdays = 29;
else
febdays = 28;
// 1. Moeglichkeit, das Problem zu loesen
days = day;
if (month > 1) days = days + 31;
if (month > 2) days = days + febdays;
if (month > 3) days = days + 30;
if (month > 4) days = days + 31;
if (month > 5) days = days + 30;
if (month > 6) days = days + 31;
if (month > 7) days = days + 31;
if (month > 8) days = days + 30;
if (month > 9) days = days + 31;
if (month > 10) days = days + 30;
if (month > 11) days = days + 31;
System.out.println("Der " + day + "." + month + "." + year + " ist der " + days + ". Tag im Jahr!");
// 2. Moeglichkeit
days = 0; // Tage wieder auf 0 setzen
switch(month) {
case 1: days = day; break;
case 2: days = 31 + day; break;
case 3: days = 31 + febdays + day; break;
case 4: days = 31 + febdays + 31 + day; break; // oder: 62 + febdays + day
case 5: days = 31 + febdays + 31 + 30 + day; break; //oder: 92 + febdays + day
case 6: days = 30 + febdays + 31 + 30 + 31 + day; break; //oder: 123 + febdays + day
case 7: days = 31 + febdays + 31 + 30 + 31 + 30 + day; break; //oder: 153 + febdays + day
case 8: days = 31 + febdays + 31 + 30 + 31 + 30 + 31 + day; break; //oder: 184 + febdays + day
case 9: days = 31 + febdays + 31 + 30 + 31 + 30 + 31 + 31 + day; break; //oder: 215 + febdays + day
case 10: days = 31 + febdays + 31 + 30 + 31 + 30 + 31 + 31 + 30 + day; break; //oder: 245 + febdays + day
case 11: days = 31 + febdays + 31 + 30 + 31 + 30 + 31 + 31 + 30 + 31 + day; break; //oder: 276 + febdays + day
case 12: days = 31 + febdays + 31 + 30 + 31 + 30 + 31 + 31 + 30 + 31 + 30 + day; break; //oder: 306 + febdays + day
}
System.out.println("Der " + day + "." + month + "." + year + " ist der " + days + ". Tag im Jahr!");
}
}
/* DrawChars.java
$DATE (06.01.2001)
$AUTH Lars Ehrhardt
$VER 2.1
Übung 11 - Aufgabe 4
Schreiben Sie ein Programm, das einen Tannenbaum oder ein Sektglas
aus "*" zeichnet.
Die Höhe der Baumkrone bzw. die Breite des Sektkelches sollen dabei
durch eine Variable einstellbar sein.
Beispiel:
******* - *
******* - ***
***** - *****
***** - *******
*** - *********
*** - ***********
* - *************
* - ***************
* + *
* + *
*** + ***
(- Krone/Sektkelch, + Stil)
Hintergrundüberlegungen:
Hier kommt mal wieder die Mathematik mit ins Spiel!
a)
Über die Sektkelchbreite erhalten wir den Startwert.
Beispiel: Der Sektkelch ist 7 Sterne breit.
Die 1. + 2. Zeile bestehen aus 0 Leerzeichen und 7 Sternen.
Die 3. + 4. Zeile bestehen aus 1 Leerzeichen und 5 Sternen.
Die 5. + 6. Zeile bestehen aus 2 Leerzeichen und 3 Sternen.
Die 7. + 8. Zeile bestehen aus 3 Leerzeichen und 1 Stern.
Somit erhalten wir den Sektkelch.
Der Sektstiel besteht in unserem Beispiel aus der
7., 8. und 6. Zeile.
b) Weihnachtsbaum:
Hier drehen wir die Überlegungen zum Sektkelch einfach mal um.
Beispiel: Bei einer Baumkronenhöhe von 8 Zeilen besteht die
breiteste Zeile aus (8-8) Leerzeichen und 15 Sternen.
Die Zeile davor besteht aus (8-7) Leerzeichen und 13 Sternen.
Die Zeile davor besteht aus (8-6) Leerzeichen und 11 Sternen.
...
Die 1. Zeile besteht aus (8-1) Leerzeichen und 1 Stern.
Die 0. Zeile besteht aus (8-0) Leerzeichen und 0 Sternen.
Allgemeine Formel für die Baumkrone:
Leerzeichen: Sternzeichen:
Baumkrone-Indexzähler, (Indexzähler*2)-1
Somit erhalten wir die Baumkrone.
Der Baumstiel besteht aus 2x der 1. Zeile und 1x der 3. Zeile.
Genug, der Überlegungen, hier der Code:
*/
class DrawChars {
public static void main(String arguments[]) {
int TreeLength = 8; // Höhe der Baumkrone
int GlassWidth = 7; // Breite des Sektkelches
int Mode = 1; // 1: Sektglass zeichnen, <>1: Weihnachtsbaum
if (Mode == 1) ChampagneGlass(GlassWidth);
else ChristmasTree(TreeLength);
} //main
/*******************************************************************
* Spezielle Subroutinen *
*******************************************************************/
public static void ChampagneGlass(int GlassWidth){
if (GlassWidth % 2 != 1) GlassWidth = GlassWidth - 1;
int EmptyWidth = 0;
int CurrentWidth = EmptyWidth + GlassWidth;
// Sektkelch zeichnen
while (CurrentWidth > 0) {
for(int i = 0; i < 2; i++)
DrawLine(EmptyWidth,GlassWidth);
EmptyWidth = EmptyWidth + 1;
GlassWidth = GlassWidth - 2;
CurrentWidth = CurrentWidth - 2;
} //while CurrentWidth > 0
// Sektstiel zeichnen
for(int i = 1; i <= 2; i++) {
EmptyWidth = EmptyWidth - 1;
GlassWidth = GlassWidth + 2;
if (i == 1) {
for(int j = 0; j < 2; j++)
DrawLine(EmptyWidth, GlassWidth);
} // if (i == 1)
else
DrawLine(EmptyWidth, GlassWidth);
} //for (int i = 1)
} // ChampagneGlass
public static void ChristmasTree(int TreeLength) {
// Baumkrone zeichnen
for(int i = 1; i <= TreeLength; i++)
DrawLine(((TreeLength-i)),(2*i-1));
// Baumstiel zeichnen
for(int i = 0; i < 2; i++)
DrawLine(((TreeLength-1)),1);
DrawLine(((TreeLength-2)),3);
} // ChristmasTree
/*******************************************************************
* Allgemeine Subroutinen *
*******************************************************************/
/* Funktion um die Leerstellen, und die Sternstellen zu zeichnen
Übergabeparameter: FirstWidth, Integer, Länge der Leerstellen
SecondWidth, Integer, Länge der Sternstellen
*/
public static void DrawLine(int FirstWidth, int SecondWidth) {
DrawChar(" ", FirstWidth);
DrawChar("*", SecondWidth);
System.out.println(); // Zeilenabschluss
}
/* Funktion um eine beliebige Anzahl von Zeichen auszugeben
Übergabeparameter: DrawChar, String, Zeichen, das ausgegeben werden soll
CharLength, Integer, Länge der Zeile
*/
public static void DrawChar(String DrawChar, int CharLength) {
for(int i = 0; i < CharLength; i++)
System.out.print(DrawChar);
}
} //class DrawChars