Fahrenheit / Celsius Converter



  • Hallo Leute!

    Ich habe kürzlich damit angefangen, mit C und C++ selbst beizubringen... doch das ist teilweise nicht so leicht, aller Anfang ist ja bekanntlich schwer. 🙂

    Ich möchte ein Programm schreiben, das Celsius in Fahrenheit umrechnet. Eine Main Funktion und 2 Funktionen (CelsiusInFahrenheit und FahrenheitInCelsius)

    Das heißt, das Programm sollte so aufgebaut sein, dass entweder eine if Abfrage erscheint "Tippe (1) für Celsius in Fahrenheit oder (2) für umgekehrt". Dann wird es eingelesen und das Ergebnis erscheint.

    Leider habe ich noch probleme, vor allen dingen mit der Formel dafür. Kann mir jmd vllt einen Lösungansatz geben?

    Danke schonmal!



  • Gibt es einen Grund, warum du beide Sprachen gleichzeitig lernst? Ich würde mich an deiner Stelle für eine der beiden entscheiden. Solltest du beide lernen wollen, dann würde ich mit C++ anfangen.



  • Svear schrieb:

    Leider habe ich noch probleme, vor allen dingen mit der Formel dafür.

    Wenn's weiter nichts ist:

    F = C x 1.8 + 32
    C = (F - 32) ÷ 1.8
    

    Ich würde aber meine Caps-Locks - Taste darauf verwetten, dass dies nicht das einzige Problem ist...



  • double CelsiusInFahrenheit(double c)
    {
      return c * 1.8 + 32;
    }
    double FahrenheitInCelsius(double f)
    {
      return (f - 32) / 1.8;
    }
    int main()
    {
      int i;
      double d;
      puts("Tippe (1) für Celsius in Fahrenheit oder (2) für umgekehrt:");
      scanf("%d",&i);
      if( i!=1 && i!=2 ) return 1;
      puts(i==1?"C->F":"F->C");
      scanf("%lf",&d);
      printf("%f -> %f", d, (i==1?CelsiusInFahrenheit:FahrenheitInCelsius)(d) );  
      return 0;
    }
    


  • Makroman hat zugeschlagen 😃



  • Würde erstmal üben, die Formel mit Papier und Bleistift mehrmals umzustellen, und zwar auf "Integer" - Basis.

    Aus welchem Buch hast du die Aufgabe, denn sie ist ursprünglich im K+R Buch zu finden und wird in anderen Bücher leicht abgewandelt? Zum K+R Buch gibt es auch Lösungsvorschläge, die sind aber dooferweise in einem anderen Buch enthalten. Man besorgt sich (falls überhaupt) also K+R + Lösungen + Debuggertutorial.



  • Vielen dank für diesen super Lösungansatz!

    Ich hab ihn versucht ihn meine verständlichere "Programmiersprache" umzuwandeln... ist vielleicht auch ein bisschen umständlicher, aber müsste auch klappen, oder?

    Gibt es evtl eine möglichkeit, mein Programm so umzuschreiben, dass ich einfach 1 oder 2 eintippe und dann eine Zahl eingebe und sie dann einfach umgewandelt wird? Meine 2 if abfragen mit println in der abfrage ist ja nicht gerade optimal, oder?

    (Wär super wenn ihr irgendwie meine basic Befehle beibehalten könntet, dann ist das auch verständlicher für mich 🙂

    Btw. es funzt leider nicht wenn ichs laufen lasse, evtl. hab ich einen Fehler drin?

    float CelsiusInFahrenheit(float Celsius)
    { 
      return Celsius * 1.8 + 32;
    }
    
    float FahrenheitInCelsius(float Fahrenheit)
    {
      return (Fahrenheit - 32) / 1.8;
    }
    
    main()
    {
      int i;
      float temperature;
      cout << "Type (1) for calculating Celsius in Fahrenheit or (2) for Fahrenheit in Celsius: \n";
      cin >> i;
    
      if(i=1) { 
              cout << "Please type in the amount of Fahrenheit \n";
              cin >> temperature;
      printf("%4.2f Fahrenheit are %4.2f Celsius.", temperature, FahrenheitInCelsius(temperature);
              };
      else if(i=2) {
           cout << "Please type in the amount of Celsius \n";
           cin >> temperature;
      printf("%4.2f Celsius are %4.2f Fahrenheit. \n", temperature, FahrenheitInCelsius(temperature);  
                    }
    
      else printf("Wrong input! Program will be closed");
    }
    


  • Das ist kein C das ist C++ mit C Mix. Dafür wird man üblicherweise gesteinigt.

    1. Ein Vergleich macht man mit == . Ein einfaches = ist eine Zuweisung.

    if(i==1){}
    else if(i==2){}...
    

    2. Verwende statt printf cout, da du ja sowieso in C++ programmierst! Damit sparst du dir auch den include <cstdio> (bzw. den falschen stdio.h in C++).

    cout << temperatur << " Fahrenheit are " << FahrenheitInCelsius(temperature) << " Celsius\n";
    cout << "Wrong input! Program will be closed";
    

    3. Du bist jetzt im falschen Unterforum (warte bis man dich verschieben sollte).
    4. Es heißt

    int main()
    

    5.

    Btw. es funzt leider nicht wenn ichs laufen lasse, evtl. hab ich einen Fehler drin?

    Dies ist leider keine genaue Fehlerbeschreibung. Bitte die des Compilers direkt kopieren mit dem gesamten Code!

    6. Ich hoffe du hast <iostream> inkludiert und using namespace std; sichtbar gemacht.



  • Hey!

    Ich möchte nur C programmieren, habe vorher mit Java programmiert, daher hab ich noch die doofe angewöhnung 🙂

    Also, welche Befehle muss ich umändern für C?

    Hier die Fehlermeldung:

    Compiler: Default compiler
    Compiler: Default compiler
    Executing g++.exe...
    g++.exe "D:\Programme\Dev-Cpp\CelsiusFahrenheitConverter.cpp" -o "D:\Programme\Dev-Cpp\CelsiusFahrenheitConverter.exe" -g3 -I"D:\Programme\Dev-Cpp\lib\gcc\mingw32\3.4.2\include" -I"D:\Programme\Dev-Cpp\include\c++\3.4.2\backward" -I"D:\Programme\Dev-Cpp\include\c++\3.4.2\mingw32" -I"D:\Programme\Dev-Cpp\include\c++\3.4.2" -I"D:\Programme\Dev-Cpp\include" -L"D:\Programme\Dev-Cpp\lib" -g3
    In file included from D:/Programme/Dev-Cpp/include/c++/3.4.2/backward/iostream.h:31,
    from D:\Programme\Dev-Cpp\CelsiusFahrenheitConverter.cpp:10:
    D:/Programme/Dev-Cpp/include/c++/3.4.2/backward/backward_warning.h:32:2: warning: #warning This file includes at least one deprecated or antiquated header. Please consider using one of the 32 headers found in section 17.4.1.2 of the C++ standard. Examples include substituting the <X> header for the <X.h> header for C++ includes, or <iostream> instead of the deprecated header <iostream.h>. To disable this warning use -Wno-deprecated.
    D:\Programme\Dev-Cpp\CelsiusFahrenheitConverter.cpp: In function int main()': D:\\Programme\\Dev-Cpp\\CelsiusFahrenheitConverter.cpp:34: error: expected)' before ';' token
    D:\Programme\Dev-Cpp\CelsiusFahrenheitConverter.cpp:36: error: expected primary-expression before "else"
    D:\Programme\Dev-Cpp\CelsiusFahrenheitConverter.cpp:36: error: expected ;' before "else" D:\\Programme\\Dev-Cpp\\CelsiusFahrenheitConverter.cpp:42: error: expected primary-expression before "else" D:\\Programme\\Dev-Cpp\\CelsiusFahrenheitConverter.cpp:42: error: expected;' before "else"

    Execution terminated

    und was ich included habe ist das:

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



  • Du solltest anfangen indem du dir einen gescheiten C-Compiler besorgst.
    iostream ist eine C++ Bibliothek und gibt es in C nicht. Wenn du von Java kommst stört es dich nicht in C kein OOP zu haben?

    Um das Ganze in C zum Laufen zu bekommen musst du alle cout und cin durch printf und scanf ersetzen, da diese zwei zur C++ Standard Bibliothek gehören.

    Wenn das mit iostream übersetzt hat, dann hast du keinen C Compiler sondern einen C++ Compiler. Es ist demzufolge nicht ratsam C mit einem C++ Compiler zu programmieren, da die Sprachen doch unterschiedlich sind.



  • Und benenne dein Programm in CelsiusFahrenheitConverter.c (nicht .cpp) um.



  • @wutz: bereitest du dich für den Obfuscated C Code Contest? Ich glaube kaum, dass ein C Anfänger damit

    puts(i==1?"C->F":"F->C");
    ...
      printf("%f -> %f", d, (i==1?CelsiusInFahrenheit:FahrenheitInCelsius)(d) );
    

    etwas anfangen kann 😉



  • _Falke schrieb:

    Wenn's weiter nichts ist:

    F = C x 1.8 + 32
    C = (F - 32) ÷ 1.8
    

    Ich würde aber meine Caps-Locks - Taste darauf verwetten, dass dies nicht das einzige Problem ist...

    Diese Taste kannst du ruhig verwetten, da sie versehentlich gedrückt oft stört. Doch du hast recht, die Frage hat mit C oder anderem nicht viel zu tun. Bevor man etwas programmiert muss man schon wissen, was man programmieren will und dafür auch einen Ansatz haben! 😞



  • Ich habe meine Capslok-Taste deaktiviert... Die stört nur.

    In Windows geht das über die Registry:

    - Start -> Ausführen -> regedit
    - Reg-Schlüssel: HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Keyboard Layout
    - Neuen Binärwert anlegen mit dem Namen Scancode Map 
    - und dem Wert: 00,00,00,00,00,00,00,00,02,00,00,00,00,00,3a,00,00,00,00,00
    

    Edit: Durch den Ärger den ich mir damit erspart habe, lebe ich sicher ein Jahr länger 😃



  • Das ist neu für mich, dass man mit einem Eintrag in der Registry sein Leben verlängern kann. Sehr interessanter Hinweis zum Karneval! 👍 Kaugummi um die CapsLock-Taste hätte es auch getan! 😃


Log in to reply