Herzlich Willkommen, lieber Gast!
  Sie befinden sich hier:

  Forum » C / C++ (ANSI-Standard) » Fakultät !!!

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 < [ 2 ] [ 3 ]
000
28.10.2003, 23:38 Uhr
~tomster5
Gast


Moinsen,
vielleicht könnt Ihr Euch folgendes Programm mal anschauen. MIt int klappt das, aber mit double nicht. Wo liegt mein Fehler ???

MfG

tomster5

C++:
#include <stdio.h>
#include <iostream>

  
/* Fakultaet berechnen*/
      
double fak(double n)
       {
         if (n <= 1) return(1);
        
         else
         {
          return(n * fak(n - 1));
         }
       }
      
int main ()
{

double n;

printf("\n Gib eine Zahl ein !!!\n");
scanf("%f",&n);
printf("\n die Fakultaet von %f ist %f \n\n",n,fak(n));
    
system("PAUSE");
}



--edit: pablo. [ cpp ] tags gesetzt --

Dieser Post wurde am 28.10.2003 um 23:48 Uhr von Pablo Yanez Trujillo editiert.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
001
28.10.2003, 23:59 Uhr
Pablo
Supertux
(Operator)


Wieso includierts du iostream wenn du C Programmierst?

Es liegt an double n, ändere zu float n; und dann funktioniert es. Wenn du aber C++ programmieren willst, dann wäre der Source Code so besser:

C++:
#include <iostream>

double fak(double n)
{
    if( n<= 1) return 1;
    return n*fac(n-1);
}
int main()
{
    double n;
    std::cout << std:.endl << " Gib eine Zahl ein !!!\n";
    std::cin >> n;
    std::cout << std::endl << " die Fakultät von " << n << " ist " << fak(n) << std::endl << std::endl;

   return 0;
}



--
A! Elbereth Gilthoniel!
silivren penna míriel
o menel aglar elenath,
Gilthoniel, A! Elbereth!
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
002
29.10.2003, 00:08 Uhr
~tomster5
Gast


moin,
danke erstmal, aber welches double n meinst Du ???

Ich programmiere in C. Ich hab nur das Problem, das ich zu Hause Auf Windows arbeite und in der Schule unter Linux. Bei meinem Compiler zu Hause muss ich #include <iostream> und system("PAUSE");
mit hinschreiben, sonst verschwindet das Konsolenfenster sofort wieder.

MfG

tomster5
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
003
29.10.2003, 00:28 Uhr
Pablo
Supertux
(Operator)


Ich habe das double von main gemeint.

iostream ist nicht in C enthalten, also wenn du iostream includierst, dann ist es C++ Code und man sollte C und C++ nicht mischen.

Und system wird in stdlib.h deklariert.

Bzgl. C. Ich habe noch nie geschafft mit scanf eine double Zahl zu lesen, ich weiß nicht warum. In meinen man pages steht, dass "%l %L, usw." nicht ANSI sind und deshalb nicht portabel. Wenn ich double lesen will, dann nehme ich immer fgets und mit atof in double bzw. float umwandle.

Außerdem, die Fakultät Funktion wird nur auf der Menge der Natürlichen Zahlen definiert, also double macht nicht so viel Sinn. Wenn du eine große Zahl darstellen willst, dann reicht long.
--
A! Elbereth Gilthoniel!
silivren penna míriel
o menel aglar elenath,
Gilthoniel, A! Elbereth!
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
004
29.10.2003, 08:47 Uhr
virtual
Sexiest Bit alive
(Operator)



Zitat:
Pablo Yanez Trujillo postete
Bzgl. C. Ich habe noch nie geschafft mit scanf eine double Zahl zu lesen, ich weiß nicht warum. In meinen man pages steht, dass "%l %L, usw." nicht ANSI sind und deshalb nicht portabel. Wenn ich double lesen will, dann nehme ich immer fgets und mit atof in double bzw. float umwandle.

Hm, also

C++:
double var;
scanf("%lf", &var);


ist ziemlich ANSI, um nicht zu sagen total.
Ich weiß nicht, welche Manpages Du liest, aber bei meinen steht was anderes: Da steht höchstens die veraltete Aussage, daß long long kein ANSI C Typ sei (ist seit C99 jedoch einer), daß daher "%Ld" nicht ANSI sei (ist es aber it C99 aber)
--
Gruß, virtual
Quote of the Month
Ich eß' nur was ein Gesicht hat (Creme 21)
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
005
29.10.2003, 12:10 Uhr
Windalf
Der wo fast so viele Posts wie FloSoft...
(Operator)


@virtual
an der stelle fällt mir wieder folgende Frage ein die ich irgendwie mal vergessen hatte.
Ist es eigentlich "schlau" rekursive funktionsaufrufe zu machen oder ist es performanter das direkt zu implementieren.
--
...fleißig wie zwei Weißbrote
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
006
29.10.2003, 12:45 Uhr
(un)wissender
Niveauwart


Ich misch mich hier mal ein:

Tja, die alte Frage!
Kommt drauf an(auf die Maschine, das Problem), ist die richtige Antwort!
Oft sind rekurive Aufrufe einfacher zu lesen und zu implementieren als iterative.
Es kommt auch vor, das rekursive Aufrufe das Problem wesentlich performanter lösen, das Springerproblem ist z.B. so eins.
Quicksort (rekursiv) ist weiterhin der schnellste Sortieralgorithmus.

Habe aber auch feststellen müssen, das man aufpassen muss, dass die Rekusion nicht zu tief wird, dann gibt es nämlich mächtig Ärger.
Wenn man z.B einen großen Wert aus dem Pascalschem Dreieck berechnet kann das schnell mal vorkomen.

Im Zweifelsfall mit den max. Werten ausprobieren und Profiler nehmen.
--
Wer früher stirbt ist länger tot.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
007
29.10.2003, 12:54 Uhr
Windalf
Der wo fast so viele Posts wie FloSoft...
(Operator)


@unwissender
ich habe schon so eine das kommt darauf an antwort befürchtet
Thx
--
...fleißig wie zwei Weißbrote
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
008
29.10.2003, 15:20 Uhr
Pablo
Supertux
(Operator)



Zitat:
virtual postete
[quote]Pablo Yanez Trujillo postete
[i]Bzgl. C. Ich habe noch nie geschafft mit scanf eine double Zahl zu lesen, ich weiß nicht warum. In meinen man pages steht, dass "%l %L, usw." nicht ANSI sind und deshalb nicht portabel. Wenn ich double lesen will, dann nehme ich immer fgets und mit atof in double bzw. float umwandle.


Hm, also

C++:
double var;
scanf("%lf", &var);


ist ziemlich ANSI, um nicht zu sagen total.
Ich weiß nicht, welche Manpages Du liest, aber bei meinen steht was anderes: Da steht höchstens die veraltete Aussage, daß long long kein ANSI C Typ sei (ist seit C99 jedoch einer), daß daher "%Ld" nicht ANSI sei (ist es aber it C99 aber)[/i][/quote]


Gute Frage, vielleicht haben die Man Pages nur %f als nicht ANSI gemeint. Naja, ich habe es selber ausprobiert und scanf wurde gar nicht mal ausgeführt.
--
A! Elbereth Gilthoniel!
silivren penna míriel
o menel aglar elenath,
Gilthoniel, A! Elbereth!
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
009
29.10.2003, 15:30 Uhr
virtual
Sexiest Bit alive
(Operator)


%f ist erst recht ANSI.

C++:
#include <stdio.h>

int main()
{
    double x;

    printf("Bitte double eingeben: ");
    fflush(stdout);

    if (1 != scanf("%lf", &x))
    {
        fprintf(stderr, "Das war kein double\n"
                        "Du machst nur Trouble\n");
        return 1;
    }

    printf("Ich erlaube mir mal, dein Double (%f) zu quadrieren.\n"
           "Das wäre dann %f.\n", x, x*x);
}


Läuft problemlos. Zu beachten ist, daß man beim printf dann das l wieder fortlassen muß. Eine der netten Eigenschaften von C: unlogisch, aber geht.
--
Gruß, virtual
Quote of the Month
Ich eß' nur was ein Gesicht hat (Creme 21)
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
Seiten: > 1 < [ 2 ] [ 3 ]     [ 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: