Datum umformatieren

Anfängerfragen zum Programmieren mit PureBasic.
Benutzeravatar
DarkSoul
Beiträge: 689
Registriert: 19.10.2006 12:51

Datum umformatieren

Beitrag von DarkSoul »

irgendwie hab ich nen korken im kopf.

ich hab zwar schon vieles gebastelt, aber das billige ding hier krieg ich einfach nicht hin :oops: :oops: :

Ich möchte eine satanistische Datumszählung programmieren.

etwa so: 22.11.XL Anno Satanas

Das '22.11.' ist noch kein problem, aber die römischen zahlen.... Das Jahr 40 entspricht 2006, 41 ist 2007 usw. und wie krieg ich das 'Anno Satanas' hinter? es geht irgendwie mit formatdate und der date() funktion. :oops:
Bild
Benutzeravatar
bluejoke
Beiträge: 1244
Registriert: 08.09.2004 16:33
Kontaktdaten:

Beitrag von bluejoke »

Öööhm, Latein-Klasse ist wirklich schon einige Zeit her, aber müsste es nicht "Anno Satanae" heißen? Heißt doch auch Anno Domini und nicht Anno Dominusus... (wär aber mal luschdig :) )

Zu deiner Frage: Wenn du einen String hast der immer vom Format her tt.mm.jjjj ist, also z.B. 07.09.2006, dann nimmst du einfach den String ab der 7. Position bis zum Ende. dieser Bereich ist ja dann nur 2006 - das wandelst du dann in ne Zahl um, ziehst die scheinbar 1966 Jahre ab (also 2006-1966) und hast als Ergebnis 40. Und die vierzig musste jetzt eben in römische Ziffern umwandeln. Dazu gibts wahrscheinlich tausende Routinen auffindbar unter Google.

Gruezi
Ich bin Ausländer - fast überall
Windows XP Pro SP2 - PB 4.00
Benutzeravatar
jear
Beiträge: 288
Registriert: 17.10.2004 01:59
Wohnort: Ammerland

Beitrag von jear »

@Biedermeier
Hier eine einfache Lösung, die ein paar Besonderheiten außer acht lässt.
Das mit dem komischen Jahr, das kannst Du dann selbst basteln.

Code: Alles auswählen

Define.l dezimale, ix
Global Dim RZ.s(13) : Restore Romans : For ix = 1 To 13 : Read RZ(ix) : Next
Global Dim AZ.l(13) : Restore Arabics : For ix = 1 To 13 : Read AZ(ix) : Next
DataSection
  Romans:
  Data.s "I","IV","V","IX","X","XL","L","XC","C","CD","D","CM","M"
  Arabics:
  Data.l 1, 4, 5, 9, 10, 40, 50, 90, 100, 400, 500, 900, 1000
EndDataSection

Procedure.s RoemischeZiffer(DZahl.l) 

  Protected ix.l, Ergebnis.s

  If DZahl < 1 Or DZahl > 3000 : ProcedureReturn "Gab's das bei den alten Römern?" : EndIf
  
  For ix = 13 To 1 Step -1 
    While DZahl => AZ(ix)
      DZahl - AZ(ix)
      Ergebnis + RZ(ix)
    Wend
  Next
  
  ProcedureReturn Ergebnis
  
EndProcedure

Debug "Heute ist der : " + FormatDate("%dd.%mm.", Date()) + RoemischeZiffer(Year(Date()))

Repeat
  dezimale = Val(InputRequester("Römische Zahlen", "Zahl von 1 bis 3000", "0"))
  Debug Str(dezimale) + " entspricht " + RoemischeZiffer(dezimale)
Until Not dezimale

End
Man ist nie zu alt zum lernen, auch wenn man dabei manchmal alt aussieht!
Kaeru Gaman
Beiträge: 17389
Registriert: 10.11.2004 03:22

Beitrag von Kaeru Gaman »

bluejoke hat geschrieben:müsste es nicht "Anno Satanae" heißen?
garantiert nicht, es heißt nämlich nicht "Satana".
(verwechselst du das mit dem Gittaristen Santana?)

"Satan" ist dummerweise hebräisch, kann also auch im lateinischen nur ein Lehnwort sein.

im Vocativ heißt es "Satanas", wie aus dem Kirchenwort "Vade retro, Satanas" ersichtlich ist.
natürlich müsste es im Genitiv stehen, aber wie der aussehen muss....
ob ein lehnwort überhaupt einer bestimmten Deklination folgt,
oder simpel in der Grundform steht, ist mir allerdings auch nicht bekannt.
Der Narr denkt er sei ein weiser Mann.
Der Weise weiß, dass er ein Narr ist.
Benutzeravatar
bluejoke
Beiträge: 1244
Registriert: 08.09.2004 16:33
Kontaktdaten:

Beitrag von bluejoke »

Oh. Danke für die Aufklärung! :allright:
Ich bin Ausländer - fast überall
Windows XP Pro SP2 - PB 4.00
Antworten