Hallo,
ich habe eine Aufgabe bei deren Lösung ich etwas Hilfe benötigen könnte.
Kurz zur allgemeinen Aufgabe:
Ich soll ein Programm schreiben, das zu einer bestimmten Uhrzeit im (24-Stunden-Takt) berechnen soll, wie groß der kleinste Winkel zwischen dem Stunden- und dem Minutenzeiger ist. Uhrzeit soll über Kommandozeile eingegeben werden.
Das Habe ich auch alles hinbekommen, Programm leuft einwandfrei:
Wie gesagt, funktioniert einwandfrei. Es gibt allerdings ein kleines Problem: Das Programm funktioniert NUR, wenn ich die Uhrzeiten im 12-Stunden-Takt angebe (urzeit 0 - 12, anstatt 0 - 24). Gebe ich z.B. 20:18 ein, kommt das falsche Ergebnis raus, bei 8:18 das Richtige.
Meine Frage:
Wie mache ich das das auch mit den uhrzeiten von 13 - 24 uhr geht? Ist ja schließlich die Aufgabenstellung! Ich habe mir gedacht, man könnte dem Programm vllt sagen, das wenn die eingegebene Zahl größer als 12 ist, das der dann die Zahlen ersetzen soll, also 13 mit 1, 14 mit 2 ersetzen usw....
Wenn ich das mit lauter if-Schleifen mache, berechnet der das Ergebnis falsch! Auserdem sieht es sehr unschön aus:
Wenn ich 8:18 Uhr eingebe, muss normalerweise der Winkel 141 rauskommen, es kommt aber (wenn die ifschleifen dabei sind) 261 raus,
Weis jemand wie man dieses Problem besser und vorallem richtig lösen könnte?
Danke schonmal.
Gruß
ich habe eine Aufgabe bei deren Lösung ich etwas Hilfe benötigen könnte.
Kurz zur allgemeinen Aufgabe:
Ich soll ein Programm schreiben, das zu einer bestimmten Uhrzeit im (24-Stunden-Takt) berechnen soll, wie groß der kleinste Winkel zwischen dem Stunden- und dem Minutenzeiger ist. Uhrzeit soll über Kommandozeile eingegeben werden.
Das Habe ich auch alles hinbekommen, Programm leuft einwandfrei:
C++:
#include <iostream>
#include <cmath>
using namespace std;
int s;
int m;
int main () {
cout << "Uhrzeit eingeben:" << endl;
cout << "Stunden: ";
cin >> s;
cout << "Minuten: ";
cin >> m;
int i = 360;
int ws;
int wm;
int winkel;
ws = (s * 30 + m * 1/2);
wm = m * 6;
winkel = ws - wm;
cout << "Der Winkel zwischen den Zeigern betraegt: " << winkel << " " << "Grad";
}
Wie gesagt, funktioniert einwandfrei. Es gibt allerdings ein kleines Problem: Das Programm funktioniert NUR, wenn ich die Uhrzeiten im 12-Stunden-Takt angebe (urzeit 0 - 12, anstatt 0 - 24). Gebe ich z.B. 20:18 ein, kommt das falsche Ergebnis raus, bei 8:18 das Richtige.
Meine Frage:
Wie mache ich das das auch mit den uhrzeiten von 13 - 24 uhr geht? Ist ja schließlich die Aufgabenstellung! Ich habe mir gedacht, man könnte dem Programm vllt sagen, das wenn die eingegebene Zahl größer als 12 ist, das der dann die Zahlen ersetzen soll, also 13 mit 1, 14 mit 2 ersetzen usw....
Wenn ich das mit lauter if-Schleifen mache, berechnet der das Ergebnis falsch! Auserdem sieht es sehr unschön aus:
C++:
#include <iostream>
#include <cmath>
using namespace std;
int s;
int m;
int main () {
cout << "Uhrzeit eingeben:" << endl;
cout << "Stunden: ";
cin >> s;
cout << "Minuten: ";
cin >> m;
if (s==13);
s = 1;
if (s==14);
s = 2;
if (s==15);
s = 3;
if (s==16);
s = 4;
if (s==17);
s = 5;
if (s==18);
s = 6;
if (s==19);
s = 7;
if (s==20);
s = 8;
if (s==21);
s = 9;
if (s==22);
s = 10;
if (s==23);
s = 11;
if (s==24);
s = 12;
int i = 360;
int ws;
int wm;
int winkel;
ws = (s * 30 + m * 1/2);
wm = m * 6;
winkel = ws - wm;
cout << "Der Winkel zwischen den Zeigern betraegt: " << winkel << " " << "Grad";
}
Wenn ich 8:18 Uhr eingebe, muss normalerweise der Winkel 141 rauskommen, es kommt aber (wenn die ifschleifen dabei sind) 261 raus,
Weis jemand wie man dieses Problem besser und vorallem richtig lösen könnte?
Danke schonmal.
Gruß