Rozważmy to wyrazenie:
int suma, ile ciastek;
float pudelkaTemp;
pudelkaTemp = suma / ileCiastek;
pudelka[i] = ceil(pudelkaTemp);
Gdy masz dzielenie dwóch liczb całkowitych dodatnich i wynik nie byłby liczbą całkowitą to zostaje on zaokrąglony w dół do najbliższej liczby całkowitej np. 3/4=0, 6/4=1 itp.
Wygląda o tak jak działanie funkcji floor.
A więc z prawej strony masz liczbę całkowitą. Z lewej strony masz zadeklarowaną liczbą zmiennoprzecinkową a więc dokonana jest niejawna konwersja liczby int na float. Następnie w swoim kodzie kodzie zaokrąglasz tę w liczbę w górę ale to działanie nic już nie zmieni, bo wcześniej miałeś zaokrąglenie w dół. Jeśli chcesz by liczba pudelka była naprawdę liczbą float musisz dokonać konwersji licznika na typ float (pytanie konkursowe - dlaczego wystarczy przekonwertować sam licznik a nie ma potrzeby robić tego z mianownikiem). Możesz robić to jawnie przy pomocy np. static_cast lub niejawnie np. w ten sposób:
pudelkaTemp=(0.0+suma)/ileCiastek;
Co do kodu to oczywiście go usuń by nie kusić innych słabych duchem