Schulaufgabe

Tim83

Mitglied
Hallo,
meine Freundin hat eine Schulaufgabe bekommen bei der ich selber einen Hinweis brauche wie ich für die Lösung dort ansetzen muss.
Ich habe schon verstanden, daß das Programm nach abfrage entweder True oder False zum jeweiligen nächsten Schritt/Ergebnis spring oder zum darunter liegendem else.

Die Aufgabenstellung war nun a) Beschreiben sie die Funktion und b) Vereinfachen sie das Programm (so, daß das selbe Ergebnis erzielt wird).

Für die Vereinfachung habe ich gesehen, daß einige Ergebnisse mehrfach vorkommen, daher die Comments mit //1 etc.

Für jede Hilfe bin ich dankbar, leider habe ich bei google etc. kein Glück gehabt bzw. diese Aufgabe nicht gefunden.

Java:
public class Klausur_4
{
            public static void main(String[] args) throws IOException tab
            {

            int a,b,c,d,e;
            String str;

            //Eingabe von a, b, c, d

            if (b > a)
                        if (c > b)
                                    if (d > c)
                                                e = d; //4
                                    else
                                                e = c; //3
                        else
                                    if (d > b)
                                                e = d; //4
                                    else
                                                e = b; //2
            else
                       if (c > a)
                                   if (d > c)
                                                e = d; //4
                                   else
                                                e = c; //2
                       else
                                   if (d > a)
                                                e = d; //4
                                   else
                                                e = a; //1

            System.out.printIn("e = " + e);

            }
}
 
D

Dow Jones

Gast
Für jede Hilfe bin ich dankbar, leider habe ich bei google etc. kein Glück gehabt bzw. diese Aufgabe nicht gefunden.
Ist das bei Schülern heute üblich, Aufgaben durch googeln nach Lösungen zu bearbeiten?

Sieh mal, damit die Anweisung [c]e = d;[/c] in Zeile 14 ausgeführt wird müssen drei Bedingungen erfüllt sein: b muss größer sein als a und c muss größer sein als b und d muss noch größer sein als c. Dann wird e der Wert von d zugewiesen. Und was wissen wir an der Stelle über den Wert von d?
Wenn die letzte der drei Bedingungen dagegen nicht erfüllt ist (das heisst b ist größer als a und c ist größer als b aber d ist nicht größer als c) dann erhält e stattdessen den Wert von c. Und was wissen wir an der Stelle über den Wert von c?

Wenn man sich alle if/else-Stellen auf diese Weise verdeutlicht wird einem schnell klar welche Funktion sich in diesem Programm "versteckt". Viel Erfolg!
 
H

hüteüberhüte

Gast
Java:
        int a, b, c, d, e;

        //Eingabe von a, b, c, d

        if (b > a) {
            if (c > b) {
                if (d > c) {
                    e = d; //4
                } else {
                    e = c; //3
                }
            } else if (d > b) {
                e = d; //4
            } else {
                e = b; //2
            }
        } else if (c > a) {
            if (d > c) {
                e = d; //4
            } else {
                e = c; //2
            }
        } else if (d > a) {
            e = d; //4
        } else {
            e = a; //1
        }
        System.out.println("e = " + e);

Überleg dir einfach, wann a,b,c,d ausgeben wird und vereinfache dann. Auf den ersten Blick sieht's so aus, als ob das größte Element ausgegeben wird. Das wäre etwas für Landei. :D
 
H

hüteüberhüte

Gast
Falls erlaubt:
Java:
        int a = 0, b = 0, c = 0, d = 0, e;

        //Eingabe von a, b, c, d

        int[] ary = {a, b, c, d};
        Arrays.sort(ary);
        System.out.println("e = " + (e = ary[3]));
 

Tim83

Mitglied
Vielen Dank für die Antworten,
habe nicht gesehen, daß der größte Wert ausgegeben wird.
Wie gesagt, ich bin kein programmierspezi mit Java, komme aus der Meß- und Regeltechnik und habe daher wenn überhaupt eher mit SPS, Leittechnik bzw Schrittketten zu tun.

Daher bitte ich auch Klammersetzung etc zu verbessen.
Denke meine Version dürfte auch funktionieren?



Java:
public class Klausur_4
{
            public static void main(String[] args) throws IOException tab
            {
 
            int a,b,c,d,e;
            String str;
 
            //Eingabe von a, b, c, d
 
            if (a = b = c = d)
            System.out.println("Die Zahlen sind gleich groß.");
                {
                else if ((a > b) & (a > c) & (a > d))
                                                                                     e = a;
                       else if ((b > a) & (b > c) & (b > d))
                                                                                     e = b;
                              else if ((c > a) & (c > b) & (c > d)
                                                                                     e = c;
                                     else if ((d > a) & (d > b) & (d > c)
                                                                                     e = d;
                                                                       
                 System.out.printIn("e = " + e);
                 }
                       }
}
 

Tim83

Mitglied
Habe leider keinen Button zum editieren gefunden, daß ich vergessen habe 2 Klammern zu schließen habe ich gesehen. Die Variante mit dem ary ist klasse, aber das haben sie noch nicht gehabt.

Ist es eventuell, falls meine Variante oben korrekt ist möglich es so weiter zu vereinfachen oder denke ich hier zu sehr an boolsche Algebra?

else if ((a > b) & (a > c) & (a > d))

wird zu

else if (a > (b & c & d))

Java:
public class Klausur_4
{
            public static void main(String[] args) throws IOException tab
            {
 
            int a,b,c,d,e;
            String str;
 
            //Eingabe von a, b, c, d
 
            if (a = b = c = d)
            System.out.println("Die Zahlen sind gleich groß.");
                {
                else if ((a > (b & c & d))
                                                                      e = a;
                       else if (b > (a & c & d))
                                                                      e = b;
                              else if ((c > (a & b & d))
                                                                      e = c;
                                     else if (d > (a & b & c))
                                                                      e = d;
                                                                       
                 System.out.printIn("e = " + e);
                 }
                       }
}

Habe hier auf der Arbeit leider keine Möglichkeit den Code zu testen.
 
Zuletzt bearbeitet:
P

pL4Gu333

Gast
1. IF/ELSE immer mit { } allein schon wegen der Übersicht
2. Zahlenvergleiche macht man mit == nicht mit = das ist eine Zuweisung
3. UND- Verknüpfungen macht man mit &&
4. e sollte initalisiert sein oder nen ELSE Block
 
M

Marcinek

Gast
Alle ifabfragen sind falsch.

= ist ein zuweisungsoperator.

Sowas a> b und c gibt es nicht.
 
D

Dow Jones

Gast
Java:
                else if ((a > (b & c & d))
                                                                      e = a;
                       else if (b > (a & c & d))
                                                                      e = b;
Wie schon gesagt wurde machen diese Abfragen nicht das, was du erreichen möchtest (sondern etwas anderes...). Das sieht zwar so aus als könnte Java das Distributivgesetz anwenden, doch das geschieht nicht. Du müsstest die Abfragen tatsächlich von Hand ausformulieren, also im Stil von
Java:
if ( (a>b) & (a>c) & (a>d) )
Aber selbst dann ist das Programm noch nicht korrekt, denn im Fall das nicht alle vier sondern nur zwei Werte gleich sind trifft keine der Bedingungen zu - und somit wird e auch kein Wert zugewiesen. Beispiel: a=5, b=5, c=3, d=1. Welchen Wert hat e am Ende des Programms?

Das Maximum der vier Werte kann man jedoch auch einfacher bestimmen:
Schritt 1) setze Maximum auf den Wert von a
Schritt 2) wenn b größer als das (bisherige) Maximum ist: Setze Maximum auf den Wert von b
Schritt 3) ...
Schritt 4) ...

Viel Spaß! :)
 
H

hüteüberhüte

Gast
Man kann so etwas eigentlich ganz geschickt mit einer "Variable-Length Argument List" bauen:

Java:
    public static int max(int... a) {
        if (a == null || a.length == 0) {
            return -1;
        }
        int max = a[0];
        for (int i : a) {
            if (i > max) {
                max = i;
            }
        }
        return max;
    }

    public static void main(String[] args) {
        System.out.println(max(5, 4, 3, 2, 1, 6));
    }

Das hat dann allerdings nicht mehr viel mit der if-else if-else-Konstruktion zu tun. :(
 

Ähnliche Java Themen

Neue Themen


Oben