0 Daumen
351 Aufrufe

Frage: Temperatur berechnen in C

Hey, ich muss folgende Aufgabe lösen, jedoch kommt bei mir einfach nicht das richtige Ergebnis raus;

Unter Verwendung der Formel
Grad Celsius = 59 · (Grad Fahrenheit − 32)
soll eine Temperaturtabelle in folgender Form auf stdout ausgegeben werden:
Fahrenheit   Celsius

0.                    -17
20                   -6
40                    4

....

Verwenden Sie eine while-Schleife und int-Variablen!

Mein Code bisher sieht wie folgt aus:


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

int main(){
  int GradFahrenheit = 0;
  int GradCelsius = (5/9) *(GradFahrenheit-32);

  while(GradFahrenheit<300){
      printf("%d\n", GradCelsius);
      GradFahrenheit = GradFahrenheit + 20;
  }

}
Avatar von

Zu einer Problembeschreibung bei selbst geschriebenem Quelltext gehört:

  1. Was das Programm machen soll

    Unter Verwendung der Formel
    Grad Celsius = 59 · (Grad Fahrenheit − 32) ...

    Hast du gemacht.

  2. Was das Programm tatsächlich macht

    jedoch kommt bei mir einfach nicht das richtige Ergebnis raus;

    Hast du nicht gemacht. Du hättest zum Beispiel schreiben können "Das Programm gibt für jede Fahrenheit-Temperatur als Ergebnis 0°C aus."

  3. Ein minimales Beispielprogramm in dem der Fehler auftritt.

    Mein Code bisher sieht wie folgt aus: ...

    Hast du gemacht.

Du hast 2 von 3 Punkten. Das ist für den Anfang nicht schlecht.

1 Antwort

0 Daumen
int GradCelsius = (5/9) *(GradFahrenheit-32);

Das ist keine Funktion.

Der Wert für GradCelsius wird einmalig berechnet und ändert sich nicht mehr. Auch dann nicht, wenn sich ...

GradFahrenheit = GradFahrenheit + 20;

... der Wert von GradFahrenheit ändert.

Stattdessen müsstest du innerhalb der while-Schleife die Temperatur in °C mittels

GradCelsius = (5/9) *(GradFahrenheit-32);

neu berechnen.

Wenn du dieses Problem beseitigt hast, dann wartet ein neues Problem auf dich (das sich allerdings genau so äußert wie das erste):

5 ist ein int. 9 ist ein int. Also ist 5/9 ein int. Und zwar ist 5/9 == 0 wie du mittels

#include <stdio.h>

int main() {
  if (5/9 == 0) {
      printf("Wo sind meine Nachkommastellen?\n");
  } else {
      printf("Ich bin sehr gebrochen.\n");
  }
}

feststellen kannst.

Verwende stattdessen 5/9.0 um zu erzwingen, dass das Ergebnis eine Fließkommazahl wird.

Außerdem solltest du das Ergebnis von

        (5/9.0) *(GradFahrenheit-32);

mittels round() runden. Ansonsten werden bei der Zuweisung zur int-Variablen GradCelsius einfach die Nachkommastellen abgechnitten. Dadurch wird zum Beispiel \(120°\mathrm{F}\) (a.k.a. \(48,\overline{8}°\mathrm{C}\)) zu \(48°\mathrm{C}\) abgerundet, anstatt korrekt zu \(49°\mathrm{C}\) aufgerundet zu werden.
`

Avatar von 5,6 k

Ein anderes Problem?

Stell deine Frage

Willkommen bei der Stacklounge! Stell deine Frage einfach und kostenlos

x
Made by a lovely community