1. Diese Seite verwendet Cookies. Wenn du dich weiterhin auf dieser Seite aufhältst, akzeptierst du unseren Einsatz von Cookies. Weitere Informationen

Etage kodieren...

Dieses Thema im Forum "Algorithmen und Datenstrukturen" wurde erstellt von lano, 14. Mai 2018.

  1. lano

    lano Well-Known Member c-b Experte

    Moin.

    Angenommen ich möchte die Etage eines Hauses wie die Richtung eines Kompasses kodieren N, NO, NNO usw.


    Ich hab mir das so gedacht:
    Code:
    OG              o
    EG              u
    
    
    2.OG            o
    1.OG            m
    EG              u
    
    
    3.OG            o
    2.OG            om
    1.OG            um
    EG              u
    
    4.OG            o
    3.OG            om
    2.OG            m
    1.OG            um
    EG              u
    
    5.OG            o
    4.OG            om
    3.OG            mo
    2.OG            mu
    1.OG            um
    EG              u
    
    6.OG            o
    5.OG            om
    4.OG            mo
    3.OG            m
    2.OG            mu
    1.OG            um
    EG              u
    
    Ich hätte gern eine Funktion bei der ich die Etage und die Höhe des Hauses mit angebe.
    func(Etage,Max_Etagen)
    und als Ergebnis, ich sach mal, die Kompas-Koordinaten.
    Jetzt könnt man da mit if und else und switch und case und was weis ich nicht bei gehn.
    Aber gibts da nicht was Mathematisches ?
    So das man das auch bei einem zB 100 stöckigem Gebäude anwenden könnte ?

    Ideen ?
  2. German

    German Well-Known Member c-b Experte

    Öhm, das was der Kompass horizontal macht, willst du also vertikal machen?
    Ist dann bspw. "u" immer ganz unten oder das untere Siebtel der Etagenanzahl? Weißt worauf ich hinaus will, Anzahl Etagen durch 7 teilen, dann multipliziert mit aktueller Etage (wobei das EG auf 1 zu setzen ist, 1. OG auf 2, usw.). Je nach Ergebnis, gibt's einen der 7 möglichen Ausgabestrings.
  3. lano

    lano Well-Known Member c-b Experte

    u ist immer ganz unten. Jede Etage braucht ja eine eigene Kennung und da ich sonst mit der Hausnummer Probleme bekomme hab ich gedacht ich mach das so.
  4. German

    German Well-Known Member c-b Experte

    Hä? Selbst bei einem Kompass ist bei 3 Zeichen Schluss. Ein OOOONO (oder wäre das dann ONOOOO?) gibts nicht, dafür hat glücklicherweise mal jemand die Angaben in Grad erfunden. Dir ist schon klar, dass das extrem unübersichtlich wird, wenn du mal an deine beispielhaften 100 Etagen denkst. Wer soll denn die ganzen u's, m's und o's zählen um da noch durchzublicken? Und eindeutige Kennung gibts schon: UG, EG, OG1, OG2, etc. Was soll denn das Benefit sein?
    Warum das denn? "Donald Trump Sackgässchen 13 OG6".
  5. lano

    lano Well-Known Member c-b Experte

    Bundeswehrflüchtling ? SWzW sind für mich 4 :) Aber schon klaar, das System ist begrenzt.

    Die 100 Etagen waren jetzt nur als Beispiel dafür das ich keinen festen Werte codieren will.
    Ich glaub hier gibts nur ein Haus was überhaupt 5 Etagen hat.

    Wie gesagt, 100 Etagen sinds nicht, ich mach das nur schon so und hab überlegt wie ich das nen bisschen flexibler machen kann.
    Im Möment gebe ich jedem Router per Hand einen Namen. Das mir zu doof. Mir fällt nur nichts dazu ein was ich mache wenn es kein Geschoss in der eindeutigen Mitte gibt. Da hab ich gedacht ich frag mal.
  6. Mat

    Mat Active Member c-b Experte

    Was spricht denn dagegen, einfach nur Zahlen zu verwenden? Wenn die Info über die max Etagen in jedem Routernamen mit drin sein soll, kannst du die ja einfach mit angeben.
  7. lano

    lano Well-Known Member c-b Experte

    Zahlen kann ich beschissener erkennen. 8 6 3 9 alles das selbe. Darum hab ich ein bisschen probiert und das bekomm ich auch auf nen kurzen Blick in die Synapsenerie. Außerdem ist es für andere auf einen schnellen Blick wieder schwerer zu erkennen weils ungewohnt ist.
  8. German

    German Well-Known Member c-b Experte

    Naja, das ist deine Festlegung was da passieren soll. Bei ungerader Anzahl gibt's eine, bei gerader Anzahl gibt's keine. Aber mahl ehrlich, if-else oder switch-case ist bei einer so begrenzten Anzahl imho immer noch am einfachsten.
  9. lano

    lano Well-Known Member c-b Experte

    :) Ich war auch schon drauf und dran das damit zu realisieren, aber dann fiel es mir wieder ein. Ich bin nicht der Typ für einfach.

    Aber als Kompromiss lassen wir es mal so stehn, vllt findet sich ja noch nen Mathe Genie der sacht oh 3*4hoch14 Wurzel aus und schon ist fertig.

    Übrigens kann man das Spiel mit dem Kompass immer weiter treiben, es hat nur einfach in der Seefahrt keinen Sinn gemacht. So genau konnten die auch nicht in eine Richtung zeigen.
  10. German

    German Well-Known Member c-b Experte

    OK, Spielerei, extra für dich ...
    Code:
    #include <stdio.h>
    
    enum {EG, OG1, OG2, OG3, OG4, OG5, OG6};
    
    const char *GetFloor(unsigned hght, unsigned flr)
    {
      if (hght == 0 || hght > 7u || flr > 6u || flr >= hght)
        return NULL;
    
      static const char floors[][3] = {"u", "um", "mu", "m", "mo", "om", "o"};
      const int indexes[][7] = {{0}, {0, 6}, {0, 3, 6}, {0, 1, 5, 6}, {0, 1, 3, 5, 6}, {0, 1, 2, 4, 5, 6}, {0, 1, 2, 3, 4, 5, 6}};
    
      return floors[indexes[hght - 1][flr]];
    }
    
    int main(void)
    {
      const char *ptr = GetFloor(5, OG3);
      puts(ptr == 0 ? "Eingabefehler!" : ptr);
      return 0;
    }
    
    Ist aber auch nur auf 7 Etagen begrenzt und letztlich händisch implementiert.
  11. lano

    lano Well-Known Member c-b Experte

    Ohha. Danke. So war auch mein Gedanke. OK in Perl und anders formatiert aber egal.