Problem bei Programm Umwandlung Widerstandswert in Temperatur



  • hallo liebe Forumsgemeinde,

    ich habe Probleme bei der Programmierung von folgendem Problem:
    - es soll ein Programm geschrieben werden, dass einen Widerstandswert (PT100) in eine Temperatur umwandelt(Temperaturbereich 0-200°C).

    [code="c"]
    #include <stdio.h>
    #include <math.h>

    int main (void)
    {
    int temp = 0;
    float res = 0;

    printf("Geben Sie einen Widerstandswert ein: ");
    scanf("%f", &res);

    if((res>=100) && (res<=179.16))
    {
    temp=((3.90803E-3)/(2*5.775E-7))-sqrt(((-3.90803E-3/(2*5.775E-7))(-3.90803E-3/(25.775E-7))-((res-100)/5.775E-7)));
    printf("Die Temperatur betraegt in Celsius: %f\n", temp);
    }
    else
    {
    printf("nicht definiert!\n");
    }
    return(0);
    }

    Problem: die temperatur wird im gültigen Bereich stets nicht korrekt ausgegeben.

    Das Programm soll

    1. bei korrekter Eingabe, den richtigen Temperaturwert ausgeben
    2. bei falscher Eingabe (werte <100, > 179,16) eine rückmeldung geben, dass temp außerhalb der DIN Vorschrift liegt.

    Da ich Anfänger bin, komme ich echt nicht darauf, wo hier der Fehler liegt.
    Die Formel ist anhand der DIN umgestellt (R= 100 Ohm*(1+3,9*10-3*T-5,8*10-7*T^2)

    danke schon mal

    hunny



  • Bist du sicher, dass das richtig umgestellt ist? Durch Verwendung von symbolischen Konstanten könntest du das übrigens sehr viel lesbarer aufschreiben.



  • printf möchte bei %f auch einen float oder double Wert haben
    Jedenfalls keinen int-Typ



  • habe die Formel nochmal geprüft und etwas geändert und Konstanten eingesetzt. leider funktioniert es immer noch nicht, wie ich es mir vorstelle.
    (by the way: wie kann ich den Code in einem Codefenster darstellen?)

    [code="c"]
    [code]

    #include <stdio.h>
    #include <math.h>

    int main (void)
    {
    float temp;
    float res;
    float a=0.00390803;
    float b=0.0000005775;

    printf ("Geben Sie einen Widerstandswert ein: ");
    scanf ("%f",&res);

    temp=((a)/(2*b))-sqrt(-((a*a)/(4*b*b))+((100+res)/b)); // T berechnen

    printf("Die Temperatur betraegt in Celsius: %f\n",temp); //Ausgabe
    if (temp >=0 && temp<=200)
    {
    printf("Die Temperatur ist in dem Bereich definiert");
    }
    else
    {
    printf("Die Temperatur ist in dem Bereich nicht definiert");
    }
    return 0;
    }

    danke

    hunny


  • Mod

    hunnybunny schrieb:

    (by the way: wie kann ich den Code in einem Codefenster darstellen?)

    Indem du vor dem Code so etwas wie [code="c"] schreibst und nach dem Code [/code] . Oder den entsprechenden Button unter dem Editfenster benutzt. Der setzt beim ersten Bentuzen das Anfangstag und beim zweiten Benutzen das Endtag. Oder wenn du Text markiert hast, setzt er die Tags um den Text herum. Da:

    #include <stdio.h>
    #include <math.h>
    
    int main (void)
    {
    float temp;
    float res;
    float a=0.00390803;
    float b=0.0000005775;
    
    printf ("Geben Sie einen Widerstandswert ein: ");
    scanf ("%f",&res);
    
    temp=((a)/(2*b))-sqrt(-((a*a)/(4*b*b))+((100+res)/b)); // T berechnen
    
    printf("Die Temperatur betraegt in Celsius: %f\n",temp); //Ausgabe
    if (temp >=0 && temp<=200)
    {
    printf("Die Temperatur ist in dem Bereich definiert");
    }
    else
    {
    printf("Die Temperatur ist in dem Bereich nicht definiert");
    }
    return 0;
    }
    

    Was immer noch nicht viel bringt, da du Code ohne jede Einrückung gepostet hast, der daher immer noch kaum lesbar ist.

    leider funktioniert es immer noch nicht, wie ich es mir vorstelle.

    Das ist keine brauchbare Fehlerbeschreibung. Wir wissen weder, was du dir vorstellst, noch, was stattdessen passiert.



  • Ich hoffe, ich habe nicht zuviel gestrichen.

    double PT100toCelcius(double R) {
      double t;
      double a,b,c,d, R0, aR0, b2R0 ;
    
      a=3.9083E-3; b=-5.775E-7; R0=100.0;
      aR0 = a*R0; b2R0 = 2*b*R0;
      t = (-aR0 + sqrt( (aR0*aR0) - (2*b2R0*(R0-R)))) / b2R0;
    
      return t;
    }
    


  • danke erstmal. hatte mich heute nochmal damit befasst. Die Formel für T ist mir nach langer Recherche auch noch über den Weg gelaufen.
    nochmal kurz zum Programm:

    1. es soll ein Widerstandswert eingelesen werden
    2. anschließend die Temperatur berechnen
    3. dann prüfen, ob für den definierten Bereich (0 bis 200 °C) der berechnete Wert definiert ist.
    4. Temperatur ausgeben, wenn dieser im definerten Bereich liegt, ansonsten Meldung abgeben, das dieser außerhalb liegt.

    ---> das sollte jetzt so funktionieren.

    danke nochmal für die Anregungen.

    #include <stdio.h>
    #include <math.h>
    
    int main (void)
    {
    int temp;
    float res;
    float a=3.90803E-3;
    float b=5.775*10E-7;
    
    printf ("Geben Sie einen Widerstandswert ein: ");
    scanf ("%0.2f",&res);
    printf ("sie haben eingeben: %0.2f Ohm\n",res);
    
    temp = ((-a*100)+(sqrt(((a*100)*(a*100))-(4*b*100*(100-res)))))/(2*b*100);
    
    if((temp>=0) && (temp<=200))
      {
       printf("Die Temperatur betraegt: %i °C\n",temp); //Ausgabe
      }
    else
      {
       printf("Wert nicht definiert!\n");
      }
    return 0;
    }
    

Log in to reply