Hilfe in C

Schnelle objektorientierte, kompilierende Programmiersprache.
Antworten
DeadsGames
Beiträge: 6
Registriert: Do Apr 24, 2014 5:11 pm

Hilfe in C

Beitrag von DeadsGames » Mi Mai 28, 2014 12:45 pm

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

Benutzeravatar
Xin
nur zu Besuch hier
Beiträge: 8862
Registriert: Fr Jul 04, 2008 11:10 pm
Wohnort: /home/xin
Kontaktdaten:

Re: Hilfe in C

Beitrag von Xin » Mi Mai 28, 2014 1:59 pm

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;
Merke: Wer Ordnung hellt ist nicht zwangsläufig eine Leuchte.

Ich beantworte keine generellen Programmierfragen per PN oder Mail. Dafür ist das Forum da.

mfro
Beiträge: 346
Registriert: Mi Jan 16, 2013 4:58 pm

Re: Hilfe in C

Beitrag von mfro » Mi Mai 28, 2014 3:23 pm

It's as simple as that. And remember, Beethoven wrote his first symphony in C.

DeadsGames
Beiträge: 6
Registriert: Do Apr 24, 2014 5:11 pm

Re: Hilfe in C

Beitrag von DeadsGames » Mi Mai 28, 2014 6:25 pm

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;
} 

Benutzeravatar
Xin
nur zu Besuch hier
Beiträge: 8862
Registriert: Fr Jul 04, 2008 11:10 pm
Wohnort: /home/xin
Kontaktdaten:

Re: Hilfe in C

Beitrag von Xin » Mi Mai 28, 2014 6:35 pm

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.
Merke: Wer Ordnung hellt ist nicht zwangsläufig eine Leuchte.

Ich beantworte keine generellen Programmierfragen per PN oder Mail. Dafür ist das Forum da.

Antworten