Forum: C-Programmieren
Moderatoren: juergen, Martin ConradThema: Anfängerfrage zur Zeitangabe
Anfängerfrage zur Zeitangabe
sonja1893 am 01.04.2004 um 13:02
Ich bin absoluter Anfänger beim C-Programmieren. Ich soll für die Schule eine Aufgabe lösen und ich weiß nicht, wie ich das machen soll.
Wir hatten bis jetzt nur sehr wenige Befehle und damit soll ich nun diese Aufgabe lösen:
"Die Time-Bibliotheksfunktion time(int *) speichert durch einen Aufruf wie
int zeit;
time(&zeit);
in der Variablen zeit die Anzahl der vergangenen Sekunden seit 1970-01-01, 00:00 Uhr.
Entwickeln Sie ein Programm, das darauf aufbauend die Uhrzeit im Format hh:mm:ss am Bildschirm ausgibt.
Anmerkung: Wird beim printf-Kommando der Platzhalter %02d verwendet, so wird die übergebene Integerzahl zweistellig mit führenden Nullen ausgegeben."
So, das ist sie. Ich hoffe, ihr könnt mir helfen.
Sonja
Anfängerfrage zur Zeitangabe
cyntia am 01.04.2004 um 13:37
damit sollte es gehen (bei mir tuts das jedenfalls).
Gruß
cyntia
#include <stdio.h>
#include <conio.h>
#include <time.h>
/* ---- globale Variablen ---- */
/* ---- Prototypen ---- */
time_t time(time_t *timer);
char *ctime(const time_t *time);
struct tm *localtime(const time_t *timer);
struct tm *gmtime(const time_t *timer);
/* ---- START main ---- */
int main() {
/* ---- lokale Variablen ---- */
time_t jetzt;
struct tm DZStruktur;
char DZString[26];
/* ---- Anweisungen ---- */
clrscr();
jetzt = time(NULL);
DZStruktur=*localtime(&jetzt);
strcpy(DZString,asctime(&DZStruktur));
printf("\n\n\n\t\t %02d",DZStruktur.tm_hour);
printf(".%02d",DZStruktur.tm_min);
printf(".%02d",DZStruktur.tm_sec);
fflush(stdin);
getch();
return 0;
}
Anfängerfrage zur Zeitangabe
tankard am 01.04.2004 um 15:56
#include <stdio.h>
#include <time.h>
int main(void) {
time_t zeit;
int stunde, minute, sekunde;
time(&zeit);
sekunde = zeit % 60;
minute = (zeit % 3600)/60;
stunde = (zeit % 86400)/3600;
printf("%02d:%02d:%02d\n", stunde+2, minute, sekunde);
return 0;
}
Bei den Stunden braucht man +2, weil die Funktion time() die Zeit von Greenwich (also GMT) verwendet. GMT hat zu "unserer" Zeit eine Stunde Unterschied. Ausserdem muss man noch die Sommerzeit ausgleichen (noch eine Stunde Unterschied).
Du kannst Dir ja mal selbst überlegen, warum das klappt. Ich will Dir ja nicht den ganzen Spass an den Hausaufgaben verderben
.
Ansonsten frag einfach nochmal
.
tankard
--
C++ is an octopus made by nailing extra legs onto a dog!
Anfängerfrage zur Zeitangabe
sonja1893 am 02.04.2004 um 13:14
Vielen Dank! Genau das war es, was ich gebraucht habe.
Die ganzen Befehle aus cyntias Beitrag hatten wir alle noch nicht. Es war also schon so gedacht, dass wir dafür mehr Mathe können müssen als C.
Könntest du die Rechnungen mal kurz erläutern? Ich will nur sicher sein, dass ich das Richtige sage, wenn ich danach gefragt werde.
Anfängerfrage zur Zeitangabe
tankard am 02.04.2004 um 15:57
Zunächst zu
sekunde = zeit % 60;
Der %-Operator liefert den Rest bei einer ganzzahligen Division. Wenn ich also "zeit%60" Rechne, dann unterteile ich "zeit" im Prinzip in 60er-Packs (also Minuten) und bekomme als Ergebnis die Sekunden, die zu keiner vollen Minute mehr gehören (oder wenn's aufgeht eben 0). Z.B. sind 150 Sekunden 2 Minuten und 30 Sekunden (also 60+60+30 Sekunden). Deshalb ist 150%60=30. Und das war ja gesucht.
Und bei
minute = (zeit % 3600)/60;
macht man es zunächst mal genauso. Allerdings schneidet man sich hier die Sekunden ab, die nicht mehr in eine volle Stunde passen. Da eine Stunde 3600 Sekunden hat (60*60) rechnet man also "zeit%3600". Jetzt hat man schon das Gesuchte, allerdings in der Einheit Sekunden. Man muss das nur noch in Minuten umrechnen, also nochmal durch 60 Teilen. Hier nutzt man aus, dass der /-Operator nur das ganzzahlige Ergebnis der Division zurückliefert (also die vollen 60er-Packs). Z.B. ist 150%3600=150 und 150/60=2 (der Rest wird einfach abgeschnitten).
Mit der Zeile
stunde = (zeit % 86400)/3600;
geht es dann analog. Nur werden jetzt die Sekunden abgeschnitten, die nicht mehr in einen vollen Tag gepasst haben (ein Tag hat 60*60*24=86400 Sekunden). Das ergebnis wird dann aber diesmal nicht in Minuten sonder in Stunden umgerechnet. Z.B. 150%86400=150 und 150/3600=0.
Wenn man das Programm also 150 Sekunden nach Beginn des 1.1.1970 laufen lässt, bekommt man die Uhrzeit 00:02:30. Und so sollte es ja auch sein.
Ich hoffe, Du kannst mit den Erklärungen was anfangen
.
tankard
--
C++ is an octopus made by nailing extra legs onto a dog!
