HILFE !!! erste aufgabe beim programmieren

paco89

Bekanntes Mitglied
hey,

versuche grad mich an ein paar kleine Übungsaufgaben zu machen...wie gehe ich an folgende ran:

a) Schreibe ein Programm welches testet ob es sich bei einer gegebenen Zahl um eine Primzahl handelt oder nicht. Die Zahl soll von der Eingabe gelesen werden.


wie implementiere ich das jetzt genau? ich habe grad im schnelldurchlauf die basics angeschaut, aber immer wenn ich mich an übungen ranmache, hört bei mir das verständnis auf.
ich weiß, dass eine Primzahl eine Zahl ist, die man durch sich selbst und durch eine 1 teilen kann. das wird wohl glaub ich mein algorithmus sein....aber ich hab trotzdem kein plan wie das programm aussehen soll....also anfangen muss ich wohl mit:

Java:
public class uebung01{
public static void main {


}

}



und wie gehts weiter???
 
wie kriege ich das aber mit der eingabe hin ? zahlen müssen ja von der eingabe eingelesen werden...genau das kapier ich nich...könntest du mir zeigen, wie der code aussieht?
 
Für den Anfang kannst du auch einfach eine Zahl festlegen die du dann anschließend überprüfst. So musst du beim Testen nicht jedes Mal eine neue Zahl eingeben.

Java:
public class uebung01{
   public static void main {
      
      int zahl = 10;

   }

}
 
Eine Primzahl ist eine Zahl, die nur durch sich selbst und die 1 geteilt werden kann. Wie kannst du das Umsetzen?

- du brauchst eine for-Schleife, in der überprüft wird, ob die Zahl n ihrgendeinen Teiler hat.
(du beginnst bei 2 und beendest bei Wurzel(n))
- Wie kannst du überprüfen, ob n durch die Zahl i geteilt werden kann? -> Schau dir mal den Modulo-Operator % an.
 
Java:
public class primzahl
{

boolean value = true;
   
   
   public primzahl(int c)
    {  double b = Math.sqrt(c);
        for(int i=2;i<=b;i++)
        {
          if( (c  % i) == 0 )
          { value = false; }
           
        }
       
            if(value == false ^ c == 2)
           { System.out.println("Die Zahl " + c + " ist keine Primzahl!");}
               else
               {System.out.println("Die Zahl " + c + " ist eine Primzahl!");}
        }
    }

ich glaub so dürfte das aussehen.

Also anfangs ist value: true => Primzahl
jetzt mach ich eine for schleife die, die den Rest der Division ( c / i ) angibt
( Math.sqrt(c) ist gleichbedeutend mit Wurzel von c ) - größere zahlen kommen ja nicht in Frage - !
"%" liefert den Rest der Division
also z.B wenn man 8 / 4 = 2 Rest: 0
Wenn der Rest also iwann 0 ist wird value auf false gesetzt => keine Primzahl

Da 2 keine Primzahl ist kommt die noch zu
System.out.println("Die Zahl " + c + " ist keine Primzahl!");
dazu!

( ^ beudeuted "oder" )

verstanden? 🙂
 
Zuletzt bearbeitet:
Dazu noch der Code:
Java:
public class PrimeFactorization {

	public static void main(String[] args) {
		
		// Deklaration der Variablen
		
		// ganze Zahl n, die von Nutzer angegeben wird
        int n = Integer.parseInt(args[0]);
        // ganze Zahl, die als Zähler mit Anfangswert 2 agiert
		int m = 2;
		
		// Ausgabe des einleitenden Textes  
		System.out.print("Die Primfaktoren von "+n+" sind") ;
		
		// Fallunterscheidung, ob n==1 ist
		if(n==1) {
			// Ausgabe des Ergebnises
			System.out.print(" 1");
		}
		else {
			//Schleife, solange n>1
			while(n>1) {
				//Überprüfung ob n%m == 0
			    if(n%m == 0) {
			    	// n wird neu berechnet, ein Teilergebnis wird ausgegeben
			    	// und m wird wieder zurückgesetzt
			       n = n/m;
				   System.out.print(" "+m);
				   m = 2;
				   
			    }
			    //m wird um 1 erhöht
	            else m = m + 1;
	            
			
		    }
    	}
		
	}
	
}

Edit: ah sry du willst ja gar keine Zerlegung. ^^ Naja vielleicht bringts dir ja doch was 🙂
 
Zuletzt bearbeitet:
feistes Beispiel ist schlichtweg falsch. Wie Final Striker gesagt hat, erst einmal eine feste Zahl vorgeben, erst einmal muss der Test funktionieren. Ein bisschen mehr Gerüst

Java:
public class uebung01{
   public static void main {
      //Hier später die Eingabe    
      int zahl = 10;
 
      boolean istPrimzahl = true;
      for(int i = 2; i < ???; i = i + 1) { //Welche Obergrenze muss hier hin?
           if ( ??? ) { //welche Bedingung muss hier hin?
              istPrimzahl = false;
           }
      }
   
      System.out.print(zahl + " ist eine "); 
      if (istPrimzahl) {
          System.out.println("Primzahl");
      } else {
          System.out.println("zusammengesetzte Zahl");
      }
   }
 
}
 
feistes Beispiel ist schlichtweg falsch. Wie Final Striker gesagt hat, erst einmal eine feste Zahl vorgeben, erst einmal muss der Test funktionieren. Ein bisschen mehr Gerüst

sry habe ausversehen "/" statt "%" geschrieben
in der erklärung unten ist es aber richtig !

aber sonst ist daran nichts falsch !!

Java:
public class primzahl
{
 

   
   
   public static void main(String[] args)
    {  int c = Integer.parseInt(args[0]);
        double b = Math.sqrt(c);
        boolean value = true;
        
        for(int i=2;i<=b;i++)
        {
          if( (c  % i) == 0 )
          { value = false; }
           
        }
       
            if(value == false ^ c == 2)
           { System.out.println("Die Zahl " + c + " ist keine Primzahl!");}
               else
               {System.out.println("Die Zahl " + c + " ist eine Primzahl!");}
        }
    }
 
Zuletzt bearbeitet:
Hi,
an sich arbeitet dein Algorythmus schon (grob gemessen braucht er auch nur ca 20% der rechenzeit der anfänger-variante), allerdings hast du dir trivialfälle 0-2 nicht berücksichtigt und ich glaube nicht, dass der TO den Rechenweg nachvollziehen kann ^^
Einfacher ist da der Aufbau von Landei mit der Schleife und einer Abfrage 😉
Gruß
 
oh stimmt 0 und 1 hab ich vergessen
(2 nicht xD)

hab doch ne erklärung dazugeschrieben!

bin auch noch ein ziemlicher Anfänger, deshalb dachte ich
wenn ich das verstehe wirds er auch verstehn 😀
 

Zurück
Oben