Zum Inhalt wechseln

Als Gast hast du nur eingeschränkten Zugriff!


Anmelden 

Benutzerkonto erstellen

Du bist nicht angemeldet und hast somit nur einen sehr eingeschränkten Zugriff auf die Features unserer Community.
Um vollen Zugriff zu erlangen musst du dir einen Account erstellen. Der Vorgang sollte nicht länger als 1 Minute dauern.

  • Antworte auf Themen oder erstelle deine eigenen.
  • Schalte dir alle Downloads mit Highspeed & ohne Wartezeit frei.
  • Erhalte Zugriff auf alle Bereiche und entdecke interessante Inhalte.
  • Tausche dich mich anderen Usern in der Shoutbox oder via PN aus.
 

   

Foto

[C] Fakultätsrechner Ergebnis ist immer 0

- - - - -

  • Bitte melde dich an um zu Antworten
5 Antworten in diesem Thema

#1
tr0p1c

tr0p1c

    Noob

  • Banned
  • PIPPIP
  • Likes
    3
  • 4 Beiträge
  • 0 Bedankt
Hey,

ich bin gerade dabei C zu lernen und habe schon ein Problem bekommen. Ich möchte ein Fakultätsrechner in C schreiben, allerdings wird mir als Ergebnis immer 0 ausgegeben egal um welche Eingabe sich handelt.

#include <stdio.h>

int main()
{
int i, number, result;

printf("Geben Sie N ein: ");
scanf("%i",&number);

for (i = number; i > 0; i -= 2)
{
	 result = i * (i-1);
}

printf("Fak: %in",result);

return 0;
}

Bearbeitet von tr0p1c, 20 July 2014 - 00:23 Uhr.


#2
pdr0

pdr0

    Pentester

  • Premium Member
  • Likes
    86
  • 148 Beiträge
  • 87 Bedankt
Du überschreibst hier das Ergebnis am im letzten Durchlauf mit 0, also mit 1*(1-1). Da du auch i-=2 machst kriegst du bei graden Zahlen 2 (2*(2-1)) und bei ungeraden Zahlen 0 (1*(1-1)) raus.
result = i * (i-1);

Das Ergebnis muss immer Multipliziert werden:

Bearbeitet von pdr0, 20 July 2014 - 10:20 Uhr.


#3
lolorollo

lolorollo

    Hacktivist

  • Premium Member
  • Likes
    12
  • 57 Beiträge
  • 1 Bedankt

void fak(int number)
{

int i, result=1;
if (number <3)
{
printf("Fak: %dn",number);
return 0;
}
for (i = number; i>=0; i--)
{
//debug ;)
//printf("%d %d %dn",i,i*(i-1),result);
result *=i;
}
printf("%d",result);
}


Die for-Schleife muss aber for (i = number; i>0; i--) heißen, da wenn du i>=0; verwendest i bei dem letzten Schleifendurchlauf 0 ist und du dann result mit 0 multiplizierst.

#4
pdr0

pdr0

    Pentester

  • Premium Member
  • Likes
    86
  • 148 Beiträge
  • 87 Bedankt

Die for-Schleife muss aber for (i = number; i>0; i--) heißen, da wenn du i>=0; verwendest i bei dem letzten Schleifendurchlauf 0 ist und du dann result mit 0 multiplizierst.


Ja hast recht, war doch ein wenig "Spät" ;). ich werde meinen Spoiler anpassen.

#5
NamiMote

NamiMote

    Leecher

  • Members
  • PIP
  • Likes
    0
  • 1 Beiträge
  • 0 Bedankt
  • Windows Phone
  • Windows, Linux
Ich weiß, es ist ein etwas altes Thema, aber da ich neu bin und ja irgendwo anfangen muss ;3
 
 
An Fakultäten gehe ich gerne rekursiv ran, also wie folgend:
 
unsigned int fak(unsigned int val)
{
	if(val==2)
		return 2;
	return val * fak(val-1);
}
 
Das ist dann auch ganz einfach zu benutzen:
 
int result = fak(input);
Bzw. in deinem Beispiel dann in etwa so:
 
 
#include <stdio.h>
unsigned int fak(unsigned int val)
{
	if(val==2)
		return 2;
	return val * fak(val-1);
}
int main()
{
	int number;
	printf("Geben Sie N ein: ");
	scanf("%i",&number);
	printf("Fak: %in",fak(number));
	return 0;
}
 
 
Grüße NamiMote

#6
pr0legend

pr0legend

    Script Kiddie

  • Members
  • PIPPIPPIPPIP
  • Likes
    23
  • 40 Beiträge
  • 5 Bedankt

Auch wenn Effizienz heutzutage scheiß egal ist, finde ich das ganze iterativ schöner.

Bei der Rekursion hast du in jedem sich selbst aufrufendem Durchlauf die if-Abfrage.

 

Die iterative Lösung sollte schneller sein!

 

Please Login HERE or Register HERE to see this link!


“There is a theory which states that if ever anyone discovers exactly what the Universe is for and why it is here, it will instantly disappear and be replaced by something even more bizarre and inexplicable.
There is another theory which states that this has already happened.”
- Douglas Adams



  Thema Forum Themenstarter Statistik Letzter Beitrag

Besucher die dieses Thema lesen:

Mitglieder: , Gäste: , unsichtbare Mitglieder:


This topic has been visited by 63 user(s)


    0*ptr, Alsuna, B1nary, Becks, Born2Hack, Bypass, c3rberus, Cortys, Crowx88, Cyber Tjak, dd34t0r, deathfafara, dorich75, easysurfer, EiLafJu, Framerater, gr33d, gtawelt, hacke2010, hacked, hitman56, Jackdaniels, Jozu, Juri, kakao1, keyb0ardz, kiwitone, lolorollo, Lopus, Lunar, n0de, NamiMote, notfound, PadX18, pdr0, pi^2, pr0legend, R3s1stanc3, Ragnad, ranjo12, rat123, ref0rm, Rogerlopensio, Seldos, Sergejbekas, Silent0wn3r, Slixer, smc2014, Stalin, superuser123, syntx, Tittler, Toskom4n, Tr!p0d, umarex, Uomo, vital, Xenio, yq8, ZeroC00L, zlay, Zorrez, zrty
Die besten Hacking Tools zum downloaden : Released, Leaked, Cracked. Größte deutschsprachige Hacker Sammlung.