Deutsch
Stammtisch & Café

Funktion mit variablem Parameter-Typ

 

Michael
Wodrich
*** XProfan 10 ***
Hier eine Funktion mit variablem Parameter-Typ.

Folgendes wird von der Funktion akzeptiert:
- keine Parameter
- Zahl als Parameter
- String als Parameter
- Strukturierter Bereich als Parameter
- Bereich ohne Strukturvariable (aber mit vorgegebenen Speicherstellen)
- ein Objekt

Damit lassen sich wirklich feine Sachen machen.

Da die Funktion IsLeapYear() schon bei den Codesnippets existiert, habe ich sie hier deponiert.
KompilierenMarkierenSeparieren
!
:Proc IsLeapYear( [Jahr%] )
: P:I1 - Jahr (1600 - 3999) (ohne Angabe wird das aktuelle Jahr benutzt)
:Proc IsLeapYear( DBDate$ )
: P:S1 - Datenbankdatum ("yyyymmdd")
:Proc IsLeapYear( sDatum# )
: P:B1 - ein Bereich mit Struktur "DatumStru"
:Proc IsLeapYear( bDatum# )
: P:B1 - ein Bereich ohne Struktur (der aber je 2 Bytes für Tag, Monat und Jahr enthält)
:Proc IsLeapYear( oMwDate# )
: P:o1 - ein Objekt der Klasse "MwDate"
: Prüft, ob das Jahr ein Schaltjahr war/ist.
:RETURN%: 1 = Jahr ist ein Schaltjahr, sonst 0

Proc IsLeapYear

    Declare y%

    If %PCount < 1              Parameter fehlen

        y% = Val(Date$(3))  10000   ziehe das Jahr aus dem akt. Datum im DB-Format.

    Else

        If PType$(1) = "&"       Parameter ist numerisch

            Parameters Jahr%
            y% = Jahr%

        ElseIf PType$(1) = "$"   Parameter ist ein String im Datenbankformat

            Parameters DBDate$
            y% = Val(DBDate$)  10000

        ElseIf PType$(1) = "s"   Parameter ist ein Bereich mit Struktur "DatumStru"

            Parameters sDatum#
            y% = sDatum#.Year%

        ElseIf PType$(1) = "b"   Parameter ist ein Bereich ohne Struktur

            Parameters bDatum#    (der aber je 2 Bytes für Tag, Monat und Jahr enthält)
            y% = Word(bDatum#,4)  0+1=Tag, 2+3=Monat, 4+5=Jahr

        ElseIf PType$(1) = "o"   Parameter ist ein Objekt der Klasse "MwDate"

            Parameters oDatum#
            y% = oDatum#.GetYear()
            Else                     Fehler! Liefert FALSE (kein Schaltjahr)
            Return 0

        EndIf

    EndIf

    Case y% < 100 : Add y%, ((Val(Date$(3))  1000000) * 100)
    Return (y% mod 4 = 0) and (y% mod 4000 <> 0) and ((y% mod 100 <> 0) or (y% mod 400 = 0))
    EndProc  IsLeapYear
    ### TEST ### TEST ### TEST ### TEST ### TEST ###
    Struct DatumStru = Day%,Month%,Year%
    Class MwDate = #Year%,SetYear@,GetYear@

    Proc MwDate.SetYear

        Parameters y%
        .Year% = y%

    EndProc

    Proc MwDate.GetYear

        Return .Year%

    EndProc

    Declare Jahr%, sBereich#, bBereich#, oMwDate#
    Dim sBereich#, DatumStru
    Dim bBereich#, 6
    Dim oMwDate#, MwDate
    Cls
    Print "eine Funktion mit variablen Parametern
    "
    Print "Schaltjahr??? (1 = Ja)
    "
    Print "aktuelles Jahr (nein):", IsLeapYear(), " - ohne Parameter"
    Print "1600 (Ja)............:", IsLeapYear(1600), " - Zahl als Parameter"
    Print "1999 (Nein)..........:", IsLeapYear("19990101"), " - Datum im Datenbankformat"
    sBereich#.Year% = 2004
    Print "2004 (Ja)............:", IsLeapYear(sBereich#), " - strukturierter Bereich"
    Word bBereich#,4 = 2005
    Print "2005 (Nein)..........:", IsLeapYear(bBereich#), " - Bereich ohne Struktur"
    oMwDate#.SetYear( 2006 )
    Print "2006 (Nein)..........:", IsLeapYear(oMwDate#), " - Objekt als Parameter"
    Print "
    zur Probe alle mit dem Jahr 2004 (Na gut, OHNE den Parameter-freien):"
    Word bBereich#,4 = 2004
    oMwDate#.SetYear( 2004 )
    Print "2004 (Ja)............:", IsLeapYear(2004), " - Zahl als Parameter"
    Print "2004 (Ja)............:", IsLeapYear("20040101"), " - Datum im Datenbankformat"
    Print "2004 (Ja)............:", IsLeapYear(sBereich#), " - strukturierter Bereich"
    Print "2004 (Ja)............:", IsLeapYear(bBereich#), " - Bereich ohne Struktur"
    Print "2004 (Ja)............:", IsLeapYear(oMwDate#), " - Objekt als Parameter"
    Print "
    (Taste drücken = ENDE)"
    Print "
    %PCount und PType$() in Kombination sind wirklich eine feine Sache ..."
    WaitKey
    Dispose sBereich#
    Dispose bBereich#
    Dispose oMwDate#
    End

17 kB
Kurzbeschreibung: so siehts aus
Hochgeladen:04.08.2006
Ladeanzahl105
Herunterladen
 
Programmieren, das spannendste Detektivspiel der Welt.
04.08.2006  
 




Nico
Madysa

%pCount und PType$() in Kombination sind eine wirklich feine Sache ...


Ganz meine Meinung!
 
Nico Madysa
04.08.2006  
 



Antworten


Thementitel, max. 100 Zeichen.
 

Systemprofile:

Kein Systemprofil angelegt. [anlegen]

XProfan:

 Beitrag  Schrift  Smilies  ▼ 

Bitte anmelden um einen Beitrag zu verfassen.
 

Themenoptionen

647 Betrachtungen

Unbenanntvor 0 min.
Michael W.30.09.2014
Jörg Sellmeyer30.09.2014

Themeninformationen

Dieses Thema hat 2 Teilnehmer:

Nico Madysa (1x)
Michael Wodrich (1x)


Admins  |  AGB  |  Anwendungen  |  Autoren  |  Chat  |  Datenschutz  |  Download  |  Eingangshalle  |  Hilfe  |  Händlerportal  |  Impressum  |  Mart  |  Schnittstellen  |  SDK  |  Services  |  Spiele  |  Suche  |  Support

Ein Projekt aller XProfaner, die es gibt!


Mein XProfan
Private Nachrichten
Eigenes Ablageforum
Themen-Merkliste
Eigene Beiträge
Eigene Themen
Zwischenablage
Abmelden
 Deutsch English Français Español Italia
Übersetzungen

Datenschutz


Wir verwenden Cookies nur als Session-Cookies wegen der technischen Notwendigkeit und bei uns gibt es keine Cookies von Drittanbietern.

Wenn du hier auf unsere Webseite klickst oder navigierst, stimmst du unserer Erfassung von Informationen in unseren Cookies auf XProfan.Net zu.

Weitere Informationen zu unseren Cookies und dazu, wie du die Kontrolle darüber behältst, findest du in unserer nachfolgenden Datenschutzerklärung.


einverstandenDatenschutzerklärung
Ich möchte keinen Cookie