Wie kann das in C programmieren???



  • Schreiben Sie ein C-Programm, mit dem die Werte der beiden float-Variablen alfa und beta von der Tastatur eingelesen werden. Danach sollen die Werte der Variablen alfa und beta miteinander vertauscht werden, wenn beta größer ist als alfa und anschließend der

    Ausdruck

    erg = 0.5 * Wurzel(1.345.(alfa-beta))

    berechnet werden, anschließend soll das Ergebnis am Bildschirm angezeigt werden.
    Das Programm soll unter Verwendung von Unterprogrammtechnik erstellt werden und
    folgende Struktur aufweisen.

    • Unterprogramm (Prozedur) zum Vertauschen zweier float-Werte
    • Unterprogramm (Funktion) zur Berechnung des Ergebnisses erg
    • Hauptprogramm

    Das Hauptprogramm soll folgende Struktur aufweisen.
    • Einlesen der Werte für alfa und beta
    • Aufruf der Funktion zur Berechnung des Ergebnisses erg
    • Ausgabe des Ergebnisses

    hab leider keinen Ansatz



  • infooo schrieb:

    Schreiben Sie ein C-Programm, mit dem die Werte der beiden float-Variablen alfa und beta von der Tastatur eingelesen werden. Danach sollen die Werte der Variablen alfa und beta miteinander vertauscht werden, wenn beta größer ist als alfa und anschließend der

    Ausdruck

    erg = 0.5 * Wurzel(1.345.(alfa-beta))

    berechnet werden, anschließend soll das Ergebnis am Bildschirm angezeigt werden.
    Das Programm soll unter Verwendung von Unterprogrammtechnik erstellt werden und
    folgende Struktur aufweisen.

    • Unterprogramm (Prozedur) zum Vertauschen zweier float-Werte
    • Unterprogramm (Funktion) zur Berechnung des Ergebnisses erg
    • Hauptprogramm

    Das Hauptprogramm soll folgende Struktur aufweisen.
    • Einlesen der Werte für alfa und beta
    • Aufruf der Funktion zur Berechnung des Ergebnisses erg
    • Ausgabe des Ergebnisses

    hab leider keinen Ansatz



  • Lies mal diesen Wichtig-Thread:
    http://www.c-plusplus.net/forum/200753



  • Einlesen der Werte mit scanf

    Bei der Berechnung den Wert mit return zurückgeben.

    Ausgabe des Ergebnisses mit printf.



  • Ja die Regeln kenne ich schon,
    aber wie soll denn ein Anfänger da die werte tauschen!!!???



  • infooo schrieb:

    aber wie soll denn ein Anfänger da die werte tauschen!!!???

    Stichwort: "Dreieckstausch"



  • infooo schrieb:

    Ja die Regeln kenne ich schon,
    aber wie soll denn ein Anfänger da die werte tauschen!!!???

    Schon mal Freecell am Computer gespielt?

    Wie würdest du alleine die Position von zwei Autos auf einem Parkplatz vertauschen?

    (Da steht nichts davon, dass das in einer Funktion geschehen muss)



  • #include <stdio.h>
    
    void main()
    {
    float alfa;
    float beta;
    float erg;
    
    scanf("%f",&alfa); 
    scanf("%f",&beta);
    
    if(beta > alfa)
    {
      erg = 0.5* sqrt(1.345*(alfa-beta);
    }
    else
    {
    // was kommt denn hierhin
    } 
    
    printf("%f", erg);
    
    }
    

    wie sollen jetzt die werte vertauscht werden genau da liegt die problematik!!



  • infooo schrieb:

    if(beta > alfa)
    {
      erg = 0.5* sqrt(1.345*(alfa-beta);
    }
    

    Ich behaupte mal, dass das so herum nicht richtig ist; wenn beta > alpha (die Schreibweise "alfa" ist mir noch nie untergekommen...), dann ist 1.345 * (alpha - beta) < 0 und das mit der Quadratwurzel geht schief.

    Wie dem auch sei, die einfachste Lösung dürfte fabs aus <math.h> sein:

    erg = 0.5 * sqrt(1.345 * fabs(alpha - beta));
    

    Damit erübrigt sich die Tauschproblematik.

    Ansonsten, wie schon erwähnt, gibt es den Dreieckstausch.



  • # include <stdio.h>
    # include <math.h>
    
    void main()
    {
    float alfa;
    float beta;
    float erg;
    
    scanf("%f",&alfa);
    scanf("%f",&beta);
    
    if(beta > alfa)
    {
      erg = 0.5* sqrt(1.345*(alfa-beta);
    }
    else
    {
    // was kommt denn hierhin
    }
    
    printf("%f", erg);
    
    }
    

    soll ich jetzt eine 4. variable deklarieren oder geht es mit den vorhandenen auch!



  • Die Aufgabe lautet doch:

    if(beta > alfa)
    {
      alfa mit beta vertauschen.
    } 
    
    Ergebniss berechnen
    

    Und ja, es geht mit den vorhandenen Variablen.

    Und das erg = 0.5* sqrt(1.345*(alfa-beta); soll in einer extra Funktion stehen.



  • # include <stdio.h>
    # include <math.h>
    
    void main()
    {
      float alfa;
      float beta;
      float erg;
    
      scanf("%f",&alfa);
      scanf("%f",&beta);
    
    if(beta > alfa)
    {
      alfa = beta;
    }
    
    erg = 0.5* sqrt(1.345*(alfa-beta));
    
    printf("%f", erg);
    
    }
    

    so in der Art??? 🙄



  • In de Art, ja.

    Den Tausch musst du noch hinbekommen (im Augenblick hat alfa den Wert von beta).

    Und das mit den Unterprogrammen.

    Das Beispiel zum Vertauschen von zwei Variablen steht bestimmt in deinem Tutorial/Buch. Evtl. sogar unter swap.



  • das bekomme ich einfach nicht hin, schreib bitte das, was du meinst, ins programm



  • # include <stdio.h>
    # include <math.h>
    
    void main()
    {
      float alfa;
      float beta;
      float erg;
    
      scanf("%f",&alfa);
      scanf("%f",&beta);
    
    if(beta > alfa)
    {
    /* hier soll alfa mit beta vertauscht werden.
      alfa soll den Wert von beta erhalten und beta den Wert von alfa.
    
      Aber das soll in einer Funktion geschehen. 
    
      Darum erfolgt hier nur der Aufruf: */
      swapf(&alfa, &beta);
    
    //  alfa = beta; gehört hier dann nicht mehr hin.
    }
    
    /* die Berechnung der folgenden Funktion soll laut Aufgabenstellung
    in einer Funktion erfolgen 
    erg = 0.5* sqrt(1.345*(alfa-beta)); 
    
    Darum erfolgt hier nur der Aufruf: */
    
      erg = funktion(alfa, beta);
    
    printf("%f", erg);
    
    }
    


  • hier eine kleine Anregung für die Funktion swapf:

    void swapf(float *a, float *b){
        if (a != b){
            (*(int*)a) ^= *(int*)b;
            (*(int*)b) ^= *(int*)a;
            (*(int*)a) ^= *(int*)b;
        }
    }
    


  • und was ist, wenn sizeof(float) != sizeof(int) ist 🙄



  • mov eax, [add_a]
    xchg eax, [add_b]
    mov [add_a], eax
    

    Ne kleiner Scherz.

    void swapf(float *a, float *b)
    {
        if(a!=b)
        {
            float c=*a;
            *a=*b;
            *b=c;
        }
    }
    

    Müsste so gehen.



  • DirkB schrieb:

    und was ist, wenn sizeof(float) != sizeof(int) ist 🙄

    wird schon nicht



  • Llrot schrieb:

    wird schon nicht

    Bei meinem Quick-C ist int 16-Bit und float 4-Byte


Anmelden zum Antworten