Java Primzahlen

Gikon

Commander
Registriert
Juli 2010
Beiträge
2.062
Hallo an alle.

Wir haben nun seit einer Woche eine Hausaufgabe auf, mit der ich nciht weiterkomme. Wir bekomemn die Hausaufgaben leider imemr zu früh auf, dass wir die Befehle noch nicht wissen um die Aufgaben zu lösen. Ich bräuchte jetzt eure Hilfe, um an die Lösung zu kommen. Ihr sollt mir die Lösung nicht sagen.

Hie die Aufgaben:

3. Wenn x ungerade und keine Primzahl ist, dann sind die beiden Teiler y und z auch ungerade. Kopieren Sie die Lösung aus Aufgabe 2 in eine neue Jave-Klasse "Primzahl3.java". Schreiben Sie den Code so um, dass nur unegrade Teilerkandidatenverwendet werden.

4. Zusatzaufgabe: Wenn x keine Primzahl ist, so ist einer der beiden Teiler (y oder z) kleiner als x/2. Kopieren Sie die Lösung aus Aufgabe 3 in eine neue Java-Klasse "Primzahl4.java". Schreiben Sie den Code so um, dass nur ungerade Teilerkandidaten kleiner als x/2 verwendet werden.

5. Zusatzaufgabe: Die Grenze x/2 aus Aufgabe 4 lässt sich noch unterbieten. Bestimmen Sie die kleinste Zahl, bis zur der die Teilerkandidaten getestet werden müssen. Beginnen Sie Ihre Überlegung mit der Betrachtung der zahlen x=25; x=49; x=144; x=256. Kopieren Sie die Lösung aus Aufgabe 4 in eine neue Java-Klasse "Primzahl5.java". Schreiben Sie den Code so um, dass nur ungerade Teilerkandidaten kleiner als die gefundende Grenze verwendet werden.


Hier währe dann mal der Code aus der Aufgabe 2, womit wir arbeiten sollen.


Code:
import AlgoTools.IO;

public class Primzahl2 {

      public static void main(String[] argv) {
	
	
	boolean ergebnis;	// Summe der Zahlen
	int i; 			// Laufvariable
	int x;
	ergebnis = true;

				// Intialiesierung

	x = IO.readInt("Nennen Sie eine Zahl, von der Sie glauben, dass es eine Primzahl ist: ");

	// Kopf der While-Schleife

	i = 2;

	while(i < x) {

	
	  	// Schleifenrumpf
	  	if(x % i == 0) {
			ergebnis = false;	
		}

	// Fuß der For-Schleife
	i=i+1;
	}
	
	if(ergebnis == false) {
		IO.println("Die Zahl " + x + " ist keine Primzahl");
	}
	else {
		IO.println("Die Zahl " + x + " ist eine Primzahl");
	}
     }
}


Da ich noch ein Anfänger in Java bin aber es dennoch gerne lernen möchte, brauche ich eure Hilfe. Ich danke euch schonmal.
 
Zu 3: Lies dich mal in die Mathematischen Operatoren ein. Hier wird dir Modulo (%) helfen.
Zu 4: Abfrage ob Zahl kleiner als x/2 ist...
Zu 5: Abfrage ob die Zahl kleiner als der Grenzwert ist.
 
Klar hab ich deinen Post gelesen ^^
Aber schon allein Aufgabe 3 ist so trivial, dass man nicht groß Tipps geben kann. Es ist natürlich vollkommen okay, wenn man als Anfänger selbst einfache Sachen nicht auf Anhieb hinbekommt, aber du musst dir ja irgendwas denken, wenn du diese Aufgabenstellung liest. Was ist das? Wo scheitert es? Je mehr du uns in deine Gedankengänge mit einbeziehst, desto besser kann man dir helfen, ohne sofort die Lösung hinzuklatschen :)
 
Zugegeben, ich habe die Aufgaben auch erst nach mehrmaligem Lesen verstanden. Jetzt finde ich sie aber einfach :D

Das ist eigentlich grundlegende Arbeit mit Schleifen (eigtl würde sich hier auch "for" anstatt "while" anbieten, muss jetzt aber nicht, wenn es Verwirrung stiftet)

Erzähl doch in "Umgangssprache" (/Pseudocode) wie du denkst, dass es funktioniert. Und wie du es in Java umsetzen würdest, hier können wir dann helfen.

Du könntest dir auch noch mal in Erinnerung rufen, welche grundlegenden Dinge eine (endliche) Schleife braucht, was das in deinem Code-Beispiel ist und was daran aufgrund der Aufgabenstellung geändert werden muss.
 
Es dreht sich um diese Zeile:
// Fuß der For-Schleife
i=i+1;
Aufgabe 3: i muss immer ungerade sein. Ändere die Zeile also so, dass i immer ungerade ist.
Aufgabe 4: Bau zusätzlich noch irgendetwas ein, dass i immer < x/2 ist.
Aufgabe 5: Wie groß muss i maximal sein, um auszuschließen, dass es Teiler größer i gibt?
 
Wenn du for- und while-Schleifen beherrscht, verfügst du über all die Kenntnisse, die hier benötigt werden ... etwas Nachdenken musst du schon selbst (-:
 
Ich denke seit 1 Woche nach xD

Ich komem nit auf dem Trichter. Ich werde es mal probieren ^^
Ergänzung ()

Code:
import AlgoTools.IO;

public class Primzahl3 {

      public static void main(String[] argv) {
	
	
	boolean ergebnis;	
	ergebnis = true;

				// Intialiesierung

	int x = IO.readInt("Nennen Sie eine Zahl, von der Sie glauben, dass es eine Primzahl ist: ");

	// Kopf der For-Schleife
	for(int i = 2; i < x; i++){

	
	  	// Schleifenrumpf
		if(i > 3){
			i++;
		}
	
	// Fuß der For-Schleife
	}
	
	
	
	if(!ergebnis) {
		IO.println("Die Zahl " + x + " ist keine Primzahl");
	}
	else {
		IO.println("Die Zahl " + x + " ist eine Primzahl");
	}
     }
}

Wie siehts hiermit aus ?

Das ist Aufgabe 3.
 
Zuletzt bearbeitet:
Mit dem, was du geschrieben hast, ist jede Zahl eine Primzahl... Testest du eigentlich, was du schreibst? Würde schneller gehen, als uns zu fragen.

// Ergänzung
Und Kommentare sollten nur dann benutzt werden, wenn sie die Übersichtlichkeit des Codes verbessern.
 
Zuletzt bearbeitet:
Ich versuche mal meine Tipps etwas zu präzisieren.

Kurzschluss schrieb:
Du könntest dir auch noch mal in Erinnerung rufen, welche grundlegenden Dinge eine (endliche) Schleife braucht,...
1. Abbruchbedingung muss vorhanden sein (klar)
2. Die Abbruchbedingung muss geändert werden (sonst wärs ja eine Endlosschleife)

Mal abgesehen davon, dass du wegen Aufgabe 3 vorher prüfen solltest, ob es sich um eine gereade Zahl handelt, dann brauchst du ja gar nicht mehr in die Schleife rein, musst du nur diese zwei Schleifenelemente im Vergleich zu dem Code in deinem Eingangspost ändern.

In deinem zweiten Code-Ausschnitt prüfst du jetzt ob die Zahlen größer drei sind!?
Die For-Schleife macht es mMn aber schon mal übersichtlicher.
 
Zurück
Oben