Ankündigung

Einklappen
Keine Ankündigung bisher.

User helfen User - Programmieren

Einklappen
X
 
  • Filter
  • Zeit
  • Anzeigen
Alles löschen
neue Beiträge

    Hi, gestern Abend wurde mir freundlicherweise mit Hilfe eines Beispielprogramms die richtige Syntax für Funktionen in C erklärt:

    #include

    int A(int x);
    int B(int a);

    int main(void)
    {
    int zahl;
    printf("Geben Sie eine Zahl ein: ");
    scanf("%d", &zahl);
    printf("Loesung:%d", B(A(zahl)));

    return 0;
    }
    /* Funktionen */

    int A(int x){
    return x/360;}

    int B(int a){
    return a*1337+a;}
    Was mich jetzt interessieren würde ist, wie ich mit B(A(zahl))) weiterarbeiten kann.
    Ich würde gern diesen Wert als Variable deklarieren und dann sowas machen wie:
    if(loesung>10)
    {
    ...Anweisung
    }
    und
    if(loesung

    Kommentar


      int loesung = B(A(zahl)))

      Dann hast du das Ergebnis in der Variable loesung gespeichert.

      Kommentar


        Hab das wie gesagt versucht, aber er gibt mir dann unnormal hohe Zahlen aus, kann das daran liegen, dass er A und B hexadezimal interpretiert?

        Habs jetzt genauso in die main geschrieben:
        int loesung= B(A(zahl));

        Kommentar


          was für zahlen gibst du ein? wenn du z.b. niedriger als 360 hast, bekommste ja ne 0,xxxx zahl raus, die aber in 0 umgewandelt wird weil du mit int arbeitest

          Kommentar


            Äh yo, hab jetzt mal die Funktionen sehr vereinfacht:

            int A(int x){
            return x+1;}

            int B(int a){
            return a+a;}

            ohne zusätzliche Variable kommt für x=1 -> 4. (1+1 -> 2+2=4)
            mit zusätzliche Variable irgendwas mit 57312 oder so. :D

            Kommentar


              aber selbst mit den normalen funktionen müsste da 0 rauskommen

              int A(int x){
              return x/360;}

              int B(int a){
              return a*1337+a;}

              1/360 = 0,002 -> umwandlung zu 0 da int

              int B(0)
              0*1337+0 -> 0

              kannst ja nach jedem schritt mal printen, vllt wird dann ersichtlich wo der fehler is

              Kommentar


                Ja, da kommt null raus, aber wenn ich die Lösung als Variable vorher deklariere kommt wieder was mit 973123 oder so raus.

                Das ist ja genau der Fehler.

                Er versteht folgendes in der main scheinbar nicht oder interpretiert dies nicht als Funktionsergebnis:

                int loesung= B(A(zahl));

                Kommentar


                  probiers mal so:

                  int loesung = 0;

                  loesung = B(A(zahl));

                  Kommentar


                    Keine Veränderung. :(
                    Gibt mir wieder ne 5 stellige Zahl aus.

                    Kommentar


                      Schreib am besten nochmal den ganzen Code, wo das komische Ergebnis rauskommt. Vielleicht liegt es an etwas anderem (wie z.B. deinem printf Befehl).

                      Kommentar


                        #include

                        int A(int x);
                        int B(int a);

                        int main(void)
                        {
                        int zahl;
                        int loesung = B(A(zahl));

                        printf("Geben Sie eine Zahl ein: ");
                        scanf("%d", &zahl);
                        printf("Loesung:%d", loesung);

                        return 0;
                        }
                        /* Funktionen */

                        int A(int x){
                        return x+1;}

                        int B(int a){
                        return a+a;}

                        Wenn ich statt "loesung" in der letzten printf-Funktion einfach B(A(zahl)) schreibe, dann kommt das richtige Ergebnis, so kommt es nicht. :/

                        Kommentar


                          ja, weil du int zahl; einfach so deklarierst. mach mal printf("%d", zahl);
                          dann wirste sehen das da einfach irgendein wert rauskommt. wenn du eine variable initialisierst, musst du immer mit 0 initialisieren, sonst kommt käse raus.

                          mach also int zahl = 0;

                          Kommentar


                            Du benutzt zahl bevor du es einliest.

                            int main(void)
                            {
                            int zahl;

                            printf("Geben Sie eine Zahl ein: ");
                            scanf("%d", &zahl);

                            int loesung = B(A(zahl));
                            printf("Loesung:%d", loesung);

                            return 0;
                            }

                            So sollte es gehen.

                            Kommentar


                              Hm, also bei mir kommt der von mir eingegebene Wert raus, ohne, dass ich int zahl = 0; gemacht hab.

                              Wir reden hier aber alle über das stinknormale C, oder? :D

                              Ah, okay ich hab die loesungs Variable jetzt unter scanf geschrieben und nun klappts, danke euch. :D

                              Ach man, dieser Kackcompiler. :(((

                              Kommentar


                                ja, aber wenn du das programm so ausführst wie oben beschrieben geht der compiler ja so vor das deine funktion berechnet wird bevor du überhaupt einen wert eingeben kannst. wenn jetzt z.b. der wert der variable zahl = 1653244563 ist, berechnet er damit deine funktion und speichert die dann in loesung ab. wenn du dann deine zahl eingibst, speichert er die in zahl ab, aber da du damit die funktion nicht mehr aufrufst, interessiert es den compiler nicht.

                                wenn du jetzt aber die funktion NACH der eingabe aufrufst, wird ja der wert überschrieben, also wird auch korrekt gerechnet

                                Kommentar

                                Lädt...
                                X