Uhr in c++ programmierung

ich hab eine Frage ob mir jemand eine herangehensweise an folgende Aufgabe geben kann
"In dieser (sehr lebensnahen) Aufgabe sollen Sie zu einer gegebenen Uhrzeit im 24-Stunden-Format (hh:mm) berechnen, wie groß der (kleinere) Winkel zwischen dem Stunden- und dem Minutenzeiger auf einem Ziffernblatt ist. Der Benutzer soll dabei die Uhrzeit über die Kommandozeile eingeben können.

Bsp.:

Stunden: 10

Minuten: 30

Der Winkel betraegt 135 Grad.

Achten Sie bitte darauf, dass sich der Stundenzeiger während einer Stunde mitbewegt! So beträgt der Winkel bei der Uhrzeit 09:30 nicht 90 Grad sondern 105 Grad!"
danke schon mal im vorraus :smile:

Hi,

also zunaechst einmal baust du dir ein Geruest, welches die Eingabe und die Berechnung durchfuehrt, aber ohne die eigentlichen Sachen zu implementieren, sagen wir

#include 
#include 

int winkel(int hour,int minute)
{
 long winkel\_m, winkel\_h, winkel\_diff;

 hour %= 12;

 /\* hier die Berechnungen \*/

 return (int) winkel\_diff;
}


int main()
{
 int hour = 0;
 int minute = 0;

 (void) printf("Eingabe Zeit (hh:mm): ");

 if (2 == scanf("%d:%d",&hour,&minute))
 (void) printf("Winkel %d\n", winkel(hour,minute));
 else
 (void) printf("Eingabefehler\n")

 return 0;
}

Dabei gehen wir initial davon aus, dass wir fuer die Berechnung der Winkel

Winkel Minute: winkel_m
Winkel Stunde: winkel_h
Winkel Differenz: winkel_diff

eine hohe Aufloesung benoetigen.

Zudem gehen wir davon aus, dass ja die Berechnung fuer 17:00 dieselbe ist wie die fuer 5:00 Uhr und beschraenken unsere Berechnungen auf 00:00-11:59 (das macht das „%= 12“ im Code)

Es sind genau 4 Zeilen zu programmieren!

 winkel\_m = ...;
 winkel\_h = ...;
 winkel\_diff = ...;

 if (winkel\_diff \> 180L) winkel\_diff = ...;

Fragen an dich:

Zeiger 1: winkel_m
Wie gross ist der Anteil der Minutenzahl an der vollen Stunde?
Multipliziere dies mit 360 um die Gradzahl zu erhalten.

Zeiger 2: winkel_h
Wie gross ist der Anteil der Stunde plus der Anteil der Minuten an der Gesamtzahl der Minuten fuer die 12 Stunden einer Uhr (Aufloesung ist Minuten)
Multipliziere dies mit 360 um die Gradzahl zu erhalten.

Differenz der beiden: winkel_diff
Bilde die Differenz zwischen winkel_m und winkel_h und nehme den Absolutwert (dafuer gibt es die Funktion labs)

Eine Runde sind 360 Grad. Solltest du als Ergebnis mehr als 180 Grad erhalten, dann berechne die Differenz entsprechend neu.

Final ersetzt du die C Anweisungen (scanf und printf) durch std::cin und std::cout Aufrufe, damit das Ganze dann auch mehr nach C++ aussieht.

Gruss
n.