Herzlich Willkommen, lieber Gast!
  Sie befinden sich hier:

  Forum » C / C++ (ANSI-Standard) » Primfaktorzerlegung

Forum | Hilfe | Team | Links | Impressum | > Suche < | Mitglieder | Registrieren | Einloggen
  Quicklinks: MSDN-Online || STL || clib Reference Grundlagen || Literatur || E-Books || Zubehör || > F.A.Q. < || Downloads   

Autor Thread - Seiten: > 1 <
000
13.11.2005, 21:05 Uhr
Peachie



Hallo.

Ich finde einfach nicht den Fehler in meinem Programm. Und zwar sollte ich eine rekursive Funktion primfaktoren(int n) schreiben, die alle Primfaktoren der Zahl m ausgibt.
Ich hab nun folgendes geschrieben:


C++:
#include <iostream>
#include "cond.h"
using namespace std;

int drucke (int x);

int primfaktoren (int n, int t) {
return cond(n == 2, 2, cond(t < n, cond(n % t == 0, primfaktoren(n/t, t) && drucke(t), primfaktoren(n, t+1)), drucke(n)));
}

int drucke (int x) {
cout << x << " ";
}

int main () {
cout << primfaktoren(10, 2) << endl;
system ("pause");
}



cond.h hat die Form: #define cond(a,b,c) (a ? b : c)
a entspricht if, b then und c else.

Etwas anderes als diese Funktion dürfen wir nicht verwenden (keine Schleifen etc). Mein Problem ist nun, dass er mir zwar die Primzahlen anzeigt, aber teilweise noch die 1 mit auftritt. Ich finde einfach nicht heraus wieso und wie ich das ändern kann. Kann mir vielleicht jemand helfen?? Danke im Voraus.

mod edit: Benutze die CPP Tags selber!

Dieser Post wurde am 13.11.2005 um 22:48 Uhr von Pablo editiert.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
001
13.11.2005, 21:41 Uhr
Bruder Leif
dances with systems
(Operator)


Moin!

Lass mich raten: Der Prof will seinen Studis zeigen, wie toll doch Lisp/Prolog ist und Schleifen unsinnig sind, und jetzt müsst Ihr in C Programme im Lisp-Style schreiben. Kommt mir bekannt vor... ich schau mir das mal an...
--
Mit 40 Fieber sitzt man nicht mehr vor dem PC.
Man liegt im Bett.
Mit dem Notebook.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
002
14.11.2005, 19:25 Uhr
Peachie



Ja, so sieht es leider aus. Hoffe aber das er bald sein Meinung ändert und wir endlich Schleifen benutzen dürfen! Danke, dass du dir das mal anschauen willst
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
003
14.11.2005, 19:39 Uhr
FloSoft
Medialer Over-Flow
(Administrator)


rekursiver aufruf ist der tod jeden stacks
--
class God : public ChuckNorris { };
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
004
14.11.2005, 21:13 Uhr
Bruder Leif
dances with systems
(Operator)


Moin!

Bin das ganze nochmal durchgegangen. Bei mir funktioniert das hier einwandfrei:


C++:
#include <stdio.h>

int drucke(int n)
{
    printf("%d\n", n);
    return 1;
}

#define cond(a, b, c) (a ? b : c)

int primfaktoren(int zahl, int teiler)
{
    return cond(zahl % teiler == 0, drucke(teiler), 1) && cond(zahl == teiler, 1}

int main()
{
    primfaktoren(10, 2);
    return 0;
}




Bearbeitung von Leif:
OK, der Algorithmus ist etwas anders. In meiner Schleife geh ich einfach alle Teiler von 2 bis zur Zahl selbst durch...

--
Mit 40 Fieber sitzt man nicht mehr vor dem PC.
Man liegt im Bett.
Mit dem Notebook.

Dieser Post wurde am 14.11.2005 um 21:14 Uhr von Bruder Leif editiert.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
005
15.11.2005, 00:41 Uhr
Peachie



Hmm.. ich glaube, dass dürfen wir alles noch nicht verwenden . Sonst gibt es wieder schön Punktabzüge. Geht mein Programm generell nicht so, wie ich es geschrieben habe? Ich verstehe einfach nicht, warum bei mir immer die 1 auftaucht! Oben ist übrigens noch ein Fehler, es muss t<=n sein. Auf jeden Fall danke, ich wünschte unser Prof wäre, was das angeht, nicht so penibel. Aber es geht hier wahrscheinlich um Chancengleichheit, weil einige ja noch nicht programmieren können und so.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
006
15.11.2005, 11:04 Uhr
Bruder Leif
dances with systems
(Operator)


Hups, ich seh gerade, ich geb alle Teiler der Zahl aus, nicht nur die Primfaktoren. OK, ich tauch nochmal ein
--
Mit 40 Fieber sitzt man nicht mehr vor dem PC.
Man liegt im Bett.
Mit dem Notebook.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
007
16.11.2005, 23:47 Uhr
Peachie



Habs jetzt doch noch hinbekommen, hatte nur mein drucke(t) falsch plaziert. Danke für die Hilfe .
MfG, Peachie
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
Seiten: > 1 <     [ C / C++ (ANSI-Standard) ]  


ThWBoard 2.73 FloSoft-Edition
© by Paul Baecher & Felix Gonschorek (www.thwboard.de)

Anpassungen des Forums
© by Flo-Soft (www.flo-soft.de)

Sie sind Besucher: