Wie kann das in C programmieren???



  • 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



  • Auf SPARC64/Solaris findet man manchmal sizeof(int) == 8. Auf Crays gibt es sogar sizeof(short) == 8.



  • Warum nicht so:

    if(beta > alfa) erg = funktion(beta, alfa)
    else            erg = funktion(alfa, beta)
    


  • DirkB schrieb:

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

    wer sowas uraltes hat würde nicht so anspruchsvolle Fragen stellen 😉



  • Llrot schrieb:

    wer sowas uraltes hat ...

    Das gilt dann aber auch für die Cray 🤡


Anmelden zum Antworten