fh.h42.de - What´s the question?
Navigation: [START] [00-ws] [prog] [p-java002.htm]
[print]  [e-mail]  [main]

Java - Schleifen & Funktionen


Lösung zu Übung 11, Aufgabe 1:
/* 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);
    }
}

Lösung zu Übung 11, Aufgabe 2:
/* 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);
    }
}

Lösung zu Übung 11, Aufgabe 3:
/* 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!");
    }
}


Lösung zu Übung 11, Aufgabe 4:
/* 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


(Keine Garantie auf Richtigkeit!)
zurück zur Übersicht
News
12.10.: Seiten zum WS03 aktualisiert
02.09: Seite zum WLAN-Projekt aktualisiert
10.04: Seiten zum SS03 aktualisiert
12.08: Eigene Vorlage für Seminararbeiten der FH hinzugefügt
14.07: Informationen zum 5. Semester hinzugefügt.
14.07: Druckfunktion für die Seiten überarbeitet: Auflistung der Hyperlinks über Fußnoten realisiert.
04.06: Links für IT-Sec neu strukturiert
27.04: Projekte des SS02 hinzugefügt
07.04: Lehrveranstaltungen des SS02 hinzugefügt
07.04: Dokumentation zum X-Terminals Projekt
Navigation: [START] [00-ws] [prog] [p-java002.htm]
[print]  [e-mail]  [main]