Problem: for-schleife: Prim. und Zahlenbereich

Cherry07

Mitglied
Hallo,

schreibe im Moment einen C-Code, dass die Primfaktorzerlegung durchführen soll.
Es soll dabei ein ganzer Zahlenbreich zerlegt werden, dass durch zwei Eingaben in je zwei Zeilen geliefert wird.

Der Code ohne die for-Schleife funktioniert einwandfrei, allerdings nicht für einen Bereich.
Eigentlich muss es doch mit dieser for-Schleife funktionieren, oder. Also ich weiss auf jeden Fall nicht wo der Fehler liegt. Kann mir mal da jemand bitte helfen?

Gruß
Cherry07

Hier der Code:
Code:
# include<stdio.h>
# include<math.h>

int main (void)
{
    int x, a, u_g, o_g;
    int i;

    printf("Untergrenze = ");
    scanf("%d", &u_g);
    printf("Obergrenze = ");
    scanf("%d", &o_g);
    
    printf("%d=", x);
    i=0;
    x=i;
    a=2;
    
    for(i=u_g; i<=o_g; i++)
    {

        while(x%a!=0)
        {
            a++;
                if (x == a)
                {
                  printf("%d\n", x);
                  break;
                }
        }
        
        while (x%a==0)
        {
            x=x/a;
            printf("%d*", a);
            
                while (x%a!=0)
                {
                 a++;
                }
                
                if(x == a)
                {
                    printf("%d\n", x);
                    break;
                }
        }
    }
return 0;
}
 
Zuletzt bearbeitet:
Hi.

Du mußt die Initialisierung für a und x innerhalb der for-Schleife machen. Sonst funktioniert es ja nur beim ersten Mal.

Und bitte verwende entsprechende Code Tags, ansonsten ist dein Code schlecht lesbar.

Gruß
 
Hallo,

hier ein Beispiel, dass das Problem verdeutlichen soll:
Beispiel:
Obergrenze = 4
Untergrenze = 15

Ausgabe:
2=2*2
2*

Hier der veränderte CODE:

Code:
# include<stdio.h>
# include<math.h>
# include<stdlib.h>
# include<string.h>

int main (void)
{
    int x, a, u_g, o_g;
    int i;

    printf("Untergrenze = ");
    scanf("%d", &u_g);
    printf("Obergrenze = ");
    scanf("%d", &o_g);

    /*Primfaktorzerlegung*/
    
    printf("%d=", x);
    
    i=0;
    
    for(i=u_g; i<=o_g; i++)
    {
     x=i;
     a=2;
        while (x%a!=0)
        {
            a++;
                if (x == a)
                {
                  printf("%d\n", x);
                  
                }
        }
        
        while (x%a==0)
        {
            x=x/a;
            printf("%d*", a);
            
                while (x%a!=0)
                {
                 a++;
                }
                
                if(x == a)
                {
                    printf("%d\n", x);
                    
                }
        }
    }

system("pause");

return 0;
}
 
Zuletzt bearbeitet:
Hi.

Bist du sicher, das du jetzt die richtige Version gepostet hast? Bei mir kommen da andere Ausgaben:
Code:
Untergrenze = 4
Obergrenze = 15
32767=2*2
Hattest du nicht gesagt "der Code ohne die for-Schleife funktioniert einwandfrei"?

Das ist nicht der Fall. Du hast eine Endlosschleife programmiert. Und zwar darfst du den Wert von a in der while-Schleife nicht größer machen als x. Und wenn x == a ist, solltest du die Schleife sofort abbrechen:
C:
 while (x%a==0)
          {
             x=x/a;
             printf("%d*", a);

             while (x%a!=0 && a < x)
               {
                  a++;
               }

             if(x == a)
               {
                  printf("%d\n", x);
                  break;
               }
          }
Gruß
 

Neue Beiträge

Zurück