5.2.20
12/07/19
Last Modified 06/30/19 by Walter Tasin
AlgoDat_A4 Reload Page

Attachments

 arbeitszeit.png

Algorithmen und Datenstrukturen

Übungen zu Tutorium 3

W. Tasin, M.Sc.



Es soll ein Programm in ANSI-C erstellt werden, das ausrechnet wie lange ein Firmenmitarbeiter an einem Tag gearbeitet hat.

Das Programm soll zuerst nach der Uhrzeit des Arbeitsbeginns fragen. Anschließend wird nach der Uhrzeit des Arbeitsendes gefragt.
Nach erfolgreicher Eingabe zweier Uhrzeiten der Form HH:MM wird die Dauer (Zeitraum zwischen den zwei Zeiten) in zwei unterschiedlichen Darstellungen ausgegeben.
Zuerst ist die Dauer in Stunden (mit zwei Dezimalstellen) und danach in Stunden/Minuten ausgegeben.

Die Eingabe soll mit scanf() erfolgen. Verwenden Sie dazu den Formatspezifizierer "%d:%d".
Überprüfen Sie die Eingabe bevor die Dauer errechnet wird.
Konnte scanf() keine 2 int-Werte (Stunde und Minute) durch einen Doppelpunkt getrennt einlesen oder sind die Zahlenwerte nicht im definierten Wertebereich für Stunden und Minuten, so ist das Programm mit einer geeigneten Meldung zu beenden.

Beispielaufruf

arbeitszeit.png

Programmerstellung

Zur Berechnung der Dauer

  • wandeln Sie zuerst die Stunden und Minuten in Sekunden seit Mitternacht,
  • bilden die Differenz aus den beiden Sekundenwerten
  • und wandeln Sie die Sekunden wieder zurück in Stunden und Minuten.



Das Programm ist in zwei C-Dateien zu realisieren:

  • arbeitszeit.c beinhaltet die Einsprungfunktion main()
  • zeitfkt.c beinhaltet die Realisierung von allgemein verwendbare Funktionen zur Umrechnung von Zeiten. Diese wurden in zeitfkt.h deklariert, die folgenden Inhalt hat:

#ifndef _ZEIT_FKT_H
#define _ZEIT_FKT_H

#define SECS_OF_DAY        (60ul*60*24)

/*
    Berechnet aus Stunden, Min. und Sekunden
    die Anzahl der vergangenen Sekunden seit Mitternacht.
*/
unsigned long hms2sec(unsigned h, unsigned m, unsigned s);
/*
    Rechnet die uebergebenen Sekunden in
    Stunden, Minuten und Sekunden um und gibt diese
    auf die Standardausgabe aus.
*/
void out_sec2hms(unsigned long sec);
/*
    Rechnet die uebergebenen Sekunden in
    Stunden (mit 2 Dezimalstellen nach dem Komma) aus 
    und gibt diesen Wert auf die Standardausgabe aus.
*/
void out_sec2time(unsigned long sec);

#endif



Optionale Ergänzungen

  • Ergänzen Sie das Programm dahingehend, dass auch Arbeitszeiten einer Nachtschicht korrekt berechnet werden.
    Diese zeichnen sich dadurch aus, dass ein Tageswechsel stattfindet, d. h. der errechnete Sekundenwert des Arbeitsbeginns ist größer als der des Arbeitsendes.
    Hinweis: Sie müssen dazu den Zahlenwert des Arbeitsendes korrigieren.
  • Ergänzen Sie die Datei zeitfkt.c und zeitfkt.h um die Funktion
    void calc_sec2hms(unsigned long sec, ... h, ... m, ... s);
    welche den Parameter sec in Stunde (h), Minute (m) und Sekunde (s) umrechnet und die Werte in den Variablen des Aufrufers ablegt.
    Testen Sie Ihre Funktion, indem Sie main() geeignet abändern.




Links

Uebungen Algorithmen und Datenstrukturen
Unterlagen Algorithmen und Datenstrukturen
Praktikum Algorithmen und Datenstrukturen
Zur Hauptseite