Funktion addieren



  • double-freak schrieb:

    erbsenzähler schrieb:

    double und %f passen auch nur halb zusammen, nimm für double lieber %lf

    das macht bei mir keinen unterschied, spuckt beides das gleiche aus.
    🙂

    Ja, aber lf steht ja für long float, also für double. Deswegen ist es schon sinnvoller das zu benutzen, obwohl es eigentlich keinen Unterschied macht.

    @hasso:
    Wenn du dein Programm noch etwas erweitern willst, dann kannst du es ja so umschreiben, dass printf mit dem Ergebnis im Hauptprogramm aufgerufen wird und die Funktion addiere einen Wert zurückgibt.



  • Wirt.-Inf.07 schrieb:

    Ja, aber lf steht ja für long float, also für double. Deswegen ist es schon sinnvoller das zu benutzen, obwohl es eigentlich keinen Unterschied macht.

    'long float' gibts doch gar nicht. oder meinst du 'double'?
    hab' grad mal nachgeschaut, im C-standard steht, dass %f zum ausgeben von 'double' da ist. da steht auch nirgends, dass man ein l davor schreiben soll, denn l ist nur bei integer-typen erlaubt. kann aber auch sein, dass ich was übersehen habe.
    🙂



  • fliesskomma-freak schrieb:

    Wirt.-Inf.07 schrieb:

    Ja, aber lf steht ja für long float, also für double. Deswegen ist es schon sinnvoller das zu benutzen, obwohl es eigentlich keinen Unterschied macht.

    'long float' gibts doch gar nicht. oder meinst du 'double'?
    hab' grad mal nachgeschaut, im C-standard steht, dass %f zum ausgeben von 'double' da ist. da steht auch nirgends, dass man ein l davor schreiben soll, denn l ist nur bei integer-typen erlaubt. kann aber auch sein, dass ich was übersehen habe.
    🙂

    Ja, mit long float meine ich double. lf = long float = double oder?



  • Wirt.-Inf.07 schrieb:

    double-freak schrieb:

    erbsenzähler schrieb:

    double und %f passen auch nur halb zusammen, nimm für double lieber %lf

    das macht bei mir keinen unterschied, spuckt beides das gleiche aus.
    🙂

    Ja, aber lf steht ja für long float, also für double. Deswegen ist es schon sinnvoller das zu benutzen, obwohl es eigentlich keinen Unterschied macht.

    @hasso:
    Wenn du dein Programm noch etwas erweitern willst, dann kannst du es ja so umschreiben, dass printf mit dem Ergebnis im Hauptprogramm aufgerufen wird und die Funktion addiere einen Wert zurückgibt.

    Ja das hab ich mir auch schonüberlegt 😉 step by step

    so nun kleines problem ..
    hab jetzt ein Programm geschrieben das es eine Eingabe geben soll und die Funktion soll mithilfe der funktion if/else ausgeben was zutrifft.

    #include <stdio.h>
    #include <stdlib.h>
    
    double addieren(double summand1,double summand2); // Dekleration
    
    int main()
    {
    
    double zahl1;
    double zahl2;
    
    printf("\nBitte geben Sie Zahl1 ein!\n");
    printf("Eingabe:");scanf("%lf",&zahl1);
    
    printf("\nBitte geben Sie zahl2 ein!\n");
    printf("Eingabe:");scanf("%lf",&zahl2);
    
    }
    
    double addieren(double z1, double z2)
    {
    double ergebnis = z1 + z2;
    
    if (z1<z2)
    	{
    	printf("Große Zahl");
    		return ergebnis;
    	}
    else
    	{
    	printf("Kleine Zahl");
    		return ergebnis;
    	}
    
    }
    

    klappt nicht so ganz warum nur ? 😕



  • Du solltest die Funktion addieren auch irgendwo im Hauptprogramm aufrufen.



  • hallo,

    weiß einer jetzt wo der fehler liegt. jetzt hab ich das mal so gemacht das man eine eingabe hat, indem man ein Datum eingeben soll. Bei der einer falschen eingabe funktioniert es jedoch wenn die Bedingung true ist der Compiler ebenfalls das gleiche aus...

    Ich hab mir das so vorgestellt, dass wenn er eine 0 zurückgibt das bedingung nicht erfüllt ist und die Meldung angezeigt bekommt. und bei einer 1 die Bedingung erfülllt ist.

    #include <stdio.h>
    #include <stdlib.h>
    
    int pruefung(int summand1, int summand2, int summand3,int summand4); // Dekleration
    
    int main()
    {
    
    int tag,monat,jahr,schaltjahr;
    
    printf("\nBitte geben Sie das Datum in der Form TT.MM.JJJJ ein!\n");
    
    printf("Eingabe:");scanf("%2u.%2u.%4u", &tag, &monat, &jahr );
    
    pruefung(tag,monat,jahr,schaltjahr);
    printf("\nBitte ueberpruefen Sie ihre Eingabe\nKeine %i. Tage in Monat %i. Jahr %i \n",tag,monat,jahr); 
    }
    
    int pruefung(int tag, int monat, int jahr,int schaltjahr)
    printf("\nBitte ueberpruefen Sie ihre Eingabe\nKeine %i. Tage in Monat %i. Jahr %i \n",tag,monat,jahr); 
    {
    
    if ( (monat ==01) &&( tag <=31)||   // Solange Bedingungen war wird das Datum ausgegeben!
    (monat ==02) && (tag <=28) ||
    (monat ==03) && (tag <=31) || 
    (monat ==04) && (tag <=30) ||
    (monat ==05) && (tag <=31) ||
    (monat ==06) && (tag <=30) ||
    (monat ==07) && (tag <=31) ||
    (monat ==8)  && (tag <=31) ||
    (monat ==9)  && (tag <=30) ||
    (monat ==10) && (tag <=31) ||
    (monat ==11) && (tag <=30) ||							
    (monat ==12) && (tag <=31) ||
    ((monat ==02) && (tag ==29)&& (schaltjahr))||
    (jahr>1583))						// Beginn des gregorianischen Kalender!
    	{
    		return 1;
    	}
    else
    	{
    
              printf("\nBitte ueberpruefen Sie ihre Eingabe\nKeine %i. Tage in Monat %i. Jahr %i \n",tag,monat,jahr); 
    		return 0;
    
    	}
    
    }
    


  • hasso schrieb:

    weiß einer jetzt wo der fehler liegt.

    MSVC v9.0 schrieb:

    Fehler 2 error C2061: Syntaxfehler: Bezeichner 'printf' d:\home\swordfish\documents\engineering\projects\codefun\c\main.c 23 C
    Fehler 3 error C2059: Syntaxfehler: ';' d:\home\swordfish\documents\engineering\projects\codefun\c\main.c 23 C
    Fehler 4 error C2059: Syntaxfehler: 'Zeichenfolge' d:\home\swordfish\documents\engineering\projects\codefun\c\main.c 23 C
    Fehler 5 error C2449: '{' auf Dateiebene gefunden - fehlt der Funktionsheader? d:\home\swordfish\documents\engineering\projects\codefun\c\main.c 24 C
    Fehler 6 error C2059: Syntaxfehler: '}' d:\home\swordfish\documents\engineering\projects\codefun\c\main.c 53 C

    cheers, Swordfish

    BTW: Der wievielte Thread zu deiner Datumsprüfung ist das jetzt? Der fünfte? Was soll das?



  • das ganze beeinhaltet doch eine Funktion. Das trifft doch zu dem thread zu.
    bei mir gibt er keine fehlermeldung an. funktioniert einwandfrei nur das der halt wie eben beschrieben ist ein interner fehler drin ist.

    lg hasso



  • hasso schrieb:

    bei mir gibt er keine fehlermeldung an.

    Dann entspricht der gepostete Code nicht dem, den du compilierst!

    hasso schrieb:

    funktioniert einwandfrei nur das der halt wie eben beschrieben ist ein interner fehler drin ist.

    Was heißt interner fehler? Bis auf die Kleinigkeit, dass schaltjahr uninitialisiert an pruefung( ) übergeben wird, lässt sich dein Code ohne Fehler ausführen.

    Wahrscheinlich willst du

    /* ... */
    
    if( !pruefung( tag, monat, jahr, schaltjahr ) ) {
    
        printf( "\nBitte ueberpruefen Sie ihre Eingabe\nKeine %i. Tage in Monat %i. Jahr %i \n", tag, monat, jahr );
    }
    

    cheers Swordfish



  • hi sowrdfish

    ich wollt das so haben:

    if (pruefung == 0)
    {
     printf("\nBitte ueberpruefen Sie ihre Eingabe\nKeine %i. Tage in Monat %i. Jahr %i \n",tag,monat,jahr);
    }
    

    meinst du das so, geht nicht ganz... ?

    #include <stdio.h>
    #include <stdlib.h>
    
    int pruefung(int summand1, int summand2, int summand3,int summand4); // Dekleration
    
    int main()
    {
    
    int tag,monat,jahr,schaltjahr;
    
    printf("\nBitte geben Sie das Datum in der Form TT.MM.JJJJ ein!\n");
    
    printf("Eingabe:");scanf("%2u.%2u.%4u", &tag, &monat, &jahr );
    
    pruefung(tag,monat,jahr,schaltjahr);
    
    if( !pruefung( tag, monat, jahr, schaltjahr ) ) { 
    
    printf( "\nBitte ueberpruefen Sie ihre Eingabe\nKeine %i. Tage in Monat %i. Jahr %i \n", tag, monat, jahr ); 
    } 
    
    }
    
    int pruefung(int tag, int monat, int jahr,int schaltjahr)
    {
    
    if ( (monat ==01) &&( tag <=31)||   // Solange Bedingungen war wird das Datum ausgegeben!
    (monat ==02) && (tag <=28) ||
    (monat ==03) && (tag <=31) || 
    (monat ==04) && (tag <=30) ||
    (monat ==05) && (tag <=31) ||
    (monat ==06) && (tag <=30) ||
    (monat ==07) && (tag <=31) ||
    (monat ==8)  && (tag <=31) ||
    (monat ==9)  && (tag <=30) ||
    (monat ==10) && (tag <=31) ||
    (monat ==11) && (tag <=30) ||							
    (monat ==12) && (tag <=31) ||
    ((monat ==02) && (tag ==29)&& (schaltjahr))||
    (jahr>1583))						// Beginn des gregorianischen Kalender!
    	{
    		return 1;
    	}
    else
    	{
    		printf("\nBitte ueberpruefen Sie ihre Eingabe\nKeine %i. Tage in Monat %i. Jahr %i \n",tag,monat,jahr); 
    		return 0;
    
    	}
    
    }
    

    lg hasso



  • Warum rufst du pruefung( ) zweimal auf? schaltjahr ist immer noch uninitialisiert!? "Funktioniert nicht ganz..." ist keine Fehlerbeschreibung.

    cheers, Swordfish



  • Swordfish schrieb:

    Warum rufst du pruefung( ) zweimal auf? schaltjahr ist immer noch uninitialisiert!? "Funktioniert nicht ganz..." ist keine Fehlerbeschreibung.

    cheers, Swordfish

    upss meine augen neigen sich für heut fast dem ende... hehe...

    Das else der Funktion gibt ja beim return (else) 0 bei einer falschen eingabe .. würde das dann nicht so funktionieren wenn ich beim hauptorogramm :

    if (pruefung == 0)
    {
     printf("\nBitte ueberpruefen Sie ihre Eingabe\nKeine %i. Tage in Monat %i. Jahr %i \n",tag,monat,jahr);
    }
    

    schreiben würde?

    jedoch passiert nichts.

    Warum nicht.?



  • fliesskomma-freak schrieb:

    hab' grad mal nachgeschaut, im C-standard steht, dass %f zum ausgeben von 'double' da ist. da steht auch nirgends, dass man ein l davor schreiben soll, denn l ist nur bei integer-typen erlaubt. kann aber auch sein, dass ich was übersehen habe.
    🙂

    Du hast nichts übersehen. Die Ellipse (...) bei printf bewirkt, dass alle Argumente nach dem Formatstring der "default argument promotion" unterzogen werden. Das heißt u.a. float wird zu double, char wird zu int. Zwischen %f und %lf muss nur bei scanf unterschieden werden.



  • hasso schrieb:

    würde das dann nicht so funktionieren wenn ich beim hauptorogramm :

    if( pruefung == 0 )
    {
     printf("\nBitte ueberpruefen Sie ihre Eingabe\nKeine %i. Tage in Monat %i. Jahr %i \n",tag,monat,jahr);
    }
    

    schreiben würde?

    Nein. Der Name einer Funktion alleine (ohne Argumentliste zum Aufruf) entspricht der Adresse der Funktion. Die Adresse ist niemals gleich 0. Du musst die Funktion aufrufen.

    cheers, Swordfish



  • hi

    bitte zeig mal wie das geht .. möcht schlafen gehen ...kein nerven mehr 🙄

    gruß hasso



  • Deine Augen scheinen diese Uhrzeiten wirklich nicht zu vertragen ^^

    Swordfish schrieb:

    Wahrscheinlich willst du

    /* ... */
    
    if( !pruefung( tag, monat, jahr, schaltjahr ) ) {
    
        printf( "\nBitte ueberpruefen Sie ihre Eingabe\nKeine %i. Tage in Monat %i. Jahr %i \n", tag, monat, jahr );
    }
    

    pruefung( ) gibt bei einem ungültigen Datum (sofern schaltjahr endlich initialisiert ist) 0 zurück. 0 entspricht false . !false ist true . Du kannst natürlich auch == 0 verwenden.

    cheers Swordfish



  • Am besten makierst du das Schaltjahr mal so dick wie möglich das ich instalieren soll , weil so geht nichts........

    #include <stdio.h>
    #include <stdlib.h>
    
    int pruefung(int summand1, int summand2, int summand3,int summand4); // Dekleration
    
    int main()
    {
    
    int tag,monat,jahr,schaltjahr;
    
    printf("\nBitte geben Sie das Datum in der Form TT.MM.JJJJ ein!\n");
    
    printf("Eingabe:");scanf("%2u.%2u.%4u", &tag, &monat, &jahr );
    
    if( !pruefung( tag, monat, jahr, schaltjahr ) ) { 
    
        printf( "\nBitte ueberpruefen Sie ihre Eingabe\nKeine %i. Tage in Monat %i. Jahr %i \n", tag, monat, jahr ); 
    }
    
    system("pause");
    
    }
    
    int pruefung(int tag, int monat, int jahr,int schaltjahr)
    {
    
    schaltjahr =((jahr%400==0) || (jahr%4==0 && jahr % 100 !=0)); // so habs installiert geht komischer weise nicht .
    
    if ( (monat ==01) &&( tag <=31)||   // Solange Bedingungen war wird das Datum ausgegeben!
    (monat ==02) && (tag <=28) ||
    (monat ==03) && (tag <=31) || 
    (monat ==04) && (tag <=30) ||
    (monat ==05) && (tag <=31) ||
    (monat ==06) && (tag <=30) ||
    (monat ==07) && (tag <=31) ||
    (monat ==8)  && (tag <=31) ||
    (monat ==9)  && (tag <=30) ||
    (monat ==10) && (tag <=31) ||
    (monat ==11) && (tag <=30) ||							
    (monat ==12) && (tag <=31) ||
    ((monat ==02) && (tag ==29)&& (schaltjahr))||
    (jahr>1583))						// Beginn des gregorianischen Kalender!
    	{
    		return 1;
    	}
    else
    	{
    
    		printf("\nBitte ueberpruefen Sie ihre Eingabe\nKeine %i. Tage in Monat %i. Jahr %i \n",tag,monat,jahr);
    		return 0;
    
    	}
    
    }
    


  • Guckst du hier Zeilen 64-77. Das kommt von deinen tausenden Threads zum gleichen Thema...

    Wenn du _in_ pruefung( ) ermittelst, ob jahr ein Schaltjahr ist, ist schaltjahr als Parameter für pruefung( ) überflüssig. Weiters passen die Parameternamen bei der deklaration von pruefung( ) nicht zur Definition.

    cheers, Swordfish



  • Swordfish schrieb:

    Guckst du hier Zeilen 64-77. Das kommt von deinen tausenden Threads zum gleichen Thema...

    Wenn du _in_ pruefung( ) ermittelst, ob jahr ein Schaltjahr ist, ist schaltjahr als Parameter für pruefung( ) überflüssig. Weiters passen die Parameternamen bei der deklaration von pruefung( ) nicht zur Definition.

    cheers, Swordfish

    Wie die passen nicht zusammen..wie passen die denn zusammen ? zeig doch mal bitte lösung dazu .

    Komischerweise klappt es ja außer wenn ich :

    if( !pruefung( tag, monat, jahr, schaltjahr ) ) { 
    
        printf( "\nBitte ueberpruefen Sie ihre Eingabe\nKeine %i. Tage in Monat %i. Jahr %i \n", tag, monat, jahr );
    

    einfüge.

    ohne dem nicht funktionierts einwandfrei nur halt das der Compiler bei einer ricchtigen eingabe ebenfalls fehlermeldung anzeigt.



  • hasso schrieb:

    Wie die passen nicht zusammen..wie passen die denn zusammen ?

    hasso schrieb:

    int pruefung(int summand1, int summand2, int summand3,int summand4); // Dekleration
    
    /* ... */
    
    int pruefung(int tag, int monat, int jahr,int schaltjahr)
    

    Noch fragen!?

    hasso schrieb:

    zeig doch mal bitte lösung dazu.

    Schön langsam hab' ich keine Lust mehr...

    hasso schrieb:

    Komischerweise klappt es ja außer wenn ich

    [...]

    ohne dem nicht funktionierts einwandfrei nur halt das der Compiler bei einer ricchtigen eingabe ebenfalls fehlermeldung anzeigt.

    ...weil es dir nicht mal die Mühe wert ist, deutsche Sätze zu schreiben: Was soll "ohne dem nicht funktionierts" bedeuten? Soll ich raten, was nicht Funktioniert? Soll ich in meine Kristallkugel gucken?

    cheers, Swordfish


Anmelden zum Antworten