Forum: Programmieren allgemein
by himitsu,
15. Feb 2009
deine etwas "ungerechtere" und schnellere Variante könnte man in Delphi auch recht kurz gestalten :stupid:
Uses Types, Math;
Function RoundedPercentage(Const Values: Array of Integer): TIntegerDynArray;
Var i, i2: Integer;
Begin
SetLength(Result, Length(Values));
i2 := SumInt(Values);
//For i := 0 to High(Values) do Result := Round(Values / i2 * 100);
Forum: Programmieren allgemein
by himitsu,
15. Feb 2009
Und das obwohl's noch nichtmal fertig war/ist :shock:
Och, sooooo inperformant isses nun auch nicht. :roll:
Meistens wird der meiste ja eh nicht ausgeführt und nach maxinam nur einer Runde wird's oftmals auch schon fertig sein.
Die Funktion Math.SumInt hab ich jetzt absichtlich nicht verwendet, da die erste Sum-Schleife schon für die Parameter-Kontrolle verwendet wurde und due 2 kleine...
Forum: Programmieren allgemein
by himitsu,
15. Feb 2009
Type TIntArray = Array of Integer;
Function RoundedPercentage(Const Values: Array of Integer): TIntArray;
Var i, i2: Integer;
Maximum: Int64;
ResultR: Array of Real;
MaxR: Real;
Begin
Maximum := 0;
Forum: Programmieren allgemein
by himitsu,
15. Feb 2009
na Gut, dann halt doch mein erster Vorschlag in einer Schleife,
aber wie jfheins schon sagte, ohne verfälschte Werte ginge das nicht.
Forum: Programmieren allgemein
by himitsu,
15. Feb 2009
In nur einer Formal wüßte ich jetzt nicht wie es gehn sollte.
Was noch möglich wäre, erstmal alle Prozentangaben ungerundet ausrechnen
und dann den Wert, ab wann auf-/abgerundet werden soll so verschieben, daß nach'm Runden 100 rauskommt.
Aber ich glaub da ist mein erster Vorschlag effektiver.
Forum: Programmieren allgemein
by himitsu,
15. Feb 2009
Alle Werte runden (Round)
und dann könntest du dir noch den Wert mit dem größten und noch nicht aufgerundeten Nachkommaanteil (0.0 > x > 0.5) raussuchten und diesen Nachträglich aufrunden.
Fall aber mehr als 100% rauskam, dann natürlich den kleinesten und noch nicht abgerundeten Wert (0.5 <= x < 1.0) nachträglich abrunden