Herzlich Willkommen, lieber Gast!
  Sie befinden sich hier:

  Forum » C / C++ (WinAPI, Konsole) » Eine Uhr programmieren

Forum | Hilfe | Team | Links | Impressum | > Suche < | Mitglieder | Registrieren | Einloggen
  Quicklinks: MSDN-Online || STL || clib Reference Grundlagen || Literatur || E-Books || Zubehör || > F.A.Q. < || Downloads   

Autor Thread - Seiten: > 1 < [ 2 ]
000
19.07.2005, 12:33 Uhr
~St Lucifer
Gast


Also, ich wollte mal ne Uhr programmieren, den mechanismus an sich hab ich schon, nur ist ne sekunde noch nicht wirklich eine sekunde. Jetzt wollte ich fragen wie ich dem PC beibringe wie lang eine Sekunde ist.

Mein ansatz:


C++:
#include <stdio.h>
#include <conio.h>

void main (void)
{
int stunden=0, minuten=0, sekunden=0;

   do
    {
     sekunden++;
      if (sekunden == 60)
       {
        minuten++;
        sekunden = 0;

         if (minuten == 60)
          {
           stunden++;
           minuten = 0;

            if(stunden == 24)
             {
              printf("Fertig!");
              break;
             }
          }
       }
     printf("%d.%d.%d\n", stunden, minuten, sekunden);

    }while(sekunden < 60);
getch();
}




Das am end die stunden if schleife noch geändert werden muss weiß ich, ich hab das nur aus Testzwecken erstmal so gemacht, damit ich mir die ausgabe angucken kann.


thx
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
001
19.07.2005, 13:00 Uhr
FloSoft
Medialer Over-Flow
(Administrator)


unter windows Sleep(1000) unter anderen system müsste es sleep(1) sein um eine Sekunde zu warten.
--
class God : public ChuckNorris { };

Dieser Post wurde am 19.07.2005 um 13:01 Uhr von FloSoft editiert.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
002
19.07.2005, 14:02 Uhr
Reyx
IT-fetischistischer Wurstsalat mit rostigem Berghorn
(Operator)



Zitat von FloSoft:
unter windows Sleep(1000) unter anderen system müsste es sleep(1) sein um eine Sekunde zu warten.

Soweit ich weiß ist diese Zeitmessung unter allen Windoof's bis auf die NT-Systeme ziemlich ungenau, du könntest da also einen Timer-Überlauf kriegen.

Dieser Post wurde am 19.07.2005 um 14:02 Uhr von Reyx editiert.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
003
19.07.2005, 14:23 Uhr
FloSoft
Medialer Over-Flow
(Administrator)


das ist immer das problem
--
class God : public ChuckNorris { };
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
004
19.07.2005, 15:01 Uhr
~St Lucifer
Gast


und wie bind ich das ein?
weil wenn ich einfach sleep(1000); in den sekundenblock schreibe sagt der undefinierte funktion.
(Funktionen deklarieren und so kann ich übriegens auch noch nicht (falls man das muss) das ist erst das nächste Kapitel was ich lerne^^)

Wäre also cool wenn mir das jemand mal in meinen Code reinschreiben könnte, damit ich mir das angucken kann wie sowas aussehen muss.

thx
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
005
19.07.2005, 15:22 Uhr
FloSoft
Medialer Over-Flow
(Administrator)


unter win musst du #include <windows.h> in die datei oben mit reinschreiben, unter linux würde ich dir sleep empfehlen
--
class God : public ChuckNorris { };

Dieser Post wurde am 19.07.2005 um 15:23 Uhr von FloSoft editiert.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
006
19.07.2005, 15:23 Uhr
~St Lucifer
Gast


daran hab ich auch gedacht, hatte ich auch gemacht, aber die meldung kam dann immernoch
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
007
19.07.2005, 15:27 Uhr
virtual
Sexiest Bit alive
(Operator)


Ich würde es anders machen:
ich würde das System nicht eine Sekunde warten lassen und dann irgendeine Zeit ausgeben, weil unabhängig von der Genauigkeit der Sleep Funktion selbst benötigt Dein programm selbst, insbesondere die Ausgabefunktionen zwischen den Sleeps auch noch rechenzeit. Ich denke, daß sich da schon über wenige Stunden/Tage eine verschiebung von der einen oder anderen Sekunde ergeben kann, ist aber systemabh.
Ich würde etwa so vorgehen:

a = Aktuelle Zeit (zb mit time erfragen)
schleife, bis Programm beendet wird
warte 0,1 - 0,5 sekunden (Sleep Windows, usleep Linux)
b = aktuelle Zeile
wenn a<>b dann
a = b
Ausgabe a
ende wenn
ende schleife

Diese Vorgehensweise arbeitet genauer als einfach nur sleep.
--
Gruß, virtual
Quote of the Month
Ich eß' nur was ein Gesicht hat (Creme 21)
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
008
19.07.2005, 15:46 Uhr
~St Lucifer
Gast


das ganze lässt sich doch sicher auch ohne irgendwelche vorgefertigten funktionen machen, die irgendwoher was einlesen, oder?
in Digitaltechnik hatten wir mal was, (nur leider hab ich vergessen was^^), ich glaube es waren schieberegister, timer oder irgendsowas, und da meinte der Lehrer das die Zeit dann anhand des Prozessortaktes gemessen wird, bei C wird das wohl auch ähnlich gehen, oder?

Aber eh egal, da ich sowas eh bei weitem noch nicht programmieren kann, und ich schon mit der lösung von Virtual überfordert bin, und ich das ganze eh nur zu übungszwecken gemacht habe, tuts für anfang auch das Sleep. (sofern es funktionieren würde)
Ich hab mein code etwas umgeschrieben. (ohne void main (void) jetzt)


C++:
#include <stdio.h>
#include <windows.h>

int main ( )
{
int stunden=0, minuten=0, sekunden=0;

   do
    {
     sleep(1000);
     sekunden++;
      if (sekunden == 60)
       {
        minuten++;
        sekunden = 0;

         if (minuten == 60)
          {
           stunden++;
           minuten = 0;

            if(stunden == 24)
             {
              printf("Fertig!");
              break;
             }
          }
       }
     printf("%d.%d.%d\n", stunden, minuten, sekunden);

    }while(sekunden < 60);

getch();
return 0;
}

 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
009
19.07.2005, 15:55 Uhr
Tommix



Unter Windows isses Sleep (großes S).

- Tommix
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
Seiten: > 1 < [ 2 ]     [ C / C++ (WinAPI, Konsole) ]  


ThWBoard 2.73 FloSoft-Edition
© by Paul Baecher & Felix Gonschorek (www.thwboard.de)

Anpassungen des Forums
© by Flo-Soft (www.flo-soft.de)

Sie sind Besucher: