Willkommen |
|
myGully |
|
Links |
|
Forum |
|
|
|
 |
21.09.10, 22:22
|
#1
|
Anfänger
Registriert seit: Mar 2010
Beiträge: 46
Bedankt: 6
|
Datumsrechner in C !
Hallo leute,
habe hier eine aufgabe und wollte fragen ob ihr mir eine musterlösung geben könnt, da ich bei dieser aufgabe total übervordert bin, es handelt sihc um einen datumsrechner, inden man 2 beliebige daten eingibt und er die tage unterschied ausrechnet.
ausführliche aufgabenstellung: nur noch aufgabe dank warnung von germgerm
Datumsrechnen
Schreib ein Programm, das zwei Datumsangaben als Eingabe bekommt und den Zeitraum zwischen den beiden in Tagen ausgibt.
Ein- und Ausgabe
Das Programm wird mit zwei Datumsangaben als Argumente auf der Befehlszeile aufgerufen. Beide müssen die Form ddmmyyyy (8-stellige Zahl) haben.
Als Ausgabe wird nur eine Zahl (Zeitspanne in Tagen, nicht zerlegt auf Tage, Monate und Jahre) erwartet.
Berechnung
Dein Programm sollte folgenden Ablauf haben:
•Berechne für beide eingegebenen Datumangaben (dargestellt jeweils als ein einziger int, nicht als einzelne Zeichen) die “Anzahl der Tage seit 1.1.0001”.
•Gib die Differenz dieser Tage aus.
danke im vorraus lg. jan
|
|
|
22.09.10, 09:57
|
#2
|
Banned
Registriert seit: Aug 2010
Beiträge: 209
Bedankt: 70
|
Hmm, vielleicht solltest Du erst erklären warum Du überfordert bist!
So eine Aufgabe ist eigentlich super leicht zu lösen und wenn Du jetzt schon überfordert bist, dann würde ich mir überlegen, ob Du das Richtige für Dich studierst (falls Du studierst). Alles was Du beachten musst steht ja sogar auf dem Übungsblatt.
Bringt Dir doch letztendlich nichts, wenn Dir jemand eine Musterlösung schreibt...
|
|
|
22.09.10, 13:06
|
#3
|
Anfänger
Registriert seit: Mar 2010
Beiträge: 46
Bedankt: 6
|
ich bräuchte nur einen lösungsansatz, es liegt daran, dass wir einen neuen lehrer in programmieren bekommen haben, dessen niveau erheblich höher ist.
|
|
|
22.09.10, 18:26
|
#4
|
Mitglied
Registriert seit: Aug 2009
Ort: void* (*wtf[])(void **);
Beiträge: 453
Bedankt: 137
|
fang' doch damit an, die hilfsfunktionen zu implementieren und einzeln zu testen.
alles in allem finde ich das eine sehr ausführliche und gelungene aufgabenstellung.
__________________
entropie erfordert keine wartung
|
|
|
22.09.10, 18:53
|
#5
|
Anfänger
Registriert seit: Mar 2010
Beiträge: 46
Bedankt: 6
|
so hatten das programm heute im praktischen unterricht, ja so ähnlich habe ich angefangen aber dann waren die 2 stunden vorbei und ich hatte vllt 5-10% des programms, muss einfach nochmal dazu sagen das der lehrer neu an unserer schule ist und das die aufgaben sehr viel schwerer sind als die vom ehemaligen lehrer, deswegn würdet ihr mir sehr helfen mit einer musterlösung, ihr müsst es nicht tun aber wäre euch schon sehr dankbar
|
|
|
22.09.10, 19:41
|
#6
|
bla
Registriert seit: Mar 2010
Beiträge: 312
Bedankt: 302
|
cool, euer lehrer hat kein handy!
o-ton: lieber ein telefonloses kabel als ein kabelloses telefon ^^
ich würde im forum aber trotzdem mit solchen links ein bißchen vorsichtiger umgehen...
|
|
|
22.09.10, 20:01
|
#7
|
Mitglied
Registriert seit: Aug 2009
Ort: void* (*wtf[])(void **);
Beiträge: 453
Bedankt: 137
|
eine musterlösung wirst du hier nicht bekommen.
allerdings werden wir deine konkrekten fragen beantworten.
naja ok, musterlösung+testcode für istSchaltJahr()
Code:
#include <stdlib.h>
#include <stdio.h>
#include <string.h>
#include <math.h>
/*bool*/ int istSchaltJahr (int j) {
return (!(j % 400)) || (j % 100 && (!(j % 4)));
/* oder explizit:
if (j % 400 == 0) return 1;
if (j % 100 == 0) return 0;
if (j % 4 == 0) return 1;
return 0;
*/
}
int main (int ac, char ** av) {
if (ac < 2) {
printf ("blablala usage....\n");
return -1;
}
if (strlen (av[1]) != 8) {
printf ("blablala usage3 (kein datum)....\n");
return -1;
}
int datum_1 = atoi (av[1]);
if (datum_1 == 0) {
printf ("blablala usage2....\n");
return -1;
}
int tage_1 = datum_1 / ((int) pow (10, 6));
int monate_1 = (datum_1 / ((int) pow (10, 4))) - tage_1*100;
int jahre_1 = datum_1 - (tage_1*((int) pow (10,6)) + monate_1*((int) pow(10,4)));
printf ("eingabe %d == tage(%d), monate(%d), jahre (%d) schaltjahr? (%s)\n", datum_1, tage_1, monate_1, jahre_1, istSchaltJahr (jahre_1) ? "ja" : "nein");
return 0;
}
ich hoffe, das hilft.
__________________
entropie erfordert keine wartung
|
|
|
22.09.10, 22:07
|
#8
|
Anfänger
Registriert seit: Mar 2010
Beiträge: 46
Bedankt: 6
|
ok vielen dank ich werde mich am wochen ende hinhocken und mich daran versuchen  , wieso vorsichtig sein? die seite ist öffentlich zugängig oder was meinst du konkret?
|
|
|
23.09.10, 19:10
|
#9
|
bla
Registriert seit: Mar 2010
Beiträge: 312
Bedankt: 302
|
ich meine nur, falls du anonym bleiben möchtest.
|
|
|
23.09.10, 20:41
|
#10
|
Anfänger
Registriert seit: Mar 2010
Beiträge: 46
Bedankt: 6
|
achso ja danke, habe den link entfehrnt. wann ist man heute schon anonym :P
|
|
|
23.09.10, 22:30
|
#11
|
Banned
Registriert seit: Aug 2010
Beiträge: 209
Bedankt: 70
|
Dann wär der Klaus Kusche aber nicht so erfreut
|
|
|
24.09.10, 08:14
|
#12
|
Anfänger
Registriert seit: Mar 2010
Beiträge: 46
Bedankt: 6
|
Ja habe anfangs nicht daran gedacht dass Adresse etc da steht
|
|
|
30.09.10, 15:28
|
#13
|
Ist öfter hier
Registriert seit: Jan 2010
Beiträge: 189
Bedankt: 117
|
Zitat:
Zitat von urga
eine musterlösung wirst du hier nicht bekommen.
allerdings werden wir deine konkrekten fragen beantworten.
naja ok, musterlösung+testcode für istSchaltJahr()
Code:
...
int tage_1 = datum_1 / ((int) pow (10, 6));
int monate_1 = (datum_1 / ((int) pow (10, 4))) - tage_1*100;
int jahre_1 = datum_1 - (tage_1*((int) pow (10,6)) + monate_1*((int) pow(10,4)));
printf ("eingabe %d == tage(%d), monate(%d), jahre (%d) schaltjahr? (%s)\n", datum_1, tage_1, monate_1, jahre_1, istSchaltJahr (jahre_1) ? "ja" : "nein");
return 0;
}
ich hoffe, das hilft. 
|
Schön geschriebener Code, aber noch 1 verbesserung von meiner Seite:
Nimm umbedingt die "pow" anweisungen raus und ersetze sie durch hardcodierte zahlen. Die "pow"-Funktion hier zu nutzen, wäre wie mit Kanonen auf Tontauben zu schießen (-->Komplexität der Funktion)
Ansonsten viel Erfolg (und ruhig mal ein wenig ranklotzen bei dem Lehrer, der scheint was drauf zu haben  )
|
|
|
30.09.10, 17:10
|
#14
|
Banned
Registriert seit: Aug 2010
Beiträge: 209
Bedankt: 70
|
Zitat:
Zitat von wmosebach
Schön geschriebener Code, aber noch 1 verbesserung von meiner Seite:
Nimm umbedingt die "pow" anweisungen raus und ersetze sie durch hardcodierte zahlen. Die "pow"-Funktion hier zu nutzen, wäre wie mit Kanonen auf Tontauben zu schießen (-->Komplexität der Funktion)
Ansonsten viel Erfolg (und ruhig mal ein wenig ranklotzen bei dem Lehrer, der scheint was drauf zu haben  )
|
Wo ist der schön geschriebene Code?
Ich sehe viel zu lange Zeilen, unnötige Berechnungen... und das in vier Zeilen
Soll nicht böse gemeint sein, aber was Code-Qualität bedeutet sollte man so früh wie möglich lernen...
|
|
|
30.09.10, 18:44
|
#15
|
Mitglied
Registriert seit: Aug 2009
Ort: void* (*wtf[])(void **);
Beiträge: 453
Bedankt: 137
|
a) (int) pow (10,6) sollte schon zur compilezeit berechnet werden.
b) klar kann man das eindampfen, aber dann wirds nicht unbedingt nachvollziehbar (für den threadersteller)
c) und ja, auch über code-ästhetik kann man streiten.
@PP wie würdest du denn die 3 werte berechnen? berausche uns mit deiner fachkenntnis!
__________________
entropie erfordert keine wartung
|
|
|
30.09.10, 20:59
|
#16
|
Newbie
Registriert seit: Apr 2009
Beiträge: 78
Bedankt: 21
|
eine andere frage hätte ich an Jewbacca2010, interessiert mich nur so, ich hatte früher nicht so schöne aufgaben (nur tubo pascal und da nur schrott programmiert) welche jahrgangsstufe und was für schule (real?gym?)
|
|
|
01.10.10, 10:14
|
#17
|
Ist öfter hier
Registriert seit: Jan 2010
Beiträge: 189
Bedankt: 117
|
@PP
natürlich kann man alles wunderbar verschachteln, aber blickt dann ein Anfänger wie der TE da noch durch bzw kann seinem Lehrer dass am Ende erklären...
@urga
in bezug auf "pow"-Funktion ging es mir primär darum, dass man probieren sollte diese Funktion nach Möglichkeit zu umgehen, da ihre Verfahrensweise einfach ein wenig "extrem" ist und viel zu viele Vergleiche führt, die an dieser Stelle total unnötig sind.
Auch ich habe sie liebend gern früher verwendet, bis ich mir mal den Quellcode von ihr angesehn habe und dieser einfach nur total freaky war. Aus diesem Grund versuche ich Anfänger direkt von dieser Funktion fernzuhalten
|
|
|
Forumregeln
|
Du kannst keine neue Themen eröffnen
Du kannst keine Antworten verfassen
Du kannst keine Anhänge posten
Du kannst nicht deine Beiträge editieren
HTML-Code ist Aus.
|
|
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 07:11 Uhr.
().
|