KW nach Din 1355 bestimmen



  • Endlich wieder zurück zum Thema 🙂 Ich habe alle Fehlermeldungen gepostet, aber egal
    Vielen Dank, ohne des std:: geht es. Aber wie kann ich jetzt die Funktion aufrufen/benutzen?



  • @mapper: Das ist nicht dein Ernst, oder? Da beschäftigt sich einer mit GUI-APIs und schreibt Programme die genutzt werden sollen, und kennt Arrays nicht. Aber Hauptsache beim Thema bleiben, oder was?

    Aber... zurück
    Zum Thema: Was genau am Aufruf klappt bei dir nicht?
    Du fügst den Funktionsaufruf mit den entsprechenden Parametern da ein, wo es sein soll, oder was ist verwirrend?



  • Ich weiß aber leider nicht, wie der Funktionsaufruf konkret aussehen soll, ich habe schon etliches durchprobiert, aber entweder er es passiert garnichts, oder Fehlermeldung



  • Programierheini schrieb:

    Ich weiß aber leider nicht, wie der Funktionsaufruf konkret aussehen soll, ich habe schon etliches durchprobiert, aber entweder er es passiert garnichts, oder Fehlermeldung

    ➡ Beschreibung! Zeig Code, Fehlermeldungen usw. wir sind keine Wahrsager.



  • short getKalenderwoche(short uTag, short uMonat, short uJahr) //diese Funktion möchte ich aufrufen, und habe keine Ahnung wie, weil ich des noch nie gemacht habe
    {
    short getTagDesJahres(const UINT uTag, const UINT uMonat, const UINT uJahr);
    short getWochentag(const UINT uTag, const UINT uMonat, const UINT uJahr);
    bool istEinSchaltjahr(const UINT uJahr);
      // Berechnung erfolgt analog DIN 1355, welche besagt:
      // Der erste Donnerstag im neuen Jahr liegt immer in der KW 1.
      // "Woche" ist dabei definiert als [Mo, ..., So].
    
      short nTagDesJahres = getTagDesJahres(uTag, uMonat, uJahr);
    
      // Berechnen des Wochentags des 1. Januar:
      short nWochentag1Jan = getWochentag(1, 1, uJahr);
    
      // Sonderfälle Freitag und Samstag
      if (nWochentag1Jan >= 5)
        nWochentag1Jan = nWochentag1Jan - 7;
    
      // Sonderfälle "Jahresanfang mit KW - Nummer aus dem Vorjahr"
      if ( (nTagDesJahres + nWochentag1Jan) <= 1)
      {
        return getKalenderwoche(31, 12, uJahr - 1);
      }
    
      short nKalenderWoche = ((nTagDesJahres + nWochentag1Jan + 5) / 7);
    
      assert(nKalenderWoche >= 1);
      assert(nKalenderWoche <= 53);
    
      // 53 Kalenderwochen hat grundsätzlich nur ein Jahr,
      // welches mit einem Donnerstag anfängt !
      // In Schaltjahren ist es auch mit einem Mittwoch möglich, z.B. 1992
      // Andernfalls ist diese KW schon die KW1 des Folgejahres.
      if (nKalenderWoche == 53)
      {
        bool bIstSchaltjahr = istEinSchaltjahr(uJahr);
    
        if (  (nWochentag1Jan  ==  4) // Donnerstag
          ||  (nWochentag1Jan  == -3) // auch Donnerstag
          ||  ((nWochentag1Jan ==  3) && bIstSchaltjahr)
          ||  ((nWochentag1Jan == -4) && bIstSchaltjahr)
          )
        {
          ; // Das ist korrekt und erlaubt
        }
        else
          nKalenderWoche = 1; // Korrektur des Wertes
      }
    
      return nKalenderWoche; //diesen Wert möchte ich als Variabel haben
    }
    


  • Programierheini schrieb:

    short getKalenderwoche(short uTag, short uMonat, short uJahr) //diese Funktion möchte ich aufrufen, und habe keine Ahnung wie, weil ich des noch nie gemacht habe
    

    -.-

    getKalenderwoche(31, 1, 2012);

    Oder mit deinen Parametern, ich glaube kaum dass du mit Magic Constants arbeiten wirst.

    Außerdem, nimm doch gleich boost::date_time , dann musst du nicht das Rad neu erfinden.



  • Jetzt kommt aber:
    [C++ Fehler] Unit1.cpp(713): E2268 Aufruf der undefinierten Funktion 'getKalenderwoche'
    wenn ich short davor schreibe ändert sich aber leider nichts



  • Programierheini schrieb:

    Jetzt kommt aber:
    [C++ Fehler] Unit1.cpp(713): E2268 Aufruf der undefinierten Funktion 'getKalenderwoche'
    wenn ich short davor schreibe ändert sich aber leider nichts

    Das kann nicht sein. Sicher, dass du alle Source-Dateien im "Projekt" hast (also dem Compiler mitteilst)?
    Oder definiere die Funktion gleich im Header (am besten mit inline), wenn es denn gar nicht anders geht...



  • Ich habs in den Header reingetan, aber jetzt kommt folgender Fehler:
    [Linker Fehler] Unresolved external 'TForm1::getKalenderwoche(short, short, short)' referenced from C:\PROGRAMME\BORLAND\CBUILDER6\PROJECTS\KASSENPROGRAMM\UNIT1.OBJ 😡
    Ich hab keine ide mehr, was ich machen soll...
    PS: wenn man die funktion eins höher "tut", kommen, wenn man es nicht im header definiert hat, zwei Linkerfehler, die ähnlich klingen.

    inline??? 😕



  • Hat sich erledigt, ich habe einfach ein neues Programm geschrieben, und alles andere nochmal hineinkopiert, und dann gings
    😋 👍 :p 🙂 😃 :schland:



  • Programierheini schrieb:

    M
    2. Ich habe nirgends gefunden, wie man z.B.
    Button1->Caption="123";
    ...
    usw. in Schleifen setzen kann
    ansonsten verwende ich natürlich schleifen

    Da du den C++Builder verwendest könntest du mal in die FAQ des dazugehörigen Forums schauen. Siehe hier
    http://www.c-plusplus.net/forum/39305
    Darin findest du diesen Link unter "Komponenten beutzen - Dynamische Arrays von Komponenten oder Objekten":
    http://www.c-plusplus.net/forum/viewtopic-var-t-is-39211.html


Anmelden zum Antworten