19. Wersja trudniejsza poprzedniego zadania: program ma wypisać każdą cyfrę danej liczby z osobna
na ekran w odwrotnej kolejności ich wystąpienia (to jest łatwiejsze niż zrobienie tego w normalnej
kolejności), a następnie obliczyć i wyświetlić na ekranie sumę, iloczyn oraz średnią arytmetyczną z
tych cyfr. Przykładowy wynik działania programu:
Wybrana liczba naturalna: 12345
Cyfry wybranej liczby wypisane od tyłu: 5 4 3 2 1
Suma cyfr: 15
Iloczyn cyfr: 120
Średnia arytmetyczna z cyfr: 3.0
int liczba=12345;
System.out.println("Wybrana liczba naturalna: "+liczba);
System.out.print("Cyfry wybranej liczby wypisane od tylu: ");
int suma=0;
int iloczyn=1;
int ile=0;
while (liczba != 0)
{
System.out.print(liczba%10+" ");
suma+=liczba%10;
iloczyn*=liczba%10;
liczba /= 10; // liczba = liczba / 10 , !!! dzielenie liczb calkowitych "obcina" reszte z dzielenia przez 10 !!!
ile++;
}
System.out.println("\nPodana liczba ma " + ile + " cyfr.");
System.out.println("Suma cyfr: "+suma);
System.out.println("Iloczyn cyfr: "+iloczyn);
System.out.println("Srednia arytmetyczna z cyfr: "+(double)suma/ile);
Dlaczego w pętli while nie ma znaczenia, w której linijce dam "ile++", ale to, w której linijce dam "liczba /= 10" ma już znaczenie?
Przy tak ogólnym pytaniu odpowiedź też może być raczej tylko bardzo ogólna - kolejność napisania komend/instrukcji generalnie zawsze ma znaczenie - tzn. kompilator wykonuje te operacje w takiej kolejności w jakiej je zapiszemy w kodzie. Z tym, że czasem nie zmienia to pożądanego sposobu działania programu, a czasem zmienia. Więc w ogólności program zawsze będzie inaczej działał, jeśli zmienisz kolejność instrukcji, no bo będzie je wykonywał w zmienionej kolejności. Tu np. zapisanie liczba /= 10 przed liczeniem sumy i iloczynu jak widać musi coś zmienić, no bo wtedy ta suma i iloczyn będą wykorzystywały inną wartość zmiennej liczba niż przed zmianą.