+ Antworten
Ergebnis 1 bis 10 von 10

fehler in fakultätsfunktion

Diskussion über fehler in fakultätsfunktion in C und C++ der Kategorie Programmierung; Code: #include <stdio.h> int fak(int n, int erg){ if(n>1){ erg*=n; fak(n-1, erg); } else{ return erg; } } int main(){ ...

  1. #1
    Reg.-Benutzer
    Reg.-Datum
    10.02.2012
    Beiträge
    4

    Standard fehler in fakultätsfunktion

    Code:
    #include <stdio.h>
    
    int fak(int n, int erg){
    	if(n>1){
    		erg*=n;
    		fak(n-1, erg);
    	}
    	else{
    		return erg;
    	}
    }
    
    int main(){
    	int eing;
    	printf("Bitte Zahl eingeben: \n");
    	scanf("%i",&eing);
    	printf("Ergebnis:%3i\n", fak(eing, 1));	
    	return 0;
    }
    Wiso kommt hier immer 12 raus?
    Und gibs ne Möglichkeit einen Standardwert für die Übergabeparameter festzulegen?
    also ich meine wie in java:
    Code:
    public int fak(int n, int erg=1){...}

  2. #2
    Administrator + Moderator
    C++: Compiler, IDEs, APIs / C und C++, Algorithmik, Basic, Sonstige, .NET
    Avatar von Klotzkopp
    Reg.-Datum
    10.07.2001
    Ort
    Essen
    Beiträge
    8.980

    Standard

    Dein Compiler sollte diesen Code eigentlich nicht akzeptieren, oder zumindest eine Warnung ausgeben, denn im if-Zweig gibt deine Funktion nichts zurück. Nur im else-Zweig ist eine return-Anweisung.
    Zitat Zitat von misc Beitrag anzeigen
    Und gibs ne Möglichkeit einen Standardwert für die Übergabeparameter festzulegen?
    Ja.
    "Funktioniert nicht" ist keine ausreichende Problembeschreibung.

  3. #3
    Reg.-Benutzer Avatar von Hexagon
    Reg.-Datum
    30.10.2001
    Ort
    bei HH...
    Beiträge
    401

    Standard

    Moin.
    Zitat Zitat von misc Beitrag anzeigen
    Wiso kommt hier immer 12 raus?
    Immer? Oder nur bei bestimmten Eingaben?
    Zitat Zitat von misc Beitrag anzeigen
    Und gibs ne Möglichkeit einen Standardwert für die Übergabeparameter festzulegen?
    also ich meine wie in java:
    Code:
    public int fak(int n, int erg=1){...}
    Genau so macht man das auch C/C++.
    Offizielles Alt-Mitglied im Club der Schokoholiker und bekennender Knipser
    "Onkel, der den Kindern nur Blödsinn beibringt"
    ------------------------------------
    Fachbegriffe der Informatik
    320: Softwarewartung
    Flags putzen, Strukturen nachrichten und Variablen mit Öl auffüllen. (Hans Bonfigt)

  4. #4
    Reg.-Benutzer
    Reg.-Datum
    10.02.2012
    Beiträge
    4

    Standard

    Also bei eingabe 1 kommt 1 raus. bei allen anderen getesteten eingaben ist das ergebnis 12.
    wenn ich die zeile
    Code:
    int fak(int n, int erg){
    durch
    Code:
    int fak(int n, int erg=1){
    ersetze bekomme ich bei der compilierung die fehlermeldung:
    fak.c:23: error: expected ';', ',' or ')' before '=' token

  5. #5
    Moderator Daily Talk Avatar von Guybrush Threepwood
    Reg.-Datum
    01.09.2002
    Ort
    Melee Island
    Beiträge
    4.413

    Standard

    Was für einen Compiler benutzt du denn?
    Ich bin Guybrush Threepwood, ein mächtiger Pirat!

  6. #6
    Administrator + Moderator
    C++: Compiler, IDEs, APIs / C und C++, Algorithmik, Basic, Sonstige, .NET
    Avatar von Klotzkopp
    Reg.-Datum
    10.07.2001
    Ort
    Essen
    Beiträge
    8.980

    Standard

    Ich muss mich korrigieren: Defaultparameter gibt's nur in C++, nicht in C.
    "Funktioniert nicht" ist keine ausreichende Problembeschreibung.

  7. #7
    Reg.-Benutzer
    Reg.-Datum
    10.02.2012
    Beiträge
    4

    Standard

    Benutze minGW für Windows.

    Also das erste Problem hab ich mitlerweile mit Hilfe eines kumpelz gelöst. Habe die fak.c-Datei in ein anderes Verzeichnis kopiert und dann nochmal neu compiliert.
    Der Grund war:
    naja, der gcc nimmt erstmal den code und baut eine .o datei daraus, das is nur der übersetzte programmcode in nem internen format
    dann nimmt der linker vom gcc die .o datei und bindet die benötigten bibliotheken ein für, für printf, scanf aufruf z.b. und baut eine ausführbare datei daraus
    wenn die .o da noch gelegen hat von einem früheren test, bei dem halt immer 12 raus kam
    dann hat der linker die gesehen und direkt die exe draus gebaut ohne den code neu zu übersetzen
    Weiss nich so ganz genau was es heisst aber das programm funktioniert einwandfrei jez.

    wenn ihr mir jez noch meine zweite frage beantworten könntet bitte?!

  8. #8
    Administrator + Moderator
    C++: Compiler, IDEs, APIs / C und C++, Algorithmik, Basic, Sonstige, .NET
    Avatar von Klotzkopp
    Reg.-Datum
    10.07.2001
    Ort
    Essen
    Beiträge
    8.980

    Standard

    Zitat Zitat von misc Beitrag anzeigen
    das programm funktioniert einwandfrei jez.
    Wenn im if-Zweig deiner fak-Funktion immer noch keine return-Anweisung steht, dann ist das aber eher Zufall.
    "Funktioniert nicht" ist keine ausreichende Problembeschreibung.

  9. #9
    Reg.-Benutzer
    Reg.-Datum
    10.02.2012
    Beiträge
    4

    Standard

    Zitat Zitat von Klotzkopp Beitrag anzeigen
    Ich muss mich korrigieren: Defaultparameter gibt's nur in C++, nicht in C.
    ok damit wäre auch das geklärt danke leute.

  10. #10
    Reg.-Benutzer
    Reg.-Datum
    24.11.2010
    Beiträge
    183

    Standard

    Zitat Zitat von Klotzkopp Beitrag anzeigen
    Wenn im if-Zweig deiner fak-Funktion immer noch keine return-Anweisung steht, dann ist das aber eher Zufall.
    Bei seiner Umsetzung wäre das return im IF-Zweig völlig egal, er kommt nie dort an. Entsprechend würde es in beiden Fällen zu einer Compiler-Warnung kommen.

    A: Das return fehlt.
    B: Das return wird nie erreicht.

    Um innerhalb des IF-Zweigs ein Return zu verwenden müsste er das Programm etwas anders gestalten.

Aktive Benutzer

Aktive Benutzer

Aktive Benutzer in diesem Thema: 1 (Registrierte Benutzer: 0, Gäste: 1)

     

Ähnliche Themen

  1. Antworten: 4
    Letzter Beitrag: 14.02.2011, 09:55
  2. Bios Fehler, mein Fehler oder doch wieder MS?
    Von bambam im Forum Hardware
    Antworten: 4
    Letzter Beitrag: 20.03.2008, 20:12
  3. Fakultätsfunktion
    Von Azubi22 im Forum Java
    Antworten: 6
    Letzter Beitrag: 29.08.2003, 16:32
  4. Antworten: 4
    Letzter Beitrag: 24.04.2003, 11:49
  5. Windows 98 Fehler: Explorer verursachte Fehler in Modul Shell32.dll
    Von Hasimator im Forum Windows Betriebssysteme
    Antworten: 2
    Letzter Beitrag: 08.12.2001, 14:35

Die häufigsten Suchbegriffe für diese Seite:

Bisher noch keine Treffer von einer Suchmaschine