Forum / Grundlagen des Programmierens / 2. Hausübung

2. Hausübung

Hallo, ich mal wieder ein thema auf für die 2.HÜ :D

also zum ersten bsp (größter gemiensamer teiler), ich denke das kann man mit einer while-Schleife lösen!

Hat wer konkrete Vorschläge? ^^

mfg

Clemens ±0

Hallo, ich mal wieder ein thema auf für die 2.HÜ :D

also zum ersten bsp (größter gemiensamer teiler), ich denke das kann man mit einer while-Schleife lösen!

Hat wer konkrete Vorschläge? ^^

mfg Sogar 2 und ja alle werden in while gelöst:

Als erstes: So wie in Wikigeschrieben mit "%" Operator

Andere möglichkeit: o Falls a = b, gilt ggT(a, b) = a o Vertausche a und b, falls a < b o Dann gilt ggT(a, b) = ggT(a &#8722; b, b), denn:  Sei g Teiler von a, b  d.h. ga0 = a und gb0 = b mit a0, b0 2 N, g 2 N  also g(a0 &#8722; b0) = a &#8722; b und a0 &#8722; b0 2 N  d.h. g teilt b und a &#8722; b  d.h. ggT(a, b)  ggT(a &#8722; b, b)  analog ggT(a &#8722; b, b)  ggT(a, b) o Ersetze a durch a &#8722; b, wiederhole diese Schritte

edit: Per Modulo gelöst ist der Algorithmus bedeutend schneller. Für ggt(1024,64) braucht Modulo-Version 2 Operationen, der andere Algorithmus 16.

Bruno ±0

while schleife? wofür? ist doch eine sture berechnungsfunktion? ich mag falsch liegen aber ich denke mit einer einfachen if-selektion ist die sache im kasten (auch wenn ich noch nicht weis wie man die berechnung in eine eigene funktion auslagert)

EDIT: ich sehe wo mein fehler liegt ;-) doch eine while schleife

das programm an sich funktioniert aber das anwenden der methode irgendwie nicht ...

Clemens ±0

das programm an sich funktioniert aber das anwenden der methode irgendwie nicht ... Poste den Code.

Bruno ±0

hab das bsp 1 schon gelöst, habe die variablen in der ggt methode gleich bennant wie in main (habe zuerst alles in einer wurst geschrieben und erst nacher die methode "rausgezogen, dabei natürlich vergessen die variablen umzubenennen) wie habt ihr die ggt berechnung geschrieben? hier meine Lösung BSP1:

            do{               
                w1 = w1 % w2;
            
                //variablenaustausch
                w1 = w1 + w2;
                w2 = w1 - w2;
                w1 = w1 - w2;
            }
            while(w2 != 0);
            return w1;
        }\n~~~
Clemens ±0

wie habt ihr die ggt berechnung geschrieben?

Würde deine Berechnung in eine While(w2 != 0){ CODE} umwandeln, so deckst du auch den Fall ab, dass w2 null ist ohne eine Fehlermeldung zu bekommen.

Barbara ±0

Hallo! Habe bei Beispiel 4 ein Problem: Es läuft soweit bis alle Koordinaten eingegeben sind, aber mir ist nicht ganz klar wie ich das mit der Linien-Klasse machen soll? Wie referenziere ich die Linien-Klasse auf die zwei bildenden Punkt-Objekte?

    public static void main (String[]args) {
        int i;
      Punkt[] point = new Punkt[3];
        for (i=0; i&lt;3; ++i) {
            
            point[i] = new Punkt(); 
            Scanner sc = new Scanner(System.in);
            System.out.print(&quot;Bitte geben Sie die x-Koordinate des &quot; + (i+1) + &quot;.Punktes ein: &quot;);          
            point[i].x_Koordinate = sc.nextInt();
            System.out.print(&quot;Bitte geben Sie die y-Koordinate des &quot; + (i+1) + &quot;. Punktes ein: &quot;);
            point[i].y_Koordinate = sc.nextInt();
        }
        
    }
    
}

class Punkt {
    int x_Koordinate;
    int y_Koordinate;   
    
}

class Linie {
}\n~~~

Lg, Babsi
Clemens ±0

(...)

Punkt p1;

Punkt p2;
double l&auml;nge;

double getlength(){};

+Konstruktor
}\n~~~
Barbara ±0

Danke für die Hilfe! Habe aber immer noch ein Problem damit, die Koordinaten für die Punkte in die Klasse Linie zu bekommen. Es wird immer null ausgegeben.

    public static void main (String[]args) {
        int i;
      Punkt[] point = new Punkt[3];
        for (i=0; i&lt;3; ++i) {
            
            point[i] = new Punkt(); 
            Scanner sc = new Scanner(System.in);
            System.out.print(&quot;Bitte geben Sie die x-Koordinate des &quot; + (i+1) + &quot;.Punktes ein: &quot;);          
            point[i].x_Koordinate = sc.nextInt();
            System.out.print(&quot;Bitte geben Sie die y-Koordinate des &quot; + (i+1) + &quot;. Punktes ein: &quot;);
            point[i].y_Koordinate = sc.nextInt();
        }
        
        System.out.println(&quot;Kantenl&auml;nge = &quot; + Linie.summe);
        
       
    }
    
}

class Punkt {
    int x_Koordinate;
    int y_Koordinate;   
    
}

class Linie {
    Punkt point[];
    static double laenge;
    static double summe = 0;
       double berechnen() {
       for(int i=0; i&lt;3; ++i) {
           if (i != 2) {
               laenge = Math.sqrt(Math.pow((point[i+1].x_Koordinate - point[i].x_Koordinate),2)+Math.pow((point[i+1].y_Koordinate - point[i].y_Koordinate),2));
               summe += laenge;
           }
           else {
               laenge = Math.sqrt(Math.pow((point[0].x_Koordinate - point[2].x_Koordinate),2)+Math.pow((point[0].y_Koordinate - point[2].y_Koordinate),2));
               summe += laenge;
           }
           
       }
            
       return summe;
       }
       
      
}\n~~~
Clemens ±0

Danke für die Hilfe! Habe aber immer noch ein Problem damit, die Koordinaten für die Punkte in die Klasse Linie zu bekommen. Es wird immer null ausgegeben. Du erstellst auch nie die Klasse Linie. Dein System.out.println("Kantenlänge" + Linie.summe) gibt nur 0 aus weil du die Variable "summe" als static deklarierst, das hat nichts mit dem tatsächlichen Wert zu tun. Deine Funktion berechnen() wird nie aufgerufen, daher ist "summe" nur der Wert der im Quellcode steht.

Ergänze nen Konstruktor der entweder dein Punktearray übergeben bekommt oder zwei einzelne Punkt-Objekte und dann die nötigen Dinge berechnet und den Variabeln die Werte zuweist.

Barbara ±0

Ok danke ich werds mal versuchen

Bruno ±0

Würde deine Berechnung in eine While(w2 != 0){ CODE} umwandeln, so deckst du auch den Fall ab, dass w2 null ist ohne eine Fehlermeldung zu bekommen. das habe ich bereits bei der eingabe abgedeckt, es kann kein wert 0 eingegeben werden

Bruno ±0

sorry für den doppelpost aber könnte jemand schildern/posten wie er 2.4 gelöst hat? keine ahnung wie das mit den klassen und objekten gehen soll!! ich nehme an man soll für die eingabe der werte eine eigene Klasse definieren die dann im programm ausgeführt wird, und das gleiche für die berechnung. aber bei den objekten für die punkte steh ich vollends an!

Clemens ±0

aber könnte jemand schildern/posten wie er 2.4 gelöst hat? Eine Möglichkeit es ohne Array zu lösen da wir nur 3 Punkte haben: 3 Elemente der Klasse "Punkt" erstellen. Diesen 3 Elementen die Werte zuweisen, dies kann man über Konstruktor direkt, oder per späterem Funktionsaufruf realisieren. Je zwei Punkte zu einem Element der Klasse "Linie" zusammenfügen. Längenberechnung ist dann alle Elemente der Klasse Linie addieren. (Also p1-p2 + p2-p3 + p3-p1)

Ognjen ±0

Hat schon jemand das Bsp3 geschafft und könnte es hier posten? :D

Andreas +3
fertige hue

hallo

hier sind die 5 beispiele

lg

Sorry, die Kommentarfunktion ist geschlossen.