Uhrzeitenrechner

CDW

0
Mitarbeiter
Eingereicht von ICHdasICH:
Task: gib alle uhrzeiten aus, welche entstehen, wenn man 11h 11m 11s zu einer uhrzeit addiert (uhrzeit frei eingebbar).

Zusatztask: das programm muss zusaetzlich alle ausgangswerte finden, die hinreichend sind, um alle uhrzeiten darstellen zu koennen.
Beispiel/Erläuterung zu der Zusatzaufgabe:
wenn wir bei 0h 0m 0s starten, geht es mit 11h 11m 11s, 22h 22m 22s, 9h 33m 33s etc. weiter. Nach einer zeit kommst du aber wieder bei 0h 0m 0s an, ohne alle 'uhrzeiten' dabei generiert zu haben. 0-24h, 0-60m, 0-60s. Die frage ist nun, welche eingangszeiten man braucht, um alle ausgangszeiten mit dem o.g. algoritmus zu erzeugen.

Beispielausgabe für Teil1:
Code:
0h 0m 0s <-- 
11h 11m 11s
22h 22m 22s
9h 33m 33s
...
2h 38m 38s
13h 49m 49s <--- Ende - da die nächtste Uhrzeit 0:00:00 wäre
 
Ich hab nur mal Teil 1 ins Java gemacht :D

Code:
package de.odigo;

import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.text.SimpleDateFormat;
import java.util.Calendar;

public class Uhr {

	public static void main(String[] args) throws Exception {

		Calendar cal = Calendar.getInstance();
		cal.clear();
		cal.setLenient(false);

		Integer stunde = null;
		Integer minute = null;
		Integer sekunde = null;

		try {
			BufferedReader bin = new BufferedReader(new InputStreamReader(
					System.in));

			System.out.println("Stunde eingeben: ");
			stunde = Integer.valueOf(bin.readLine());
			cal.set(Calendar.HOUR_OF_DAY, stunde);

			System.out.println("Minute eingeben: ");
			minute = Integer.valueOf(bin.readLine());
			cal.set(Calendar.MINUTE, minute);

			System.out.println("Sekunde eingeben: ");
			sekunde = Integer.valueOf(bin.readLine());
			cal.set(Calendar.SECOND, sekunde);

			SimpleDateFormat sdf = new SimpleDateFormat("HH'h' mm'm' ss's'");

			do 
			{
				System.out.println(sdf.format(cal.getTime()));

				cal.add(Calendar.HOUR_OF_DAY, 11);
				cal.add(Calendar.MINUTE, 11);
				cal.add(Calendar.SECOND, 11);
			} 
			while (!(cal.get(Calendar.HOUR_OF_DAY) == stunde
					&& cal.get(Calendar.MINUTE) == minute && cal
					.get(Calendar.SECOND) == sekunde));

		} 
		catch (NumberFormatException nfe) 
		{
			System.out.println("Eine Uhrzeit besteht immer aus Zahlen!!!");
		} 
		catch (IllegalArgumentException iae) 
		{
			System.out.println("Die Eingaben sind nicht plausibel!!!");
		}

	}

}
 
So, das ganze mal in 34 Zeilen haeszlichem Prolog. Fuer den != CDW, der mir den Code erklaeren kann, gibts nochmal nen Keks. ;-)

Das ganze loest beide Teile der Aufgabe. Wenn auch ARG langsam. Am Ende lassen sich alle benoetigten startzeiten mit -? st(X). finden.

:- dynamic(time/1).
:- dynamic(st/1).

gentimes :-
stime(H,M,S),
uhrzeit(H,M,S),
gentimes.

stime(H,M,S) :-
random(0,25,X),
random(0,61,Y),
random(0,61,Z),
(
(
not(st([X,Y,Z])),not(time([X,Y,Z])),
assert(st([X,Y,Z])),assert(time([X,Y,Z])),
H is X,M is Y,S is Z,
write('StartTime: '),write(X),write('h '),write(Y),write('m '),write(Z),write('s'),nl
);(
stime(H,M,S)
)
).

uhrzeit(H,M,S) :-
Z is (S + 11) mod 60,
((Z < 11, MT is 1);(Z >= 11,MT is 0)),
Y is ((M + 11) + MT) mod 60,
((Y < 11, HT is 1);(Y >= 11,HT is 0)),
X is ((H + 11) + HT) mod 24,
not(time([X,Y,Z])),
write('GenerTime: '),write(X),write('h '),write(Y),write('m '),write(Z),write('s'),nl,
assert(time([X,Y,Z])),
uhrzeit(X,Y,Z).
 
Zuletzt bearbeitet von einem Moderator:
HRHRHR
DAS ist mal was für Abap :)
Teil A zumindest.
ich hab das jetzt einfach mal runter geschrieben... kA obs 100% korrekt ist

Code:
REPORT Zuhrzeit.

DATA: time TYPE sy-utime.

PARAMETERS: eingangsuhrzeit TYPE sy-utime.

START-OF-SELECTION.

IF eingangsuhrzei IS INITIAL.
   ADD '11111' TO eingangsuhrzeit.
ENDIF.
DO.
IF eingangsuhrzeit IS INITIAL.
  EXIT.
ENDIF.

ADD '11111' TO eingangsuhrzeit.
WRITE / eingangsuhrzeit.
ENDDO.
 
Zurück
Oben