• Willkommen im Linux Club - dem deutschsprachigen Supportforum für GNU/Linux. Registriere dich kostenlos, um alle Inhalte zu sehen und Fragen zu stellen.

Zeitschaltuhr in Perl programmieren

Hallo,

ich möchte mir eine Zeitschaltuhr in Perl programmieren.

Dazu habe ich mir folgendes überlegt.

&sekunde();
&minute();

sub sekunde {

for($sekunde=0;$sekunde<=59;++$sekunde) {
print "$sekunde\n";
}}

sub minute {

for($sekunde=0;$sekunde<=59;++$sekunde)

{
print "00:$ekunde\n";
}

Jetzt habe ich nur das Problem, dass ich zum Beispiel die Zeitschaltuhr bis zur 59 Minute laufen lassen möchte.
Aber dabei müsste ich dann jede Minute einzeln eintragen.

Ich denke mir, dass es möglich wäre, mit 2 for - Schleifen zu lösen, wobei die 2te for - Schleife erst dann beginnt zu zählen, sobald die Sekunden immer bei 60 angelangt sind.

Leider weiss ich nicht, wie ich das Ganze bewerkstelligen kann.

Wenn mir jemand vielleicht weiterhelfen könnte.

Danke im voraus

Mfg
 
ich muss gestehen, dass ich nicht genau weiß was Du eigendlich von mir willst ;)

aber nur mal so als Gedankenexperiment, warum nicht einfach eine Schleife über die 3600 Sekunden in der Stunde machen und bei der Ausgabe entsprechend mit Modulo und Subtraktion auf Minuten & Sekunden runterbrechen....

zudem, Zeitschaltuhr? warum soll ein simpler for-loop genau 1 Sekunde brauchen? da gibts mit Sicherheit schon fertige Module auf CPAN, die alles mitliefern was du willst...
 
Ok, wahrscheinlich habe ich es wirklich sehr schlecht beschrieben.

Einmal genauer.

Er soll die Sekunden raufzählen, dann ab der 60 Sekunde schreiben: 01:00

und jetzt weiter die Sekunden zählen, und das Ganze soll bis zu 60 Minuten pasieren.

Wichtig ist, es müssen nicht die echten 60 Sekunden eingehalten werden, ich will nur, dass er automatisch immer nach 59 Sekunden die Minuten um 1 hochzählt.

Also eine Sekunde muss nicht einer echten Sekunde genau sein, mir geht es nur um den Umrbuch von Sekunde zu Minute!
 
Absolut gar nichts.

Dein Vorschlag hat mir viel weitergeholfen, ich versuche es im Moment umzusetzen, mit leider schlechten Ergebnissen.

Mein Problem ist jenes, dass ich es zwar schaffe, die Sekunden hochzuzählen und dann mittels Modulo 60 eine Minute hinzuschreiben.

Jetzt soll aber die Minute stehen bleiben und die Sekunden sollen weiter hochgezählt werden.

So sollte das Ergebnis aussehen:

1
2
3
.
.
.
01:00
01:01
01:02

Ungefähr so habe ich es mir vorgestellt:

for ($i=0;$i<=2999;++$i) {
if ($i % 60) {
for ($j=0;$j<=60;++$j)
{
print "$j\n";
}
else
{
print "$i:$j\n";
}}

Ergbenis leider nicht zufriedenstellend.
 
nun, ich kann kein perl (scheint aber irgendwie PHP recht ähnlich zu sein), aber ich würde es so programmieren:

Code:
for ($i = 0; $i < 3600; ++$i) {
  $min = $i%60;
  $sek = (int) $i/60;
  if ($min) print "$min:";
  print "$sek\n";
}

EDIT: zum Post unter mir - die Schleife mit den $sekunden und $minuten, die beiden haben immer denselben wert - warum also so kompliziert?
Stunden würde ich ein wenig anders machen:

Code:
for ($sek = 0; $sek < 10000; ++$sek) {
  if ($sek > 60) {
    $min = $sek/60;
    $sek = $sek%60;
    if ($min > 60) {
      $h = $min/60;
      $min = $min%60;
      print "$h:";
    }
    print "$min:";
  }
  print "$sek\n";
}
 
Soweit mein letztes Ergebnis:

for ($i=0;$i<3600;++$i)
{
for ($sekunden=0, $minuten=0;$sekunden<60, $minuten<60;++$sekunden, ++$minuten)
{
if ($sekunde % 60)
{
print "$i:$minute\n";
}
else
{print "$sekunde\n";
}}}
if ($i % 60)
{
print "$i:$minute:$sekunde\n";
}

Ausgabe:

0
0:1
0:2
.
0:59
0
1:1
1:2

Und diese Ausgabe sollte noch besser formatiert werden.

Jetzt zählt er richtig, zuerst die Sekunden und nach 60 sekunden schaltet er auf eine Minute hoch, nach weiteren 60 Sekunden schaltet er wieder eine Minute hoch.

Was aber noch nicht ganz passt ist die Ausgabe bei 1ner Stunde dann.
Diese sieht noch sehr schlecht aus

Wenn jemand eine Idee zur besseren Formatierung hat, bin ich für jeden Ratschlag offen und auch für eine Programmverbesserung.

Danke schon mal für jede Hilfe

Mfg
 
einen kleinen Ratschlag ;) naja das ist ein Perl - 1Zeiler:

Code:
printf "%.2d:%.2d\n" ,(($i - ($i%60)) / 60), ($i++%60) while ($i <3600);

Output:

Code:
00:00
00:01
00:02
00:03
00:04
00:05
00:06
00:07
00:08
00:09
00:10
00:11
00:12
00:13
00:14
00:15
00:16
00:17
00:18
00:19
00:20
00:21
00:22
00:23
00:24
00:25
00:26
00:27
[...]
59:36
59:37
59:38
59:39
59:40
59:41
59:42
59:43
59:44
59:45
59:46
59:47
59:48
59:49
59:50
59:51
59:52
59:53
59:54
59:55
59:56
59:57
59:58
59:59
 
Meine Variante ist zwar nicht so kurz, aber funktioniert auch.

for ($i=0;$i<30000;++$i)
{
for ($sekunde=0;$minute=0;$sekunde<60,$minute<60;++$sekunde,++$minute)
{
if ($sekunde %60 + $i % 60)
{
print "$i:$minute\n";
sleep(1);
}
else
{
print "$minute:$sekunde\n";
}}}
 
Oben