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.