Seite 1 von 1

Hilfe in C

Verfasst: Mi Mai 28, 2014 12:45 pm
von DeadsGames
Hallo Leute brauche eure Hilfe bei einem C Programm.

Hier ist der Code:

Code: Alles auswählen

# include<stdio.h>

int primfaktor (int x);

int primfaktor (int x){
    int p=2;
    while (x%p!=0){
    p++;}
    if (x == p){
          return 0;
          }
    while (x%p==0){
    x=x/p;
    while (x%p!=0){
          p++;}
    if (x == p){
          return 0;}
    if(x == p){
         break;}
         }}

int main (){
    int pf;

    while ((pf= primfaktor(15)) > 1)
          printf("%d\n", pf);
    while ((pf= primfaktor(11))==1 )
          printf ("&d\n", pf);
    printf ("%d\n" , primfaktor(1));
    return 0;
}

Am Ende sollte die Primfaktorzerlegung ausgegeben werden untereinander also bei z.b 15 müsste
3
5
-1 ausgegeben werden
für die 11 einfach 11 ausgegeben werden
und wenn eine Zahl<2 eingegeben wird soll -2 ausgegeben werden.
Kann mir einer sagen wo mein Fehler liegt? Bei mir wird leider nichts ausgegeben

Re: Hilfe in C

Verfasst: Mi Mai 28, 2014 1:59 pm
von Xin
DeadsGames hat geschrieben:Hier ist der Code:
Ich formatiere den lieber mal was, damit man ihn lesen kann:

Code: Alles auswählen

# include<stdio.h>

int primfaktor (int x);

int primfaktor (int x)
{
    int p=2;

    while (x%p!=0)
        p++;

    if (x == p)
        return 0;

    while (x%p==0)
    {
        x=x/p;
        while (x%p!=0)
            p++;

        if (x == p)
            return 0;

        if(x == p)
            break;
    }
}

int main ()
{
    int pf;

    while ((pf= primfaktor(15)) > 1)
          printf("%d\n", pf);

    while ((pf= primfaktor(11))==1 )
          printf ("&d\n", pf);

    printf ("%d\n" , primfaktor(1));

    return 0;
}
DeadsGames hat geschrieben:Am Ende sollte die Primfaktorzerlegung ausgegeben werden untereinander also bei z.b 15 müsste
3
5
-1 ausgegeben werden
für die 11 einfach 11 ausgegeben werden
Warum?

Die Funktion primfaktor gibt ausschließlich 0 zurück, manchmal auch etwas undefiniertes. Das was Du zurück bekommst - also 0 oder etwas undefiniertes - gibst Du dann aus.
DeadsGames hat geschrieben:Bei mir wird leider nichts ausgegeben
Stimmt. Dein Programm hängt ein einer Endlosschleife.

Ändere den Code in primfaktor oben mal in folgendes

Code: Alles auswählen

    while (x%p!=0)
        p++, printf( "x: %d % p: %d\n", x, p );
Ist das, was Du erwartest?
Dann ändere den Code mal in

Code: Alles auswählen

    while (x%p!=0 && p < 20 )
        p++, printf( "x: %d % p: %d\n", x, p );
Entspricht das Deiner Erwartung?

Wenn das Programm nicht tut, was Du erwartest, lass Dir mit printf() Dinge zwischendurch ausgeben und schau, was Deinen Erwartungen entspricht - und was nicht.

Und mach dir doch mal Gedanken darüber, was Du eigentlich mit diesem Code ausdrücken möchtest:

Code: Alles auswählen

        if (x == p)
            return 0;

        if(x == p)
            break;

Re: Hilfe in C

Verfasst: Mi Mai 28, 2014 3:23 pm
von mfro

Re: Hilfe in C

Verfasst: Mi Mai 28, 2014 6:25 pm
von DeadsGames
Also um es besser zu veranschaulichen zeige ich euch was das Programm machen soll.
Im Großen und ganzen muss ich das nachfolgende Programm mit Funktionen schreiben aber statt dem scanf soll halt die Zahl in den Klammern also 15,11 und 1 zerlegt werden.

Code: Alles auswählen

# include<stdio.h>

int main ()
{
    int x, p=2; 

    scanf("%d", &x);

    if (x<2) 
{
                     printf("%d\n", -2);
}

    else
{
    while (x%p!=0) 
{
    p++;
}
    if (x == p) 
{
                    printf("%d ist gleich prim.\n", x);
                    return 0;
}

    while (x%p==0)
{
    x=x/p;
    printf("%d\n", p);

    while (x%p!=0)
{
    p++;
}
    if (x == p)
{
                    printf("%d\n", x);
                    return 0;
}

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

return 0;
} 

Re: Hilfe in C

Verfasst: Mi Mai 28, 2014 6:35 pm
von Xin
Was Dein Programm machen soll wurde wohl verstanden. Dein Programm macht was anderes.
Und Du hast Tipps erhalten, wie Du herausfindest, was Dein Programm macht, so dass Du darüber nachdenken kannst, warum Deine Formulierung des Quelltextes tut, was es tut und nicht, was Du willst.

Wenn Du dazu Fragen hast - nur zu! Wenn Du willst, dass jemand Dein Programm schreibt... verschwendest du vermutlich Deine Zeit.