C++ N!

10/09/2013 21:34 blubber6#1
hey leute
ich versuch grad C++ zu üben desshalb schreib ich ein programm, dass die n! oder n fackultät berechnet.

Hier der code aber iwo liegt ein Fehler nur seh ich ihn nicht....
int main und iostream wurden oben schon definiert und wichtig ist das ich das nicht mit if machen darf...und wie mach ich Code:
[spoiler]

unsigned int n;
std::cin >>n;

unsigned int f = 1;
while (n != 0 && n >= 0)
{ do{
f = f * n;
--n;
}for(n == 0);
break;

} std::cout << f << std::endl;


[\spoiler]
brauch ich die for anweisung überhaupt?
danke und einen schönen abend
10/10/2013 00:43 Brendan Jordan#2
Warum so kompliziert?

PHP Code:
long fakultaet(int zahl)
{
    
long fak 1;
    for(
int i 1<= zahli++)
        
fak fak*i;
    return 
fak;

10/10/2013 14:56 Nightblizard#3
Warum nicht zur compile-time?
[Only registered and activated users can see links. Click Here To Register...]
10/10/2013 16:44 MrSm!th#4
Kompiliert dieser Unsinn überhaupt? Oo
10/10/2013 17:48 Master674b#5
Quote:
Originally Posted by MrSm!th View Post
Kompiliert dieser Unsinn überhaupt? Oo
Wieso Unsinn, das macht man i.d.R. so wenn man etwas zur Compilezeit berechnet haben möchte. Kannst über ähnliche Mittel zur Compilezeit Zeichenketten verschlüsseln etc.

Das enum wirkt in dem Fall wie ne constexpr.
10/10/2013 17:54 Tasiro#6
Das ist das Beispiel für TMP... Natürlich kompiliert das.

Zeichenketten zur Kompilierzeit zu verschlüsseln ist aber nicht so einfach, i. Allg. nur mit dem Präprozessor möglich.
10/10/2013 18:46 Nightblizard#7
Quote:
Originally Posted by MrSm!th View Post
Kompiliert dieser Unsinn überhaupt? Oo
Ne, selbstverständlich habe ich ideone gehackt, damit ich bei einem nicht erstellbarem Programm Output faken und hier dann posten kann. :rolleyes:
10/10/2013 18:47 MrSm!th#8
Wie ihr nun ernsthaft meint, ich kenne keine TMP und meinte mit meinem Post Nightblizzard oO
Quote:
Originally Posted by Master674b View Post
Wieso Unsinn, das macht man i.d.R. so wenn man etwas zur Compilezeit berechnet haben möchte. Kannst über ähnliche Mittel zur Compilezeit Zeichenketten verschlüsseln etc.

Das enum wirkt in dem Fall wie ne constexpr.
Gemeint war natürlich der OP mit seinem Code.

Wobei ich Metaprogrammierung hier für unangebracht halte. Es geht um den Erwerb der Sprache und ihrer Kontrollstrukturen (ggf sogar für die Schule, wenn er etwas von Einschränkungen erzählt) und nicht um die effizienteste Implementation.
Du schießt da mit Kanonen auf Spatzen, Nightblizzard.

Btw. Witzig, wie du einfach mal das Verschlüsseln von Zeichenketten als Beispiel nennst, Master :D Damit habe ich mich noch kürzlich rumgeschlagen.
10/11/2013 15:55 blubber6#9
Quote:
Originally Posted by MrSm!th View Post
Wie ihr nun ernsthaft meint, ich kenne keine TMP und meinte mit meinem Post Nightblizzard oO


Gemeint war natürlich der OP mit seinem Code.

Wobei ich Metaprogrammierung hier für unangebracht halte. Es geht um den Erwerb der Sprache und ihrer Kontrollstrukturen (ggf sogar für die Schule, wenn er etwas von Einschränkungen erzählt) und nicht um die effizienteste Implementation.

studium ;) es geht ums verständnis von while/if/for schleifen, die ich iwie nicht verstehe...
habs hier noch mit ner for schleife versucht wär geil wenn mir einer erklären könnte warum das so nicht geht ;) und wie for schleifen eigentlich funktionieren...

Code:
unsigned int n;
unsigned int f = 1;
    for(std::cin >> n ; n != 0 && n >= 0; --n );
    f = f * n;

    std::cout << f << std::endl;
10/11/2013 17:45 .SkyneT.#10
Quote:
Originally Posted by blubber6 View Post
studium ;) es geht ums verständnis von while/if/for schleifen, die ich iwie nicht verstehe...
habs hier noch mit ner for schleife versucht wär geil wenn mir einer erklären könnte warum das so nicht geht ;) und wie for schleifen eigentlich funktionieren...

Code:
unsigned int n;
unsigned int f = 1;
    for(std::cin >> n ; n != 0 && n >= 0; --n );
    f = f * n;

    std::cout << f << std::endl;
Das Semikolon hinter der For-Schleife ist auf jeden Fall fehl am Platz.
Vom Rest will ich gar nicht erst anfangen.

Ansich gibts zu den Schleifen nicht allzuviel zu sagen,
While verwendest du meistens, wenn du noch nicht weißt
wie viele Durchläufe es geben wird und for, wenn du es weißt.

2 Kleine Beispiele:
Code:
while (bedingung)
{
    //Code
}
Code:
std::string str = "foo";
for(std::string::iterator it = str.begin(); it != str.end(); ++it) 
{
   //Do something with *it
}
Übrigens scheint es mir so als ob dir massenweise Grundlagen fehlen.