Etage kodieren...

lano

Well-Known Member
c-b Experte
#1
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 ?
 

German

Well-Known Member
c-b Experte
#2
Ö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.
 

German

Well-Known Member
c-b Experte
#4
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?
und da ich sonst mit der Hausnummer Probleme bekomme
Warum das denn? "Donald Trump Sackgässchen 13 OG6".
 

lano

Well-Known Member
c-b Experte
#5
Selbst bei einem Kompass ist bei 3 Zeichen Schluss.
Bundeswehrflüchtling ? SWzW sind für mich 4 :) Aber schon klaar, das System ist begrenzt.

Dir ist schon klar, dass das extrem unübersichtlich wird, wenn du mal an deine beispielhaften 100 Etagen denkst.
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.

Wer soll denn die ganzen u's, m's und o's zählen um da noch durchzublicken?
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.
 

Mat

Well-Known Member
c-b Experte
#6
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.
 

lano

Well-Known Member
c-b Experte
#7
Was spricht denn dagegen, einfach nur Zahlen zu verwenden?
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.
 

German

Well-Known Member
c-b Experte
#8
was ich mache wenn es kein Geschoss in der eindeutigen Mitte gibt.
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.
 

lano

Well-Known Member
c-b Experte
#9
Aber mahl ehrlich, if-else oder switch-case ist bei einer so begrenzten Anzahl imho immer noch am einfachsten.
:) 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.
 

German

Well-Known Member
c-b Experte
#10
OK, Spielerei, extra für dich ...
C:
#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.
 
Oben