sortierroutine
-
hi leute!
schreibe gerade an einem kosten-optimierungstool für rohrnetzwerke... projektarbeit an der uni...
z.b. habe ich ein netz mit vier rohrsträngen... diese können unterschiedliche durchmesser besitzen... z.B. 4 möglichkeiten strang 1, 7 möglichkeiten strang 2, usw.
ich benötige nun eine routine bei der sich in allen vier strängen immer nur ein durchmesser ändert... somit bekomme ich die anzahl der verschiedenen möglichen alternativen z.B. 4*7*3*6 Alternativen... diese alternativen würde ich gerne in einer matrix abspeichern...hat von euch schon mal jemand so etwas programmiert... könnt ihr mir weiterhelfen?
danke...
-
Hm, versuch mir das grad vorzustellen...
class straenge { public: straenge(a,b,c,d) { strang_daten[0]=new int[a]; strang_daten[1]=new int[b]; strang_daten[2]=new int[c]; strang_daten[3]=new int[d]; moeglichkeiten=new int[a*b*c*d]; } ~straenge() { ... } void set_value(int strang, int value) { strang_daten[strang]=value; ... } void calculate(); private: int *strang_daten[4]; int *moeglichkeiten; };
Ach keine Ahnung... Was ich nicht verstehe: Wieso heißt der Thread sortierroutine? Soll in der Matrix mit den Möglichkeiten Ordunung herrschen? Und wie viele Dimensionen soll sie haben
?
-
hi,
ich denke mal nicht, dass du immer 4 Rohrstränge hast; ansonsten könntest du ja einfach 4 verschachtelte for-Schleifen nehmen...
Ich hab mal probiert ne Formel herzuleiten, hoffe sie stimmt:
angenommen\, du\, hast\, n\, Rohrstr\"{a}nge\, mit\, jeweils\, m\_1,\, m\_2\, ...m_n\, M\"{o}glichkeiten
Wenn\, du\, jetzt\, eine\, Schleife\, mit\, Index\, i\, von\, 0\, bis\, m\_1 \cdot m\_2 \cdot ... \cdot m_n-1 \, durchl\"{a}ufst,\,
kannst\, du\, die\, Einstellung\, der\, einzelnen\, Str\"{a}nge\, s\_1,\, s\_2,\, ...s_n\, so\, berechnen:
s\_a=[ ( i\, div ( m\_{a+1} \cdot m_{a+2} \cdot ... \cdot m\_n ) ) mod\, m\_a ] + 1
PS: Wie macht am besten Leerzeichen zwischen Wörtern in LaTeX??
-
ich glaube das war vielleicht doch ein bißchen umständlich...
probiers mal so:int all = 1; for (int a=0; a<n; ++a) { s[a] = 0; all *= m[a]; } for (int i=0; i<all; ++i) { int tmp = 1; for (a=n-1; a>=0; --a) { if ((i % tmp) == 0) { ++s[a]; if (s[a] > m[a]) s[a] = 1; } tmp *= m[a]; } // Hier kannst du in der Matrix speichern }
// edit: hatte 'a' doppelt belegt...
-
hi...
danke inzwischen... ich werde das jetzt mal ausprobieren... sage dann bescheid ob's funktioniert hat!