Primzahlen berechnung mit C!



  • Aufgabenstellung:

    Erstellen Sie ein Programm, das mit Hilfe von Schleifen eine Reihe von Zahlen ausgibt. Die Anzahl und Werte dieser Zahlen hängen dabei von Ihrer Matrikelnummer ab.

    Bilden Sie als ersten Schritt die Quersumme über Ihre Matrikelnummer. Dieser Schritt muss nicht in Ihrem Programm erfolgen (der entsprechende Werte sollte aber an einer zentralen Stelle veränderbar sein).

    Überprüfen Sie im Anschluss mittels Probedivision für jede Zahl zwischen 1 und dieser Quersumme, ob diese eine Primzahl ist.

    Für jede dieser Zahlen, die eine Primzahl ist geben Sie das Quadrat der Zahl aus. Für jede dieser Zahlen, die keine Primzahl ist geben Sie die Quadratwurzel der Zahl aus. Geben Sie pro Zeile eine Gleitkommazahl (double oder long double) mit drei Nachkommastellen aus.
    --------------------------
    Ich bin ein C Neuling und mein Problem ist, dass bei meinem Code Zahlen wie 9, 15 usw. als Primzahlen erkannt werden und deswegen nicht die Wurzel davon gezogen wird sondern die Zahl quadriert wird. Sprich ich möchte dass Zahlen, die durch divide=2 dividiert werden und wo Rest bleibt, durch divide+1 und divide+2... dividiert werden bis sie um 1 kleiner als die zu dividierende Zahl sind. Ist das irgendwie verständlich formuliert? 😛

    hier ist mein Code:

    #include <stdio.h>
    #include <math.h>
    
    int main()
    
    {
    int quersumme = 19;
    int counter = 1;
    int divide = 1;
    float sum = 0.000;
    
    //schleife ausführen bis counter kleiner oder gleich quersumme ist.
    while (counter <= quersumme)
    {
    
        if (counter == 1 || counter == 2)
    	{
    	sum = counter * counter;
    	printf("%0.3f\n", sum);
    	counter++;
    	divide = 2;
    	}
    
    	else
    
    	while (divide < counter)
    	{  
    	  if (counter % divide == 0)
    	  {
    	  sum = sqrt(counter);
    	  printf("%0.3f\n", sum);
    	  counter++;
    	  break;
    	  }
    
    	  if (counter % divide != 0 && divide < counter)
    	  {
    	  sum = counter * counter;
    	  printf("%0.3f\n", sum);
    	  counter++;
    	  }
    
    	  else
    	  {
    	  divide++;
    	  }
    
    	}
    	}
    	return 0;
    	}
    

    Aussehen sollte es im fertigen Programm dann so:

    1.000
    4.000
    9.000
    2.000
    25.000
    2.449
    49.000
    2.828
    .....
    .....
    .....
    usw.

    Danke schon im Voraus für die Hilfe!

    lg



  • Du gibst zu früh auf.

    Du stellst fest, dass 9 nicht durch 2 teilbar ist und bist dann der Meinung, dass 9 eine Primzahl ist.

    Du darfst den Debugger benutzen oder zu Testzwecken ein paar mehr printf über das Programm verteilen.
    Da kannst du dir dann ansehen, welche Werte counter und divide gerade haben.

    Habt ihr schon Funktionen und die for-Schleife behandelt?



  • Funktionen haben wir noch nicht besprochen, und die for-schleife sind wir kurz überflogen. Also könntest du mir sagen wo in meinem Programm der Logikfehler liegt, mit debuggern haben wir auch noch nicht gearbeitet.



  • fishy schrieb:

    Also könntest du mir sagen wo in meinem Programm der Logikfehler liegt, mit debuggern haben wir auch noch nicht gearbeitet.

    DirkB schrieb:

    ...oder zu Testzwecken ein paar mehr printf über das Programm verteilen.



  • Das steht da sogar noch genauer:

    DirkB schrieb:

    Da kannst du dir dann ansehen, welche Werte counter und divide gerade haben.



  • Hi!

    Ich gebe dir mal einen kleinen Tipp... versuche es mit einer/zwei for Schleife/n.
    Wenn du nicht weißt wie die funktioniert, kannst du in der Präsentation zur Vorlesung nachschauen.


Anmelden zum Antworten