Intervalle ermitteln: Modulofunktion? Wie?



  • Hallo,

    ich habe eine laufende Nummer und möchte diese auf Indizees eines Felds mappen (so wie das eine einfache Hashfunktion macht). Das sieht in etwas so aus:

    Laufende Nummer: 01  02  03  04  05  06  07  08  09  10  11  12  13  14 ...
    Index:          [0] [0] [0] [0] [0] [1] [1] [1] [1] [1] [2] [2] [2] [2] ...
    

    Die Intervalle sollen immer äquidistant aber mit unterschiedlicher Intervalllaenge sein können. Im Beispiel liegen sie bei 5, sie könnten aber z.B. auch bei 7, 9, 15 oder 30 liegen.

    Löse ich das mit der Modulofunktion? Wenn ja, wie?

    Gruß,
    B!


  • Administrator

    BitShift schrieb:

    Löse ich das mit der Modulofunktion? Wenn ja, wie?

    Ich würde eher die Division verwenden, um den Index rauszubekommen. Zudem nutzt du die Tatsache, dass Integer keine Nachkommastellen haben und immer abgerundet werden. Kleines Beispiel:

    std::cout << "Nummer { Index }: " << std::endl;
    
    int index;
    int interval = 5;
    
    for(int number = 0; number < 100; ++number)
    {
      index = number / interval;
      std::cout << number << " { " << index << " }\n";
    }
    
    std::cout.flush();
    

    Grüssli


Anmelden zum Antworten