Problem mit Schleife in C

#1
Hallo zusammen!

Ich muss für die Hochschule ein Programm schreiben das die Primfaktoren einer eingelesenen Zahl > 2 ausgibt.
Ich weiß dass es mit einer Schleife gehen sollte aber nicht mit welcher, meine Vermutung wäre die While Schleife.
Leider bekomm ichs nicht gebacken dabei keine Dauerschleife zu erschaffen, kann mir jemand nen Tipp geben?
Komplette Lösungen bitte nicht, ich bin noch am Anfang und darf die guten Sachen eh noch nicht benutzen.
Also was wäre denn falsch wenn ich

while (Zahl % 2 ==0)
{
Zahl %2 ;
printf ("%d\n", Zahl);
Zahl /2;
}

schreibe? Dann wird doch falls der Rest der Zahl und 2 Null ist nochmal Modulo gemacht, durch 2 geteilt und dann ausgegeben, wieder an den Anfang gesprungen und die Zahl / 2 Modulo genommen. Kommt aber immer als Endlosschleife raus obwohl ja irgendwann der Rest nicht 0 ist.
 

German

Well-Known Member
c-b Experte
#2
Was machen die Zeilen Zahl %2 ; und Zahl /2; deiner Meinung nach und vor Allem, was passiert mit dem Ergebnis dieser Operationen?
 
#3
Was machen die Zeilen Zahl %2 ; und Zahl /2; deiner Meinung nach und vor Allem, was passiert mit dem Ergebnis dieser Operationen?
Ist wohl falsch... Ich denk mal ich sollte das Ergebnis davon in eine Variable speichern. Die zwei sollten den Int Zahl so verändern dass irgendwann so oft geteilt wurde bis die Bedingung aus der While schleife nicht mehr erfüllt ist. Ich versteh leider nicht ganz wie ich mit den Schleifen rumspielen kann und was alles darin erlaubt ist...
 
#5
Hmmm, z.B. in Variable Zahl? Das heißt nicht dass anschließend schon alles gut ist, aber im Moment machen diese Zeilen einfach überhaupt gar nichts, da das Ergebnis verpufft. BTW schau dir doch mal an was die Operatoren %= oder /= tun würden...
Das bedeutet das was in der Schleife gemacht wird wird nicht wieder mit nach oben genommen? Wenn ich Zahl / 2 in der Schleife mache bleibt Zahl am Anfang der Schleife gleich?
 

BAGZZlash

Well-Known Member
c-b Experte
#6
Wenn Du Zahl / 2 machst, egal ob in einer Schleife oder nicht, geht das Ergebnis ins Nirvana. Was ist, wenn Du 2 + 2 rechnest? Das Ergebnis geht ins Nirvana. Wenn Du a = 2 + 2 machst, steht das Ergebnis (4) nachher in der Variablen a.
 
#9
C:
Also so siehts bis jetzt aus, ich komm immer noch nicht weiter... Die Aufgabe will dass jeder Primfaktor einzeln von oben nach unten größer werdend aufgelistet wird. Nur eine Ausgabe erlaubt und keine funktionen oder Arrays. Wo liegt der Denkfehler hier?



int main()

{
int Zahl, i = 2, j = 2, Prime ;
    scanf("%d", &Zahl);
 
    if (Zahl < 2)
    {
     printf("%d kann nicht zerlegt werden\n", Zahl);
    }
    
           for ( i = 2 ; i <= Zahl  ; i++ )
           {
              if ( Zahl % i == 0 )
             {
                  break;
              }
           }
        if ( i == Zahl )
          {printf("%d ist prim\n", Zahl);
        }
        else
    
                                while (Zahl % i == 0 && Zahl != 2)
                                {
                                while (i % j == 0)
                                {
                                    i /= j;
                                    j++;
                                }
                                printf("%d\n", i);
                                i++;
                                
                                    
                                }

    

    return 0;
    
}
 
Oben