Vom Wertepaar zur Funktion (Reihen/Folgen)



  • [Überarbeitet, da einige Zeichnungen mehr Kreuze als zugehörige Werte hatten]

    Hallo zusammen,

    ein häufiger Fall: gegeben sind Wertepaare, die eine Reihe/Folge beschreiben.
    Wie komme ich auf die Funktion? Geht das nicht eleganter?

    Die folgenden Beispiele zeigen (auch grafisch), was gemeint ist. In meiner Beispiellösung (mit Quellcode) habe ich alles ans Laufen bekommen. Aber die Frage bleibt: Geht das auch eleganter?

    Beispiel: 0,4,1,3,2 (von außen nach innen)
    `


    -x---------

    ---x-------

    ----x------

    --x--------

    x----------

    `

    Beispiel: 0,2,1,3,2,4,2,3,1,2,0
    `


    -----x------

    ---x---x----

    -x--x-x--x--

    --x-----x---

    x---------x-

    `

    Beispiel: 0,1,0,2,0,3,0,4
    `


    -------x---

    -----x-----

    ---x-------

    -x---------

    x-x-x-x-x--

    `

    Beispiel: 0,1,0,2,0,3,0,4,0,3,0,2,0,1,0
    `


    -------x--------

    -----x---x------

    ---x-------x----

    -x-----------x--

    x-x-x-x-x-x-x-x-

    `

    Beispiel: 0,1,0,2,0,3,0,4,1,4,2,4,3,4
    `


    -------x-x-x-x-

    -----x------x--

    ---x------x----

    -x------x------

    x-x-x-x--------

    `

    Gruß
    Leo



  • Dieser Thread wurde von Moderator/in akari aus dem Forum VCL (C++ Builder) in das Forum Rund um die Programmierung verschoben.

    Im Zweifelsfall bitte auch folgende Hinweise beachten:
    C/C++ Forum :: FAQ - Sonstiges :: Wohin mit meiner Frage?

    Dieses Posting wurde automatisch erzeugt.



  • gegeben sind Wertepaare

    vs.

    Beispiel: 0,4,1,3,2

    Uch sehe keine Paare.



  • knivil schrieb:

    Uch sehe keine Paare.

    Ich schon. Aber ich weiß nicht, was die "Funktion" hier sein soll. Die Wertepaare könnens ja nicht sein, die sind gegeben. Und ich lade mir bestimmt nicht irgendeine zip-Datei runter, nur um die Frage zu verstehen.



  • Danke für die Antwort. Ich wollte einfach hier nicht so viel posten, daher die zip-Datei.
    Aber die Funktion wäre schon schlau gewesen. Im folgenden also eine der fünf Methoden aus der zip-Datei.

    void __fastcall TDM_Farbe::sub_setze_gsImp(vector<int> &viGrpSetup, int iVon, int iBis)
    {
        // Zweck: liefert nach Vorgabe von z.B. iVon = 0, iBis = 4 Gruppenkonstellationen nach folgendem
        //        Muster: 0,4,1,3,2 (von außen nach innen)
    
        //  -x---------          x-----------
        //  ---x-------          --x---------
        //  ----x------          ----x-------
        //  --x--------          ---x--------
        //  x----------          -x----------
    
        // erwartet:
        // - iVon/iBis wobei iVon ungleich iBis, sodass der resultierende Vector mindestens zwei Elemente enthält
        // - viGrpSetup: Vector vom Typ int
    
        int iVon_Akt = iVon;
        int iBis_Akt = iBis;
        int iIdx = 0; // Schleifenhilfszähler
    
        // 'Gruppenrichtung' ermitteln
        if(iVon < iBis){ // wenn aufsteigend
    
            // Bsp. iVon = 3, iBis = 9, dann resultieren: 3, 9, 4, 8, 5, 7, 6
            for(int i=iVon; i<iBis+1; i++){
                if(fct_IstGerade(iIdx++)){ // wenn Index gerade; dabei iIdx hochzählen
                    viGrpSetup.push_back(iVon_Akt++);
                }else{ // wenn Index ungerade (
                    viGrpSetup.push_back(iBis_Akt--);
                }
            }
        }else{ // wenn absteigend
    
            // Bsp. iVon = 9, iBis = 3, dann resultieren: 9, 3, 8, 4, 7, 5, 6
            for(int i=iVon; i>iBis-1; i--){
                if(fct_IstGerade(iIdx++)){ // wenn Index gerade; dabei Idx hochzählen
                    viGrpSetup.push_back(iVon_Akt--);
                }else{ // wenn Index ungerade
                    viGrpSetup.push_back(iBis_Akt++);
                }
            }
        }
    }
    

    Gruß
    Leo



  • Leo Freitag schrieb:

    Beispiel: 0,4,1,3,2 (von außen nach innen)

    Man kann es schöner aufschreiben:

    \delta := \mathrm{sgn}\!\left(i_\text{bis}-i_\text{von}\right)\\ N := \left|i_\text{bis}-i_\text{von}\right| + 1\\ a\_0 := i\_\text{von}\;,\quad a\_1 := i\_\text{bis}\\ a_{n + 2} := a_n + \left(1 - n \mod 2\right) \cdot \delta \quad \text{für $n \in \{0,...,N - 2\}$}\\

    Aber das Ausrechnen in einer prozeduralen Sprache ist üblicherweise trotzdem frickelig.

    Übrigens verstehe ich nicht, wie du von deinen Zahlenreihen auf die Bildchen kommst.



  • audacia schrieb:

    Übrigens verstehe ich nicht, wie du von deinen Zahlenreihen auf die Bildchen kommst.

    Ganz normale Funktionsgraphen. x-Achse ist der Index, y-Achse der Wert.



  • Bashar schrieb:

    audacia schrieb:

    Übrigens verstehe ich nicht, wie du von deinen Zahlenreihen auf die Bildchen kommst.

    Ganz normale Funktionsgraphen. x-Achse ist der Index, y-Achse der Wert.

    *facepalm* Danke.



  • Nachdem ich noch ein wenig auf deine Funktionsgraphen gestarrt habe, fiel mir ein, daß man das durchaus eleganter aufschreiben kann, indem man es in die Bausteine zerlegt.

    Verknüpfungen:

    • Alternierende Konkatenation:
    \bowtie :~\mathbb{N}^n \times \mathbb{N}^n \rightarrow \mathbb{N}^{2 n},\; (a\_1,\dotsc,a\_n) \bowtie (b\_1,\dotsc,b\_n) \mapsto (a\_1,b\_1,\dotsc,a\_n,b\_n)\\ \phantom{\bowtie :~}\mathbb{N}^{n+1} \times \mathbb{N}^n \rightarrow \mathbb{N}^{2 n + 1},\; (a\_1,\dotsc,a\_{n+1}) \bowtie (b\_1,\dotsc,b\_n) \mapsto (a\_1,b\_1,\dotsc,a\_n,b\_n,a_{n+1})
    • Vertikale Spiegelung:
    \mathrm{mirrorVertical}:~\mathbb{N}^{2 n} \rightarrow \mathbb{N}^{4 n - 1},\; (a\_1,\dotsc,a\_{2 n}) \mapsto (a\_1,\dotsc,a\_{2 n - 1},a_{2 n},a_{2 n - 1},\dotsc,a_1)\\ \phantom{\mathrm{mirrorVertical}:~}\mathbb{N}^{2 n + 1} \rightarrow \mathbb{N}^{4 n+1},\; (a\_1,\dotsc,a\_{2 n + 1}) \mapsto (a\_1,\dotsc,a\_{2 n},a_{2 n + 1},a_{2 n},\dotsc,a_1)
    • Horizontale Spiegelung mit Offset (naja):
      \mathrm{mirrorHorizontal}_\text{offs}:~\mathbb{N}^{n} \rightarrow \mathbb{N}^{2 n},\; (a\_1,\dotsc,a\_{n}) \mapsto (a\_1,\dotsc,a\_{n}, \text{offs}-a_{n},\text{offs}-a_{n-1},\dotsc,\text{offs}-a_1)

    Generatoren:

    • Konstanten:
      \mathrm{cst}\_n:~\mathbb{N} \rightarrow \mathbb{N}^{n},\; c \mapsto (\underbrace{c,\dotsc,c}\_{\text{n mal}})
    • Sequenz:
    \mathrm{seq}_n:~\mathbb{N} \rightarrow \mathbb{N}^{n},\; c \mapsto (c,c+1,\dotsc,c+n) \quad\text{für } n \in \mathbb{N}\\ \mathrm{seq}_{-n}:~\mathbb{N} \rightarrow \mathbb{N}^{n},\; c \mapsto (c+n,c+n-1,\dotsc,c) \quad\text{für } n \in \mathbb{N}

    Abkürzung:
    N:=ibisivon+1N := i_\text{bis} - i_\text{von} + 1

    Leo Freitag schrieb:

    Beispiel: 0,4,1,3,2 (von außen nach innen)
    ` -----------

    -x---------

    ---x-------

    ----x------

    --x--------

    x----------`

    A := \left\lceil\frac{N}{2}\right\rceil,\; B := \left\lfloor\frac{N}{2}\right\rfloor\\ \mathrm{ex}\_1 := \mathrm{seq}\_A\left(i_\text{von}\right) \bowtie \mathrm{seq}_{-B}\left(i_\text{von} + A\right)

    Leo Freitag schrieb:

    Beispiel: 0,2,1,3,2,4,2,3,1,2,0
    ` ------------

    -----x------

    ---x---x----

    -x--x-x--x--

    --x-----x---

    x---------x- `

    \mathrm{ex}\_2 := \mathrm{mirrorVertical}\left[\mathrm{seq}\_{N-2}\left(i_\text{von}\right) \bowtie \mathrm{seq}_{N-2}\left(i_\text{von} + 2\right)\right]

    Leo Freitag schrieb:

    Beispiel: 0,1,0,2,0,3,0,4
    ` -----------

    -------x---

    -----x-----

    ---x-------

    -x---------

    x-x-x-x-x-- `

    ex_3:=cst_N(ivon)seqN1(ivon+1)\mathrm{ex}\_3 := \mathrm{cst}\_{N}\left(i_\text{von}\right) \bowtie \mathrm{seq}_{N-1}\left(i_\text{von} + 1\right)

    Leo Freitag schrieb:

    Beispiel: 0,1,0,2,0,3,0,4,0,3,0,2,0,1,0
    ` ----------------

    -------x--------

    -----x---x------

    ---x-------x----

    -x-----------x--

    x-x-x-x-x-x-x-x-`

    \mathrm{ex}\_4 := \mathrm{cst}\_{2 N - 2}\left(i_\text{von}\right) \bowtie \mathrm{mirrorVertical}\left[\mathrm{seq}_{N-1}\left(i_\text{von} + 1\right)\right]

    Leo Freitag schrieb:

    Beispiel: 0,1,0,2,0,3,0,4,1,4,2,4,3,4
    ` ---------------

    -------x-x-x-x-

    -----x------x--

    ---x------x----

    -x------x------

    x-x-x-x-------- `

    \mathrm{ex}\_5 := \mathrm{mirrorHorizontal}\_\mathrm{N-1}\left[\mathrm{cst}_{N-1}\left(i_\text{von}\right) \bowtie \mathrm{seq}_{N-2}\left(i_\text{von} + 1\right)\right]


Anmelden zum Antworten