Hackerboard WikiHaboBlog

[HaBo]

 
Programmieraufgaben Hier wird regelmäßig eine neue Programmieraufgabe gestellt, die dann gelöst werden soll und in Zusammenarbeit mit den Moderatoren auch besprochen werden kann.

Uhrzeitenrechner

Diskussion: Uhrzeitenrechner im Forum Programmieraufgaben, in der Kategorie Code Kitchen; Eingereicht von ICHdasICH: Zitat: Task: gib alle uhrzeiten aus, welche entstehen, wenn man 11h 11m 11s zu einer uhrzeit addiert ...

Antwort
Alt 12.11.09, 20:05   #1 (permalink)
CDW
Moderator
 
Benutzerbild von CDW
 
Registriert seit: 20.07.05
CDW Leistung: OpteronCDW Leistung: OpteronCDW Leistung: OpteronCDW Leistung: OpteronCDW Leistung: Opteron
Likes: 156
Standard Uhrzeitenrechner


Eingereicht von ICHdasICH:

Zitat:
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:
Zitat:
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
__________________
Noch mal, für alle Pseudo-Geeks: 1+1=0. -> 10 wäre Überlauf!
Selig, wer nichts zu sagen hat und trotzdem schweigt.
CDW ist offline   Mit Zitat antworten
Alt 12.11.09, 22:16   #2 (permalink)
Senior Member
 
Benutzerbild von odigo
 
Registriert seit: 25.12.04
odigo Leistung: 8086odigo Leistung: 8086
odigo eine Nachricht über ICQ schicken
Likes: 50
Standard RE: Uhrzeitenrechner

Ich hab nur mal Teil 1 ins Java gemacht

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!!!");
		}

	}

}
odigo ist offline   Mit Zitat antworten
   
HaBOT
 

Werbung ist gerade online    
Alt 13.11.09, 02:31   #3 (permalink)
 
Registriert seit: 24.11.04
ICHdasICH Leistung: Facit NTK
Likes: 0
Standard

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.

[SPOILER]:- 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).[/SPOILER]

Geändert von throjan (16.11.09 um 20:59 Uhr)
ICHdasICH ist offline   Mit Zitat antworten
Alt 16.11.09, 20:53   #4 (permalink)
Member of Honour
 
Registriert seit: 11.09.03
Watchme Leistung: Z3
Likes: 2
Thumbs up

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.
Watchme ist offline   Mit Zitat antworten
Alt 16.11.09, 23:03   #5 (permalink)
 
Registriert seit: 30.06.08
VierZwei Leistung: Facit NTK
Likes: 0
Standard

Das hab ich doch schonmal mit 13 Stunden und 37 Minuten gemacht, dürfte irgendwo bei Humor liegen. Mit Python
VierZwei ist offline   Mit Zitat antworten
Antwort
   

Werbung ist gerade online    

[HaBo] » Software Home » Code Kitchen » Programmieraufgaben » Uhrzeitenrechner
Themen-Optionen
Ansicht

Forumregeln
Es ist Ihnen nicht erlaubt, neue Themen zu verfassen.
Es ist Ihnen nicht erlaubt, auf Beiträge zu antworten.
Es ist Ihnen nicht erlaubt, Anhänge hochzuladen.
Es ist Ihnen nicht erlaubt, Ihre Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks sind aus
Pingbacks sind aus
Refbacks sind aus



1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61