Aufgaben

animeLoan

Mitglied
Hey Leute,
ich bin leider eine volle Niete und muss 3 programme schreiben, und Struktogramme erstellen. Ich kann es einfach nicht, könnt ihr mir helfen? Ich bräuchte nur ein Lösungansatz: Hier die Aufgaben
1.
Schreiben Sie ein Programm, das zwei verschiedene ganze Zahlen a und b einliest und
die größere von beiden Zahlen auf dem Bildschirm ausgibt. Wenn beide Zahlen gleich
groß sind, wird diese Zahl ausgegeben.
2.
Schreiben Sie ein Programm, das 3 verschiedene ganze Zahlen a,b,c einliest und die
größte Zahl von diesen 3 Zahlen auf dem Bildschirm ausgibt.
3.
chreiben Sie ein Programm Median, das 3 verschiedene ganze Zahlen a,b,c einliest
und den mittleren der drei Werte ausgibt. Damit ist nicht der arithmetische Mittelwert
(a+b+c) / 3 gemeint. Denken Sie sich a, b und c der Größe nach geordnet. Das
Programm gibt den Wert aus, der dann in der Mitte steht.

Wäre echt toll, wenn ihr mir ein Lösungsvorschlag vorstellen könnt.
 
Dann Fange doch mal an nachzudenken in der Aufgabe steht es soll was eingegeben werden.
Mit was ist es den möglich eine Eingabe zumachen?

Das ist eine Hausaufgabe die sollst du schon selber machen wir können dir vielleicht dabei helfen wenn du uns genau sagst wo du nicht weiter kommst.

Bis jetzt haben wir von einem Lösungsversuch noch nichts gesehen.
 
Also als allerersten Anstatz könntest du einfach in der Main Methode mithilfe von einem Scanner zwei Eingaben hintereinander einlesen. Danach kannst du mit einer einfachen If-Abfrage überprüfen, ob die erste Eingabe größer ist als die zweite, und wenn ja, diese Ausgeben. Wenn nicht, dann gibst du die andere aus.

So, wie die Aufgaben gestellt sind, wird wahrscheinlich darauf abgezielt, dass man das fertige Programm aus 1. dann erweitert, sodass 2. gelöst ist. Bei Aufgabe 3. steht dann ja sogar drin, dass man die Eingegebenen Werte sortieren und dann den mittleren nehmen kann.
 
Ich bräuchte nur ein Lösungansatz
Naja, die Aufgaben sind so konzipiert, dass sie den Lösungsansatz unmittelbar enthalten.

Schreiben Sie ein Programm, das zwei verschiedene ganze Zahlen a und b einliest und
die größere von beiden Zahlen auf dem Bildschirm ausgibt. Wenn beide Zahlen gleich
groß sind, wird diese Zahl ausgegeben.
Programm:
1. Lies ganze Zahlen a und b ein.
2. Falls a größer als b ist, gib a aus.
3. Falls b größer als a ist, gib b aus.
4. Falls a gleich b ist, gib a aus.

Das würde die Aufgabe lösen, die Fallunterscheidungen sind aber etwas umständlich. Man kann sich überlegen, dass für den Fall, dass a > b nicht gilt, offensichtlich a <= b gelten muss. D. h. die Zeilen 2 bis 4 kann man zusammenfassen:

Programm:
1. Lies ganze Zahlen a und b ein.
2. Falls a größer als b ist, gib a aus sonst gib b aus.

Jetzt enthält 1. noch zwei Schritte auf einmal, die wir noch trennen:
1. Lies ganze Zahl a ein.
2. Lies ganze Zahl b ein.
3. Falls a größer als b ist, gib a aus sonst gib b aus.

Das kannst Du 1:1 in ein Struktogramm übertragen und bist diesbezüglich schon mal fertig. Außerdem musst Du jeden der Punkte nur noch als Java-Code formulieren, dann hast Du auch das erledigt.
 
Sorry, bei der zweiten Aufgabe hab ich halt schon mal das, aber ich weiß nicht wie ich diese Bedingung rein mache, funktioniert nur gibt er mir die zwei größten aus.

import java.util.Scanner;
public class median_b {
public static void main(String[] args) {
System.out.print("Geben sie die erste Zahl ein: ");
int a = (new Scanner(System.in)).nextInt();
System.out.print("Geben sie die zweite Zahl ein: ");
int b = (new Scanner(System.in)).nextInt();
System.out.print("Geben sie die dritte Zahl ein: ");
int c = (new Scanner(System.in)).nextInt();
if (a > b) {
if (a >= c) {
System.out.println("Die größte Zahl ist:" + a);
} else {
System.out.println("Die größte Zahl ist:" + c);
}
}
if (a < b) {
System.out.println("Die größte Zahl ist:" + a);
} else {
System.out.println("Die größte Zahl ist:" + b);
}
if (a == b);

if (a < b){
System.out.print("Die größte Zahl ist: " + b);
}
}
}
 
Zuletzt bearbeitet:
Java:
if (a<b || a>b || a==b)
nicht allles auf einmal prüfen
es gibt auch noch das "else" beim "if"

also wenn a>b true ist sollst du b ausgeben
wenn nein " else" prüfe weiter
 
wir haben hier noch was gegeben:
tip: vergleichen Sie zuerst die Eingabe a mit Eingabe b (if Block). Was ist, wenn
1.) a größer ist als b
2.) a kleiner ist als b
3.) a gleich b ist
Dann muss man in die if Blöcke für 1.), 2.) und 3.) weitere if Blöcke
„hineinschachteln“.
Beispiel: angenommen a ist größer als b (1. Fall von oben). Dann müssen Sie in diesen
if Block folgende weitere if Blöcke einschachteln:
- ist a größer oder gleich c? Wenn ja, dann ist a die größte Zahl.
- wenn a kleiner als c ist, dann ist c die größte Zahl, denn a ist ja bereits
größer als b.
if (a > b) {
if (a > = c) {
System.out.println(ʺDie größte Zahl ist: ʺ + a);
} else {
System.out.println(ʺDie größte Zahl ist: ʺ + c);
}
}
if (a < b) {
...
}
if (a == b) {
...
}
So muss man sich für die Fälle 2.) und 3.) überlegen, welche if Blöcke man hier
hineinschachteln muss.

aber ich bin verwirrrt, gibt es auch eine nicht so lange variante
 
nur gibt er mir die zwei größten aus.
Ja, das liegt einfach daran, dass Du die Bedingungen falsch gemacht hast.

Du prüfst erst ob a > b ist. Wenn dies der Fall ist, dann prüfst du das größere von beidem mit c.

Dann prüfst Du auf a < b und hast da dann ein else Zweig. Wenn a>b war, dann wird er bei dem if von Dir auch rein gehen - halt in den else zweig dort.

Dein Fehler ist also, dass Du den Aufbau nicht richtig gesehen und verstanden hast:

Du hast immer ein äußeres if ohne else um dann in dem Block des if ein weiteres if mit einem else zu haben!

aber ich bin verwirrrt, gibt es auch eine nicht so lange variante
Ja, überlege Dir einfach, was Du machen würdest, um die größte Zahl von mehreren Zahlen zu ermitteln. Egal wie vielen.

Du nimmst die erste Zahl als temporäres Maximum.
Die vergleichst Du mit der nächsten Zahl und setzt ggf. das temporäre Maximum um.
Das machst Du, bis Du alle Zahlen geprüft hast. Dann ist dein temporäres Maximum dein gesuchtes Maximum.

Daher: Stell Dir doch selbst die Aufgabe! Wie ermittelst Du die größte Zahl, wenn Dir jemand einen Zettel mit 3 Zahlen gibt? Oder mit 4? oder mit 10? Schaffst Du das irgendwie, die größte Zahl zu finden? Und dabei vergiss Java! Du willst ja erst einmal für Dich eine Lösung finden. Und dann überlege Dir, wie Du das einem Anderen erklären kannst.
 
Java:
if (a<b || a>b || a==b)
nicht allles auf einmal prüfen
es gibt auch noch das "else" beim "if"

also wenn a>b true ist sollst du b ausgeben
wenn nein " else" prüfe weiter
Dies bezog sich auf den Code vor deiner Post Änderung.

@animeLoan
Bitte poste Code auch in den dafür vorgesehen Codebereich oben links „</>“
Macht das lesen für alle einfacher.
 
Bei nur drei Variablen würde das auch reichen.
Java:
    public static void checkBigNumber(int a, int b, int c) {
       if(a>=b && a>=c){
           // ausgabe a
       } else if(b>=a && b>=c) {
           // ausgabe b
         } else{
           // ausgabe c
         }
     }


Bei mehr als drei würde ich das von Konrad benutzen.
Und nicht mehr mit den einfachen vergleichen arbeiten.
Habe das nur so gegeben da du es schon so angefangen hast.


edit: Code wurde geändert Schaue Post #12 / #13
 
Zuletzt bearbeitet:
Bei nur drei Variablen würde das auch reichen.
Nein, ich fürchte, dass die Lösung falsch ist. Nimm mal einfach
a=3
b=3
c=1

a ist nicht größer als b, daher nicht das erste if
b ist nicht größer als a, daher nicht das zweite if
also gibst Du c aus als maximalen Wert im finalen else Zweig.

Wenn man so eine Logik haben möchte, da müsste man >= als Vergleichsoperator nutzen.
 
Nein, ich fürchte, dass die Lösung falsch ist. Nimm mal einfach
a=3
b=3
c=1

a ist nicht größer als b, daher nicht das erste if
b ist nicht größer als a, daher nicht das zweite if
also gibst Du c aus als maximalen Wert im finalen else Zweig.

Wenn man so eine Logik haben möchte, da müsste man >= als Vergleichsoperator nutzen.
Die Aufgabe heißt er soll das größte auf dem Bildschirm ausgeben er muss nicht sagen welche das größte ist.



edit:
OK hast recht
 
Teste es wird nur eine Ausgabe gemacht. Egal welche gleich sind zwei oder auch alle drei.
Immer nur eine Ausgabe
Ja es wird nur eine Ausgabe gemacht, aber die kann falsch sein! Ich habe das Beispiel aufgezeigt und sogar für Dich durchgespielt. Also im Augenblick verstehe ich gerade nicht, wo das Problem ist. Hast Du den Post nicht gelesen? Denkst Du vor dem Post einer Nachricht nicht nach?

Evtl. brauchst Du es als Ausführbaren Code?
Java:
public class Test {

    public static void checkBigNumber(int a, int b, int c) {
        if(a>b && a>c){
            System.out.println(a);
        } else if(b>a && b>c) {
            System.out.println(b);
        } else{
            System.out.println(c);
        }
    }

    public static void main(String[] args) {
        checkBigNumber(3,3,1);
    }
}

Und die größte Zahl bei den Zahlen 3, 3, 1 ist bei Deinem Code nun tatsächlich:

Bildschirmfoto 2022-04-20 um 18.01.51.png
Ja, war jetzt sehr unerwartet, so komplexe Vorgänge, wie ich ja schon im letzten Post dargelegt habe, sind nicht leicht zu durchschauen... Aber vielleicht kannst Du dem ja jetzt folgen ...
 
ich habe es doch schon eingesehen was willst du jetzt noch

PS mein edit war füher als dein Post.
Und wie meinst Du, sehe ich Deinen Edit während ich schreibe? Sorry, aber mir wird das einfach zu blöd.

Tipp: Wenigstens kurz nachdenken, ehe man etwas schreibt. Dann muss man
a) nicht nach dem Schreiben sofort editieren
b) nicht zig Antworten hintereinander schreiben
 
Die Lösung für 3 Aufgabe
Java:
     int x=5;
     int y=2;
     int z=7;
    
    if(x>y && x<z || x<z && x>y){
        System.out.println(x);}
    
    if(y>x && y<z || y<x && y>x){
        System.out.println(y);}
    
    if(z>x && z<y || z<x && z>y){
        System.out.println(z

In der Aufgabenstellung handelt es sich um 3 verschiedene Zahlen. Das ist eine mögliche Lösung.
 
Ich habe den Code doch geändert und Konrad auch. Also lese den Thread von oben nach unten.

Schaue #post 11 meine Lösung

Post #14 komplett ignorieren
 
Zuletzt bearbeitet:
Wenn du mit mehreren Zahlen so eine Kombination 3 3 3 meinst, dann siehe oben.

Wenn du jetzt aus 100 zahlen die größte haben willst, wirst du um Rekursionen oder Schleifen nicht herumkommen.
 
Habe den Thread von oben nach unten gelesen und finde keine Lösung für die 3te Aufgabe.


3.
chreiben Sie ein Programm Median, das 3 verschiedene ganze Zahlen a,b,c einliest
und den mittleren der drei Werte ausgibt. Damit ist nicht der arithmetische Mittelwert
(a+b+c) / 3 gemeint. Denken Sie sich a, b und c der Größe nach geordnet. Das
Programm gibt den Wert aus, der dann in der Mitte steht.“
 
Habe den Thread von oben nach unten gelesen und finde keine Lösung für die 3te Aufgabe.


3.
chreiben Sie ein Programm Median, das 3 verschiedene ganze Zahlen a,b,c einliest
und den mittleren der drei Werte ausgibt. Damit ist nicht der arithmetische Mittelwert
(a+b+c) / 3 gemeint. Denken Sie sich a, b und c der Größe nach geordnet. Das
Programm gibt den Wert aus, der dann in der Mitte steht.“
Das ist auch eine andere Frage. Das wurde in diesem thread gar nicht diskutiert.

Wenn die Zahlen sortiert eingegeben werden, dann ist es immer b 😉

Sonst kann man sie sortieren und anschließend b ausgeben.
 
Nach meiner Lösung, wird die Zahl ausgegeben die in der Mitte ist(von Wert aus gesehen).
Muss nicht unbedingt „b“ sein. Die Aufgabenstellung ist ein bisschen seltsam formuliert. Den sonnst müsste man immer „b“ ausgeben, das macht nicht wirklich einen Sinn. Meiner Meinung nach.
 
Java:
if(x>y && x<z || x<z && x>y){
        System.out.println(x);}

was soll das "oder"  sinnlos

 wenn du  das grösste suchst
  if(x >= y  &&  x >= z ){
        System.out.println(x);}

wenn du das in der Mitte suchst ist
 if(x >= y  &&  x <= z ){
        System.out.println(x);}
 
Zuletzt bearbeitet:
Er hat sich da halt schlicht vertan. Die Checks sind einfach falsch herum. Er hat die Checks gedreht und die Buchstaben getauscht womit dann wieder das Gleiche geprüft wurde.
 
Ihr habt recht, ich habe das gleiche 2 mal geprüft. Oder kann auch weg.

Java:
wenn du das in der Mitte suchst ist
 if(x >= y  &&  x <= z ){
        System.out.println(x);}

Also das gibt keine mittlere Zahl aus.
Nur wenn die wirklich x ist.

>= warum = ?
Wenn die Zahlen verschieden sein sollen?
 
Hier meine korrigierte Version, mit a b c
Java:
int a=5;
int b=3;
int c=7;


if(a>b && b<c){
        System.out.println(a);}
    
    if(b>a && b<c){
        System.out.println(b);}
    
    if(c>a && c<b){
        System.out.println(c);}
 
Oder kann auch weg.
Nein, kann nicht weg! Es gibt zwei Möglichkeiten, wie eine Zahl die mittlere ist und die musst Du natürlich auch prüfen!
Teste es einfach mit 1 2 3 und mit 3 2 1
1 < 2 und 2 < 3 -> ok
Aber 3 < 2 und 2 < 1 ???

Und in der ersten Aufgabe waren gleiche Zahlen erlaubt. Daher wurden die folgenden Aufgaben als darauf aufbauend betrachtet.

Edit:
Hier meine korrigierte Version, mit a b c
Die so natürlich falsch ist (s.o.).
 
Ihr habt recht, ich habe das gleiche 2 mal geprüft. Oder kann auch weg.

Java:
wenn du das in der Mitte suchst ist
 if(x >= y  &&  x <= z ){
        System.out.println(x);}

Also das gibt keine mittlere Zahl aus.
Nur wenn die wirklich x ist.

>= warum = ?
Wenn die Zahlen verschieden sein sollen?
Klar das hier die beiden anderen noch notwendig sind du sollst doch auch was machen.

wenn du alle drei hast wird immer nur ein if true sein und auch nur eine Ausgabe kommen.

es wure schon gesagt das du auf "gröser oder gleich" >= oder "kleiner oder gleich <= prüfen musst.

PS wenn du nicht das >= , <= benutzt brauchst du das Oder
 
Zuletzt bearbeitet:
Vielleicht bei sowas ein kleiner Tipp:

Wenn ihr sowas als Code schreibt: Testet es auch direkt. Das ist relativ einfach:
a) Ihr packt es in eine Methode - also die drei Zahlen kommen als Parameter.
b) Nun schreibt ihr alle Testfälle auf in den Aufrufen. Dazu am Besten eine kleine test Methode machen:
Java:
void test (int a, int b, int c, int ergebnis) {
    System.out.print(ergebnis + " := ");
    meineZuTestendeMethode(a,b,c);
}
(Da kann die Methode auch weiter die Ausgabe machen).

Und dann wird das einfach aufgerufen mit allen möglichen Konstellationen von 1 2 3:
teste(1,2,3, 2);
teste(1,3,2, 2);
teste(2,1,3, 2);
...

Wobei man hier sieht: Das mit der Hilfsmethode und dem Ergebnis kann man hier weglassen, da das Ergebnis immer gleich ist.

Und wenn man es dann aufruft, dann siehst man die Ausgabe 2 := 2 immer schön untereinander. Es gibt kein 2 := 2 := 2 oder so (Das wäre bei Deinem Code paar Mal der Fall, weil kein Ergebnis ausgegeben wird).

Da kann man dann auch schon überlegen: Will man das evtl. mehr "automatisieren"? Also kein manuelles Prüfen? Dann könnte man es umändern: Die Ausgabe erfolgt nicht bei der "Berechnung" sondern das Ergebnis wird zurück gegeben. Und schon kann man die Testmethode anpassen:
Java:
void teste(int a, int b, int c, int ergebnis) {
    int berechnet = zuTestendeMethode(a,b,c);
    if (berechnet != ergebnis) {
        System.out.println("FEHLER: zuTestendeMethode(" + a + ", " + b + ", " + c + ") = " + berechnet + " statt " + ergebnis);
    }
}

Das wäre dann sowas wie ein Unittest für Arme. Und ein guter, erster Einstieg in eben dieses Unit Testing.
 

Zurück
Oben