Hallo Leute!
Ich habe zwei Variablen:
int value1;
int value2;
Diese Weerte sind unterschiedlich.
Nun suche ich eine Funktion, die diese in den Gleichstand bringt:
wert1: 3
wert2: 5
neuer wert: 4, denn 3 + 1 = 5 - 1.
Gibt es sowas, oder stehe ich einfach auf dem Schlauch?
public int todesFunktion(int zahl1, int zahl2)
{
return (zahl1 + zahl2)/2;
}
oder steh ich auf dem Schlauch? 😁
Auch bekannt als arithmetisches Mittel oder Durchschnitt 😉
(x1+x2+x3.......+xn)/n
das ist das gute an Funktionen, er braucht net wissen wies gemacht wird...
Falls du mehr Parameter hast hätt ich noch die Variante hier 😁
private int todesFunktion(params int[] values)
{
int summe = 0;
foreach (int zahl in values)
{
summe += zahl;
}
return (summe / values.Length);
}
Scheiße ist nur, dass ihr int Werte zurück gebt. Was passiert z.B. bei 4 und 5???
Gruß MB
Original von muntablues
Scheiße ist nur, dass ihr int Werte zurück gebt. Was passiert z.B. bei 4 und 5???Gruß MB
immer in xP denken... Es war keine Floatzahl vom Kunden gefordert, nur eine Intzahl, also wird auch kein float implementiert 🙂
Zumindest sollte dann aber korrekt gerundet werden.
nochmal: es wurde nicht verlangt, also wird es auch nicht implementiert... 🙂
den Rückgabewert in double zu ändern und Divident oder Divisor auf double zu casten traue ich jedem noch zu 🙂
Extra für dich:
private int todesFunktionDieAuchNochRundet(params int[] values)
{
double summe = 0;
foreach (int zahl in values)
{
summe += zahl;
}
summe /= values.length;
return summe+0.5;
}
Das stimmt so aber nicht 😉
private double arithMittel(int[] values)
{
double summe = 0;
foreach (int zahl in values)
{
summe += zahl; //Werte des Array addieren
}
summe /= values.Length; //Ergebnis durch Anzahl der Werte dividieren
return Math.Round(summe, 2); //Ergebnis auf 2 Nachkommastellen runden und zurückgeben
}
MfG,
Grouser.
Es ging um auf- oder abrunden und das hat meine Funktion zweifelsohne getan, wo soll der fehler sein?
Von der rundung auf 2 Nachkommastellen hat ja nicht mal winSharp geredet... 😁
Original von DavidT
Es ging um auf- oder abrunden und das hat meine Funktion zweifelsohne getan[...]:D
Deine Funktion hat in dem Sinne nicht gerundet. Sie hat zwar alle Werte in einer Double-Variable addiert, sie danach korrekt dividiert, doch dann versucht, dieses Ergebnis mit 0.5 zu addieren und als int-Wert zurückzugeben.
Dies ergibt jedoch keinen Sinn, es sei denn, du wolltest das Ergebnis absichtlich verfälschen.
Original von DavidT
Von der rundung auf 2 Nachkommastellen hat ja nicht mal winSharp geredet...
Es macht doch aber Sinn, Zahlen so zu runden, möchte man einen Mittelwert erlangen, oder liege ich da falsch?
Hallo Grouser,
der Code von DavidT ist doch ok. Es wird der Mittelwert gerundet auf 0 Nachkommastellen zurückgegeben. Warum sollte das ein prinzipieller Unterschied zum Runden auf 2 Nachkommastellen sein?
Wenn einem der Mittelwert als int reicht, ist das doch ok.
herbivore
Original von herbivore
[...]der Code von DavidT ist doch ok. Es wird der Mittelwert gerundet auf 0 Nachkommastellen zurückgegeben. Warum sollte das ein prinzipieller Unterschied zum Runden auf 2 Nachkommastellen sein?[...]
herbivore
Hallo nochmal, das lässt mir gerade keine Ruhe:
Entweder ich bin grad vollkommen auf dem Holzweg (dann entschuldigt dies bitte), oder ich sehe Fehler im Code von DavidT:
Kommentierter Code von DavidT durch Grouser:
private int todesFunktionDieAuchNochRundet(params int[] values)
{
double summe = 0;
foreach (int zahl in values)
{
summe += zahl;
}
summe /= values.length;
return summe+0.5;
//Fehler 1: Der Typ "double" kann nicht implizit in "int" konvertiert werden. Es ist bereits eine explizite Konvertierung vorhanden. (Möglicherweise fehlt eine Umwandlung.)
//Fehler 2: Ein Ergebnis von beispielsweise "4,3" müsste auf "4,0" gerundet werden, die Rückgabe wäre jedoch "5", da ja "4,8" gerundet wird (summe+0.5)
}
Abgesehen davon sind die Unterschiede der Codes recht simpel und ich glaube nicht, dass es lohnt, darüber nun ewig zu debattieren, da jeder, der einen solchen Code benötigt ihn sehr schnell auf seine Bedürfnisse abstimmen können wird.
MfG,
Grouser
Hallo Grouser,
Fehler 1: Ja der Cast fehlt, aber hier ging es ja um Code, der direkt im Forum eingetippt wurde. Da sollte man drüber hinweg sehen. Es ging ja ums Prinzip.
Fehler 2: Dann caste mal 4.8 auf int. 🙂 Ergebnis 4.
Also das + 0.5 ist extra dafür, damit das Ergebnis korrekt gerundet ist.
herbivore
Original von herbivore
Fehler 2: Dann caste mal 4.8 auf int. 🙂 Ergebnis 4.
Also das + 0.5 ist extra dafür, damit das Ergebnis korrekt gerundet ist.
Jetzt erkenne ich meinen gedanklichen Fehler:
Ich war davon ausgegangen, dass das Ergebnis konvertiert und nicht auf int gecastet wird (aus dem Code war es ja nicht zu entnehmen 😉 )
Mit dem Cast auf int macht der Code sehr wohl Sinn, was ich nun auch erkenne, mir aber bei der Betrachtung des Codes nicht in den Sinn gekommen ist (verdammt sei lineares Denken).
MfG,
Grouser.
He Leute
oje was geht denn hier ab???
Gruß MB
Naja gut, der finale Cast ist mir entgangen, aber wie herbivore schon sagte ist das im Forum getippter Code 🙂
Davon ab, die Grundaufgabenstellung war es, bei z.B. 3 und 5 eine 4 rauszubekommen, keine 4,00 was es bei dir geworden wär g