Hi!
int e, a; // Stückzahl, Verteilung (allocation)
float p, r; // Verpackungen, Restwert
p = ceil( e/a );
Laut Beschreibung sollte ceil() doch in jedem Fall aufrunden.
Es rundet auch auf, allerdings hast du ein Verständnisproblem, was die Reihenfolge der Berechnungen angeht. Ein Ausdruck schaut nicht nach, wo er nach seiner Berechnung landen soll. Er wird erst berechnet und dann übergeben oder zugewiesen. Und Operatoren orientieren sich auch nur an den Operanden.
Mein Test mit e = 20 und a = 7 ergibt mir aber 2.
Jetzt tippe ich darauf, dass aus int/int kein float p wird, obwohl p als float deklariert wurde.
Das p interessiert überhaupt nicht, wenn es darum geht zunächst e/a zu berechnen. Das ist eine Integer-Division, deren Ergebnis ein Integer ist, also 2. Dann übergibst du die int-2 der Funktion ceil, die gern double/float hätte, also gibt es da einen impliziten Typecast von int-2 zu einer double/float-2. Jetzt erst kommt das p ins Spiel, um das Ergebnis von ceil() aufzunehmen. Dabei gibt es gegebenenfalls noch einen Typecast, wenn double nach float gecastet weren muss.
Und wenn ja, wie bekomme ich den Restwert von e/a wenn der Modulus keine float-Variablen akzeptiert?
Sollte e % a nicht den Rest liefern?
Oder wie bekomme ich einen float-Wert aus den beiden Integern?
Typecasts, hast du ja schon rausgefunden.
Lo!