Datumsfunktion in C



  • Hallo, ich bin absoluter Programmier-Neuling und brauche dringend Hilfe. 😞

    Die Aufgabe ist eine Funktion in C zu schreiben, welche zu einer natürlichen Zahl das zugehörige Datum ausgibt unter Berücksichtigung der Formatierung TTMMJJJJ zb entspricht z=10102014 dem zehnten Oktober 2014.

    Ich würde eine void-Funktion schreiben, dann bin ich mit meinem Wissen aber schon am Ende. Bin für jede Anregung/ Hilfe sehr dankbar!

    Lg und Danke



  • d13 schrieb:

    Ich würde eine void-Funktion schreiben, dann bin ich mit meinem Wissen aber schon am Ende. Bin für jede Anregung/ Hilfe sehr dankbar!

    Zeig, was Du bisher hast. Hier werden nicht Deine Hausaufgaben erledigt.

    void ist erstmal gut, da Dein Ziel bisher ja nur eine Ausgabe ist - also nicht die Rückgabe irgendeines Wertes.

    Wenn Du Deinen bisherigen Ansatz postest, achte drauf, dass der code in [code="c"][/code] Tags steht (Code markieren und 'C' Button unter dem 😡 drücken).

    Danke.



  • Also zuerst einmal gibt es die time Funktion. Das ist eine Struktur, die in der <time.h> eingebunden ist, sie heißt demnach 'struct time'.
    Diese errechnet die Sekunden seit dem Jahr 1970 und speichert sie in einer long int ab.
    Sowie ich das verstanden habe, ist bei dir z die Anzahl der Sekunden oder wie darf ich das verstehen?

    Sry vergiss es hab was überlesen ups 😃



  • Ich würde es so machen:
    Wandle die beliebige natürliche Zahl in einen String um und lese dann die Zeichen aus von hinten angefangen.
    warum von hinten? Weil das Jahr immer vierstellig ist



  • Ich würde ja echt gerne mehr sagen bzw. mehr Ansätze haben, aber die sind leider wirklich nicht da. Will meine Aufgaben ja selber machen und nicht vorgekaut bekommen. Studiere im ersten Semester Technische Mathematik, wir hatten erst einmal programmieren und da wurde uns grad einmal gezeigt wie man etwas compiliert bzw. wie man "Hello World" ausgibt. Nun wurde uns aber 8 Aufgaben gestellt, jede erfordert eine Funktion und ein Hauptprogramm.

    Nun habe ich mich im Internet und Büchern die letzten Stunden schlau gemacht was eine Funktion überhaupt ist usw. und hab auch 3 Aufgaben lösen können.
    Bei dieser hier stehe ich jetzt aber wie gesagt an.

    Das ist alles was ich bis jetzt habe, weiß nicht wie ich eine Zahl in Text umwandle bzw. eine Zahl in Datumschreibweise bringe.

    [code="c"]
    void datum(int z)



  • Hint: Im wesentlichen braucht man bei der Aufgabe die Operatoren % und /

    Umwandeln in Strings würde natürlich auch gehen, aber das ganze eigentlich nur komplizierter machen als es ist.



  • TocToc schrieb:

    Ich würde es so machen:
    Wandle die beliebige natürliche Zahl in einen String um und lese dann die Zeichen aus von hinten angefangen.
    warum von hinten? Weil das Jahr immer vierstellig ist

    Der Umweg über den String ist nicht nötig.
    Der Monat muss auch immer zweistellig sein, sonst kommt man da auch durcheinander, da es sonst keine Trennzeichen gibt.

    d13 schrieb:

    Das ist alles was ich bis jetzt habe, weiß nicht wie ich eine Zahl in Text umwandle bzw. eine Zahl in Datumschreibweise bringe.

    void datum(int z)

    Das wäre das Mindeste was du haben solltest:

    void datum(int z)
    {
      int Tag, Monat, Jahr;
    
      printf("Die Zahl %d entspricht dem Datum %d.%d.%d\n", z, Tag, Monat, Jahr);
    }
    

    Wie du aus z dann Tag, Monat, Jahr; bekommst, ist Stoff der 3. Klasse.
    (Einheitenumrechnung: Meter in mm oder g in kg oder Cent in Euro)



  • Wie du aus z dann Tag, Monat, Jahr; bekommst, ist Stoff der 3. Klasse.
    (Einheitenumrechnung: Meter in mm oder g in kg oder Cent in Euro)

    Das kommt halt drauf an wie z gemeint ist:
    Ist z die Anzahl der Sekunden oder was für eine Einheit auch immer, dann hast du natürlich völlig Recht.

    Aber mich verwirrt das Bsp.:

    [...]zb entspricht z=10102014 dem zehnten Oktober 2014.

    Soll das heißen, dass z.B. 27061999 der 27. Juni 1999 sein oder wie ist das gemeint? Weil dann funktioniert natürlich NICHT jede beliebige natüriche Zahl..



  • TocToc schrieb:

    [...]zb entspricht z=10102014 dem zehnten Oktober 2014.

    Soll das heißen, dass z.B. 27061999 der 27. Juni 1999 sein oder wie ist das gemeint? Weil dann funktioniert natürlich NICHT jede beliebige natüriche Zahl..

    Ja. So ist das gemeint.



  • Dann sind...

    1. Nicht alle natürlichen Zahlen möglich aber wie du das löst @d13 musst du selber gucken ob das ne Eingabe ist die du manuell machst etc.

    2. Trifft das Umrechnen der Einheit nicht mehr zu

    Also für mich würde dann nur noch die Umwandlung in einen String in Frage kommen. 😕



  • Welche Relevanz hat "alle natürlichen Zahlen möglich" im Kontext der Aufgabe? Was würde ein Umwandeln der Zahl in einen String ändern? Ziemlich wirr was du hier schreibst. Und imho wenig hilfreich für den OP.



  • TocToc schrieb:

    Also für mich würde dann nur noch die Umwandlung in einen String in Frage kommen. 😕

    Wahrscheinlich, weil Du keine technische Mathematik studierst und nicht weisst, mit welchen Rechenoperationen Du aus
    der Zahl 27061999 erst 1999, dann 06 und schließlich 27 bekommst. 😉



  • Der echte Tim schrieb:

    Hint: Im wesentlichen braucht man bei der Aufgabe die Operatoren % und /

    qft



  • Kommt auf das input-Format an.
    Hier ein Bsp.:

    // 1187946358 == Fri, 24 Aug 2007 09:05:58 GMT
    int main ()
    {
    	time_t rawtime = 1187946358;
    	struct tm timeinfo;
    	char timebuf[26];
    
    	errno_t error;
    	error = localtime_s( &timeinfo,&rawtime );
    	if (error)
    	{
    		printf("Invalid argument to _localtime64_s.");
    		return(1);
    	}
    
    	error = asctime_s (timebuf,26,&timeinfo);
    	if (error)
    	{
    		printf("Invalid argument to asctime_s.");
    		return(1);
    	}
    
    	printf( "%s \n", timebuf );
    
    	return 0;
    }
    

    HTTP Format (Last Modified) ist evtl ein Anderes, aber ich finde meine Lösung dafür im Moment nicht.



  • habs jetzt hinbekommen, aber danke für die Hilfe 🙂 👍


Log in to reply