Schleife in einer Schleife?



  • habe folgendes prob.

    Aufgabe: Prüfung auf Primzahlen (zahlen die nur durch sich selbst und durch 1 teilbar sind. bsp: 1,2,3,5,7...) in einem bestimmten Zahlenbereich.
    Tja soweit ganze einfach.

    So siehts aus bis jetzt:

    #include <iostream.h>
    void main()
    
    {
    int max_zahl=0; // Ende des Zahlenbereichs der auf Primzahlen geprueft werden soll
    int erg;
    int teiler;
    int dummy;
    int pruef_zahl;
    
    cout << "Bitte geben sie das Ende des zu pruefenden Zahlenbereichs ein: ";
         cin >> max_zahl;
    
    for(int pruef_zahl=1;pruef_zahl <= max_zahl; pruef_zahl++)
    {
    teiler = 0;
    
            do{
            teiler++;
            erg = pruef_zahl % teiler;
            if((erg == 0) && (pruef_zahl == teiler))
                    {cout << pruef_zahl << " ist eine Primzahl!" << endl;}
    
            }while(teiler <= pruef_zahl);
    
    }
    cin >> dummy;
    
    }
    

    dummerweise liefert das programm jetzt aber folgende ausgabe: 1 ist eine Primzahl, 2 ist eine Primzahl, 3 ist eine Primzahl, 4 ist eine Primzahl...

    bei 4 ist das aber falsch.

    Das Prob ist jetzt, dass die schleifen PARALLEL laufen und nicht wie von mir gewollt dass erst die do-while schleife durchlaufen wird, dann die forschleife pruef_zahl +1 (zahl bei der geprueft werden soll ob sie eine Primzahl ist) macht und wieder die do-while schleife durchlaufen wird.

    woran liegt das?



  • longInt schrieb:

    habe folgendes prob.

    #include <iostream>// ohne .h und mit
    using namespace std;
    ...
    ...
    ...
            }while(teiler < pruef_zahl);// sonst überprüfst du auch immer wenn teiler == pruefzahl (daher auch dein problem...)
    ...
    ...
    ...
    

    Devil



  • hmh bringt immer noch den gleichen fehler

    aber irgendwo da liegt mein problem...



  • mach mal ne while schleife statt ne do while schleife...

    Devil



  • immer noch das selbe 😕

    aber irgendwas stimmt mit der grundidee des programmes nich...



  • Die Schleifen sind so schon richtig, und sie laufen auch nicht parallel, sondern so verschachtelt wie Du es wolltest.
    Falsch ist Deine Prüfbedingung.

    erg = pruef_zahl % teiler; 
         if((erg == 0) && (pruef_zahl == teiler))
    

    Was prüftst Du hier ?
    Wenn pruef_zahl==teiler bist Du durch die ganze Schleife durchgekommen:
    erg muss in diesem Fall 0 sein, denn eine Zahl durch sich selbst dividiert ist 1 Rest 0. Also ist die erste Bedingung sinnlos.
    Das heißt er gibt für jede Zahl aus, das es eine Primzahl ist.
    Du brauchst vorher noch eine Bedinung um alle nicht Primzahlen rauszuschmeissen.
    Also dann, wenn erg==0 aber pruef_zahl!=teiler.
    Achtung, du darft dann auch nicht mit teiler=1 anfangen. Sonst findest Du überhaupt keine Primzahlen.



  • jop... danke! genau das war mein fehler 🙂


Anmelden zum Antworten