4. ANSI-C-Aufgabe: Arithmetik, Ein- und Ausgabe an der Konsole

Letztes Update: Dienstag, 16. August 2016 - 16:41 Uhr

Original-Aufgabenstellung:

Physik

Diesmal sollt ihr euch ein wenig mit der Schulphysik auseinandersetzen :-)
Es ist aber nicht notwendig nach irgendwelchen verstaubten Physikbüchern zu suchen, falls überhaupt noch welche existent sein sollten. Alles was ihr benötigt wird hier vorgegeben.

Um die Aufgabe einfach zu halten und nicht zu stark in die Details der Physik einzugehen, werden wir komplett ohne Einheiten rechnen und auch gar nicht erst welche angeben. Da sich die Einheiten eh immer gleich verhalten können sie also problemlos weggelassen werden.

Es soll ein Behälter mit einem bestimmten Volumen angegeben werden. In diesem Behälter werden mehrere Flüssigkeiten gemischt. Die einzelnen Flüssigkeiten werden durch Ihre Charakteristika definiert. Hierbei handelt es sich um Dichte, Temperatur, spezifische Wärmekapazität und Volumen. Daraus soll dann die resultierende Temperatur, die Gesamtmasse und Gesamtdichte ermittelt werden.

Beim Mischen von Flüssigkeiten wird von einer chemischen Reaktion abstrahiert. Flüssigkeiten gehen also nicht in einen möglichen gasförmigen Zustand über!

Anforderungen

  • Das Programm nimmt seine Parameter von der Kommandozeile entgegen und schreibt seine Ausgabe nach stdout. Bei einer erfolgreichen Berechnung sieht die Ausgabe wie folgt aus:
            % ./ueb04 -b 10 -f 0.72 20 0.57
            Temperatur: 20
            Gesamtmasse: 7.2
            Gesamtdichte: 0.72
    
    Die Ausgabe ist in Ausdruck und Form so zu übernehmen.

  • Als Eingabeparameter erwartet das Programm Steuerparameter, welche auch mehrfach auftreten können, und Werte, die für die Berechnung notwendig sind:
    • -b oder -B: Behältergröße (Volumen), in welchem die Flüssigkeiten gemischt werden. Hinter der Option muß die Größe des Behälters angegeben werden. Dieser Parameter ist Pflicht und darf nur einmal angegeben werden.
    • -f oder -F: Flüssigkeitsangabe. Dieser Parameter muß mindestens einmal verwendet werden, da der Behälter mit mindestens einer Flüssigkeit gefüllt werden muß. Hinter der Option werden die spezifischen Merkmale der Flüssigkeit (Dichte, Temperatur, spezifische Wärmekapazität und Volumen) angegeben. Die Reihenfolge ist relevant!
    • -h oder -H: Ausgabe der allgemeinen Hilfe.
    • -hx oder -Hx: x kann hier die Ausprägung f bzw. F für die Flüssigkeit und b bzw. B für die Behältergröße annehmen. Ist einer von diesen Parametern angegeben, so wird die spezielle Hilfe ausgegeben.

  • Besonderheiten bei den Aufrufparametern:
    Angegeben werden muß mindestens ein Behälter und eine Flüssigkeit. Dies wäre wohl der einfachste Fall, wo kaum Berechnungen notwendig sind. Bei der letzten Flüssigkeit die angegeben wird, kann das Volumen weggelassen werden. Wird das Volumen weggelassen, so ist der Behälter bis zum Fassungsvermögen aufzufüllen. Ist das Fassungsvermögen bereits überschritten, so ist das ein Fehler und muß abgefangen werden (siehe Fehlerbehandlung). Ist das Fassungsvermögen des Behälters noch nicht erreicht, eine weitere Flüssigkeit würde dies aber überschreiten, so wird der Behälter bis zu seinem Fassungsvermögen aufgefüllt und der Rest vernachlässigt. Generell darf nur bei der letzten Flüssigkeit die Volumenangabe weggelassen werden.
            % ./ueb04 -b 10 -f 0.72 20 0.57
            Hier wurde das Volumen nicht mit angegeben, so wird der Wert 10
            (Behältergrösse) angenommen.
    
            % ./ueb04 -b 10 -f 0.72 20 0.57 9 -F 0.8 20 0.51
            Hier wurde für die 2.Flüssigkeit (Azeton) kein Volumen
            angegeben, es wird folglich mit 1 angenommen.
    
            % ./ueb04 -b 10 -f 0.72 20 0.57 10 -F 0.8 20 0.51
            Hier ist das Fassungsvermögen bereits mit der ersten
            Flüssigkeit erreicht. Da kein Tropfen der 2.Flüssigkeit
            mehr passt kommt es hier zu einem Fehler.
    
            % ./ueb04 -b 10 -f 0.72 20 0.57 9 -F 0.8 20 0.51 2
            Hier wird die 2.Flüssigkeit auf 1 reduziert.
    
            % ./ueb04 -b 10 -f 0.72 20 0.57 9 -F 0.8 20 0.51 2 -f 13.5 20 0.033
            Hier passt die 4.Flüssigkeit (Quecksilber) gar nicht mehr. Es
            kommt zu einem Fehler.
    
            % ./ueb04 -b 10 -f 0.72 20 0.57 -F 0.8 20 0.51 2 -f 13.5 20 0.033
            Hier fehlt bei der ersten Flüssigkeit die Volumenangabe es
            kommt somit zu einem Fehler.
    
  • Die Hilfe soll folgendermassen aufgebaut sein:
    • -h oder -H:
              % ./ueb04 -h
              Usage: ueb04 <Opt> [Parameterliste] [ <Opt> [Parameterliste] ] ...
               -h bzw. -H: Hilfe. Erweiterungsparameter b/B und f/F.
               -b bzw. -B: Angabe der Behältergröße.
               -f bzw. -F: Angabe der Flüssigkeitsangaben (Dichte, Temperatur,
                           spez. Wärmekapazität und Volumen) mit Mehrfachnennungen.
    • -hx bzw. -Hx:
              % ./ueb04 -hf
               -f Dichte Temperatur spez. Wärmekapazität [Volumen]
              % ./ueb04 -hb bzw. % ./ueb04 -hB
               -b Behältergröße

  • Die Hilfe soll nicht in Kombination mit anderen Parametern ausgewertet werden.
    Wird -h bzw. -H oder -hx bzw. -Hx in Kombination mit anderen Parametern angegeben, so soll nur die Hilfe für -h bzw. -H ausgegeben werden.

  • Fehlerfälle und Vorgehensweisen:
    • Wird die Hilfeoption angegeben, so sind weitere Optionen zu vernachlässigen.
    • Wird die Hilfe mit einer ungültigen Optionserweiterung angegeben (z.B. -hi) so ist die Hilfe für -h bzw. -H auszugeben. Das Programm wird mit return 1 beendet.
    • Wird nur der Programmname ohne Optionen angegeben, so ist die Hilfe bzgl. -h bzw. -H auszugeben. Das Programm endet mit return 0.

  • Behälter:
    • Die Behälteroption wird mit -b bzw. -B angegeben. Ihr folgt eine Volumenwertangabe.
    • Die Behälteroption kann an beliebiger Stelle angegeben werden, auch zwischen 2 Flüssigkeiten.
    • Der Behälteroption muß die Volumenangabe des Behälters folgen. Fehlt die Volumenangabe so ist die Hilfe bzgl. der Behälterangabe auszugeben und das Programm mit return 1 zu beenden.
    • Fehlt diese Option ganz, so ist die Hilfe bzgl. des Programmaufrufs auszugeben und das Programm mit return 1 zu beenden.

  • Flüssigkeiten:
    • Die Flüssigkeitsoption wird mit -f bzw. -F angegeben. Ihr folgen die Flüssigkeitswerte: Dichte, Temperatur, spez. Wärmekapazität und Volumen.
    • Es muß zumindest eine Flüssigkeit angegeben werden. Wird keine Flüssigkeit angegeben, so ist die Hilfe auszugeben und das Programm mit return 1 zu beenden.
    • Das Volumen der zuletzt angegebenen Flüssigkeit muß nicht angegeben werden. Es wird mit der Behältergröße verrechnet.
    • Werden mehrere Volumenangaben vergessen, so ist eine Fehlermeldung auszugeben und das Programm mit return 1 zu beenden.
    • Kann eine Flüssigkeit gar nicht mehr berücksichtigt werden, so wird das Programm mit einer Fehlermeldung und return 1 beendet.
    • Die Flüssigkeiten werden in der Reihenfolge ihrer Nennung in den Behälter geschüttet. Wenn eine Flüssigkeit nicht mehr ganz paßt, ist es somit immer die zuletzt genannte.

  • Wertebereiche:
    ParameterWertebereich
    Dichte> 0
    Temperatur-273 bis unendlich
    spez. Wärmekapazität> 0
    Volumen> 0

    • Befindet sich ein Parameter außerhalb seines Wertebereichs so ist eine Fehlermeldung auszugeben und das Programm mit return 1 zu beenden.
    • Die einzelnen Parameter und die Werte der Flüssigkeiten werden nur durch Leerzeichen getrennt.
    • Die Ergebnisse sind wie folgt zu runden:
      • Temperatur: Genauigkeit mit 1 Stelle nach dem Komma.
      • Gesamtmasse: Genauigkeit mit 2 Stellen nach dem Komma.
      • Gesamtdichte: Genauigkeit mit 2 Stellen nach dem Komma.




Hinweise
  • Formeln:
    • Wärmeinhalt
      Wärmeinhalt= spez. Wärmekapazität * Masse * Temperatur
      Q= C * M * T

    • Wärmemischung
      Wärmemischung (Q1 + ... + Qn)= Temperatur der gemischten Flüssigkeiten * ( C1 * M1 + ... + Cn * Mn)
      Q1 + Q2 + Q3 + ... + Qn= Tm * (C1 * M1 + C2 * M2 + ... + Cn * Mn)

    • Dichte
      Dichte= Masse / Volumen
      d= M / V

  • Rückgabewerte:
    Allgemein gilt, daß das Programm sich mit einem Returncode ungleich 0 beendet, wenn ein Fehler aufgetreten ist. Zeigt das Programm hingegen normales Verhalten, so soll es mit dem Returncode = 0 beendet werden.

  • Umlaute:
    Benutzt bitte keine Umlaute für die Ausgabe, da diese je nach aktivem Zeichensatz unterschiedlich ausgegeben werden. Benutzt stattdessen Ersatzsequenzen wie ae oder ss.

  • Modularisierung:
    Macht euch auch bei dieser Aufgabe Gedanken über eine sinnvolle Modularisierung, auch wenn diesmal keine Schnittstelle vorgegeben ist.

 

Download Beispiel-Lösungsvorschlag, Quelltext inkl. Projektdateien für VC6 (ZIP-Archiv, 51 KB)

 

Zur Aufgaben-Übersicht

 

Gefällt dir die C Übungsaufgabe? Schreibe doch einen Kommentar...

 

Neuen Kommentar abgeben

2ys43